From 718ccb37a3386d11a99c10d7e94938f919469f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Tue, 20 Oct 2009 14:09:25 +0200 Subject: [PATCH 02/10] 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; -- 1.6.4.4