Matteo Bruni : wined3d: Reselect the current GLSL geometry shader when possible even if the VS changed.

Alexandre Julliard julliard at wine.codeweavers.com
Mon May 23 10:27:44 CDT 2016


Module: wine
Branch: master
Commit: 54d8f57cc58e5d0d9b962559fe2f7bc071144637
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=54d8f57cc58e5d0d9b962559fe2f7bc071144637

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Fri May 20 19:55:59 2016 +0200

wined3d: Reselect the current GLSL geometry shader when possible even if the VS changed.

Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 324b606..d3a0ebf 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -7447,7 +7447,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;
@@ -7462,12 +7464,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;
 




More information about the wine-cvs mailing list