[PATCH] wined3d: Fully initialise "settings" in wined3d_ffp_get_vs_settings().

Henri Verbeet hverbeet at codeweavers.com
Mon Jan 9 07:31:45 CST 2017


Commit b62f4139eda58e8e25cbc58864fcea2599a20e97 introduced implicit padding in
the wined3d_ffp_vs_settings structure. This causes redundant shader variants
to be generated. Although easy to avoid, there's also something to be said for
being more robust against padding.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/utils.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 0c79f90..f3001e5 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -5634,10 +5634,10 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
     const struct wined3d_d3d_info *d3d_info = context->d3d_info;
     unsigned int coord_idx, i;
 
+    memset(settings, 0, sizeof(*settings));
+
     if (si->position_transformed)
     {
-        memset(settings, 0, sizeof(*settings));
-
         settings->transformed = 1;
         settings->point_size = state->gl_primitive_type == GL_POINTS;
         settings->per_vertex_point_size = !!(si->use_map & 1u << WINED3D_FFP_PSIZE);
@@ -5681,7 +5681,6 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
             break;
     }
 
-    settings->transformed = 0;
     settings->clipping = state->render_states[WINED3D_RS_CLIPPING]
             && state->render_states[WINED3D_RS_CLIPPLANEENABLE];
     settings->normal = !!(si->use_map & (1u << WINED3D_FFP_NORMAL));
@@ -5706,7 +5705,6 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
         settings->specular_source = WINED3D_MCS_MATERIAL;
     }
 
-    settings->texcoords = 0;
     for (i = 0; i < MAX_TEXTURES; ++i)
     {
         coord_idx = state->texture_states[i][WINED3D_TSS_TEXCOORD_INDEX];
@@ -5717,7 +5715,6 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
     if (d3d_info->limits.varying_count >= wined3d_max_compat_varyings(gl_info))
         settings->texcoords = (1u << MAX_TEXTURES) - 1;
 
-    settings->light_type = 0;
     for (i = 0; i < MAX_ACTIVE_LIGHTS; ++i)
     {
         if (state->lights[i])
@@ -5725,7 +5722,6 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
                     & WINED3D_FFP_LIGHT_TYPE_MASK) << WINED3D_FFP_LIGHT_TYPE_SHIFT(i);
     }
 
-    settings->ortho_fog = 0;
     if (!state->render_states[WINED3D_RS_FOGENABLE])
         settings->fog_mode = WINED3D_FFP_VS_FOG_OFF;
     else if (state->render_states[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE)
@@ -5751,8 +5747,6 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context,
         settings->flatshading = FALSE;
 
     settings->swizzle_map = si->swizzle_map;
-
-    settings->padding = 0;
 }
 
 int wined3d_ffp_vertex_program_key_compare(const void *key, const struct wine_rb_entry *entry)
-- 
2.1.4




More information about the wine-patches mailing list