From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/d3d9/tests/visual.c | 3 +-- dlls/wined3d/glsl_shader.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c index 56f458d86d3..bcf14631a8d 100644 --- a/dlls/d3d9/tests/visual.c +++ b/dlls/d3d9/tests/visual.c @@ -29254,8 +29254,7 @@ static void test_fog(void) colour = get_readback_vec4(&rb, points[i].x, points[i].y);
todo_wine_if ((fog_mode_tests[pixel_mode] != D3DFOG_NONE && !ortho_fog && (vs_mode == VS_MODE_FFP || vs_mode == VS_MODE_RHW)) - || (fog_mode_tests[pixel_mode] == D3DFOG_NONE && fog_mode_tests[vertex_mode] != D3DFOG_NONE && vs_mode == VS_MODE_FFP) - || (fog_mode_tests[pixel_mode] == D3DFOG_NONE && vs_mode == VS_MODE_VS_NO_FOG)) + || (fog_mode_tests[pixel_mode] == D3DFOG_NONE && fog_mode_tests[vertex_mode] != D3DFOG_NONE && vs_mode == VS_MODE_FFP)) { if (fog_mode_tests[pixel_mode] != D3DFOG_NONE && ortho_fog) ok(compare_vec4(colour, 0.0f, expect_fog[i], 1.0f, 1.0f, 48) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 4ec8ba6a590..ee55ea983cf 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -8096,8 +8096,14 @@ static void shader_glsl_generate_vs_epilogue(const struct wined3d_gl_info *gl_in shader_addline(buffer, "%s = gl_Position.w;\n", legacy_syntax ? "gl_FogFragCoord" : "ffp_varying_fogcoord"); else if (!reg_maps->fog) - shader_addline(buffer, "%s = 0.0;\n", - legacy_syntax ? "gl_FogFragCoord" : "ffp_varying_fogcoord"); + { + if (reg_maps->output_registers & (1u << (8 + 1))) + shader_addline(buffer, "%s = ffp_varying_specular.w;\n", + legacy_syntax ? "gl_FogFragCoord" : "ffp_varying_fogcoord"); + else + shader_addline(buffer, "%s = 0.0;\n", + legacy_syntax ? "gl_FogFragCoord" : "ffp_varying_fogcoord"); + } }
/* We always store the clipplanes without y inversion. */