1
0
Fork 0
mirror of synced 2025-03-07 03:53:26 +01:00

wined3d: Move checking shader_update_mask to shader_glsl_apply_compute_state().

This commit is contained in:
Zebediah Figura 2024-03-10 23:43:45 -05:00 committed by Alexandre Julliard
parent 8e77d28165
commit 6e619d98a3
2 changed files with 16 additions and 12 deletions

View file

@ -4443,11 +4443,7 @@ static void wined3d_context_gl_apply_compute_state(struct wined3d_context_gl *co
}
memset(context_gl->c.dirty_compute_states, 0, sizeof(*context_gl->c.dirty_compute_states));
if (context_gl->c.shader_update_mask & (1u << WINED3D_SHADER_TYPE_COMPUTE))
{
device->shader_backend->shader_apply_compute_state(device->shader_priv, &context_gl->c, state);
context_gl->c.shader_update_mask &= ~(1u << WINED3D_SHADER_TYPE_COMPUTE);
}
device->shader_backend->shader_apply_compute_state(device->shader_priv, &context_gl->c, state);
if (context_gl->c.update_compute_shader_resource_bindings)
{
@ -4478,6 +4474,7 @@ static void wined3d_context_gl_apply_compute_state(struct wined3d_context_gl *co
context_gl->c.last_was_blit = FALSE;
context_gl->c.last_was_ffp_blit = FALSE;
context_gl->c.shader_update_mask &= ~(1u << WINED3D_SHADER_TYPE_COMPUTE);
}
void wined3d_context_gl_end_transform_feedback(struct wined3d_context_gl *context_gl)

View file

@ -10765,14 +10765,11 @@ static void shader_glsl_apply_draw_state(void *shader_priv, struct wined3d_conte
shader_glsl_load_constants(priv, context, state);
}
/* Context activation is done by the caller. */
static void shader_glsl_apply_compute_state(void *shader_priv, struct wined3d_context *context,
const struct wined3d_state *state)
static void shader_glsl_update_compute_program(struct shader_glsl_priv *priv,
struct wined3d_context_gl *context_gl, const struct wined3d_state *state)
{
struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
struct glsl_context_data *ctx_data = context->shader_backend_data;
struct glsl_context_data *ctx_data = context_gl->c.shader_backend_data;
const struct wined3d_gl_info *gl_info = context_gl->gl_info;
struct shader_glsl_priv *priv = shader_priv;
GLuint program_id, prev_id;
prev_id = ctx_data->glsl_program ? ctx_data->glsl_program->id : 0;
@ -10787,13 +10784,23 @@ static void shader_glsl_apply_compute_state(void *shader_priv, struct wined3d_co
checkGLcall("glUseProgram");
}
context->shader_update_mask |= (1u << WINED3D_SHADER_TYPE_PIXEL)
context_gl->c.shader_update_mask |= (1u << WINED3D_SHADER_TYPE_PIXEL)
| (1u << WINED3D_SHADER_TYPE_VERTEX)
| (1u << WINED3D_SHADER_TYPE_GEOMETRY)
| (1u << WINED3D_SHADER_TYPE_HULL)
| (1u << WINED3D_SHADER_TYPE_DOMAIN);
}
static void shader_glsl_apply_compute_state(void *shader_priv, struct wined3d_context *context,
const struct wined3d_state *state)
{
struct wined3d_context_gl *context_gl = wined3d_context_gl(context);
struct shader_glsl_priv *priv = shader_priv;
if (context_gl->c.shader_update_mask & (1u << WINED3D_SHADER_TYPE_COMPUTE))
shader_glsl_update_compute_program(priv, context_gl, state);
}
/* "context" is not necessarily the currently active context. */
static void shader_glsl_invalidate_current_program(struct wined3d_context *context)
{