Stefan Dösinger : wined3d: Add a usage flag for vertex buffer optimization.

Alexandre Julliard julliard at winehq.org
Tue Nov 3 15:37:16 CST 2009


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Tue Oct 20 14:09:25 2009 +0200

wined3d: Add a usage flag for vertex buffer optimization.

---

 dlls/d3d8/vertexbuffer.c |    3 ++-
 dlls/d3d9/vertexbuffer.c |    3 ++-
 dlls/wined3d/device.c    |    5 ++---
 include/wine/wined3d.idl |    1 +
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/dlls/d3d8/vertexbuffer.c b/dlls/d3d8/vertexbuffer.c
index bf1900b..ae5307a 100644
--- a/dlls/d3d8/vertexbuffer.c
+++ b/dlls/d3d8/vertexbuffer.c
@@ -277,7 +277,8 @@ HRESULT vertexbuffer_init(IDirect3DVertexBuffer8Impl *buffer, IDirect3DDevice8Im
 
     wined3d_mutex_lock();
     hr = IWineD3DDevice_CreateVertexBuffer(device->WineD3DDevice, size,
-            usage & WINED3DUSAGE_MASK, 0, (WINED3DPOOL)pool, &buffer->wineD3DVertexBuffer,
+            (usage & WINED3DUSAGE_MASK) | WINED3DUSAGE_OPTIMIZE, 0,
+            (WINED3DPOOL)pool, &buffer->wineD3DVertexBuffer,
             (IUnknown *)buffer, &d3d8_vertexbuffer_wined3d_parent_ops);
     wined3d_mutex_unlock();
     if (FAILED(hr))
diff --git a/dlls/d3d9/vertexbuffer.c b/dlls/d3d9/vertexbuffer.c
index 16b7d70..0ea630e 100644
--- a/dlls/d3d9/vertexbuffer.c
+++ b/dlls/d3d9/vertexbuffer.c
@@ -278,7 +278,8 @@ HRESULT vertexbuffer_init(IDirect3DVertexBuffer9Impl *buffer, IDirect3DDevice9Im
 
     wined3d_mutex_lock();
     hr = IWineD3DDevice_CreateVertexBuffer(device->WineD3DDevice, size,
-            usage & WINED3DUSAGE_MASK, 0, (WINED3DPOOL)pool, &buffer->wineD3DVertexBuffer,
+            (usage & WINED3DUSAGE_MASK) | WINED3DUSAGE_OPTIMIZE, 0,
+            (WINED3DPOOL)pool, &buffer->wineD3DVertexBuffer,
             (IUnknown *)buffer, &d3d9_vertexbuffer_wined3d_parent_ops);
     wined3d_mutex_unlock();
     if (FAILED(hr))
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index f212a9d..59c18e9 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -485,7 +485,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *ifac
 {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
     struct wined3d_buffer *object;
-    int dxVersion = ( (IWineD3DImpl *) This->wineD3D)->dxVersion;
     HRESULT hr;
     BOOL conv;
 
@@ -543,8 +542,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *ifac
         TRACE("Not creating a vbo because the vertex buffer is in system memory\n");
     } else if(Usage & WINED3DUSAGE_DYNAMIC) {
         TRACE("Not creating a vbo because the buffer has dynamic usage\n");
-    } else if(dxVersion <= 7 && conv) {
-        TRACE("Not creating a vbo because dxVersion is 7 and the fvf needs conversion\n");
+    } else if(!(Usage & WINED3DUSAGE_OPTIMIZE) && conv) {
+        TRACE("Not creating a vbo because the fvf needs conversion, but VB optimization is disabled\n");
     } else {
         object->flags |= WINED3D_BUFFER_CREATEBO;
     }
diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl
index 25a4870..65306a3 100644
--- a/include/wine/wined3d.idl
+++ b/include/wine/wined3d.idl
@@ -901,6 +901,7 @@ const UINT WINED3DUSAGE_DYNAMIC                                 = 0x00000200;
 const UINT WINED3DUSAGE_AUTOGENMIPMAP                           = 0x00000400;
 const UINT WINED3DUSAGE_DMAP                                    = 0x00004000;
 const UINT WINED3DUSAGE_MASK                                    = 0x00004fff;
+const UINT WINED3DUSAGE_OPTIMIZE                                = 0x40000000;
 const UINT WINED3DUSAGE_OVERLAY                                 = 0x80000000;
 
 const UINT WINED3DUSAGE_QUERY_LEGACYBUMPMAP                     = 0x00008000;




More information about the wine-cvs mailing list