From b0d2cf8e3f0d5f79d60acc0e72ffaf72fbe5fa6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Wed, 17 May 2017 15:42:34 +0200 Subject: [PATCH] wined3d: Handle dcl_output_control_point_count instruction. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Józef Kucia Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/glsl_shader.c | 2 +- dlls/wined3d/shader.c | 7 +++++++ dlls/wined3d/wined3d_private.h | 15 ++++++++------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index ce960853362..76ec6f7fefe 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 7ee867dc713..bbd6718a260 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 57c2a967245..70dd8edc968 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_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_hull_shader -{ - enum wined3d_tessellator_output_primitive tessellator_output_primitive; - enum wined3d_tessellator_partitioning tessellator_partitioning; -}; - 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;