[PATCH 3/5] wined3d: state->user_stream is always FALSE in device_stream_info_from_declaration().

Henri Verbeet hverbeet at codeweavers.com
Fri Jan 4 05:02:59 CST 2013


Since user pointer draws were removed, state->user_stream will only ever be
set for "strided" draws, and device_stream_info_from_declaration() is never
called for those.
---
 dlls/wined3d/device.c |   94 +++++++++++++++++++-----------------------------
 1 files changed, 37 insertions(+), 57 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 42cd226..8852472 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -181,9 +181,11 @@ void device_stream_info_from_declaration(struct wined3d_device *device, struct w
     struct wined3d_vertex_declaration *declaration = state->vertex_declaration;
     BOOL use_vshader;
     unsigned int i;
+    WORD map;
 
     stream_info->use_map = 0;
     stream_info->swizzle_map = 0;
+    stream_info->all_vbo = 1;
 
     /* Check for transformed vertices, disable vertex shader if present. */
     stream_info->position_transformed = declaration->position_transformed;
@@ -205,37 +207,25 @@ void device_stream_info_from_declaration(struct wined3d_device *device, struct w
 
         if (!buffer) continue;
 
-        data.buffer_object = 0;
-        data.addr = NULL;
-
         stride = stream->stride;
-        if (state->user_stream)
+
+        TRACE("Stream %u, buffer %p.\n", element->input_slot, buffer);
+        buffer_get_memory(buffer, &device->adapter->gl_info, &data);
+
+        /* We can't use VBOs if the base vertex index is negative. OpenGL
+         * doesn't accept negative offsets (or rather offsets bigger than the
+         * VBO, because the pointer is unsigned), so use system memory
+         * sources. In most sane cases the pointer - offset will still be > 0,
+         * otherwise it will wrap around to some big value. Hope that with the
+         * indices, the driver wraps it back internally. If not,
+         * drawStridedSlow() is needed, including a vertex buffer path. */
+        if (state->load_base_vertex_index < 0)
         {
-            TRACE("Stream %u is UP, %p\n", element->input_slot, buffer);
+            WARN("load_base_vertex_index is < 0 (%d), not using VBOs.\n", state->load_base_vertex_index);
             data.buffer_object = 0;
-            data.addr = (BYTE *)buffer;
-        }
-        else
-        {
-            TRACE("Stream %u isn't UP, %p\n", element->input_slot, buffer);
-            buffer_get_memory(buffer, &device->adapter->gl_info, &data);
-
-            /* Can't use vbo's if the base vertex index is negative. OpenGL doesn't accept negative offsets
-             * (or rather offsets bigger than the vbo, because the pointer is unsigned), so use system memory
-             * sources. In most sane cases the pointer - offset will still be > 0, otherwise it will wrap
-             * around to some big value. Hope that with the indices, the driver wraps it back internally. If
-             * not, drawStridedSlow is needed, including a vertex buffer path. */
-            if (state->load_base_vertex_index < 0)
-            {
-                WARN("load_base_vertex_index is < 0 (%d), not using VBOs.\n",
-                        state->load_base_vertex_index);
-                data.buffer_object = 0;
-                data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info);
-                if ((UINT_PTR)data.addr < -state->load_base_vertex_index * stride)
-                {
-                    FIXME("System memory vertex data load offset is negative!\n");
-                }
-            }
+            data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info);
+            if ((UINT_PTR)data.addr < -state->load_base_vertex_index * stride)
+                FIXME("System memory vertex data load offset is negative!\n");
         }
         data.addr += element->offset;
 
@@ -295,42 +285,32 @@ void device_stream_info_from_declaration(struct wined3d_device *device, struct w
         }
     }
 
+    /* Preload the vertex buffers. */
     device->num_buffer_queries = 0;
-    if (!state->user_stream)
+    for (i = 0, map = stream_info->use_map; map; map >>= 1, ++i)
     {
-        WORD map = stream_info->use_map;
-        stream_info->all_vbo = 1;
-
-        /* PreLoad all the vertex buffers. */
-        for (i = 0; map; map >>= 1, ++i)
-        {
-            struct wined3d_stream_info_element *element;
-            struct wined3d_buffer *buffer;
+        struct wined3d_stream_info_element *element;
+        struct wined3d_buffer *buffer;
 
-            if (!(map & 1)) continue;
+        if (!(map & 1))
+            continue;
 
-            element = &stream_info->elements[i];
-            buffer = state->streams[element->stream_idx].buffer;
-            wined3d_buffer_preload(buffer);
+        element = &stream_info->elements[i];
+        buffer = state->streams[element->stream_idx].buffer;
+        wined3d_buffer_preload(buffer);
 
-            /* If the preload dropped the buffer object, update the stream info. */
-            if (buffer->buffer_object != element->data.buffer_object)
-            {
-                element->data.buffer_object = 0;
-                element->data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info)
-                        + (ptrdiff_t)element->data.addr;
-            }
+        /* If the preload dropped the buffer object, update the stream info. */
+        if (buffer->buffer_object != element->data.buffer_object)
+        {
+            element->data.buffer_object = 0;
+            element->data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info) + (ptrdiff_t)element->data.addr;
+        }
 
-            if (!buffer->buffer_object)
-                stream_info->all_vbo = 0;
+        if (!buffer->buffer_object)
+            stream_info->all_vbo = 0;
 
-            if (buffer->query)
-                device->buffer_queries[device->num_buffer_queries++] = buffer->query;
-        }
-    }
-    else
-    {
-        stream_info->all_vbo = 0;
+        if (buffer->query)
+            device->buffer_queries[device->num_buffer_queries++] = buffer->query;
     }
 }
 
-- 
1.7.8.6




More information about the wine-patches mailing list