Module: wine Branch: master Commit: 6e619d98a3051d836ae99e911f1d32e5a307acbc URL: https://gitlab.winehq.org/wine/wine/-/commit/6e619d98a3051d836ae99e911f1d32e...
Author: Zebediah Figura zfigura@codeweavers.com Date: Sun Mar 10 23:43:45 2024 -0500
wined3d: Move checking shader_update_mask to shader_glsl_apply_compute_state().
---
dlls/wined3d/context_gl.c | 7 ++----- dlls/wined3d/glsl_shader.c | 21 ++++++++++++++------- 2 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/dlls/wined3d/context_gl.c b/dlls/wined3d/context_gl.c index c32157556db..1c1dbe52b9d 100644 --- a/dlls/wined3d/context_gl.c +++ b/dlls/wined3d/context_gl.c @@ -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) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 619f9890c40..015b62986b3 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -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) {