[PATCH 4/5] wined3d: Handle dcl_output_control_point_count instruction.

Józef Kucia jkucia at codeweavers.com
Wed May 17 08:42:34 CDT 2017


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/wined3d/glsl_shader.c     |  2 +-
 dlls/wined3d/shader.c          |  7 +++++++
 dlls/wined3d/wined3d_private.h | 13 +++++++------
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index ce96085..76ec6f7 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -10290,7 +10290,7 @@ static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TAB
     /* WINED3DSIH_DCL_INPUT_SIV                    */ shader_glsl_nop,
     /* WINED3DSIH_DCL_INTERFACE                    */ NULL,
     /* WINED3DSIH_DCL_OUTPUT                       */ shader_glsl_nop,
-    /* WINED3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT   */ NULL,
+    /* WINED3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT   */ shader_glsl_nop,
     /* WINED3DSIH_DCL_OUTPUT_SIV                   */ shader_glsl_nop,
     /* WINED3DSIH_DCL_OUTPUT_TOPOLOGY              */ shader_glsl_nop,
     /* WINED3DSIH_DCL_RESOURCE_RAW                 */ shader_glsl_nop,
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index 7ee867d..bbd6718 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -1053,6 +1053,13 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
                 FIXME("Invalid instruction %#x for shader type %#x.\n",
                         ins.handler_idx, shader_version.type);
         }
+        else if (ins.handler_idx == WINED3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT)
+        {
+            if (shader_version.type == WINED3D_SHADER_TYPE_HULL)
+                shader->u.hs.output_vertex_count = ins.declaration.count;
+            else
+                FIXME("Invalid instruction %#x for shader type %#x.\n", ins.handler_idx, shader_version.type);
+        }
         else if (ins.handler_idx == WINED3DSIH_DCL_OUTPUT_TOPOLOGY)
         {
             if (shader_version.type == WINED3D_SHADER_TYPE_GEOMETRY)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 57c2a96..70dd8ed 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3708,17 +3708,18 @@ struct wined3d_vertex_shader
     struct wined3d_shader_attribute attributes[MAX_ATTRIBS];
 };
 
-struct wined3d_domain_shader
-{
-    enum wined3d_tessellator_domain tessellator_domain;
-};
-
 struct wined3d_hull_shader
 {
+    unsigned int output_vertex_count;
     enum wined3d_tessellator_output_primitive tessellator_output_primitive;
     enum wined3d_tessellator_partitioning tessellator_partitioning;
 };
 
+struct wined3d_domain_shader
+{
+    enum wined3d_tessellator_domain tessellator_domain;
+};
+
 struct wined3d_geometry_shader
 {
     enum wined3d_primitive_type input_type;
@@ -3782,8 +3783,8 @@ struct wined3d_shader
     union
     {
         struct wined3d_vertex_shader vs;
-        struct wined3d_domain_shader ds;
         struct wined3d_hull_shader hs;
+        struct wined3d_domain_shader ds;
         struct wined3d_geometry_shader gs;
         struct wined3d_pixel_shader ps;
         struct wined3d_compute_shader cs;
-- 
2.10.2




More information about the wine-patches mailing list