[PATCH 2/5] wined3d: Recognize SM5 dcl_resource_structured opcode.

Józef Kucia jkucia at codeweavers.com
Fri Mar 25 13:53:36 CDT 2016


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
Reserving a little more space for longer opcode names.
---
 dlls/wined3d/arb_program_shader.c |   1 +
 dlls/wined3d/glsl_shader.c        |   1 +
 dlls/wined3d/shader.c             |   7 +
 dlls/wined3d/shader_sm4.c         | 367 +++++++++++++++++++-------------------
 dlls/wined3d/wined3d_private.h    |   8 +
 5 files changed, 204 insertions(+), 180 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 23219db..e42f2b4 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -5239,6 +5239,7 @@ static const SHADER_HANDLER shader_arb_instruction_handler_table[WINED3DSIH_TABL
     /* WINED3DSIH_DCL_OUTPUT                    */ NULL,
     /* WINED3DSIH_DCL_OUTPUT_SIV                */ NULL,
     /* WINED3DSIH_DCL_OUTPUT_TOPOLOGY           */ shader_hw_nop,
+    /* WINED3DSIH_DCL_RESOURCE_STRUCTURED       */ NULL,
     /* WINED3DSIH_DCL_SAMPLER                   */ NULL,
     /* WINED3DSIH_DCL_TEMPS                     */ NULL,
     /* WINED3DSIH_DCL_VERTICES_OUT              */ shader_hw_nop,
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 79eec10..4b0f2a1 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -8125,6 +8125,7 @@ static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TAB
     /* WINED3DSIH_DCL_OUTPUT                    */ shader_glsl_nop,
     /* WINED3DSIH_DCL_OUTPUT_SIV                */ shader_glsl_nop,
     /* WINED3DSIH_DCL_OUTPUT_TOPOLOGY           */ shader_glsl_nop,
+    /* WINED3DSIH_DCL_RESOURCE_STRUCTURED       */ NULL,
     /* WINED3DSIH_DCL_SAMPLER                   */ shader_glsl_nop,
     /* WINED3DSIH_DCL_TEMPS                     */ shader_glsl_nop,
     /* WINED3DSIH_DCL_VERTICES_OUT              */ shader_glsl_nop,
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index f45fbb8..a0e707c 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -67,6 +67,7 @@ static const char * const shader_opcode_names[] =
     /* WINED3DSIH_DCL_OUTPUT                    */ "dcl_output",
     /* WINED3DSIH_DCL_OUTPUT_SIV                */ "dcl_output_siv",
     /* WINED3DSIH_DCL_OUTPUT_TOPOLOGY           */ "dcl_outputTopology",
+    /* WINED3DSIH_DCL_RESOURCE_STRUCTURED       */ "dcl_resource_structured",
     /* WINED3DSIH_DCL_SAMPLER                   */ "dcl_sampler",
     /* WINED3DSIH_DCL_TEMPS                     */ "dcl_temps",
     /* WINED3DSIH_DCL_VERTICES_OUT              */ "dcl_maxOutputVertexCount",
@@ -2022,6 +2023,12 @@ static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe
             shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]);
             shader_dump_primitive_type(&buffer, ins.declaration.primitive_type);
         }
+        else if (ins.handler_idx == WINED3DSIH_DCL_RESOURCE_STRUCTURED)
+        {
+            shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]);
+            shader_dump_dst_param(&buffer, &ins.declaration.structured_resource.reg, &shader_version);
+            shader_addline(&buffer, ", %u", ins.declaration.structured_resource.byte_stride);
+        }
         else if (ins.handler_idx == WINED3DSIH_DCL_SAMPLER)
         {
             shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]);
diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index 6e1fe5d..d056b18 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -99,96 +99,97 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode);
 
 enum wined3d_sm4_opcode
 {
-    WINED3D_SM4_OP_ADD                  = 0x00,
-    WINED3D_SM4_OP_AND                  = 0x01,
-    WINED3D_SM4_OP_BREAK                = 0x02,
-    WINED3D_SM4_OP_BREAKC               = 0x03,
-    WINED3D_SM4_OP_CUT                  = 0x09,
-    WINED3D_SM4_OP_DERIV_RTX            = 0x0b,
-    WINED3D_SM4_OP_DERIV_RTY            = 0x0c,
-    WINED3D_SM4_OP_DISCARD              = 0x0d,
-    WINED3D_SM4_OP_DIV                  = 0x0e,
-    WINED3D_SM4_OP_DP2                  = 0x0f,
-    WINED3D_SM4_OP_DP3                  = 0x10,
-    WINED3D_SM4_OP_DP4                  = 0x11,
-    WINED3D_SM4_OP_ELSE                 = 0x12,
-    WINED3D_SM4_OP_EMIT                 = 0x13,
-    WINED3D_SM4_OP_ENDIF                = 0x15,
-    WINED3D_SM4_OP_ENDLOOP              = 0x16,
-    WINED3D_SM4_OP_EQ                   = 0x18,
-    WINED3D_SM4_OP_EXP                  = 0x19,
-    WINED3D_SM4_OP_FRC                  = 0x1a,
-    WINED3D_SM4_OP_FTOI                 = 0x1b,
-    WINED3D_SM4_OP_FTOU                 = 0x1c,
-    WINED3D_SM4_OP_GE                   = 0x1d,
-    WINED3D_SM4_OP_IADD                 = 0x1e,
-    WINED3D_SM4_OP_IF                   = 0x1f,
-    WINED3D_SM4_OP_IEQ                  = 0x20,
-    WINED3D_SM4_OP_IGE                  = 0x21,
-    WINED3D_SM4_OP_ILT                  = 0x22,
-    WINED3D_SM4_OP_IMAD                 = 0x23,
-    WINED3D_SM4_OP_IMAX                 = 0x24,
-    WINED3D_SM4_OP_IMIN                 = 0x25,
-    WINED3D_SM4_OP_IMUL                 = 0x26,
-    WINED3D_SM4_OP_INE                  = 0x27,
-    WINED3D_SM4_OP_INEG                 = 0x28,
-    WINED3D_SM4_OP_ISHL                 = 0x29,
-    WINED3D_SM4_OP_ITOF                 = 0x2b,
-    WINED3D_SM4_OP_LD                   = 0x2d,
-    WINED3D_SM4_OP_LD2DMS               = 0x2e,
-    WINED3D_SM4_OP_LOG                  = 0x2f,
-    WINED3D_SM4_OP_LOOP                 = 0x30,
-    WINED3D_SM4_OP_LT                   = 0x31,
-    WINED3D_SM4_OP_MAD                  = 0x32,
-    WINED3D_SM4_OP_MIN                  = 0x33,
-    WINED3D_SM4_OP_MAX                  = 0x34,
-    WINED3D_SM4_OP_SHADER_DATA          = 0x35,
-    WINED3D_SM4_OP_MOV                  = 0x36,
-    WINED3D_SM4_OP_MOVC                 = 0x37,
-    WINED3D_SM4_OP_MUL                  = 0x38,
-    WINED3D_SM4_OP_NE                   = 0x39,
-    WINED3D_SM4_OP_NOT                  = 0x3b,
-    WINED3D_SM4_OP_OR                   = 0x3c,
-    WINED3D_SM4_OP_RESINFO              = 0x3d,
-    WINED3D_SM4_OP_RET                  = 0x3e,
-    WINED3D_SM4_OP_ROUND_NI             = 0x41,
-    WINED3D_SM4_OP_ROUND_PI             = 0x42,
-    WINED3D_SM4_OP_ROUND_Z              = 0x43,
-    WINED3D_SM4_OP_RSQ                  = 0x44,
-    WINED3D_SM4_OP_SAMPLE               = 0x45,
-    WINED3D_SM4_OP_SAMPLE_C             = 0x46,
-    WINED3D_SM4_OP_SAMPLE_C_LZ          = 0x47,
-    WINED3D_SM4_OP_SAMPLE_LOD           = 0x48,
-    WINED3D_SM4_OP_SAMPLE_GRAD          = 0x49,
-    WINED3D_SM4_OP_SAMPLE_B             = 0x4a,
-    WINED3D_SM4_OP_SQRT                 = 0x4b,
-    WINED3D_SM4_OP_SINCOS               = 0x4d,
-    WINED3D_SM4_OP_UDIV                 = 0x4e,
-    WINED3D_SM4_OP_UGE                  = 0x50,
-    WINED3D_SM4_OP_USHR                 = 0x55,
-    WINED3D_SM4_OP_UTOF                 = 0x56,
-    WINED3D_SM4_OP_XOR                  = 0x57,
-    WINED3D_SM4_OP_DCL_RESOURCE         = 0x58,
-    WINED3D_SM4_OP_DCL_CONSTANT_BUFFER  = 0x59,
-    WINED3D_SM4_OP_DCL_SAMPLER          = 0x5a,
-    WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY  = 0x5c,
-    WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE  = 0x5d,
-    WINED3D_SM4_OP_DCL_VERTICES_OUT     = 0x5e,
-    WINED3D_SM4_OP_DCL_INPUT            = 0x5f,
-    WINED3D_SM4_OP_DCL_INPUT_SGV        = 0x60,
-    WINED3D_SM4_OP_DCL_INPUT_SIV        = 0x61,
-    WINED3D_SM4_OP_DCL_INPUT_PS         = 0x62,
-    WINED3D_SM4_OP_DCL_INPUT_PS_SGV     = 0x63,
-    WINED3D_SM4_OP_DCL_INPUT_PS_SIV     = 0x64,
-    WINED3D_SM4_OP_DCL_OUTPUT           = 0x65,
-    WINED3D_SM4_OP_DCL_OUTPUT_SIV       = 0x67,
-    WINED3D_SM4_OP_DCL_TEMPS            = 0x68,
-    WINED3D_SM4_OP_DCL_GLOBAL_FLAGS     = 0x6a,
-    WINED3D_SM5_OP_DERIV_RTX_COARSE     = 0x7a,
-    WINED3D_SM5_OP_DERIV_RTX_FINE       = 0x7b,
-    WINED3D_SM5_OP_DERIV_RTY_COARSE     = 0x7c,
-    WINED3D_SM5_OP_DERIV_RTY_FINE       = 0x7d,
-    WINED3D_SM5_OP_LD_STRUCTURED        = 0xa7,
+    WINED3D_SM4_OP_ADD                       = 0x00,
+    WINED3D_SM4_OP_AND                       = 0x01,
+    WINED3D_SM4_OP_BREAK                     = 0x02,
+    WINED3D_SM4_OP_BREAKC                    = 0x03,
+    WINED3D_SM4_OP_CUT                       = 0x09,
+    WINED3D_SM4_OP_DERIV_RTX                 = 0x0b,
+    WINED3D_SM4_OP_DERIV_RTY                 = 0x0c,
+    WINED3D_SM4_OP_DISCARD                   = 0x0d,
+    WINED3D_SM4_OP_DIV                       = 0x0e,
+    WINED3D_SM4_OP_DP2                       = 0x0f,
+    WINED3D_SM4_OP_DP3                       = 0x10,
+    WINED3D_SM4_OP_DP4                       = 0x11,
+    WINED3D_SM4_OP_ELSE                      = 0x12,
+    WINED3D_SM4_OP_EMIT                      = 0x13,
+    WINED3D_SM4_OP_ENDIF                     = 0x15,
+    WINED3D_SM4_OP_ENDLOOP                   = 0x16,
+    WINED3D_SM4_OP_EQ                        = 0x18,
+    WINED3D_SM4_OP_EXP                       = 0x19,
+    WINED3D_SM4_OP_FRC                       = 0x1a,
+    WINED3D_SM4_OP_FTOI                      = 0x1b,
+    WINED3D_SM4_OP_FTOU                      = 0x1c,
+    WINED3D_SM4_OP_GE                        = 0x1d,
+    WINED3D_SM4_OP_IADD                      = 0x1e,
+    WINED3D_SM4_OP_IF                        = 0x1f,
+    WINED3D_SM4_OP_IEQ                       = 0x20,
+    WINED3D_SM4_OP_IGE                       = 0x21,
+    WINED3D_SM4_OP_ILT                       = 0x22,
+    WINED3D_SM4_OP_IMAD                      = 0x23,
+    WINED3D_SM4_OP_IMAX                      = 0x24,
+    WINED3D_SM4_OP_IMIN                      = 0x25,
+    WINED3D_SM4_OP_IMUL                      = 0x26,
+    WINED3D_SM4_OP_INE                       = 0x27,
+    WINED3D_SM4_OP_INEG                      = 0x28,
+    WINED3D_SM4_OP_ISHL                      = 0x29,
+    WINED3D_SM4_OP_ITOF                      = 0x2b,
+    WINED3D_SM4_OP_LD                        = 0x2d,
+    WINED3D_SM4_OP_LD2DMS                    = 0x2e,
+    WINED3D_SM4_OP_LOG                       = 0x2f,
+    WINED3D_SM4_OP_LOOP                      = 0x30,
+    WINED3D_SM4_OP_LT                        = 0x31,
+    WINED3D_SM4_OP_MAD                       = 0x32,
+    WINED3D_SM4_OP_MIN                       = 0x33,
+    WINED3D_SM4_OP_MAX                       = 0x34,
+    WINED3D_SM4_OP_SHADER_DATA               = 0x35,
+    WINED3D_SM4_OP_MOV                       = 0x36,
+    WINED3D_SM4_OP_MOVC                      = 0x37,
+    WINED3D_SM4_OP_MUL                       = 0x38,
+    WINED3D_SM4_OP_NE                        = 0x39,
+    WINED3D_SM4_OP_NOT                       = 0x3b,
+    WINED3D_SM4_OP_OR                        = 0x3c,
+    WINED3D_SM4_OP_RESINFO                   = 0x3d,
+    WINED3D_SM4_OP_RET                       = 0x3e,
+    WINED3D_SM4_OP_ROUND_NI                  = 0x41,
+    WINED3D_SM4_OP_ROUND_PI                  = 0x42,
+    WINED3D_SM4_OP_ROUND_Z                   = 0x43,
+    WINED3D_SM4_OP_RSQ                       = 0x44,
+    WINED3D_SM4_OP_SAMPLE                    = 0x45,
+    WINED3D_SM4_OP_SAMPLE_C                  = 0x46,
+    WINED3D_SM4_OP_SAMPLE_C_LZ               = 0x47,
+    WINED3D_SM4_OP_SAMPLE_LOD                = 0x48,
+    WINED3D_SM4_OP_SAMPLE_GRAD               = 0x49,
+    WINED3D_SM4_OP_SAMPLE_B                  = 0x4a,
+    WINED3D_SM4_OP_SQRT                      = 0x4b,
+    WINED3D_SM4_OP_SINCOS                    = 0x4d,
+    WINED3D_SM4_OP_UDIV                      = 0x4e,
+    WINED3D_SM4_OP_UGE                       = 0x50,
+    WINED3D_SM4_OP_USHR                      = 0x55,
+    WINED3D_SM4_OP_UTOF                      = 0x56,
+    WINED3D_SM4_OP_XOR                       = 0x57,
+    WINED3D_SM4_OP_DCL_RESOURCE              = 0x58,
+    WINED3D_SM4_OP_DCL_CONSTANT_BUFFER       = 0x59,
+    WINED3D_SM4_OP_DCL_SAMPLER               = 0x5a,
+    WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY       = 0x5c,
+    WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE       = 0x5d,
+    WINED3D_SM4_OP_DCL_VERTICES_OUT          = 0x5e,
+    WINED3D_SM4_OP_DCL_INPUT                 = 0x5f,
+    WINED3D_SM4_OP_DCL_INPUT_SGV             = 0x60,
+    WINED3D_SM4_OP_DCL_INPUT_SIV             = 0x61,
+    WINED3D_SM4_OP_DCL_INPUT_PS              = 0x62,
+    WINED3D_SM4_OP_DCL_INPUT_PS_SGV          = 0x63,
+    WINED3D_SM4_OP_DCL_INPUT_PS_SIV          = 0x64,
+    WINED3D_SM4_OP_DCL_OUTPUT                = 0x65,
+    WINED3D_SM4_OP_DCL_OUTPUT_SIV            = 0x67,
+    WINED3D_SM4_OP_DCL_TEMPS                 = 0x68,
+    WINED3D_SM4_OP_DCL_GLOBAL_FLAGS          = 0x6a,
+    WINED3D_SM5_OP_DERIV_RTX_COARSE          = 0x7a,
+    WINED3D_SM5_OP_DERIV_RTX_FINE            = 0x7b,
+    WINED3D_SM5_OP_DERIV_RTY_COARSE          = 0x7c,
+    WINED3D_SM5_OP_DERIV_RTY_FINE            = 0x7d,
+    WINED3D_SM5_OP_DCL_RESOURCE_STRUCTURED   = 0xa2,
+    WINED3D_SM5_OP_LD_STRUCTURED             = 0xa7,
 };
 
 enum wined3d_sm4_register_type
@@ -306,96 +307,97 @@ struct wined3d_sm4_opcode_info
  */
 static const struct wined3d_sm4_opcode_info opcode_table[] =
 {
-    {WINED3D_SM4_OP_ADD,                    WINED3DSIH_ADD,                           "F",    "FF"},
-    {WINED3D_SM4_OP_AND,                    WINED3DSIH_AND,                           "U",    "UU"},
-    {WINED3D_SM4_OP_BREAK,                  WINED3DSIH_BREAK,                         "",     ""},
-    {WINED3D_SM4_OP_BREAKC,                 WINED3DSIH_BREAKP,                        "",     "U"},
-    {WINED3D_SM4_OP_CUT,                    WINED3DSIH_CUT,                           "",     ""},
-    {WINED3D_SM4_OP_DERIV_RTX,              WINED3DSIH_DSX,                           "F",    "F"},
-    {WINED3D_SM4_OP_DERIV_RTY,              WINED3DSIH_DSY,                           "F",    "F"},
-    {WINED3D_SM4_OP_DISCARD,                WINED3DSIH_TEXKILL,                       "",     "U"},
-    {WINED3D_SM4_OP_DIV,                    WINED3DSIH_DIV,                           "F",    "FF"},
-    {WINED3D_SM4_OP_DP2,                    WINED3DSIH_DP2,                           "F",    "FF"},
-    {WINED3D_SM4_OP_DP3,                    WINED3DSIH_DP3,                           "F",    "FF"},
-    {WINED3D_SM4_OP_DP4,                    WINED3DSIH_DP4,                           "F",    "FF"},
-    {WINED3D_SM4_OP_ELSE,                   WINED3DSIH_ELSE,                          "",     ""},
-    {WINED3D_SM4_OP_EMIT,                   WINED3DSIH_EMIT,                          "",     ""},
-    {WINED3D_SM4_OP_ENDIF,                  WINED3DSIH_ENDIF,                         "",     ""},
-    {WINED3D_SM4_OP_ENDLOOP,                WINED3DSIH_ENDLOOP,                       "",     ""},
-    {WINED3D_SM4_OP_EQ,                     WINED3DSIH_EQ,                            "U",    "FF"},
-    {WINED3D_SM4_OP_EXP,                    WINED3DSIH_EXP,                           "F",    "F"},
-    {WINED3D_SM4_OP_FRC,                    WINED3DSIH_FRC,                           "F",    "F"},
-    {WINED3D_SM4_OP_FTOI,                   WINED3DSIH_FTOI,                          "I",    "F"},
-    {WINED3D_SM4_OP_FTOU,                   WINED3DSIH_FTOU,                          "U",    "F"},
-    {WINED3D_SM4_OP_GE,                     WINED3DSIH_GE,                            "U",    "FF"},
-    {WINED3D_SM4_OP_IADD,                   WINED3DSIH_IADD,                          "I",    "II"},
-    {WINED3D_SM4_OP_IF,                     WINED3DSIH_IF,                            "",     "U"},
-    {WINED3D_SM4_OP_IEQ,                    WINED3DSIH_IEQ,                           "U",    "II"},
-    {WINED3D_SM4_OP_IGE,                    WINED3DSIH_IGE,                           "U",    "II"},
-    {WINED3D_SM4_OP_ILT,                    WINED3DSIH_ILT,                           "U",    "II"},
-    {WINED3D_SM4_OP_IMAD,                   WINED3DSIH_IMAD,                          "I",    "III"},
-    {WINED3D_SM4_OP_IMAX,                   WINED3DSIH_IMAX,                          "I",    "II"},
-    {WINED3D_SM4_OP_IMIN,                   WINED3DSIH_IMIN,                          "I",    "II"},
-    {WINED3D_SM4_OP_IMUL,                   WINED3DSIH_IMUL,                          "II",   "II"},
-    {WINED3D_SM4_OP_INE,                    WINED3DSIH_INE,                           "U",    "II"},
-    {WINED3D_SM4_OP_INEG,                   WINED3DSIH_INEG,                          "I",    "I"},
-    {WINED3D_SM4_OP_ISHL,                   WINED3DSIH_ISHL,                          "I",    "II"},
-    {WINED3D_SM4_OP_ITOF,                   WINED3DSIH_ITOF,                          "F",    "I"},
-    {WINED3D_SM4_OP_LD,                     WINED3DSIH_LD,                            "U",    "IR"},
-    {WINED3D_SM4_OP_LD2DMS,                 WINED3DSIH_LD2DMS,                        "U",    "IRI"},
-    {WINED3D_SM4_OP_LOG,                    WINED3DSIH_LOG,                           "F",    "F"},
-    {WINED3D_SM4_OP_LOOP,                   WINED3DSIH_LOOP,                          "",     ""},
-    {WINED3D_SM4_OP_LT,                     WINED3DSIH_LT,                            "U",    "FF"},
-    {WINED3D_SM4_OP_MAD,                    WINED3DSIH_MAD,                           "F",    "FFF"},
-    {WINED3D_SM4_OP_MIN,                    WINED3DSIH_MIN,                           "F",    "FF"},
-    {WINED3D_SM4_OP_MAX,                    WINED3DSIH_MAX,                           "F",    "FF"},
-    {WINED3D_SM4_OP_SHADER_DATA,            WINED3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER, "",     ""},
-    {WINED3D_SM4_OP_MOV,                    WINED3DSIH_MOV,                           "F",    "F"},
-    {WINED3D_SM4_OP_MOVC,                   WINED3DSIH_MOVC,                          "F",    "UFF"},
-    {WINED3D_SM4_OP_MUL,                    WINED3DSIH_MUL,                           "F",    "FF"},
-    {WINED3D_SM4_OP_NE,                     WINED3DSIH_NE,                            "U",    "FF"},
-    {WINED3D_SM4_OP_NOT,                    WINED3DSIH_NOT,                           "U",    "U"},
-    {WINED3D_SM4_OP_OR,                     WINED3DSIH_OR,                            "U",    "UU"},
-    {WINED3D_SM4_OP_RESINFO,                WINED3DSIH_RESINFO,                       "F",    "IR"},
-    {WINED3D_SM4_OP_RET,                    WINED3DSIH_RET,                           "",     ""},
-    {WINED3D_SM4_OP_ROUND_NI,               WINED3DSIH_ROUND_NI,                      "F",    "F"},
-    {WINED3D_SM4_OP_ROUND_PI,               WINED3DSIH_ROUND_PI,                      "F",    "F"},
-    {WINED3D_SM4_OP_ROUND_Z,                WINED3DSIH_ROUND_Z,                       "F",    "F"},
-    {WINED3D_SM4_OP_RSQ,                    WINED3DSIH_RSQ,                           "F",    "F"},
-    {WINED3D_SM4_OP_SAMPLE,                 WINED3DSIH_SAMPLE,                        "U",    "FRS"},
-    {WINED3D_SM4_OP_SAMPLE_C,               WINED3DSIH_SAMPLE_C,                      "F",    "FRSF"},
-    {WINED3D_SM4_OP_SAMPLE_C_LZ,            WINED3DSIH_SAMPLE_C_LZ,                   "F",    "FRSF"},
-    {WINED3D_SM4_OP_SAMPLE_LOD,             WINED3DSIH_SAMPLE_LOD,                    "U",    "FRSF"},
-    {WINED3D_SM4_OP_SAMPLE_GRAD,            WINED3DSIH_SAMPLE_GRAD,                   "U",    "FRSFF"},
-    {WINED3D_SM4_OP_SAMPLE_B,               WINED3DSIH_SAMPLE_B,                      "U",    "FRSF"},
-    {WINED3D_SM4_OP_SQRT,                   WINED3DSIH_SQRT,                          "F",    "F"},
-    {WINED3D_SM4_OP_SINCOS,                 WINED3DSIH_SINCOS,                        "FF",   "F"},
-    {WINED3D_SM4_OP_UDIV,                   WINED3DSIH_UDIV,                          "UU",   "UU"},
-    {WINED3D_SM4_OP_UGE,                    WINED3DSIH_UGE,                           "U",    "UU"},
-    {WINED3D_SM4_OP_USHR,                   WINED3DSIH_USHR,                          "U",    "UU"},
-    {WINED3D_SM4_OP_UTOF,                   WINED3DSIH_UTOF,                          "F",    "U"},
-    {WINED3D_SM4_OP_XOR,                    WINED3DSIH_XOR,                           "U",    "UU"},
-    {WINED3D_SM4_OP_DCL_RESOURCE,           WINED3DSIH_DCL,                           "R",    ""},
-    {WINED3D_SM4_OP_DCL_CONSTANT_BUFFER,    WINED3DSIH_DCL_CONSTANT_BUFFER,           "",     ""},
-    {WINED3D_SM4_OP_DCL_SAMPLER,            WINED3DSIH_DCL_SAMPLER,                   "",     ""},
-    {WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY,    WINED3DSIH_DCL_OUTPUT_TOPOLOGY,           "",     ""},
-    {WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE,    WINED3DSIH_DCL_INPUT_PRIMITIVE,           "",     ""},
-    {WINED3D_SM4_OP_DCL_VERTICES_OUT,       WINED3DSIH_DCL_VERTICES_OUT,              "",     ""},
-    {WINED3D_SM4_OP_DCL_INPUT,              WINED3DSIH_DCL_INPUT,                     "",     ""},
-    {WINED3D_SM4_OP_DCL_INPUT_SGV,          WINED3DSIH_DCL_INPUT_SGV,                 "",     ""},
-    {WINED3D_SM4_OP_DCL_INPUT_SIV,          WINED3DSIH_DCL_INPUT_SIV,                 "",     ""},
-    {WINED3D_SM4_OP_DCL_INPUT_PS,           WINED3DSIH_DCL_INPUT_PS,                  "",     ""},
-    {WINED3D_SM4_OP_DCL_INPUT_PS_SGV,       WINED3DSIH_DCL_INPUT_PS_SGV,              "",     ""},
-    {WINED3D_SM4_OP_DCL_INPUT_PS_SIV,       WINED3DSIH_DCL_INPUT_PS_SIV,              "",     ""},
-    {WINED3D_SM4_OP_DCL_OUTPUT,             WINED3DSIH_DCL_OUTPUT,                    "",     ""},
-    {WINED3D_SM4_OP_DCL_OUTPUT_SIV,         WINED3DSIH_DCL_OUTPUT_SIV,                "",     ""},
-    {WINED3D_SM4_OP_DCL_TEMPS,              WINED3DSIH_DCL_TEMPS,                     "",     ""},
-    {WINED3D_SM4_OP_DCL_GLOBAL_FLAGS,       WINED3DSIH_DCL_GLOBAL_FLAGS,              "",     ""},
-    {WINED3D_SM5_OP_DERIV_RTX_COARSE,       WINED3DSIH_DSX_COARSE,                    "F",    "F"},
-    {WINED3D_SM5_OP_DERIV_RTX_FINE,         WINED3DSIH_DSX_FINE,                      "F",    "F"},
-    {WINED3D_SM5_OP_DERIV_RTY_COARSE,       WINED3DSIH_DSY_COARSE,                    "F",    "F"},
-    {WINED3D_SM5_OP_DERIV_RTY_FINE,         WINED3DSIH_DSY_FINE,                      "F",    "F"},
-    {WINED3D_SM5_OP_LD_STRUCTURED,          WINED3DSIH_LD_STRUCTURED,                 "U",    "UUR"},
+    {WINED3D_SM4_OP_ADD,                       WINED3DSIH_ADD,                           "F",    "FF"},
+    {WINED3D_SM4_OP_AND,                       WINED3DSIH_AND,                           "U",    "UU"},
+    {WINED3D_SM4_OP_BREAK,                     WINED3DSIH_BREAK,                         "",     ""},
+    {WINED3D_SM4_OP_BREAKC,                    WINED3DSIH_BREAKP,                        "",     "U"},
+    {WINED3D_SM4_OP_CUT,                       WINED3DSIH_CUT,                           "",     ""},
+    {WINED3D_SM4_OP_DERIV_RTX,                 WINED3DSIH_DSX,                           "F",    "F"},
+    {WINED3D_SM4_OP_DERIV_RTY,                 WINED3DSIH_DSY,                           "F",    "F"},
+    {WINED3D_SM4_OP_DISCARD,                   WINED3DSIH_TEXKILL,                       "",     "U"},
+    {WINED3D_SM4_OP_DIV,                       WINED3DSIH_DIV,                           "F",    "FF"},
+    {WINED3D_SM4_OP_DP2,                       WINED3DSIH_DP2,                           "F",    "FF"},
+    {WINED3D_SM4_OP_DP3,                       WINED3DSIH_DP3,                           "F",    "FF"},
+    {WINED3D_SM4_OP_DP4,                       WINED3DSIH_DP4,                           "F",    "FF"},
+    {WINED3D_SM4_OP_ELSE,                      WINED3DSIH_ELSE,                          "",     ""},
+    {WINED3D_SM4_OP_EMIT,                      WINED3DSIH_EMIT,                          "",     ""},
+    {WINED3D_SM4_OP_ENDIF,                     WINED3DSIH_ENDIF,                         "",     ""},
+    {WINED3D_SM4_OP_ENDLOOP,                   WINED3DSIH_ENDLOOP,                       "",     ""},
+    {WINED3D_SM4_OP_EQ,                        WINED3DSIH_EQ,                            "U",    "FF"},
+    {WINED3D_SM4_OP_EXP,                       WINED3DSIH_EXP,                           "F",    "F"},
+    {WINED3D_SM4_OP_FRC,                       WINED3DSIH_FRC,                           "F",    "F"},
+    {WINED3D_SM4_OP_FTOI,                      WINED3DSIH_FTOI,                          "I",    "F"},
+    {WINED3D_SM4_OP_FTOU,                      WINED3DSIH_FTOU,                          "U",    "F"},
+    {WINED3D_SM4_OP_GE,                        WINED3DSIH_GE,                            "U",    "FF"},
+    {WINED3D_SM4_OP_IADD,                      WINED3DSIH_IADD,                          "I",    "II"},
+    {WINED3D_SM4_OP_IF,                        WINED3DSIH_IF,                            "",     "U"},
+    {WINED3D_SM4_OP_IEQ,                       WINED3DSIH_IEQ,                           "U",    "II"},
+    {WINED3D_SM4_OP_IGE,                       WINED3DSIH_IGE,                           "U",    "II"},
+    {WINED3D_SM4_OP_ILT,                       WINED3DSIH_ILT,                           "U",    "II"},
+    {WINED3D_SM4_OP_IMAD,                      WINED3DSIH_IMAD,                          "I",    "III"},
+    {WINED3D_SM4_OP_IMAX,                      WINED3DSIH_IMAX,                          "I",    "II"},
+    {WINED3D_SM4_OP_IMIN,                      WINED3DSIH_IMIN,                          "I",    "II"},
+    {WINED3D_SM4_OP_IMUL,                      WINED3DSIH_IMUL,                          "II",   "II"},
+    {WINED3D_SM4_OP_INE,                       WINED3DSIH_INE,                           "U",    "II"},
+    {WINED3D_SM4_OP_INEG,                      WINED3DSIH_INEG,                          "I",    "I"},
+    {WINED3D_SM4_OP_ISHL,                      WINED3DSIH_ISHL,                          "I",    "II"},
+    {WINED3D_SM4_OP_ITOF,                      WINED3DSIH_ITOF,                          "F",    "I"},
+    {WINED3D_SM4_OP_LD,                        WINED3DSIH_LD,                            "U",    "IR"},
+    {WINED3D_SM4_OP_LD2DMS,                    WINED3DSIH_LD2DMS,                        "U",    "IRI"},
+    {WINED3D_SM4_OP_LOG,                       WINED3DSIH_LOG,                           "F",    "F"},
+    {WINED3D_SM4_OP_LOOP,                      WINED3DSIH_LOOP,                          "",     ""},
+    {WINED3D_SM4_OP_LT,                        WINED3DSIH_LT,                            "U",    "FF"},
+    {WINED3D_SM4_OP_MAD,                       WINED3DSIH_MAD,                           "F",    "FFF"},
+    {WINED3D_SM4_OP_MIN,                       WINED3DSIH_MIN,                           "F",    "FF"},
+    {WINED3D_SM4_OP_MAX,                       WINED3DSIH_MAX,                           "F",    "FF"},
+    {WINED3D_SM4_OP_SHADER_DATA,               WINED3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER, "",     ""},
+    {WINED3D_SM4_OP_MOV,                       WINED3DSIH_MOV,                           "F",    "F"},
+    {WINED3D_SM4_OP_MOVC,                      WINED3DSIH_MOVC,                          "F",    "UFF"},
+    {WINED3D_SM4_OP_MUL,                       WINED3DSIH_MUL,                           "F",    "FF"},
+    {WINED3D_SM4_OP_NE,                        WINED3DSIH_NE,                            "U",    "FF"},
+    {WINED3D_SM4_OP_NOT,                       WINED3DSIH_NOT,                           "U",    "U"},
+    {WINED3D_SM4_OP_OR,                        WINED3DSIH_OR,                            "U",    "UU"},
+    {WINED3D_SM4_OP_RESINFO,                   WINED3DSIH_RESINFO,                       "F",    "IR"},
+    {WINED3D_SM4_OP_RET,                       WINED3DSIH_RET,                           "",     ""},
+    {WINED3D_SM4_OP_ROUND_NI,                  WINED3DSIH_ROUND_NI,                      "F",    "F"},
+    {WINED3D_SM4_OP_ROUND_PI,                  WINED3DSIH_ROUND_PI,                      "F",    "F"},
+    {WINED3D_SM4_OP_ROUND_Z,                   WINED3DSIH_ROUND_Z,                       "F",    "F"},
+    {WINED3D_SM4_OP_RSQ,                       WINED3DSIH_RSQ,                           "F",    "F"},
+    {WINED3D_SM4_OP_SAMPLE,                    WINED3DSIH_SAMPLE,                        "U",    "FRS"},
+    {WINED3D_SM4_OP_SAMPLE_C,                  WINED3DSIH_SAMPLE_C,                      "F",    "FRSF"},
+    {WINED3D_SM4_OP_SAMPLE_C_LZ,               WINED3DSIH_SAMPLE_C_LZ,                   "F",    "FRSF"},
+    {WINED3D_SM4_OP_SAMPLE_LOD,                WINED3DSIH_SAMPLE_LOD,                    "U",    "FRSF"},
+    {WINED3D_SM4_OP_SAMPLE_GRAD,               WINED3DSIH_SAMPLE_GRAD,                   "U",    "FRSFF"},
+    {WINED3D_SM4_OP_SAMPLE_B,                  WINED3DSIH_SAMPLE_B,                      "U",    "FRSF"},
+    {WINED3D_SM4_OP_SQRT,                      WINED3DSIH_SQRT,                          "F",    "F"},
+    {WINED3D_SM4_OP_SINCOS,                    WINED3DSIH_SINCOS,                        "FF",   "F"},
+    {WINED3D_SM4_OP_UDIV,                      WINED3DSIH_UDIV,                          "UU",   "UU"},
+    {WINED3D_SM4_OP_UGE,                       WINED3DSIH_UGE,                           "U",    "UU"},
+    {WINED3D_SM4_OP_USHR,                      WINED3DSIH_USHR,                          "U",    "UU"},
+    {WINED3D_SM4_OP_UTOF,                      WINED3DSIH_UTOF,                          "F",    "U"},
+    {WINED3D_SM4_OP_XOR,                       WINED3DSIH_XOR,                           "U",    "UU"},
+    {WINED3D_SM4_OP_DCL_RESOURCE,              WINED3DSIH_DCL,                           "R",    ""},
+    {WINED3D_SM4_OP_DCL_CONSTANT_BUFFER,       WINED3DSIH_DCL_CONSTANT_BUFFER,           "",     ""},
+    {WINED3D_SM4_OP_DCL_SAMPLER,               WINED3DSIH_DCL_SAMPLER,                   "",     ""},
+    {WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY,       WINED3DSIH_DCL_OUTPUT_TOPOLOGY,           "",     ""},
+    {WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE,       WINED3DSIH_DCL_INPUT_PRIMITIVE,           "",     ""},
+    {WINED3D_SM4_OP_DCL_VERTICES_OUT,          WINED3DSIH_DCL_VERTICES_OUT,              "",     ""},
+    {WINED3D_SM4_OP_DCL_INPUT,                 WINED3DSIH_DCL_INPUT,                     "",     ""},
+    {WINED3D_SM4_OP_DCL_INPUT_SGV,             WINED3DSIH_DCL_INPUT_SGV,                 "",     ""},
+    {WINED3D_SM4_OP_DCL_INPUT_SIV,             WINED3DSIH_DCL_INPUT_SIV,                 "",     ""},
+    {WINED3D_SM4_OP_DCL_INPUT_PS,              WINED3DSIH_DCL_INPUT_PS,                  "",     ""},
+    {WINED3D_SM4_OP_DCL_INPUT_PS_SGV,          WINED3DSIH_DCL_INPUT_PS_SGV,              "",     ""},
+    {WINED3D_SM4_OP_DCL_INPUT_PS_SIV,          WINED3DSIH_DCL_INPUT_PS_SIV,              "",     ""},
+    {WINED3D_SM4_OP_DCL_OUTPUT,                WINED3DSIH_DCL_OUTPUT,                    "",     ""},
+    {WINED3D_SM4_OP_DCL_OUTPUT_SIV,            WINED3DSIH_DCL_OUTPUT_SIV,                "",     ""},
+    {WINED3D_SM4_OP_DCL_TEMPS,                 WINED3DSIH_DCL_TEMPS,                     "",     ""},
+    {WINED3D_SM4_OP_DCL_GLOBAL_FLAGS,          WINED3DSIH_DCL_GLOBAL_FLAGS,              "",     ""},
+    {WINED3D_SM5_OP_DERIV_RTX_COARSE,          WINED3DSIH_DSX_COARSE,                    "F",    "F"},
+    {WINED3D_SM5_OP_DERIV_RTX_FINE,            WINED3DSIH_DSX_FINE,                      "F",    "F"},
+    {WINED3D_SM5_OP_DERIV_RTY_COARSE,          WINED3DSIH_DSY_COARSE,                    "F",    "F"},
+    {WINED3D_SM5_OP_DERIV_RTY_FINE,            WINED3DSIH_DSY_FINE,                      "F",    "F"},
+    {WINED3D_SM5_OP_DCL_RESOURCE_STRUCTURED,   WINED3DSIH_DCL_RESOURCE_STRUCTURED,       "R",    "U"},
+    {WINED3D_SM5_OP_LD_STRUCTURED,             WINED3DSIH_LD_STRUCTURED,                 "U",    "UUR"},
 };
 
 static const enum wined3d_shader_register_type register_type_table[] =
@@ -968,6 +970,11 @@ static void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct wi
             ins->declaration.semantic.resource_data_type = data_type_table[data_type];
         }
     }
+    else if (opcode == WINED3D_SM5_OP_DCL_RESOURCE_STRUCTURED)
+    {
+        shader_sm4_read_dst_param(priv, &p, WINED3D_DATA_RESOURCE, &ins->declaration.structured_resource.reg);
+        ins->declaration.structured_resource.byte_stride = *p++;
+    }
     else if (opcode == WINED3D_SM4_OP_DCL_CONSTANT_BUFFER)
     {
         shader_sm4_read_src_param(priv, &p, WINED3D_DATA_FLOAT, &ins->declaration.src);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 30f12b3..8ea1415 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -519,6 +519,7 @@ enum WINED3D_SHADER_INSTRUCTION_HANDLER
     WINED3DSIH_DCL_OUTPUT,
     WINED3DSIH_DCL_OUTPUT_SIV,
     WINED3DSIH_DCL_OUTPUT_TOPOLOGY,
+    WINED3DSIH_DCL_RESOURCE_STRUCTURED,
     WINED3DSIH_DCL_SAMPLER,
     WINED3DSIH_DCL_TEMPS,
     WINED3DSIH_DCL_VERTICES_OUT,
@@ -809,6 +810,12 @@ struct wined3d_shader_register_semantic
     enum wined3d_sysval_semantic sysval_semantic;
 };
 
+struct wined3d_shader_structured_resource
+{
+    struct wined3d_shader_dst_param reg;
+    unsigned int byte_stride;
+};
+
 struct wined3d_shader_texel_offset
 {
     signed char u, v, w;
@@ -835,6 +842,7 @@ struct wined3d_shader_instruction
         struct wined3d_shader_src_param src;
         UINT count;
         const struct wined3d_shader_immediate_constant_buffer *icb;
+        struct wined3d_shader_structured_resource structured_resource;
     } declaration;
 };
 
-- 
2.4.10




More information about the wine-patches mailing list