Module: wine
Branch: master
Commit: 421059c88052af596cd4654e4cd772d15dc6b5b9
URL: https://gitlab.winehq.org/wine/wine/-/commit/421059c88052af596cd4654e4cd772…
Author: Elizabeth Figura <zfigura(a)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