https://bugs.winehq.org/show_bug.cgi?id=34011
--- Comment #36 from Robert Xiao nneonneo@gmail.com --- Previously I was getting crash-on-startup from glsl=disabled. I patched wined3d to increase the number of float constants (my gfx driver reported only supporting 128 constants, but some PoE shaders use up to 140):
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index fa72b4f..da8b10b 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -4942,7 +4942,7 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh if (gl_info->limits.arb_ps_native_constants < 24) ps_consts = gl_info->limits.arb_ps_float_constants; else - ps_consts = min(gl_info->limits.arb_ps_float_constants, gl_info->limits.arb_ps_native_constants); + ps_consts = max(gl_info->limits.arb_ps_float_constants, gl_info->limits.arb_ps_native_constants);
if (gl_info->supported[NV_FRAGMENT_PROGRAM2]) {
After this change, glsl=disabled works. I also had to add the game options "--noasync --nopreload" to prevent an outbreak of black/missing textures.
A few effects are missing due presumably to my horrible patch and the limited HLSL shader support, but it works well enough to be usable. It still crashes after a while due to memory exhaustion; this is tracked in bug #43545.