[2/6] d3dx9: Use separate opcodes for TEXLDP and TEXLDB.

Matteo Bruni matteo.mystral at gmail.com
Fri May 21 10:06:51 CDT 2010


-------------- next part --------------
From dbd5fd11398082d59c2ac9c5ba5d5382415df143 Mon Sep 17 00:00:00 2001
From: Matteo Bruni <matteo.mystral at gmail.com>
Date: Fri, 21 May 2010 14:56:43 +0200
Subject: d3dx9: Use separate opcodes for TEXLDP and TEXLDB

There is no reason we have to strictly follow D3D bytecode format in our
intermediate representation.
---
 dlls/d3dx9_36/asmshader.y        |    4 ++--
 dlls/d3dx9_36/asmutils.c         |    8 ++++----
 dlls/d3dx9_36/bytecodewriter.c   |    4 ++--
 dlls/d3dx9_36/d3dx9_36_private.h |    5 ++---
 4 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/dlls/d3dx9_36/asmshader.y b/dlls/d3dx9_36/asmshader.y
index 0949ee3..8be8328 100644
--- a/dlls/d3dx9_36/asmshader.y
+++ b/dlls/d3dx9_36/asmshader.y
@@ -724,12 +724,12 @@ instruction:          INSTR_ADD omods dreg ',' sregs
                     | INSTR_TEXLDP omods dreg ',' sregs
                             {
                                 TRACE("TEXLDP\n");
-                                asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ), $2.mod, $2.shift, 0, &$3, &$5, 2);
+                                asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEXLDP, $2.mod, $2.shift, 0, &$3, &$5, 2);
                             }
                     | INSTR_TEXLDB omods dreg ',' sregs
                             {
                                 TRACE("TEXLDB\n");
-                                asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ), $2.mod, $2.shift, 0, &$3, &$5, 2);
+                                asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEXLDB, $2.mod, $2.shift, 0, &$3, &$5, 2);
                             }
                     | INSTR_DSX omods dreg ',' sregs
                             {
diff --git a/dlls/d3dx9_36/asmutils.c b/dlls/d3dx9_36/asmutils.c
index e000a5f..bd6bcea 100644
--- a/dlls/d3dx9_36/asmutils.c
+++ b/dlls/d3dx9_36/asmutils.c
@@ -209,8 +209,8 @@ DWORD d3d9_opcode(DWORD bwriter_opcode) {
         case BWRITERSIO_COMMENT:     return D3DSIO_COMMENT;
         case BWRITERSIO_END:         return D3DSIO_END;
 
-        case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ):                    return D3DSIO_TEX | D3DSI_TEXLD_PROJECT;
-        case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ):                       return D3DSIO_TEX | D3DSI_TEXLD_BIAS;
+        case BWRITERSIO_TEXLDP:      return D3DSIO_TEX | D3DSI_TEXLD_PROJECT;
+        case BWRITERSIO_TEXLDB:      return D3DSIO_TEX | D3DSI_TEXLD_BIAS;
 
         default:
             FIXME("Unhandled BWRITERSIO token %u\n", bwriter_opcode);
@@ -484,8 +484,8 @@ const char *debug_print_opcode(DWORD opcode) {
         case BWRITERSIO_TEXLDL:       return "texldl";
         case BWRITERSIO_BREAKP:       return "breakp";
 
-        case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ):                     return "texldp";
-        case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ):                        return "texldb";
+        case BWRITERSIO_TEXLDP:       return "texldp";
+        case BWRITERSIO_TEXLDB:       return "texldb";
 
         default:                      return "unknown";
     }
diff --git a/dlls/d3dx9_36/bytecodewriter.c b/dlls/d3dx9_36/bytecodewriter.c
index 464ec52..a579ae8 100644
--- a/dlls/d3dx9_36/bytecodewriter.c
+++ b/dlls/d3dx9_36/bytecodewriter.c
@@ -693,8 +693,8 @@ static const struct instr_handler_table ps_3_handlers[] = {
     {BWRITERSIO_TEXLDL,         instr_handler},
 
     {BWRITERSIO_TEX,            instr_handler},
-    {BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ),                       instr_handler},
-    {BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ),                          instr_handler},
+    {BWRITERSIO_TEXLDP,         instr_handler},
+    {BWRITERSIO_TEXLDB,         instr_handler},
     {BWRITERSIO_TEXKILL,        instr_handler},
     {BWRITERSIO_DSX,            instr_handler},
     {BWRITERSIO_DSY,            instr_handler},
diff --git a/dlls/d3dx9_36/d3dx9_36_private.h b/dlls/d3dx9_36/d3dx9_36_private.h
index 923a0df..248503d 100644
--- a/dlls/d3dx9_36/d3dx9_36_private.h
+++ b/dlls/d3dx9_36/d3dx9_36_private.h
@@ -462,6 +462,8 @@ typedef enum _BWRITERSHADER_INSTRUCTION_OPCODE_TYPE {
     BWRITERSIO_SETP,
     BWRITERSIO_TEXLDL,
     BWRITERSIO_BREAKP,
+    BWRITERSIO_TEXLDP,
+    BWRITERSIO_TEXLDB,
 
     BWRITERSIO_COMMENT,
     BWRITERSIO_END,
@@ -589,9 +591,6 @@ typedef enum _BWRITERDECLUSAGE {
     BWRITERDECLUSAGE_SAMPLE
 } BWRITERDECLUSAGE;
 
-#define BWRITER_OPCODESPECIFICCONTROL_SHIFT     16
-#define BWRITER_OPCODESPECIFICCONTROL_MASK      (0xff << BWRITER_OPCODESPECIFICCONTROL_SHIFT)
-
 struct bwriter_shader *SlAssembleShader(const char *text, char **messages);
 DWORD SlWriteBytecode(const struct bwriter_shader *shader, int dxversion, DWORD **result);
 void SlDeleteShader(struct bwriter_shader *shader);
-- 
1.6.4.4


More information about the wine-patches mailing list