[PATCH 08/12] wined3d: Reselect the current GLSL geometry shader when possible even if the VS changed.
Matteo Bruni
mbruni at codeweavers.com
Fri May 20 12:55:59 CDT 2016
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
dlls/wined3d/glsl_shader.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 80f5553..f671e84 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -7457,7 +7457,9 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
if (!(context->shader_update_mask & (1u << WINED3D_SHADER_TYPE_GEOMETRY))
&& ctx_data->glsl_program->gs.id)
+ {
gs_id = ctx_data->glsl_program->gs.id;
+ }
else if (gshader)
{
struct gs_compile_args args;
@@ -7472,12 +7474,18 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
struct vs_compile_args vs_compile_args;
vshader = state->shader[WINED3D_SHADER_TYPE_VERTEX];
+ gshader = state->shader[WINED3D_SHADER_TYPE_GEOMETRY];
find_vs_compile_args(state, vshader, context->stream_info.swizzle_map, &vs_compile_args, d3d_info);
vs_id = find_glsl_vshader(context, priv, vshader, &vs_compile_args);
vs_list = &vshader->linked_programs;
- if ((gshader = state->shader[WINED3D_SHADER_TYPE_GEOMETRY]))
+ if (!(context->shader_update_mask & (1u << WINED3D_SHADER_TYPE_GEOMETRY))
+ && ctx_data->glsl_program->gs.id)
+ {
+ gs_id = ctx_data->glsl_program->gs.id;
+ }
+ else if (gshader)
{
struct gs_compile_args gs_compile_args;
--
2.7.3
More information about the wine-patches
mailing list