[WINED3D 1/9] The namedArrays code path is dead (always FALSE).

Ivan Gyurdiev ivg231 at gmail.com
Mon Jun 12 01:51:58 CDT 2006


The following patchset applies on top of Jason Green's D3DSIO_DEF patch.
========

The declaredArrays code path is always TRUE.

This patch deletes the entire namedArrays code path and all its 
dependencies (one of which is quite long - storeOrder in drawprim is 
always FALSE, for example). It deletes declaredArrays, and makes its 
code path the default.

This simplifies a lot of code, which is a good thing. As far as I 
understand, we should be able to do everything that named arrays can do 
with generic attribute arrays.

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

 dlls/wined3d/baseshader.c      |   23 ++++----
 dlls/wined3d/drawprim.c        |   68 +++++++++-------------
 dlls/wined3d/glsl_shader.c     |    8 ---
 dlls/wined3d/vertexshader.c    |  121 +---------------------------------------
 dlls/wined3d/wined3d_private.h |    6 +-
 5 files changed, 43 insertions(+), 183 deletions(-)

a1133655c6f2322b0986f7f495b3e89e411db680
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 47e1ba8..f62b71c 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -685,6 +685,12 @@ void generate_base_shader(
                 FIXME("Unrecognized opcode: token=%08lX\n", opcode_token);
                 pToken += shader_skip_unrecognized(iface, pToken); 
 
+            /* Nothing to do */
+            } else if (D3DSIO_DCL == curOpcode->opcode ||
+                       D3DSIO_NOP == curOpcode->opcode) {
+
+                pToken += shader_skip_opcode(This, curOpcode, opcode_token);
+
             /* If a generator function is set for current shader target, use it */
             } else if (hw_fct != NULL) {
 
@@ -694,12 +700,7 @@ void generate_base_shader(
 
                     DWORD param, addr_token = 0;
 
-                    /* DCL instruction has usage dst parameter, not register */
-                    if (curOpcode->opcode == D3DSIO_DCL)
-                        param = *pToken++;
-                    else
-                        pToken += shader_get_param(iface, pToken, &param, &addr_token);
-
+                    pToken += shader_get_param(iface, pToken, &param, &addr_token);
                     hw_arg.dst = param;
                     hw_arg.dst_addr = addr_token;
 
@@ -724,13 +725,11 @@ void generate_base_shader(
                 /* Call appropriate function for output target */
                 hw_fct(&hw_arg);
 
+            /* Unhandled opcode */
             } else {
 
-                /* Unless we encounter a no-op command, this opcode is unrecognized */
-                if (curOpcode->opcode != D3DSIO_NOP) {
-                    FIXME("Can't handle opcode %s in hwShader\n", curOpcode->name);
-                    pToken += shader_skip_opcode(This, curOpcode, opcode_token);
-                }
+                FIXME("Can't handle opcode %s in hwShader\n", curOpcode->name);
+                pToken += shader_skip_opcode(This, curOpcode, opcode_token);
             }
         }
         /* TODO: What about result.depth? */
@@ -763,7 +762,7 @@ void shader_dump_ins_modifiers(const DWO
         FIXME("_unrecognized_modifier(%#lx)", mmask >> D3DSP_DSTMOD_SHIFT);
 }
 
-/** Process the D3DSIO_DCL opcode into an ARB string - creates a local vec4
+/** Process the D3DSIO_DEF opcode into an ARB string - creates a local vec4
  * float constant, and stores it's usage on the regmaps. */
 void shader_hw_def(SHADER_OPCODE_ARG* arg) {
 
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index b3c719b..6c6e526 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -315,7 +315,13 @@ static BOOL primitiveInitState(IWineD3DD
     return isLightingOn;
 }
 
-void primitiveDeclarationConvertToStridedData(IWineD3DDevice *iface, BOOL useVertexShaderFunction, WineDirect3DVertexStridedData *strided, LONG BaseVertexIndex, DWORD *fvf, BOOL storeOrder, INT arrayUsageMap[WINED3DSHADERDECLUSAGE_MAX_USAGE]) {
+void primitiveDeclarationConvertToStridedData(
+     IWineD3DDevice *iface,
+     BOOL useVertexShaderFunction,
+     WineDirect3DVertexStridedData *strided,
+     LONG BaseVertexIndex, 
+     DWORD *fvf) {
+
      /* We need to deal with frequency data!*/
 
     int           textureNo =0;
@@ -374,7 +380,6 @@ void primitiveDeclarationConvertToStride
                     strided->u.s.position.dwType    = element->Type;
                     strided->u.s.position.dwStride  = stride;
                     TRACE("Set strided %s. data %p, type %d. stride %ld\n", "position", data, element->Type, stride);
-                    if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITION] = element->Reg;
                 break;
                 case 1: /* tweened see http://www.gamedev.net/reference/articles/article2017.asp */
                     TRACE("Tweened positions\n");
@@ -382,7 +387,6 @@ void primitiveDeclarationConvertToStride
                     strided->u.s.position2.dwType    = element->Type;
                     strided->u.s.position2.dwStride  = stride;
                     TRACE("Set strided %s. data %p, type %d. stride %ld\n", "position2", data, element->Type, stride);
-                    if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITION2] = element->Reg;
                 break;
                 }
         break;
@@ -393,7 +397,6 @@ void primitiveDeclarationConvertToStride
                     strided->u.s.normal.dwType    = element->Type;
                     strided->u.s.normal.dwStride  = stride;
                     TRACE("Set strided %s. data %p, type %d. stride %ld\n", "normal", data, element->Type, stride);
-                    if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_NORMAL] = element->Reg;
                 break;
                 case 1: /* skinning */
                     TRACE("Skinning / tween normals\n");
@@ -401,7 +404,6 @@ void primitiveDeclarationConvertToStride
                     strided->u.s.normal2.dwType    = element->Type;
                     strided->u.s.normal2.dwStride  = stride;
                     TRACE("Set strided %s. data %p, type %d. stride %ld\n", "normal2", data, element->Type, stride);
-                    if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_NORMAL2] = element->Reg;
                 break;
                 }
                 *fvf |=  D3DFVF_NORMAL;
@@ -414,21 +416,18 @@ void primitiveDeclarationConvertToStride
             strided->u.s.blendMatrixIndices.dwType  = element->Type;
             strided->u.s.blendMatrixIndices.dwStride= stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "blendMatrixIndices", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_BLENDINDICES] = element->Reg;
         break;
         case D3DDECLUSAGE_BLENDWEIGHT:
             strided->u.s.blendWeights.lpData        = data;
             strided->u.s.blendWeights.dwType        = element->Type;
             strided->u.s.blendWeights.dwStride      = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "blendWeights", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_BLENDWEIGHT] = element->Reg;
         break;
         case D3DDECLUSAGE_PSIZE:
             strided->u.s.pSize.lpData               = data;
             strided->u.s.pSize.dwType               = element->Type;
             strided->u.s.pSize.dwStride             = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "pSize", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_PSIZE] = element->Reg;
         break;
         case D3DDECLUSAGE_COLOR:
         switch (element->UsageIndex) {
@@ -437,14 +436,12 @@ void primitiveDeclarationConvertToStride
             strided->u.s.diffuse.dwType             = element->Type;
             strided->u.s.diffuse.dwStride           = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "diffuse", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_DIFFUSE] = element->Reg;
         break;
         case 1: /* specular */
             strided->u.s.specular.lpData            = data;
             strided->u.s.specular.dwType            = element->Type;
             strided->u.s.specular.dwStride          = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "specular", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_SPECULAR] = element->Reg;
 
         }
 
@@ -457,7 +454,6 @@ void primitiveDeclarationConvertToStride
             strided->u.s.texCoords[textureNo].dwType    = element->Type;
             strided->u.s.texCoords[textureNo].dwStride  = stride;
             TRACE("Set strided %s.%d data %p, type %d. stride %ld\n", "texCoords", textureNo, data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_TEXCOORD0 + textureNo] = element->Reg;
 
             ++textureNo;
         break;
@@ -470,7 +466,6 @@ void primitiveDeclarationConvertToStride
             strided->u.s.tangent.dwType   = element->Type;
             strided->u.s.tangent.dwStride = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "tangent", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_TANGENT] = element->Reg;
         break;
         case D3DDECLUSAGE_BINORMAL:
         /* Binormals are really bitangents perpendicular to the normal but s-aligned to the tangent, basically they are the vectors of any two lines on the plain at right angles to the normal and at right angles to each other, like the x,y,z axis.
@@ -482,7 +477,6 @@ void primitiveDeclarationConvertToStride
             strided->u.s.binormal.dwType   = element->Type;
             strided->u.s.binormal.dwStride = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "binormal", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_BINORMAL] = element->Reg;
         break;
         case D3DDECLUSAGE_TESSFACTOR:
         /* a google for D3DDECLUSAGE_TESSFACTOR turns up a whopping 36 entries, 7 of which are from MSDN.
@@ -492,7 +486,6 @@ void primitiveDeclarationConvertToStride
             strided->u.s.tessFactor.dwType   = element->Type;
             strided->u.s.tessFactor.dwStride = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "tessFactor", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_TESSFACTOR] = element->Reg;
         break;
         case D3DDECLUSAGE_POSITIONT:
 
@@ -502,7 +495,6 @@ void primitiveDeclarationConvertToStride
                     strided->u.s.position.dwType    = element->Type;
                     strided->u.s.position.dwStride  = stride;
                     TRACE("Set strided %s. data %p, type %d. stride %ld\n", "positionT", data, element->Type, stride);
-                    if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITIONT] = element->Reg;
                 break;
                 case 1: /* skinning */
                         /* see http://rsn.gamedev.net/tutorials/ms3danim.asp
@@ -513,7 +505,6 @@ void primitiveDeclarationConvertToStride
                     strided->u.s.position2.dwType    = element->Type;
                     strided->u.s.position2.dwStride  = stride;
                     TRACE("Set strided %s. data %p, type %d. stride %ld\n", "position2T", data, element->Type, stride);
-                    if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITIONT2] = element->Reg;
                 break;
                 }
                 /* TODO: change fvf usage to a plain boolean flag */
@@ -533,7 +524,6 @@ void primitiveDeclarationConvertToStride
             strided->u.s.fog.dwType   = element->Type;
             strided->u.s.fog.dwStride = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "fog", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_FOG] = element->Reg;
         break;
         case D3DDECLUSAGE_DEPTH:
             TRACE("depth\n");
@@ -541,7 +531,6 @@ void primitiveDeclarationConvertToStride
             strided->u.s.depth.dwType   = element->Type;
             strided->u.s.depth.dwStride = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "depth", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_DEPTH] = element->Reg;
             break;
         case D3DDECLUSAGE_SAMPLE: /* VertexShader textures */
             TRACE("depth\n");
@@ -549,7 +538,6 @@ void primitiveDeclarationConvertToStride
             strided->u.s.sample.dwType   = element->Type;
             strided->u.s.sample.dwStride = stride;
             TRACE("Set strided %s. data %p, type %d. stride %ld\n", "sample", data, element->Type, stride);
-            if (storeOrder) arrayUsageMap[WINED3DSHADERDECLUSAGE_SAMPLE] = element->Reg;
         break;
         };
 
@@ -1897,22 +1885,21 @@ #if 0/* TODO: Vertex fixups (diffuse and
         fixupVertices(This, dataLocations, &transformedDataLocations, 1 + endStride - startStride, startStride);
 #endif
 
-         /* vertex shaders */
-
         /* If the only vertex data used by the shader is supported by OpenGL then*/
-        if ((!useVertexShaderFunction  && dataLocations->u.s.pSize.lpData == NULL
-                && dataLocations->u.s.diffuse.lpData == NULL  && dataLocations->u.s.specular.lpData == NULL) 
-                || (useVertexShaderFunction && ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->namedArrays && !((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->declaredArrays)) {
+        if (!useVertexShaderFunction &&
+             dataLocations->u.s.pSize.lpData == NULL &&
+             dataLocations->u.s.diffuse.lpData == NULL &&
+             dataLocations->u.s.specular.lpData == NULL) {
 
             /* Load the vertex data using named arrays */
             TRACE("(%p) Loading vertex data\n", This);
             loadVertexData(iface, dataLocations);
 
-        } else /* Otherwise */
-            if(useVertexShaderFunction && ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->declaredArrays) {
+        } else if(useVertexShaderFunction) {
 
             /* load the array data using ordinal mapping */
-            loadNumberedArrays(iface, dataLocations, ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->arrayUsageMap);
+            loadNumberedArrays(iface, dataLocations, 
+                ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->arrayUsageMap);
 
         } else { /* If this happens we must drawStridedSlow later on */ 
 		TRACE("Not loading vertex data\n");
@@ -1992,18 +1979,16 @@ #endif
         /* Cleanup vertex program */
         if (useVertexShaderFunction) {
             /* disable any attribs (this is the same for both GLSL and ARB modes) */
-            if(((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->declaredArrays) {
-                GLint maxAttribs;
-                int i;
-                /* Leave all the attribs disabled */
-                glGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &maxAttribs);
-                /* MESA does not support it right not */
-                if (glGetError() != GL_NO_ERROR)
-                    maxAttribs = 16;
-                for (i = 0; i < maxAttribs; ++i) {
-                    GL_EXTCALL(glDisableVertexAttribArrayARB(i));
-                    checkGLcall("glDisableVertexAttribArrayARB(reg);");
-                }
+            GLint maxAttribs;
+            int i;
+            /* Leave all the attribs disabled */
+            glGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &maxAttribs);
+            /* MESA does not support it right not */
+            if (glGetError() != GL_NO_ERROR)
+                maxAttribs = 16;
+            for (i = 0; i < maxAttribs; ++i) {
+                GL_EXTCALL(glDisableVertexAttribArrayARB(i));
+                checkGLcall("glDisableVertexAttribArrayARB(reg);");
             }
 
             if (wined3d_settings.shader_mode == SHADER_ARB)
@@ -2213,7 +2198,6 @@ void drawPrimitive(IWineD3DDevice *iface
         dataLocations = DrawPrimStrideData;
     }
     else if (This->stateBlock->vertexDecl != NULL || (useVertexShaderFunction  && NULL != ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->vertexDeclaration)) {
-        BOOL storeArrays = useVertexShaderFunction && ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->declaredArrays == FALSE && ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->namedArrays == FALSE;
 
         TRACE("================ Vertex Declaration  ===================\n");
         dataLocations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*dataLocations));
@@ -2221,8 +2205,8 @@ void drawPrimitive(IWineD3DDevice *iface
             ERR("Out of memory!\n");
             return;
         }
-        primitiveDeclarationConvertToStridedData(iface, useVertexShaderFunction, dataLocations, StartVertexIndex, &fvf, storeArrays,
-        ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->arrayUsageMap);
+        primitiveDeclarationConvertToStridedData(iface, useVertexShaderFunction, dataLocations, StartVertexIndex, &fvf);
+
     } else {
         TRACE("================ FVF ===================\n");
         dataLocations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*dataLocations));
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 65edd3a..92f6851 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -186,13 +186,7 @@ static void shader_glsl_get_register_nam
                 || reg == vshader->arrayUsageMap[WINED3DSHADERDECLUSAGE_SPECULAR]) {
                 (*is_color) = TRUE;
             }
-            /* if the attributes come in as named dcl's then use a named vertex (called namedVertexN) */
-            if (vshader->namedArrays) {
-                sprintf(tmpStr, "namedVertex%lu", reg);
-            } else {
-            /* otherwise the input is on a numbered attribute so use opengl numbered attributes */
-                sprintf(tmpStr, "attrib%lu", reg);
-            }
+            sprintf(tmpStr, "attrib%lu", reg);
         } 
         break;
     case D3DSPR_CONST:
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index e7868dc..dd066c3 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -475,7 +475,6 @@ static void vshader_texldl(WINED3DSHADER
 
 /* Prototype */
 static void vshader_hw_map2gl(SHADER_OPCODE_ARG* arg);
-static void vshader_hw_dcl(SHADER_OPCODE_ARG* arg);
 static void vshader_hw_mnxn(SHADER_OPCODE_ARG* arg);
 
 /**
@@ -535,7 +534,7 @@ CONST SHADER_OPCODE IWineD3DVertexShader
     {D3DSIO_M3x2, "m3x2", "undefined", 3, vshader_m3x2, vshader_hw_mnxn, shader_glsl_mnxn, 0, 0},
 
     /* Declare registers */
-    {D3DSIO_DCL,      "dcl",      NULL,                  2, vshader_dcl,     vshader_hw_dcl, NULL, 0, 0},
+    {D3DSIO_DCL,      "dcl",      NULL,                  2, vshader_dcl,     NULL, NULL, 0, 0},
 
     /* Constant definitions */
     {D3DSIO_DEF,      "def",      NULL,                  5, vshader_def,     shader_hw_def, shader_glsl_def, 0, 0},
@@ -654,13 +653,7 @@ inline static void vshader_program_add_p
         || reg == This->arrayUsageMap[WINED3DSHADERDECLUSAGE_SPECULAR]) {
         is_color = TRUE;
     }
-    /* if the attributes come in as named dcl's then use a named vertex (called namedVertexN) */
-    if (This->namedArrays) {
-        sprintf(tmpReg, "namedVertex%lu", reg);
-    } else {
-    /* otherwise the input is on a numbered attribute so use opengl numbered attributes */
-        sprintf(tmpReg, "vertex.attrib[%lu]", reg);
-    }
+    sprintf(tmpReg, "vertex.attrib[%lu]", reg);
     strcat(hwLine, tmpReg);
     break;
   case D3DSPR_CONST:
@@ -714,7 +707,6 @@ static void vshader_parse_input_decl_usa
             if((usage & 0xF0000) >> 16 == 0) { /* tween data */
                 TRACE("Setting position to %d\n", arrayNo);
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITION]     = arrayNo;
-                This->namedArrays = TRUE;
             } else {
                 /* TODO: position indexes go from 0-8!!*/
                 TRACE("Setting position 2 to %d because usage = %d\n", arrayNo, (usage & 0xF0000) >> 16);
@@ -723,52 +715,43 @@ static void vshader_parse_input_decl_usa
                     TRACE("Loaded for position %d (greater than 2)\n", (usage & 0xF0000) >> 16);
                 }
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITION2 + ((usage & 0xF0000) >> 16) -1] = arrayNo;
-                This->declaredArrays = TRUE;
             }
         break;
         case D3DDECLUSAGE_BLENDINDICES:
             /* not supported by openGL */
             TRACE("Setting BLENDINDICES to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_BLENDINDICES] = arrayNo;
-            This->declaredArrays = TRUE;
             if ((usage & 0xF0000) >> 16 != 0) FIXME("Extended BLENDINDICES\n");
         break;
         case D3DDECLUSAGE_BLENDWEIGHT:
             TRACE("Setting BLENDWEIGHT to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_BLENDWEIGHT]  = arrayNo;
-            This->namedArrays = TRUE;
             if ((usage & 0xF0000) >> 16 != 0) FIXME("Extended blend weights\n");
         break;
         case D3DDECLUSAGE_NORMAL:
             if((usage & 0xF0000) >> 16 == 0) { /* tween data */
                 TRACE("Setting normal to %d\n", arrayNo);
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_NORMAL]   = arrayNo;
-                This->namedArrays = TRUE;
             } else {
                 TRACE("Setting normal 2 to %d because usage = %d\n", arrayNo, (usage & 0xF0000) >> 16);
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_NORMAL2]   = arrayNo;
-                This->declaredArrays = TRUE;
             }
         break;
         case D3DDECLUSAGE_PSIZE:
             TRACE("Setting PSIZE to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_PSIZE]        = arrayNo;
-            This->namedArrays = TRUE;
             if ((usage & 0xF0000) >> 16 != 0) FIXME("Extended PSIZE\n");
         break;
         case D3DDECLUSAGE_COLOR:
             if((usage & 0xF0000) >> 16 == 0)  {
                 TRACE("Setting DIFFUSE to %d\n", arrayNo);
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_DIFFUSE]  = arrayNo;
-                This->namedArrays = TRUE;
             } else {
                 TRACE("Setting SPECULAR to %d\n", arrayNo);
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_SPECULAR] = arrayNo;
-                This->namedArrays = TRUE;
             }
         break;
         case D3DDECLUSAGE_TEXCOORD:
-            This->namedArrays = TRUE;
             /* only 7 texture coords have been designed for, so run a quick sanity check */
             if ((usage & 0xF0000) >> 16 > 7) {
                 FIXME("(%p) : Program uses texture coordinate %d but only 0-7 have been implemented\n", This, (usage & 0xF0000) >> 16);
@@ -783,27 +766,22 @@ static void vshader_parse_input_decl_usa
         case D3DDECLUSAGE_TANGENT:
             TRACE("Setting TANGENT to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_TANGENT]      = arrayNo;
-            This->declaredArrays = TRUE;
         break;
         case D3DDECLUSAGE_BINORMAL:
             TRACE("Setting BINORMAL to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_BINORMAL]     = arrayNo;
-            This->declaredArrays = TRUE;
         break;
         case D3DDECLUSAGE_TESSFACTOR:
             TRACE("Setting TESSFACTOR to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_TESSFACTOR]   = arrayNo;
-            This->declaredArrays = TRUE;
         break;
         case D3DDECLUSAGE_POSITIONT:
             if((usage & 0xF0000) >> 16 == 0) { /* tween data */
                 FIXME("Setting positiont to %d\n", arrayNo);
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITIONT] = arrayNo;
-                This->namedArrays = TRUE;
             } else {
                 FIXME("Setting positiont 2 to %d because usage = %d\n", arrayNo, (usage & 0xF0000) >> 16);
                 This->arrayUsageMap[WINED3DSHADERDECLUSAGE_POSITIONT2] = arrayNo;
-                This->declaredArrays = TRUE;
             if ((usage & 0xF0000) >> 16 != 0) FIXME("Extended positiont\n");
             }
         break;
@@ -811,17 +789,14 @@ static void vshader_parse_input_decl_usa
             /* supported by OpenGL */
             TRACE("Setting FOG to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_FOG]          = arrayNo;
-            This->namedArrays = TRUE;
         break;
         case D3DDECLUSAGE_DEPTH:
             TRACE("Setting DEPTH to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_DEPTH]        = arrayNo;
-            This->declaredArrays = TRUE;
         break;
         case D3DDECLUSAGE_SAMPLE:
             TRACE("Setting SAMPLE to %d\n", arrayNo);
             This->arrayUsageMap[WINED3DSHADERDECLUSAGE_SAMPLE]       = arrayNo;
-            This->declaredArrays = TRUE;
         break;
         default:
         FIXME("Unrecognised dcl %08x", usage & 0xFFFF);
@@ -901,81 +876,6 @@ static void vshader_hw_map2gl(SHADER_OPC
    shader_addline(buffer, "%s;\n", tmpLine);
 }
 
-static void vshader_hw_dcl(SHADER_OPCODE_ARG* arg) {
-    
-    DWORD dst = arg->dst;
-    IWineD3DVertexShaderImpl *This = (IWineD3DVertexShaderImpl*) arg->shader;
-    char tmpLine[256];
-    SHADER_BUFFER* buffer = arg->buffer;
-    
-    if (This->namedArrays) {
-        const char* attribName = "undefined";
-        switch(dst & 0xFFFF) {
-            case D3DDECLUSAGE_POSITION:
-            attribName = "vertex.position";
-            break;
-            case D3DDECLUSAGE_BLENDINDICES:
-            /* not supported by openGL */
-            attribName = "vertex.blend";
-            break;
-            case D3DDECLUSAGE_BLENDWEIGHT:
-            attribName = "vertex.weight";
-            break;
-            case D3DDECLUSAGE_NORMAL:
-            attribName = "vertex.normal";
-            break;
-            case D3DDECLUSAGE_PSIZE:
-            attribName = "vertex.psize";
-            break;
-            case D3DDECLUSAGE_COLOR:
-            if((dst & 0xF0000) >> 16 == 0)  {
-                attribName = "vertex.color";
-            } else {
-                attribName = "vertex.color.secondary";
-            }
-            break;
-            case D3DDECLUSAGE_TEXCOORD:
-            {
-                char tmpChar[100];
-                tmpChar[0] = 0;
-                sprintf(tmpChar,"vertex.texcoord[%lu]",(dst & 0xF0000) >> 16);
-                attribName = tmpChar;
-                break;
-            }
-            /* The following aren't directly supported by openGL, so shouldn't come up using namedarrays. */
-            case D3DDECLUSAGE_TANGENT:
-            attribName = "vertex.tangent";
-            break;
-            case D3DDECLUSAGE_BINORMAL:
-            attribName = "vertex.binormal";
-            break;
-            case D3DDECLUSAGE_TESSFACTOR:
-            attribName = "vertex.tessfactor";
-            break;
-            case D3DDECLUSAGE_POSITIONT:
-            attribName = "vertex.possitionT";
-            break;
-            case D3DDECLUSAGE_FOG:
-            attribName = "vertex.fogcoord";
-            break;
-            case D3DDECLUSAGE_DEPTH:
-            attribName = "vertex.depth";
-            break;
-            case D3DDECLUSAGE_SAMPLE:
-            attribName = "vertex.sample";
-            break;
-            default:
-            FIXME("Unrecognised dcl %08lx", dst & 0xFFFF);
-        }
-        {
-            sprintf(tmpLine, "ATTRIB ");
-            vshader_program_add_param(arg, dst, FALSE, tmpLine);
-            if (This->namedArrays) 
-                shader_addline(buffer, "%s = %s;\n", tmpLine, attribName);
-        }
-    }
-}
-
 /** Handles transforming all D3DSIO_M?x? opcodes for 
     Vertex shaders to ARB_vertex_program codes */
 static void vshader_hw_mnxn(SHADER_OPCODE_ARG* arg) {
@@ -1509,8 +1409,6 @@ static HRESULT WINAPI IWineD3DVertexShad
     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;
 
@@ -1644,22 +1542,9 @@ static HRESULT WINAPI IWineD3DVertexShad
         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
+    if (NULL != pFunction  && wined3d_settings.vs_mode == VS_HW) 
         IWineD3DVertexShaderImpl_GenerateShader(iface, pFunction);
-#endif
-    }
 
     /* copy the function ... because it will certainly be released by application */
     if (NULL != pFunction) {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 1e4573d..f449d7e 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1433,10 +1433,8 @@ typedef struct IWineD3DVertexShaderImpl 
     DWORD usage;
 
     /* vertex declaration array mapping */
-    BOOL                        namedArrays;    /* don't map use named functions */
-    BOOL                        declaredArrays; /* mapping requires */
-    INT                         arrayUsageMap[WINED3DSHADERDECLUSAGE_MAX_USAGE];    /* lookup table for the maps */
-    
+    INT arrayUsageMap[WINED3DSHADERDECLUSAGE_MAX_USAGE];
+ 
     /* run time datas...  */
     VSHADERDATA                *data;
     IWineD3DVertexDeclaration  *vertexDeclaration;
-- 
1.3.3



More information about the wine-patches mailing list