Ivan Gyurdiev : wined3d: Make register counting pass the same.

Alexandre Julliard julliard at wine.codeweavers.com
Wed May 10 05:22:37 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: aadafd64da53bb39492f88507928e6e486d408c3
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=aadafd64da53bb39492f88507928e6e486d408c3

Author: Ivan Gyurdiev <ivg2 at cornell.edu>
Date:   Tue May  9 18:01:05 2006 -0400

wined3d: Make register counting pass the same.

---

 dlls/wined3d/vertexshader.c |   67 +++++++++++++++++++++----------------------
 1 files changed, 33 insertions(+), 34 deletions(-)

diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 56d322a..122209c 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -1102,12 +1102,6 @@ #endif
     buffer.bsize = 0;
     buffer.lineNo = 0;
 
-    /* Initialise the shader */
-    This->namedArrays = FALSE;
-    This->declaredArrays = FALSE;
-    for (i = 0; i < WINED3DSHADERDECLUSAGE_MAX_USAGE; i++) {
-        This->arrayUsageMap[i] = -1;
-    }
     /* set all the tmpsUsed to not used */
     memset(tmpsUsed, FALSE , sizeof(tmpsUsed));
 
@@ -1144,18 +1138,14 @@ #endif
                     ++pToken;
                 }
             } else {
+       
+                /* Skip declarations, handled earlier */
                 if (curOpcode->opcode == D3DSIO_DCL){
-                    INT usage = *pToken++;
-                    INT arrayNo = (*pToken++ & D3DSP_REGNUM_MASK);
-                    parse_decl_usage(This, usage, arrayNo);
+                    pToken += 2;
+                
+                /* Skip definition of immediate constants, handled later */    
                 } else if(curOpcode->opcode == D3DSIO_DEF) {
-                            This->constantsUsedBitmap[*pToken & 0xFF] = VS_CONSTANT_CONSTANT;
-                            FIXME("Constant %ld\n", *pToken & 0xFF);
-                            ++pToken;
-                            ++pToken;
-                            ++pToken;
-                            ++pToken;
-                            ++pToken;
+                    pToken += 5;
 
                 } else {
                     /* Check to see if and tmp or addressing redisters are used */
@@ -1191,19 +1181,7 @@ #endif
             }
         }
     }
-#if 1
-#define VSHADER_ALWAYS_NUMBERED
-#endif
-
-#ifdef VSHADER_ALWAYS_NUMBERED /* handy for debugging using numbered arrays instead of named arrays */
-    /* TODO: using numbered arrays for software shaders makes things easier */
-    This->declaredArrays = TRUE;
-#endif
 
-    /* named arrays and declared arrays are mutually exclusive */
-    if (This->declaredArrays) {
-        This->namedArrays = FALSE;
-    }
     /* TODO: validate
         nUseAddressRegister < = GL_MAX_PROGRAM_ADDRESS_REGISTERS_AR
         nUseTempRegister    <=  GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB
@@ -1285,6 +1263,7 @@ #endif
                   *(float *) (pToken + 3), 
                   *(float *) (pToken + 4));
 
+            This->constantsUsedBitmap[*pToken & 0xFF] = VS_CONSTANT_CONSTANT;
             pToken += 5;
             continue;
 
@@ -1876,6 +1855,12 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
     DWORD i;
     TRACE("(%p) : Parsing programme\n", This);
 
+    /* Initialise vertex input arrays */
+    This->namedArrays = FALSE;
+    This->declaredArrays = FALSE;
+    for (i = 0; i < WINED3DSHADERDECLUSAGE_MAX_USAGE; i++)
+        This->arrayUsageMap[i] = -1;
+
     if (NULL != pToken) {
         while (D3DVS_END() != *pToken) {
             if (vshader_is_version_token(*pToken)) { /** version */
@@ -1907,12 +1892,16 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
 
             } else {
                 if (curOpcode->opcode == D3DSIO_DCL) {
-                    vshader_program_dump_decl_usage(This, *pToken, *(pToken + 1));
-                    ++pToken;
-                    ++len;
-                    vshader_program_dump_vs_param(*pToken, 0);
-                    ++pToken;
-                    ++len;
+
+                    DWORD usage = *pToken;
+                    DWORD param = *(pToken + 1);
+
+                    parse_decl_usage(This, usage, param & D3DSP_REGNUM_MASK);
+                    vshader_program_dump_decl_usage(This, usage, param);
+                    vshader_program_dump_vs_param(param, 0);
+                    pToken += 2;
+                    len += 2;
+
                 } else 
                     if (curOpcode->opcode == D3DSIO_DEF) {
                         TRACE("def c%lu = ", *pToken & 0xFF);
@@ -1952,6 +1941,16 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
         This->baseShader.functionLength = 1; /* no Function defined use fixed function vertex processing */
     }
 
+/* Handy for debugging using numbered arrays instead of named arrays */
+#if 1
+    /* TODO: using numbered arrays for software shaders makes things easier */
+    This->declaredArrays = TRUE;
+#endif
+
+    /* named arrays and declared arrays are mutually exclusive */
+    if (This->declaredArrays) 
+        This->namedArrays = FALSE;
+
     /* Generate HW shader in needed */
     if (NULL != pFunction  && wined3d_settings.vs_mode == VS_HW) {
 #if 1




More information about the wine-cvs mailing list