From: Elizabeth Figura zfigura@codeweavers.com
I.e. move the complicated conditional to wined3d_cs_exec_set_transform(), and invalidate STATE_SHADER directly. --- dlls/wined3d/cs.c | 7 +++++-- dlls/wined3d/ffp_gl.c | 16 ---------------- dlls/wined3d/glsl_shader.c | 11 ----------- dlls/wined3d/utils.c | 2 -- dlls/wined3d/wined3d_private.h | 5 +---- 5 files changed, 6 insertions(+), 35 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 29a8c6494bf..711c031a028 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -1855,8 +1855,11 @@ static void wined3d_cs_exec_set_transform(struct wined3d_cs *cs, const void *dat const struct wined3d_cs_set_transform *op = data;
cs->state.transforms[op->state] = op->matrix; - if (op->state < WINED3D_TS_WORLD_MATRIX(cs->c.device->adapter->d3d_info.limits.ffp_vertex_blend_matrices)) - device_invalidate_state(cs->c.device, STATE_TRANSFORM(op->state)); + /* Fog behaviour depends on the projection matrix. */ + if (op->state == WINED3D_TS_PROJECTION + && cs->state.render_states[WINED3D_RS_FOGENABLE] + && cs->state.render_states[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE) + device_invalidate_state(cs->c.device, STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX)); }
void wined3d_device_context_emit_set_transform(struct wined3d_device_context *context, diff --git a/dlls/wined3d/ffp_gl.c b/dlls/wined3d/ffp_gl.c index e4229db1763..b2263252e64 100644 --- a/dlls/wined3d/ffp_gl.c +++ b/dlls/wined3d/ffp_gl.c @@ -1638,22 +1638,6 @@ static void prune_invalid_states(struct wined3d_state_entry *state_table, const state_table[i].representative = 0; state_table[i].apply = state_undefined; } - - start = STATE_TRANSFORM(WINED3D_TS_TEXTURE0 + d3d_info->ffp_fragment_caps.max_blend_stages); - last = STATE_TRANSFORM(WINED3D_TS_TEXTURE0 + WINED3D_MAX_FFP_TEXTURES - 1); - for (i = start; i <= last; ++i) - { - state_table[i].representative = 0; - state_table[i].apply = state_undefined; - } - - start = STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(d3d_info->limits.ffp_vertex_blend_matrices)); - last = STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(255)); - for (i = start; i <= last; ++i) - { - state_table[i].representative = 0; - state_table[i].apply = state_undefined; - } }
static void validate_state_table(struct wined3d_state_entry *state_table) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index ee55ea983cf..bef6a44b0a7 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -11899,15 +11899,6 @@ static void glsl_vertex_pipe_pixel_shader(struct wined3d_context *context, context->shader_update_mask |= 1u << WINED3D_SHADER_TYPE_VERTEX; }
-static void glsl_vertex_pipe_projection(struct wined3d_context *context, - const struct wined3d_state *state, DWORD state_id) -{ - /* Table fog behavior depends on the projection matrix. */ - if (state->render_states[WINED3D_RS_FOGENABLE] - && state->render_states[WINED3D_RS_FOGTABLEMODE] != WINED3D_FOG_NONE) - context->shader_update_mask |= 1u << WINED3D_SHADER_TYPE_VERTEX; -} - static void glsl_vertex_pipe_viewport(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -11975,8 +11966,6 @@ static const struct wined3d_state_entry_template glsl_vertex_pipe_vp_states[] = {STATE_CLIPPLANE(7), {STATE_CLIPPLANE(7), clipplane }, WINED3D_GL_EXT_NONE }, /* Viewport */ {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 }, /* 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/utils.c b/dlls/wined3d/utils.c index 35811a3b881..30572bc0ded 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -5353,8 +5353,6 @@ const char *debug_d3dstate(uint32_t state) return "STATE_COMPUTE_UNORDERED_ACCESS_VIEW_BINDING"; if (STATE_IS_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING(state)) return "STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING"; - if (STATE_IS_TRANSFORM(state)) - return wine_dbg_sprintf("STATE_TRANSFORM(%s)", debug_d3dtstype(state - STATE_TRANSFORM(0))); if (STATE_IS_STREAMSRC(state)) return "STATE_STREAMSRC"; if (STATE_IS_INDEXBUFFER(state)) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index f150316455c..511d135a8f5 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1735,10 +1735,7 @@ void dispatch_compute(struct wined3d_device *device, const struct wined3d_state #define STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING (STATE_GRAPHICS_SHADER_RESOURCE_BINDING + 1) #define STATE_IS_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING(a) ((a) == STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING)
-#define STATE_TRANSFORM(a) (STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING + (a)) -#define STATE_IS_TRANSFORM(a) ((a) >= STATE_TRANSFORM(1) && (a) <= STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(255))) - -#define STATE_STREAMSRC (STATE_TRANSFORM(WINED3D_TS_WORLD_MATRIX(255)) + 1) +#define STATE_STREAMSRC (STATE_GRAPHICS_UNORDERED_ACCESS_VIEW_BINDING + 1) #define STATE_IS_STREAMSRC(a) ((a) == STATE_STREAMSRC) #define STATE_INDEXBUFFER (STATE_STREAMSRC + 1) #define STATE_IS_INDEXBUFFER(a) ((a) == STATE_INDEXBUFFER)