[PATCH 3/5] wined3d: Pass stream info and needed fixups to buffer_find_decl.

Stefan Dösinger stefan at codeweavers.com
Wed Sep 11 04:31:19 CDT 2013


---
 dlls/wined3d/buffer.c | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index f811a61..168bd05 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -310,14 +310,15 @@ static BOOL buffer_check_attribute(struct wined3d_buffer *This, const struct win
     return ret;
 }
 
-static BOOL buffer_find_decl(struct wined3d_buffer *This)
+#define WINED3D_BUFFER_FIXUP_USE_SHADER           0x01
+#define WINED3D_BUFFER_FIXUP_SUPPORT_D3DCOLOR     0x02
+#define WINED3D_BUFFER_FIXUP_SUPPORT_XYZRHW       0x04
+
+static BOOL buffer_find_decl(struct wined3d_buffer *This, const struct wined3d_stream_info *si,
+        DWORD fixup_flags)
 {
-    struct wined3d_device *device = This->resource.device;
-    const struct wined3d_adapter *adapter = device->adapter;
-    const struct wined3d_stream_info *si = &device->stream_info;
-    const struct wined3d_state *state = &device->state;
-    BOOL support_d3dcolor = adapter->gl_info.supported[ARB_VERTEX_ARRAY_BGRA];
-    BOOL support_xyzrhw = adapter->d3d_info.xyzrhw;
+    BOOL support_d3dcolor = fixup_flags & WINED3D_BUFFER_FIXUP_SUPPORT_D3DCOLOR;
+    BOOL support_xyzrhw = fixup_flags & WINED3D_BUFFER_FIXUP_SUPPORT_XYZRHW;
     UINT stride_this_run = 0;
     BOOL ret = FALSE;
 
@@ -330,7 +331,7 @@ static BOOL buffer_find_decl(struct wined3d_buffer *This)
         if(This->resource.usage & WINED3DUSAGE_STATICDECL) return FALSE;
     }
 
-    if (use_vs(state))
+    if (fixup_flags & WINED3D_BUFFER_FIXUP_USE_SHADER)
     {
         TRACE("Vertex shaders used, no VBO conversion is needed\n");
         if(This->conversion_map)
@@ -769,7 +770,16 @@ void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_conte
     /* Reading the declaration makes only sense if the stateblock is finalized and the buffer bound to a stream */
     if (device->isInDraw && buffer->resource.bind_count > 0)
     {
-        decl_changed = buffer_find_decl(buffer);
+        DWORD fixup_flags = 0;
+
+        if (use_vs(&device->state))
+            fixup_flags |= WINED3D_BUFFER_FIXUP_USE_SHADER;
+        if (context->gl_info->supported[ARB_VERTEX_ARRAY_BGRA])
+            fixup_flags |= WINED3D_BUFFER_FIXUP_SUPPORT_D3DCOLOR;
+        if (context->d3d_info->xyzrhw)
+            fixup_flags |= WINED3D_BUFFER_FIXUP_SUPPORT_XYZRHW;
+
+        decl_changed = buffer_find_decl(buffer, &device->stream_info, fixup_flags);
         buffer->flags |= WINED3D_BUFFER_HASDESC;
     }
 
-- 
1.8.1.5




More information about the wine-patches mailing list