Stefan Dösinger : wined3d: Prepare for dynamic vertex buffers.

Alexandre Julliard julliard at winehq.org
Mon Jan 4 10:54:18 CST 2010


Module: wine
Branch: master
Commit: 5296d5b0168aaa3de7efbdbb9a946acaf392d7af
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5296d5b0168aaa3de7efbdbb9a946acaf392d7af

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Mon Dec 28 00:36:17 2009 +0100

wined3d: Prepare for dynamic vertex buffers.

---

 dlls/wined3d/buffer.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 020d0b4..57dca35 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -805,9 +805,10 @@ static void STDMETHODCALLTYPE buffer_PreLoad(IWineD3DBuffer *iface)
         ++This->decl_change_count;
         This->draw_count = 0;
 
-        if (This->decl_change_count > VB_MAXDECLCHANGES)
+        if (This->decl_change_count > VB_MAXDECLCHANGES ||
+            (This->conversion_map && (This->resource.usage & WINED3DUSAGE_DYNAMIC)))
         {
-            FIXME("Too many declaration changes, stopping converting\n");
+            FIXME("Too many declaration changes or converting dynamic buffer, stopping converting\n");
 
             IWineD3DBuffer_UnLoad(iface);
             This->flags &= ~WINED3D_BUFFER_CREATEBO;
@@ -1152,6 +1153,7 @@ HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
     const struct GlPixelFormatDesc *format_desc = getFormatDescEntry(format, &device->adapter->gl_info);
     HRESULT hr;
     const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
+    BOOL dynamic_buffer_ok;
 
     if (!size)
     {
@@ -1173,6 +1175,8 @@ HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
     TRACE("size %#x, usage %#x, format %s, memory @ %p, iface @ %p.\n", buffer->resource.size, buffer->resource.usage,
             debug_d3dformat(buffer->resource.format_desc->format), buffer->resource.allocatedMemory, buffer);
 
+    dynamic_buffer_ok = FALSE; /* TODO: GL_APPLE_map_buffer_range, GL_ARB_map_buffer_range */
+
     /* Observations show that drawStridedSlow is faster on dynamic VBs than converting +
      * drawStridedFast (half-life 2 and others).
      *
@@ -1188,9 +1192,9 @@ HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
     {
         TRACE("Not creating a vbo because the vertex buffer is in system memory\n");
     }
-    else if(buffer->resource.usage & WINED3DUSAGE_DYNAMIC)
+    else if(!dynamic_buffer_ok && (buffer->resource.usage & WINED3DUSAGE_DYNAMIC))
     {
-        TRACE("Not creating a vbo because the buffer has dynamic usage\n");
+        TRACE("Not creating a vbo because the buffer has dynamic usage and no GL support\n");
     }
     else
     {




More information about the wine-cvs mailing list