Module: wine Branch: master Commit: 421059c88052af596cd4654e4cd772d15dc6b5b9 URL: https://gitlab.winehq.org/wine/wine/-/commit/421059c88052af596cd4654e4cd772d...
Author: Elizabeth Figura zfigura@codeweavers.com Date: Sun May 5 12:16:52 2024 -0500
wined3d: Always output normalized fog coordinates from the vertex shader.
Historically we used a 0-255 scale in cases where the fog coordinate attribute was passed through directly, apparently in order to avoid doing float division on the value passed to glFogCoordfEXT(). This benefit was probably always dubious, and now is simply unnecessary as we no longer use GL FFP fog nor immediate mode draws. Get rid of the GLSL equivalent code to scale fog up to the 0-255 range and then back down to 0-1.
---
dlls/wined3d/glsl_shader.c | 7 +++---- dlls/wined3d/utils.c | 5 ----- dlls/wined3d/wined3d_private.h | 1 - 3 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index feea9957069..b45494b9f12 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -9297,7 +9297,7 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr break;
case WINED3D_FFP_VS_FOG_FOGCOORD: - shader_addline(buffer, "ffp_varying_fogcoord = ffp_attrib_specular.w * 255.0;\n"); + shader_addline(buffer, "ffp_varying_fogcoord = ffp_attrib_specular.w;\n"); break;
case WINED3D_FFP_VS_FOG_RANGE: @@ -12240,10 +12240,9 @@ static void glsl_fragment_pipe_fog(struct wined3d_context *context,
if (state->render_states[WINED3D_RS_FOGTABLEMODE] == WINED3D_FOG_NONE) { - if (use_vshader) + if (use_vshader || state->render_states[WINED3D_RS_FOGVERTEXMODE] == WINED3D_FOG_NONE + || context->stream_info.position_transformed) new_source = FOGSOURCE_VS; - else if (state->render_states[WINED3D_RS_FOGVERTEXMODE] == WINED3D_FOG_NONE || context->stream_info.position_transformed) - new_source = FOGSOURCE_COORD; else new_source = FOGSOURCE_FFP; } diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 8c90908ec76..779af782b6c 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -5834,11 +5834,6 @@ void get_fog_start_end(const struct wined3d_context *context, const struct wined *end = 0.0f; break;
- case FOGSOURCE_COORD: - *start = 255.0f; - *end = 0.0f; - break; - case FOGSOURCE_FFP: tmpvalue.d = state->render_states[WINED3D_RS_FOGSTART]; *start = tmpvalue.f; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index abdb97f9d9f..f49a604422d 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1827,7 +1827,6 @@ void dispatch_compute(struct wined3d_device *device, const struct wined3d_state enum fogsource { FOGSOURCE_FFP, FOGSOURCE_VS, - FOGSOURCE_COORD, };
/* Direct3D terminology with little modifications. We do not have an issued