From: Matteo Bruni Subject: Re: [PATCH 5/5] wined3d: Invalidate shaders when interpolation qualifiers might change. Message-Id: Date: Mon, 4 Jun 2018 23:33:30 +0200 In-Reply-To: References: <20180604183232.5565-1-mbruni@codeweavers.com> <20180604183232.5565-5-mbruni@codeweavers.com> 2018-06-04 21:11 GMT+02:00 Józef Kucia : > On Mon, Jun 4, 2018 at 8:32 PM, Matteo Bruni wrote: >> Signed-off-by: Matteo Bruni >> --- >> dlls/wined3d/cs.c | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> >> diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c >> index 3f1ca8ce658..e5ae7f478f8 100644 >> --- a/dlls/wined3d/cs.c >> +++ b/dlls/wined3d/cs.c >> @@ -1444,10 +1444,21 @@ void wined3d_cs_emit_set_sampler(struct wined3d_cs *cs, enum wined3d_shader_type >> >> static void wined3d_cs_exec_set_shader(struct wined3d_cs *cs, const void *data) >> { >> + const struct wined3d_gl_info *gl_info = &cs->device->adapter->gl_info; >> const struct wined3d_cs_set_shader *op = data; >> >> cs->state.shader[op->type] = op->shader; >> device_invalidate_state(cs->device, STATE_SHADER(op->type)); >> + if (needs_interpolation_qualifiers_for_shader_outputs(gl_info) && op->type == WINED3D_SHADER_TYPE_PIXEL >> + && op->shader && op->shader->reg_maps.shader_version.major >= 4) >> + { >> + if (cs->state.shader[WINED3D_SHADER_TYPE_GEOMETRY]) >> + device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_GEOMETRY)); >> + else if (cs->state.shader[WINED3D_SHADER_TYPE_DOMAIN]) >> + device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_DOMAIN)); >> + else if (cs->state.shader[WINED3D_SHADER_TYPE_VERTEX]) >> + device_invalidate_state(cs->device, STATE_SHADER(WINED3D_SHADER_TYPE_VERTEX)); >> + } >> if (op->type != WINED3D_SHADER_TYPE_COMPUTE) >> device_invalidate_state(cs->device, STATE_GRAPHICS_SHADER_RESOURCE_BINDING); >> else >> -- >> 2.16.1 >> >> >> > > Is this really needed? See glsl_vertex_pipe_pixel_shader(). Indeed, it should be redundant.