wined3d: Do the ffp_valid check before even trying to use the element.

Henri Verbeet hverbeet at codeweavers.com
Wed Mar 25 04:12:28 CDT 2009


---
 dlls/wined3d/drawprim.c |   38 +++++++++++++++++++++++---------------
 1 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 804e65b..3f61b8a 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -162,10 +162,23 @@ void primitiveDeclarationConvertToStridedData(
         TRACE("Offset %d Stream %d UsageIndex %d\n", element->Offset, element->Stream, element->UsageIndex);
 
         if (useVertexShaderFunction)
+        {
             stride_used = vshader_get_input(This->stateBlock->vertexShader,
                 element->Usage, element->UsageIndex, &idx);
+        }
         else
-            stride_used = fixed_get_input(element->Usage, element->UsageIndex, &idx);
+        {
+            if (!vertexDeclaration->ffp_valid[i])
+            {
+                WARN("Skipping unsupported fixed function element of type %s and usage %s\n",
+                    debug_d3ddecltype(element->Type), debug_d3ddeclusage(element->Usage));
+                stride_used = FALSE;
+            }
+            else
+            {
+                stride_used = fixed_get_input(element->Usage, element->UsageIndex, &idx);
+            }
+        }
 
         if (stride_used) {
             TRACE("Load %s array %u [usage=%s, usage_idx=%u, "
@@ -174,21 +187,16 @@ void primitiveDeclarationConvertToStridedData(
                     debug_d3ddeclusage(element->Usage), element->UsageIndex,
                     element->Stream, element->Offset, stride, debug_d3ddecltype(element->Type), streamVBO);
 
-            if (!useVertexShaderFunction && !vertexDeclaration->ffp_valid[i]) {
-                WARN("Skipping unsupported fixed function element of type %s and usage %s\n",
-                    debug_d3ddecltype(element->Type), debug_d3ddeclusage(element->Usage));
-            } else {
-                strided->u.input[idx].lpData = data;
-                strided->u.input[idx].dwType = element->Type;
-                strided->u.input[idx].dwStride = stride;
-                strided->u.input[idx].VBO = streamVBO;
-                strided->u.input[idx].streamNo = element->Stream;
-                if (!GL_SUPPORT(EXT_VERTEX_ARRAY_BGRA) && element->Type == WINED3DDECLTYPE_D3DCOLOR)
-                {
-                    strided->swizzle_map |= 1 << idx;
-                }
-                strided->use_map |= 1 << idx;
+            strided->u.input[idx].lpData = data;
+            strided->u.input[idx].dwType = element->Type;
+            strided->u.input[idx].dwStride = stride;
+            strided->u.input[idx].VBO = streamVBO;
+            strided->u.input[idx].streamNo = element->Stream;
+            if (!GL_SUPPORT(EXT_VERTEX_ARRAY_BGRA) && element->Type == WINED3DDECLTYPE_D3DCOLOR)
+            {
+                strided->swizzle_map |= 1 << idx;
             }
+            strided->use_map |= 1 << idx;
         }
     }
     /* Now call PreLoad on all the vertex buffers. In the very rare case
-- 
1.6.0.6



--------------080405000604040908040502--



More information about the wine-patches mailing list