[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