From: Józef Kucia Subject: Re: [PATCH 5/5] wined3d: Invalidate shaders when interpolation qualifiers might change. Message-Id: Date: Mon, 4 Jun 2018 21:11:52 +0200 In-Reply-To: <20180604183232.5565-5-mbruni@codeweavers.com> References: <20180604183232.5565-1-mbruni@codeweavers.com> <20180604183232.5565-5-mbruni@codeweavers.com> 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().