From 24d71ad7e777a9b93210c21216539290ec08d0d1 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Mon, 9 Jan 2017 14:31:45 +0100 Subject: [PATCH] wined3d: Fully initialise "settings" in wined3d_ffp_get_vs_settings(). 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 Signed-off-by: Matteo Bruni Signed-off-by: Alexandre Julliard --- 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 0c79f903839..f3001e52cc6 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.11.4.GIT