From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/wined3d/ffp_gl.c | 7 +++---- dlls/wined3d/glsl_shader.c | 8 -------- dlls/wined3d/shader_spirv.c | 7 ------- dlls/wined3d/stateblock.c | 13 ++++++++++++- 4 files changed, 15 insertions(+), 20 deletions(-)
diff --git a/dlls/wined3d/ffp_gl.c b/dlls/wined3d/ffp_gl.c index f97005680d7..f96b0208550 100644 --- a/dlls/wined3d/ffp_gl.c +++ b/dlls/wined3d/ffp_gl.c @@ -1669,12 +1669,11 @@ static void validate_state_table(struct wined3d_state_entry *state_table) { 11, 14}, { 16, 23}, { 27, 27}, - { 30, 33}, + { 29, 33}, { 39, 47}, { 49, 135}, - {138, 139}, - {143, 144}, - {149, 150}, + {137, 139}, + {141, 150}, {153, 153}, {157, 160}, {162, 165}, diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 396c77b3dfd..c9a83048654 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -12009,15 +12009,7 @@ static const struct wined3d_state_entry_template glsl_vertex_pipe_vp_states[] = {STATE_RENDER(WINED3D_RS_RANGEFOGENABLE), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_CLIPPING), {STATE_RENDER(WINED3D_RS_CLIPPING), state_clipping }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_CLIPPLANEENABLE), {STATE_RENDER(WINED3D_RS_CLIPPING), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_LIGHTING), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_COLORVERTEX), {STATE_RENDER(WINED3D_RS_COLORVERTEX), glsl_vertex_pipe_shader}, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_LOCALVIEWER), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_DIFFUSEMATERIALSOURCE), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_SPECULARMATERIALSOURCE), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_AMBIENTMATERIALSOURCE), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_EMISSIVEMATERIALSOURCE), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_VERTEXBLEND), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_RENDER(WINED3D_RS_SPECULARENABLE), {STATE_RENDER(WINED3D_RS_SPECULARENABLE), glsl_vertex_pipe_shader}, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_POINTSIZE), {STATE_RENDER(WINED3D_RS_POINTSIZE_MIN), NULL }, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_POINTSIZE_MIN), {STATE_RENDER(WINED3D_RS_POINTSIZE_MIN), glsl_vertex_pipe_pointsize}, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), {STATE_RENDER(WINED3D_RS_POINTSPRITEENABLE), state_pointsprite }, ARB_POINT_SPRITE }, diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index b3edb6729af..317713e821c 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -1159,13 +1159,6 @@ static const struct wined3d_state_entry_template spirv_vertex_pipe_vk_vp_states[ { {STATE_RENDER(WINED3D_RS_RANGEFOGENABLE), {STATE_RENDER(WINED3D_RS_RANGEFOGENABLE), state_nop}}, {STATE_RENDER(WINED3D_RS_CLIPPING), {STATE_RENDER(WINED3D_RS_CLIPPING), state_nop}}, - {STATE_RENDER(WINED3D_RS_LIGHTING), {STATE_RENDER(WINED3D_RS_LIGHTING), state_nop}}, - {STATE_RENDER(WINED3D_RS_COLORVERTEX), {STATE_RENDER(WINED3D_RS_COLORVERTEX), state_nop}}, - {STATE_RENDER(WINED3D_RS_LOCALVIEWER), {STATE_RENDER(WINED3D_RS_LOCALVIEWER), state_nop}}, - {STATE_RENDER(WINED3D_RS_DIFFUSEMATERIALSOURCE), {STATE_RENDER(WINED3D_RS_DIFFUSEMATERIALSOURCE), state_nop}}, - {STATE_RENDER(WINED3D_RS_SPECULARMATERIALSOURCE), {STATE_RENDER(WINED3D_RS_SPECULARMATERIALSOURCE), state_nop}}, - {STATE_RENDER(WINED3D_RS_AMBIENTMATERIALSOURCE), {STATE_RENDER(WINED3D_RS_AMBIENTMATERIALSOURCE), state_nop}}, - {STATE_RENDER(WINED3D_RS_EMISSIVEMATERIALSOURCE), {STATE_RENDER(WINED3D_RS_EMISSIVEMATERIALSOURCE), state_nop}}, {STATE_RENDER(WINED3D_RS_VERTEXBLEND), {STATE_RENDER(WINED3D_RS_VERTEXBLEND), state_nop}}, {STATE_RENDER(WINED3D_RS_CLIPPLANEENABLE), {STATE_RENDER(WINED3D_RS_CLIPPLANEENABLE), state_nop}}, {STATE_RENDER(WINED3D_RS_POINTSIZE), {STATE_RENDER(WINED3D_RS_POINTSIZE), state_nop}}, diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 925ee2e8c71..a8042331976 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1579,7 +1579,6 @@ void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateb } break;
- case WINED3D_RS_SPECULARENABLE: case WINED3D_RS_TEXTUREFACTOR: stateblock->changed.ffp_ps_constants = 1; break; @@ -1595,7 +1594,14 @@ void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateb stateblock->changed.point_scale = 1; break;
+ case WINED3D_RS_AMBIENTMATERIALSOURCE: + case WINED3D_RS_COLORVERTEX: + case WINED3D_RS_DIFFUSEMATERIALSOURCE: + case WINED3D_RS_EMISSIVEMATERIALSOURCE: + case WINED3D_RS_LIGHTING: + case WINED3D_RS_LOCALVIEWER: case WINED3D_RS_NORMALIZENORMALS: + case WINED3D_RS_SPECULARMATERIALSOURCE: stateblock->changed.ffp_vs_settings = 1; break;
@@ -1603,6 +1609,11 @@ void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateb stateblock->changed.ffp_ps_settings = 1; break;
+ case WINED3D_RS_SPECULARENABLE: + stateblock->changed.ffp_vs_settings = 1; + stateblock->changed.ffp_ps_constants = 1; + break; + default: break; }
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/wined3d/cs.c | 9 +-------- dlls/wined3d/ffp_gl.c | 1 - dlls/wined3d/glsl_shader.c | 2 -- dlls/wined3d/shader_spirv.c | 1 - dlls/wined3d/stateblock.c | 5 +++++ dlls/wined3d/utils.c | 2 -- dlls/wined3d/wined3d_private.h | 5 +---- 7 files changed, 7 insertions(+), 18 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 9b1dd56e6fa..29a8c6494bf 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -1998,12 +1998,6 @@ static void wined3d_cs_exec_set_light(struct wined3d_cs *cs, const void *data) rb_put(&cs->state.light_state.lights_tree, (void *)(ULONG_PTR)light_idx, &light_info->entry); }
- if (light_info->glIndex != -1) - { - if (light_info->OriginalParms.type != op->light.OriginalParms.type) - device_invalidate_state(cs->c.device, STATE_LIGHT_TYPE); - } - light_info->OriginalParms = op->light.OriginalParms; light_info->constants = op->light.constants; } @@ -2032,8 +2026,7 @@ static void wined3d_cs_exec_set_light_enable(struct wined3d_cs *cs, const void * return; }
- if (wined3d_light_state_enable_light(&cs->state.light_state, &device->adapter->d3d_info, light_info, op->enable)) - device_invalidate_state(device, STATE_LIGHT_TYPE); + wined3d_light_state_enable_light(&cs->state.light_state, &device->adapter->d3d_info, light_info, op->enable); }
void wined3d_device_context_emit_set_light_enable(struct wined3d_device_context *context, unsigned int idx, BOOL enable) diff --git a/dlls/wined3d/ffp_gl.c b/dlls/wined3d/ffp_gl.c index f96b0208550..e4229db1763 100644 --- a/dlls/wined3d/ffp_gl.c +++ b/dlls/wined3d/ffp_gl.c @@ -1703,7 +1703,6 @@ static void validate_state_table(struct wined3d_state_entry *state_table) STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING, STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING, STATE_VIEWPORT, - STATE_LIGHT_TYPE, STATE_SCISSORRECT, STATE_RASTERIZER, STATE_BASEVERTEXINDEX, diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index c9a83048654..2ab09f98cf6 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -11988,8 +11988,6 @@ static const struct wined3d_state_entry_template glsl_vertex_pipe_vp_states[] = {STATE_CLIPPLANE(6), {STATE_CLIPPLANE(6), clipplane }, WINED3D_GL_EXT_NONE }, {STATE_CLIPPLANE(7), {STATE_CLIPPLANE(7), glsl_vertex_pipe_clip_plane}, WINED3D_GLSL_130 }, {STATE_CLIPPLANE(7), {STATE_CLIPPLANE(7), clipplane }, WINED3D_GL_EXT_NONE }, - /* Lights */ - {STATE_LIGHT_TYPE, {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, /* Viewport */ {STATE_VIEWPORT, {STATE_VIEWPORT, glsl_vertex_pipe_viewport}, WINED3D_GL_EXT_NONE }, /* Transform states */ diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index 317713e821c..417ff8dcb0d 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -1165,7 +1165,6 @@ static const struct wined3d_state_entry_template spirv_vertex_pipe_vk_vp_states[ {STATE_RENDER(WINED3D_RS_POINTSIZE_MIN), {STATE_RENDER(WINED3D_RS_POINTSIZE_MIN), state_nop}}, {STATE_RENDER(WINED3D_RS_POINTSIZE_MAX), {STATE_RENDER(WINED3D_RS_POINTSIZE_MAX), state_nop}}, {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), state_nop}}, - {STATE_LIGHT_TYPE, {STATE_LIGHT_TYPE, state_nop}}, {0}, /* Terminate */ };
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index a8042331976..e0f9f631d2d 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1939,6 +1939,10 @@ HRESULT CDECL wined3d_stateblock_set_light(struct wined3d_stateblock *stateblock return WINED3DERR_INVALIDCALL; }
+ if (!(object = wined3d_light_state_get_light(stateblock->stateblock_state.light_state, light_idx)) + || light->type != object->OriginalParms.type) + stateblock->changed.ffp_vs_settings = 1; + if (SUCCEEDED(hr = wined3d_light_state_set_light(stateblock->stateblock_state.light_state, light_idx, light, &object))) set_light_changed(stateblock, object); return hr; @@ -1962,6 +1966,7 @@ HRESULT CDECL wined3d_stateblock_set_light_enable(struct wined3d_stateblock *sta if (wined3d_light_state_enable_light(light_state, &stateblock->device->adapter->d3d_info, light_info, enable)) set_light_changed(stateblock, light_info);
+ stateblock->changed.ffp_vs_settings = 1; return S_OK; }
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index d045b4e346c..35811a3b881 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -5363,8 +5363,6 @@ const char *debug_d3dstate(uint32_t state) return "STATE_VDECL"; if (STATE_IS_VIEWPORT(state)) return "STATE_VIEWPORT"; - if (STATE_IS_LIGHT_TYPE(state)) - return "STATE_LIGHT_TYPE"; if (STATE_IS_SCISSORRECT(state)) return "STATE_SCISSORRECT"; if (STATE_IS_CLIPPLANE(state)) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index a194377b8c6..d6f935f15ea 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1748,10 +1748,7 @@ void dispatch_compute(struct wined3d_device *device, const struct wined3d_state #define STATE_VIEWPORT (STATE_VDECL + 1) #define STATE_IS_VIEWPORT(a) ((a) == STATE_VIEWPORT)
-#define STATE_LIGHT_TYPE (STATE_VIEWPORT + 1) -#define STATE_IS_LIGHT_TYPE(a) ((a) == STATE_LIGHT_TYPE) - -#define STATE_SCISSORRECT (STATE_LIGHT_TYPE + 1) +#define STATE_SCISSORRECT (STATE_VIEWPORT + 1) #define STATE_IS_SCISSORRECT(a) ((a) == STATE_SCISSORRECT)
#define STATE_CLIPPLANE(a) (STATE_SCISSORRECT + 1 + (a))
From: Elizabeth Figura zfigura@codeweavers.com
Assuming it changes in a meaningful way. --- dlls/wined3d/glsl_shader.c | 26 +------------------------- dlls/wined3d/stateblock.c | 29 +++++++++++++++++++++++++++-- dlls/wined3d/wined3d_private.h | 13 ++++--------- 3 files changed, 32 insertions(+), 36 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 2ab09f98cf6..a8e0a83712d 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -11815,15 +11815,8 @@ static void glsl_vertex_pipe_shader(struct wined3d_context *context, static void glsl_vertex_pipe_vdecl(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { - const struct wined3d_vertex_declaration *vdecl = state->vertex_declaration; - struct wined3d_context_gl *context_gl = wined3d_context_gl(context); - const struct wined3d_gl_info *gl_info = context_gl->gl_info; BOOL transformed = context->stream_info.position_transformed; BOOL wasrhw = context->last_was_rhw; - bool point_size = vdecl && vdecl->point_size; - bool specular = vdecl && vdecl->specular; - bool diffuse = vdecl && vdecl->diffuse; - bool normal = vdecl && vdecl->normal;
context->last_was_rhw = transformed;
@@ -11838,29 +11831,12 @@ static void glsl_vertex_pipe_vdecl(struct wined3d_context *context,
if (!use_vs(state)) { - /* Because of settings->texcoords, we have to regenerate the vertex - * shader on a vdecl change if there aren't enough varyings to just - * always output all the texture coordinates. - * - * Likewise, we have to invalidate the shader when using per-vertex - * colours and specular attribute presence changes, or when - * normal, diffuse, or point size presence changes. */ - if (!shader_glsl_full_ffp_varyings(gl_info) || diffuse != context->last_was_diffuse - || (state->render_states[WINED3D_RS_COLORVERTEX] && specular != context->last_was_specular) - || normal != context->last_was_normal || point_size != context->last_was_point_size) - context->shader_update_mask |= 1u << WINED3D_SHADER_TYPE_VERTEX; - + /* Because of args->tex_transform. */ if (use_ps(state) && state->shader[WINED3D_SHADER_TYPE_PIXEL]->reg_maps.shader_version.major == 1 && state->shader[WINED3D_SHADER_TYPE_PIXEL]->reg_maps.shader_version.minor <= 3) context->shader_update_mask |= 1u << WINED3D_SHADER_TYPE_PIXEL; } - - context->last_was_vshader = use_vs(state); - context->last_was_diffuse = diffuse; - context->last_was_specular = specular; - context->last_was_normal = normal; - context->last_was_point_size = point_size; }
static void glsl_vertex_pipe_vs(struct wined3d_context *context, diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index e0f9f631d2d..72f3f7301ed 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1541,18 +1541,43 @@ HRESULT CDECL wined3d_stateblock_get_ps_consts_b(struct wined3d_stateblock *stat void CDECL wined3d_stateblock_set_vertex_declaration(struct wined3d_stateblock *stateblock, struct wined3d_vertex_declaration *declaration) { + struct wined3d_vertex_declaration *prev = stateblock->stateblock_state.vertex_declaration; + TRACE("stateblock %p, declaration %p.\n", stateblock, declaration);
if (declaration) wined3d_vertex_declaration_incref(declaration); - if (stateblock->stateblock_state.vertex_declaration) - wined3d_vertex_declaration_decref(stateblock->stateblock_state.vertex_declaration); + if (prev) + wined3d_vertex_declaration_decref(prev); stateblock->stateblock_state.vertex_declaration = declaration; stateblock->changed.vertexDecl = TRUE; /* Texture matrices depend on the format of the TEXCOORD attributes. */ /* FIXME: They also depend on whether the draw is pretransformed, * but that should go away. */ stateblock->changed.texture_matrices = TRUE; + + if (declaration && prev) + { + if (!stateblock->stateblock_state.vs) + { + /* Because of settings->texcoords, we have to regenerate the vertex + * shader on a vdecl change if there aren't enough varyings to just + * always output all the texture coordinates. + * + * Likewise, we have to invalidate the shader when using per-vertex + * colours and diffuse/specular attribute presence changes, or when + * normal presence changes. */ + if (!stateblock->device->adapter->d3d_info.full_ffp_varyings + || (stateblock->stateblock_state.rs[WINED3D_RS_COLORVERTEX] + && (declaration->diffuse != prev->diffuse || declaration->specular != prev->specular)) + || declaration->normal != prev->normal || declaration->point_size != prev->point_size) + stateblock->changed.ffp_vs_settings = 1; + } + } + else + { + stateblock->changed.ffp_vs_settings = 1; + } }
void CDECL wined3d_stateblock_set_render_state(struct wined3d_stateblock *stateblock, diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index d6f935f15ea..b142d514c71 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1889,15 +1889,7 @@ struct wined3d_context DWORD shader_update_mask : 6; /* WINED3D_SHADER_TYPE_COUNT, 6 */ DWORD update_shader_resource_bindings : 1; DWORD update_compute_shader_resource_bindings : 1; - DWORD update_unordered_access_view_bindings : 1; - DWORD update_compute_unordered_access_view_bindings : 1; - DWORD update_primitive_type : 1; DWORD last_was_rhw : 1; /* True iff last draw_primitive was in xyzrhw mode. */ - DWORD last_was_vshader : 1; - DWORD last_was_diffuse : 1; - DWORD last_was_specular : 1; - DWORD last_was_normal : 1; - DWORD last_was_point_size : 1; DWORD last_was_ffp_blit : 1; DWORD last_was_blit : 1; DWORD last_was_dual_source_blend : 1; @@ -1911,9 +1903,12 @@ struct wined3d_context DWORD current : 1; DWORD destroyed : 1; DWORD destroy_delayed : 1; + DWORD update_unordered_access_view_bindings : 1; + DWORD update_compute_unordered_access_view_bindings : 1; + DWORD update_primitive_type : 1; DWORD update_multisample_state : 1; DWORD update_patch_vertex_count : 1; - DWORD padding : 23; + DWORD padding : 28;
DWORD clip_distance_mask : 8; /* WINED3D_MAX_CLIP_DISTANCES, 8 */
From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/wined3d/glsl_shader.c | 8 -------- dlls/wined3d/stateblock.c | 2 ++ 2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index a8e0a83712d..9118689b9f4 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -11968,14 +11968,6 @@ static const struct wined3d_state_entry_template glsl_vertex_pipe_vp_states[] = {STATE_VIEWPORT, {STATE_VIEWPORT, glsl_vertex_pipe_viewport}, WINED3D_GL_EXT_NONE }, /* Transform states */ {STATE_TRANSFORM(WINED3D_TS_PROJECTION), {STATE_TRANSFORM(WINED3D_TS_PROJECTION), glsl_vertex_pipe_projection}, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(0, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(1, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(2, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(3, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(4, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(5, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(6, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, - {STATE_TEXTURESTAGE(7, WINED3D_TSS_TEXCOORD_INDEX), {STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX), NULL }, WINED3D_GL_EXT_NONE }, /* Fog */ {STATE_RENDER(WINED3D_RS_FOGENABLE), {STATE_RENDER(WINED3D_RS_FOGENABLE), glsl_vertex_pipe_shader}, WINED3D_GL_EXT_NONE }, {STATE_RENDER(WINED3D_RS_FOGTABLEMODE), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 72f3f7301ed..05b17a35d99 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1689,6 +1689,8 @@ void CDECL wined3d_stateblock_set_texture_stage_state(struct wined3d_stateblock break;
case WINED3D_TSS_TEXCOORD_INDEX: + stateblock->changed.ffp_vs_settings = 1; + /* fall through */ case WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS: stateblock->changed.texture_matrices = 1; stateblock->changed.ffp_ps_settings = 1;