Henri Verbeet : wined3d: Recognize the SM4 sample_l opcode.

Alexandre Julliard julliard at winehq.org
Mon Oct 11 13:15:15 CDT 2010


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Oct 11 13:06:18 2010 +0200

wined3d: Recognize the SM4 sample_l opcode.

---

 dlls/wined3d/arb_program_shader.c |    1 +
 dlls/wined3d/glsl_shader.c        |    1 +
 dlls/wined3d/shader.c             |    1 +
 dlls/wined3d/shader_sm4.c         |  122 +++++++++++++++++++------------------
 dlls/wined3d/wined3d_private.h    |    1 +
 5 files changed, 66 insertions(+), 60 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 46462a3..e4eb02a 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -4996,6 +4996,7 @@ static const SHADER_HANDLER shader_arb_instruction_handler_table[WINED3DSIH_TABL
     /* WINED3DSIH_RET           */ shader_hw_ret,
     /* WINED3DSIH_RSQ           */ shader_hw_scalar_op,
     /* WINED3DSIH_SAMPLE        */ NULL,
+    /* WINED3DSIH_SAMPLE_LOD    */ NULL,
     /* WINED3DSIH_SETP          */ NULL,
     /* WINED3DSIH_SGE           */ shader_hw_map2gl,
     /* WINED3DSIH_SGN           */ shader_hw_sgn,
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 3efff9a..fd0b853 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -5054,6 +5054,7 @@ static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TAB
     /* WINED3DSIH_RET           */ shader_glsl_ret,
     /* WINED3DSIH_RSQ           */ shader_glsl_rsq,
     /* WINED3DSIH_SAMPLE        */ NULL,
+    /* WINED3DSIH_SAMPLE_LOD    */ NULL,
     /* WINED3DSIH_SETP          */ NULL,
     /* WINED3DSIH_SGE           */ shader_glsl_compare,
     /* WINED3DSIH_SGN           */ shader_glsl_sgn,
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index ff967ce..b7f9a91 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -100,6 +100,7 @@ static const char * const shader_opcode_names[] =
     /* WINED3DSIH_RET           */ "ret",
     /* WINED3DSIH_RSQ           */ "rsq",
     /* WINED3DSIH_SAMPLE        */ "sample",
+    /* WINED3DSIH_SAMPLE_LOD    */ "sample_l",
     /* WINED3DSIH_SETP          */ "setp",
     /* WINED3DSIH_SGE           */ "sge",
     /* WINED3DSIH_SGN           */ "sgn",
diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index f706b5a..9a02830 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -48,36 +48,37 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
 
 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_DP3      = 0x10,
-    WINED3D_SM4_OP_DP4      = 0x11,
-    WINED3D_SM4_OP_EMIT     = 0x13,
-    WINED3D_SM4_OP_ENDIF    = 0x15,
-    WINED3D_SM4_OP_ENDLOOP  = 0x16,
-    WINED3D_SM4_OP_EXP      = 0x19,
-    WINED3D_SM4_OP_FRC      = 0x1a,
-    WINED3D_SM4_OP_IADD     = 0x1e,
-    WINED3D_SM4_OP_IF       = 0x1f,
-    WINED3D_SM4_OP_IGE      = 0x21,
-    WINED3D_SM4_OP_IMUL     = 0x26,
-    WINED3D_SM4_OP_ITOF     = 0x2b,
-    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_MOV      = 0x36,
-    WINED3D_SM4_OP_MOVC     = 0x37,
-    WINED3D_SM4_OP_MUL      = 0x38,
-    WINED3D_SM4_OP_RET      = 0x3e,
-    WINED3D_SM4_OP_RSQ      = 0x44,
-    WINED3D_SM4_OP_SAMPLE   = 0x45,
-    WINED3D_SM4_OP_SINCOS   = 0x4d,
+    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_DP3          = 0x10,
+    WINED3D_SM4_OP_DP4          = 0x11,
+    WINED3D_SM4_OP_EMIT         = 0x13,
+    WINED3D_SM4_OP_ENDIF        = 0x15,
+    WINED3D_SM4_OP_ENDLOOP      = 0x16,
+    WINED3D_SM4_OP_EXP          = 0x19,
+    WINED3D_SM4_OP_FRC          = 0x1a,
+    WINED3D_SM4_OP_IADD         = 0x1e,
+    WINED3D_SM4_OP_IF           = 0x1f,
+    WINED3D_SM4_OP_IGE          = 0x21,
+    WINED3D_SM4_OP_IMUL         = 0x26,
+    WINED3D_SM4_OP_ITOF         = 0x2b,
+    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_MOV          = 0x36,
+    WINED3D_SM4_OP_MOVC         = 0x37,
+    WINED3D_SM4_OP_MUL          = 0x38,
+    WINED3D_SM4_OP_RET          = 0x3e,
+    WINED3D_SM4_OP_RSQ          = 0x44,
+    WINED3D_SM4_OP_SAMPLE       = 0x45,
+    WINED3D_SM4_OP_SAMPLE_LOD   = 0x48,
+    WINED3D_SM4_OP_SINCOS       = 0x4d,
 };
 
 enum wined3d_sm4_register_type
@@ -120,36 +121,37 @@ struct sysval_map
 
 static const struct wined3d_sm4_opcode_info opcode_table[] =
 {
-    {WINED3D_SM4_OP_ADD,    WINED3DSIH_ADD,         1,  2},
-    {WINED3D_SM4_OP_AND,    WINED3DSIH_AND,         1,  2},
-    {WINED3D_SM4_OP_BREAK,  WINED3DSIH_BREAK,       0,  0},
-    {WINED3D_SM4_OP_BREAKC, WINED3DSIH_BREAKP,      0,  1},
-    {WINED3D_SM4_OP_CUT,    WINED3DSIH_CUT,         0,  0},
-    {WINED3D_SM4_OP_DP3,    WINED3DSIH_DP3,         1,  2},
-    {WINED3D_SM4_OP_DP4,    WINED3DSIH_DP4,         1,  2},
-    {WINED3D_SM4_OP_EMIT,   WINED3DSIH_EMIT,        0,  0},
-    {WINED3D_SM4_OP_ENDIF,  WINED3DSIH_ENDIF,       0,  0},
-    {WINED3D_SM4_OP_ENDLOOP,WINED3DSIH_ENDLOOP,     0,  0},
-    {WINED3D_SM4_OP_EXP,    WINED3DSIH_EXP,         1,  1},
-    {WINED3D_SM4_OP_FRC,    WINED3DSIH_FRC,         1,  1},
-    {WINED3D_SM4_OP_IADD,   WINED3DSIH_IADD,        1,  2},
-    {WINED3D_SM4_OP_IF,     WINED3DSIH_IF,          0,  1},
-    {WINED3D_SM4_OP_IGE,    WINED3DSIH_IGE,         1,  2},
-    {WINED3D_SM4_OP_IMUL,   WINED3DSIH_IMUL,        2,  2},
-    {WINED3D_SM4_OP_ITOF,   WINED3DSIH_ITOF,        1,  1},
-    {WINED3D_SM4_OP_LOG,    WINED3DSIH_LOG,         1,  1},
-    {WINED3D_SM4_OP_LOOP,   WINED3DSIH_LOOP,        0,  0},
-    {WINED3D_SM4_OP_LT,     WINED3DSIH_LT,          1,  2},
-    {WINED3D_SM4_OP_MAD,    WINED3DSIH_MAD,         1,  3},
-    {WINED3D_SM4_OP_MIN,    WINED3DSIH_MIN,         1,  2},
-    {WINED3D_SM4_OP_MAX,    WINED3DSIH_MAX,         1,  2},
-    {WINED3D_SM4_OP_MOV,    WINED3DSIH_MOV,         1,  1},
-    {WINED3D_SM4_OP_MOVC,   WINED3DSIH_MOVC,        1,  3},
-    {WINED3D_SM4_OP_MUL,    WINED3DSIH_MUL,         1,  2},
-    {WINED3D_SM4_OP_RET,    WINED3DSIH_RET,         0,  0},
-    {WINED3D_SM4_OP_RSQ,    WINED3DSIH_RSQ,         1,  1},
-    {WINED3D_SM4_OP_SAMPLE, WINED3DSIH_SAMPLE,      1,  3},
-    {WINED3D_SM4_OP_SINCOS, WINED3DSIH_SINCOS,      2,  1},
+    {WINED3D_SM4_OP_ADD,        WINED3DSIH_ADD,         1,  2},
+    {WINED3D_SM4_OP_AND,        WINED3DSIH_AND,         1,  2},
+    {WINED3D_SM4_OP_BREAK,      WINED3DSIH_BREAK,       0,  0},
+    {WINED3D_SM4_OP_BREAKC,     WINED3DSIH_BREAKP,      0,  1},
+    {WINED3D_SM4_OP_CUT,        WINED3DSIH_CUT,         0,  0},
+    {WINED3D_SM4_OP_DP3,        WINED3DSIH_DP3,         1,  2},
+    {WINED3D_SM4_OP_DP4,        WINED3DSIH_DP4,         1,  2},
+    {WINED3D_SM4_OP_EMIT,       WINED3DSIH_EMIT,        0,  0},
+    {WINED3D_SM4_OP_ENDIF,      WINED3DSIH_ENDIF,       0,  0},
+    {WINED3D_SM4_OP_ENDLOOP,    WINED3DSIH_ENDLOOP,     0,  0},
+    {WINED3D_SM4_OP_EXP,        WINED3DSIH_EXP,         1,  1},
+    {WINED3D_SM4_OP_FRC,        WINED3DSIH_FRC,         1,  1},
+    {WINED3D_SM4_OP_IADD,       WINED3DSIH_IADD,        1,  2},
+    {WINED3D_SM4_OP_IF,         WINED3DSIH_IF,          0,  1},
+    {WINED3D_SM4_OP_IGE,        WINED3DSIH_IGE,         1,  2},
+    {WINED3D_SM4_OP_IMUL,       WINED3DSIH_IMUL,        2,  2},
+    {WINED3D_SM4_OP_ITOF,       WINED3DSIH_ITOF,        1,  1},
+    {WINED3D_SM4_OP_LOG,        WINED3DSIH_LOG,         1,  1},
+    {WINED3D_SM4_OP_LOOP,       WINED3DSIH_LOOP,        0,  0},
+    {WINED3D_SM4_OP_LT,         WINED3DSIH_LT,          1,  2},
+    {WINED3D_SM4_OP_MAD,        WINED3DSIH_MAD,         1,  3},
+    {WINED3D_SM4_OP_MIN,        WINED3DSIH_MIN,         1,  2},
+    {WINED3D_SM4_OP_MAX,        WINED3DSIH_MAX,         1,  2},
+    {WINED3D_SM4_OP_MOV,        WINED3DSIH_MOV,         1,  1},
+    {WINED3D_SM4_OP_MOVC,       WINED3DSIH_MOVC,        1,  3},
+    {WINED3D_SM4_OP_MUL,        WINED3DSIH_MUL,         1,  2},
+    {WINED3D_SM4_OP_RET,        WINED3DSIH_RET,         0,  0},
+    {WINED3D_SM4_OP_RSQ,        WINED3DSIH_RSQ,         1,  1},
+    {WINED3D_SM4_OP_SAMPLE,     WINED3DSIH_SAMPLE,      1,  3},
+    {WINED3D_SM4_OP_SAMPLE_LOD, WINED3DSIH_SAMPLE_LOD,  1,  4},
+    {WINED3D_SM4_OP_SINCOS,     WINED3DSIH_SINCOS,      2,  1},
 };
 
 static const WINED3DSHADER_PARAM_REGISTER_TYPE register_type_table[] =
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 7af33ac..3e2596e 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -468,6 +468,7 @@ enum WINED3D_SHADER_INSTRUCTION_HANDLER
     WINED3DSIH_RET,
     WINED3DSIH_RSQ,
     WINED3DSIH_SAMPLE,
+    WINED3DSIH_SAMPLE_LOD,
     WINED3DSIH_SETP,
     WINED3DSIH_SGE,
     WINED3DSIH_SGN,




More information about the wine-cvs mailing list