[WINED3D 1/3] Share get_register_code()

Ivan Gyurdiev ivg2 at cornell.edu
Fri Apr 28 04:20:48 CDT 2006


Ivan Gyurdiev wrote:
> [I've started using Git, and those patches are against
>  Mike McCormack's temporary git tree, which incorporates
>  all relevant previously sent changes. ]
>
I'm still learning how this works - apparently Thunderbird corrupts the 
patch if I load the git output as a new mail message. Attached output 
should work better....




-------------- next part --------------
---

 dlls/wined3d/pixelshader.c     |   16 ++++------------
 dlls/wined3d/vertexshader.c    |   25 ++++++++++---------------
 dlls/wined3d/wined3d_private.h |    5 +++++
 3 files changed, 19 insertions(+), 27 deletions(-)

6b5d7d874ef7ef1089bf42ca5780fedcc42b7e1d
diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
index cb14a83..d097242 100644
--- a/dlls/wined3d/pixelshader.c
+++ b/dlls/wined3d/pixelshader.c
@@ -732,7 +732,7 @@ inline static void get_register_name(con
     static const char* rastout_reg_names[] = { "oC0", "oC1", "oC2", "oC3", "oDepth" };
 
     DWORD reg = param & D3DSP_REGNUM_MASK;
-    DWORD regtype = ((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT);
+    DWORD regtype = shader_get_regtype(param);
 
     switch (regtype) {
     case D3DSPR_TEMP:
@@ -944,7 +944,7 @@ inline static void pshader_program_get_r
             int i;
                         
             for (i = 0; i < curOpcode->num_params; ++i) {
-                DWORD regtype = (((*pToken) & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT);
+                DWORD regtype = shader_get_regtype(*pToken);
                 DWORD reg = (*pToken) & D3DSP_REGNUM_MASK;
                 if (D3DSPR_TEXTURE == regtype) 
                     *texUsed |= (1 << reg);
@@ -1545,14 +1545,8 @@ inline static void pshader_program_dump_
   static const char* rastout_reg_names[] = { "oC0", "oC1", "oC2", "oC3", "oDepth" };
   static const char swizzle_reg_chars[] = "rgba";
 
-   /* the unknown mask is for bits not yet accounted for by any other mask... */
-#define UNKNOWN_MASK 0xC000
-
-   /* for registeres about 7 we have to add on bits 11 and 12 to get the correct register */
-#define EXTENDED_REG 0x1800
-
   DWORD reg = param & D3DSP_REGNUM_MASK;
-  DWORD regtype = ((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | ((param & EXTENDED_REG) >> 8);
+  DWORD regtype = shader_get_regtype(param);
 
   if (input) {
     if ( ((param & D3DSP_SRCMOD_MASK) == D3DSPSM_NEG) ||
@@ -1668,9 +1662,7 @@ inline static void pshader_program_dump_
 inline static void pshader_program_dump_decl_usage(
     IWineD3DPixelShaderImpl *This, DWORD decl, DWORD param) {
 
-    DWORD regtype = ((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | 
-                    ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2);
-
+    DWORD regtype = shader_get_regtype(param);
     TRACE("dcl_");
 
     if (regtype == D3DSPR_SAMPLER) {
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 318af15..0d3b8d7 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -554,17 +554,12 @@ CONST SHADER_OPCODE IWineD3DVertexShader
     {0,               NULL,       NULL,   0, NULL,            0, 0}
 };
 
-inline static int vshader_program_get_regtype(const DWORD param) {
-    return (((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) |
-                    ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2));
-}
-
 inline static void vshader_program_dump_param(const DWORD param, int input) {
   static const char* rastout_reg_names[] = { "oPos", "oFog", "oPts" };
   static const char swizzle_reg_chars[] = "xyzw";
 
   DWORD reg = param & D3DSP_REGNUM_MASK;
-  DWORD regtype = vshader_program_get_regtype(param);
+  DWORD regtype = shader_get_regtype(param);
 
   if ((param & D3DSP_SRCMOD_MASK) == D3DSPSM_NEG) TRACE("-");
 
@@ -635,11 +630,11 @@ inline static void vshader_program_dump_
   static const char swizzle_reg_chars[] = "xyzw";
 
   DWORD reg = param & D3DSP_REGNUM_MASK; 
-  DWORD regtype = vshader_program_get_regtype(param);
+  DWORD regtype = shader_get_regtype(param);
 
   if ((param & D3DSP_SRCMOD_MASK) == D3DSPSM_NEG) TRACE("-");
 
-  switch (regtype /*<< D3DSP_REGTYPE_SHIFT*/) {
+  switch (regtype) {
   case D3DSPR_TEMP:
     TRACE("r%lu", reg);
     break;
@@ -718,7 +713,7 @@ inline static void vshader_program_dump_
 
 inline static void vshader_program_dump_decl_usage(
     IWineD3DVertexShaderImpl *This, DWORD decl, DWORD param) {
-    DWORD regtype = vshader_program_get_regtype(param);
+    DWORD regtype = shader_get_regtype(param);
 
     TRACE("dcl_");
 
@@ -864,7 +859,7 @@ inline static void vshader_program_add_p
   static const char* hwrastout_reg_names[] = { "result.position", "result.fogcoord", "result.pointsize" };
 
   DWORD reg = param & D3DSP_REGNUM_MASK;
-  DWORD regtype = vshader_program_get_regtype(param);
+  DWORD regtype = shader_get_regtype(param);
   char  tmpReg[255];
   BOOL is_color = FALSE;
 
@@ -1236,7 +1231,7 @@ inline static VOID IWineD3DVertexShaderI
                 } else {
                     /* Check to see if and tmp or addressing redisters are used */
                     if (curOpcode->num_params > 0) {
-                        regtype = vshader_program_get_regtype(*pToken);
+                        regtype = shader_get_regtype(*pToken);
                         reg = ((*pToken)  & D3DSP_REGNUM_MASK);
                         if (D3DSPR_ADDR == regtype && nUseAddressRegister <= reg) nUseAddressRegister = reg + 1;
                         if (D3DSPR_TEMP == regtype){
@@ -1245,7 +1240,7 @@ inline static VOID IWineD3DVertexShaderI
                         }
                         ++pToken;
                         for (i = 1; i < curOpcode->num_params; ++i) {
-                            regtype = vshader_program_get_regtype(*pToken);
+                            regtype = shader_get_regtype(*pToken);
                             reg = ((*pToken)  & D3DSP_REGNUM_MASK);
                             if (D3DSPR_ADDR == regtype && nUseAddressRegister <= reg) nUseAddressRegister = reg + 1;
                             if (D3DSPR_TEMP == regtype){
@@ -1451,7 +1446,7 @@ inline static VOID IWineD3DVertexShaderI
             continue;
         case D3DSIO_MOV:
             /* Address registers must be loaded with the ARL instruction */
-            if (vshader_program_get_regtype(*pToken) == D3DSPR_ADDR) {
+            if (shader_get_regtype(*pToken) == D3DSPR_ADDR) {
                 if (((*pToken) & D3DSP_REGNUM_MASK) < nUseAddressRegister) {
                     strcpy(tmpLine, "ARL");
                     break;
@@ -1640,9 +1635,9 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
                 /* TRACE(">> execting opcode: pos=%d opcode_name=%s token=%08lX\n", pToken - vshader->function, curOpcode->name, *pToken); */
                 for (i = 0; i < curOpcode->num_params; ++i) {
                     DWORD reg = pToken[i] & D3DSP_REGNUM_MASK;
-                    DWORD regtype = vshader_program_get_regtype(pToken[i]);
+                    DWORD regtype = shader_get_regtype(pToken[i]);
     
-                    switch (regtype /*<< D3DSP_REGTYPE_SHIFT*/) {
+                    switch (regtype) {
                     case D3DSPR_TEMP:
                         /* TRACE("p[%d]=R[%d]\n", i, reg); */
                         p[i] = &R[reg];
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 8e372e5..0be6398 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1216,6 +1216,11 @@ extern const SHADER_OPCODE* shader_get_o
     IWineD3DBaseShader *iface, 
     const DWORD code);
 
+inline static int shader_get_regtype(const DWORD param) {
+    return (((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) |
+            ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2));
+}
+
 /*****************************************************************************
  * IDirect3DBaseShader implementation structure
  */
-- 
1.2.6



More information about the wine-patches mailing list