Module: wine Branch: master Commit: f0efa9741353b9a7871eab17508404ffafb5fb3c URL: http://source.winehq.org/git/wine.git/?a=commit;h=f0efa9741353b9a7871eab1750...
Author: Stefan Dösinger stefan@codeweavers.com Date: Mon Apr 6 14:16:59 2009 +0200
wined3d: Remove the buffer fvf.
---
dlls/d3d8/device.c | 7 +++++-- dlls/d3d9/device.c | 3 ++- dlls/d3d9/vertexbuffer.c | 4 +++- dlls/ddraw/vertexbuffer.c | 3 ++- dlls/wined3d/buffer.c | 5 ++++- dlls/wined3d/device.c | 11 +++++------ dlls/wined3d/wined3d_private.h | 3 --- include/wine/wined3d.idl | 4 ++-- 8 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 352018f..057d895 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -737,7 +737,9 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexBuffer(LPDIRECT3DDEVICE8 object->lpVtbl = &Direct3DVertexBuffer8_Vtbl; object->ref = 1; EnterCriticalSection(&d3d8_cs); - hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage & WINED3DUSAGE_MASK, FVF, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), NULL, (IUnknown *)object); + hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage & WINED3DUSAGE_MASK, + 0 /* fvf for ddraw only */, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), NULL, + (IUnknown *)object); LeaveCriticalSection(&d3d8_cs); object->fvf = FVF;
@@ -1662,10 +1664,11 @@ static HRESULT WINAPI IDirect3DDevice8Impl_DrawIndexedPrimitiveUP(LPDIRECT3DDEVI static HRESULT WINAPI IDirect3DDevice8Impl_ProcessVertices(LPDIRECT3DDEVICE8 iface, UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8* pDestBuffer,DWORD Flags) { IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface; HRESULT hr; + IDirect3DVertexBuffer8Impl *dest = (IDirect3DVertexBuffer8Impl *) pDestBuffer; TRACE("(%p) Relay\n" , This);
EnterCriticalSection(&d3d8_cs); - hr = IWineD3DDevice_ProcessVertices(This->WineD3DDevice,SrcStartIndex, DestIndex, VertexCount, ((IDirect3DVertexBuffer8Impl *)pDestBuffer)->wineD3DVertexBuffer, NULL, Flags); + hr = IWineD3DDevice_ProcessVertices(This->WineD3DDevice,SrcStartIndex, DestIndex, VertexCount, dest->wineD3DVertexBuffer, NULL, Flags, dest->fvf); LeaveCriticalSection(&d3d8_cs); return hr; } diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 0d335fc..bfbfe97 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -1449,10 +1449,11 @@ static HRESULT WINAPI IDirect3DDevice9Impl_ProcessVertices(LPDIRECT3DDEVICE9EX IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; IDirect3DVertexDeclaration9Impl *Decl = (IDirect3DVertexDeclaration9Impl *) pVertexDecl; HRESULT hr; + IDirect3DVertexBuffer9Impl *dest = (IDirect3DVertexBuffer9Impl *) pDestBuffer; TRACE("(%p) Relay\n" , This);
EnterCriticalSection(&d3d9_cs); - hr = IWineD3DDevice_ProcessVertices(This->WineD3DDevice,SrcStartIndex, DestIndex, VertexCount, ((IDirect3DVertexBuffer9Impl *)pDestBuffer)->wineD3DVertexBuffer, Decl ? Decl->wineD3DVertexDeclaration : NULL, Flags); + hr = IWineD3DDevice_ProcessVertices(This->WineD3DDevice,SrcStartIndex, DestIndex, VertexCount, dest->wineD3DVertexBuffer, Decl ? Decl->wineD3DVertexDeclaration : NULL, Flags, dest->fvf); LeaveCriticalSection(&d3d9_cs); return hr; } diff --git a/dlls/d3d9/vertexbuffer.c b/dlls/d3d9/vertexbuffer.c index d13ebef..71a9ca7 100644 --- a/dlls/d3d9/vertexbuffer.c +++ b/dlls/d3d9/vertexbuffer.c @@ -247,7 +247,9 @@ HRESULT WINAPI IDirect3DDevice9Impl_CreateVertexBuffer(LPDIRECT3DDEVICE9EX iface object->ref = 1; object->fvf = FVF; EnterCriticalSection(&d3d9_cs); - hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage & WINED3DUSAGE_MASK, FVF, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), pSharedHandle, (IUnknown *)object); + hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage & WINED3DUSAGE_MASK, + 0 /* fvf for ddraw only */, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), + pSharedHandle, (IUnknown *)object); LeaveCriticalSection(&d3d9_cs);
if (hrc != D3D_OK) { diff --git a/dlls/ddraw/vertexbuffer.c b/dlls/ddraw/vertexbuffer.c index de94791..df7528b 100644 --- a/dlls/ddraw/vertexbuffer.c +++ b/dlls/ddraw/vertexbuffer.c @@ -384,7 +384,8 @@ IDirect3DVertexBufferImpl_ProcessVertices(IDirect3DVertexBuffer7 *iface, Count, This->wineD3DVertexBuffer, NULL /* Output vdecl */, - Flags); + Flags, + This->fvf);
/* Restore the states if needed */ if(doClip != oldClip) diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c index 1945474..0c53c23 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c @@ -317,11 +317,15 @@ static BOOL buffer_find_decl(struct wined3d_buffer *This) * processing, FLOAT4 POSITIONT with fixed function, and FLOAT16 if * GL_NV_half_float is not supported. * + * Note for d3d8 and d3d9: * The vertex buffer FVF doesn't help with finding them, we have to use * the decoded vertex declaration and pick the things that concern the * current buffer. A problem with this is that this can change between * draws, so we have to validate the information and reprocess the buffer * if it changes, and avoid false positives for performance reasons. + * WineD3D doesn't even know the vertex buffer any more, it is managed + * by the client libraries and passed to SetStreamSource and ProcessVertices + * as needed. * * We have to distinguish between vertex shaders and fixed function to * pick the way we access the strided vertex information. @@ -938,7 +942,6 @@ static HRESULT STDMETHODCALLTYPE buffer_GetDesc(IWineD3DBuffer *iface, WINED3DBU desc->Usage = This->resource.usage; desc->Pool = This->resource.pool; desc->Size = This->resource.size; - desc->FVF = This->fvf;
return WINED3D_OK; } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index d0fcf59..fc968db 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -552,8 +552,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *ifac TRACE("(%p) : Size=%d, Usage=0x%08x, FVF=%x, Pool=%d - Memory@%p, Iface@%p\n", This, Size, Usage, FVF, Pool, object->resource.allocatedMemory, object); *ppVertexBuffer = (IWineD3DBuffer *)object;
- object->fvf = FVF; - /* Observations show that drawStridedSlow is faster on dynamic VBs than converting + * drawStridedFast (half-life 2). * @@ -4506,11 +4504,11 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetPixelShaderConstantF(
#define copy_and_next(dest, src, size) memcpy(dest, src, size); dest += (size) static HRESULT process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIndex, DWORD dwCount, - const struct wined3d_stream_info *stream_info, struct wined3d_buffer *dest, DWORD dwFlags) + const struct wined3d_stream_info *stream_info, struct wined3d_buffer *dest, DWORD dwFlags, + DWORD DestFVF) { char *dest_ptr, *dest_conv = NULL, *dest_conv_addr = NULL; unsigned int i; - DWORD DestFVF = dest->fvf; WINED3DVIEWPORT vp; WINED3DMATRIX mat, proj_mat, view_mat, world_mat; BOOL doClip; @@ -4866,7 +4864,8 @@ static HRESULT process_vertices_strided(IWineD3DDeviceImpl *This, DWORD dwDestIn #undef copy_and_next
static HRESULT WINAPI IWineD3DDeviceImpl_ProcessVertices(IWineD3DDevice *iface, UINT SrcStartIndex, UINT DestIndex, - UINT VertexCount, IWineD3DBuffer *pDestBuffer, IWineD3DVertexDeclaration *pVertexDecl, DWORD Flags) + UINT VertexCount, IWineD3DBuffer *pDestBuffer, IWineD3DVertexDeclaration *pVertexDecl, DWORD Flags, + DWORD DestFVF) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; struct wined3d_stream_info stream_info; @@ -4912,7 +4911,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ProcessVertices(IWineD3DDevice *iface, }
return process_vertices_strided(This, DestIndex, VertexCount, &stream_info, - (struct wined3d_buffer *)pDestBuffer, Flags); + (struct wined3d_buffer *)pDestBuffer, Flags, DestFVF); }
/***** diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 59944a4..4076912 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2095,9 +2095,6 @@ struct wined3d_buffer UINT dirty_end; LONG lock_count;
- /* legacy vertex buffers */ - DWORD fvf; - /* conversion stuff */ UINT conversion_count; UINT draw_count; diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl index b33b8ca..f6e5ef5 100644 --- a/include/wine/wined3d.idl +++ b/include/wine/wined3d.idl @@ -1869,7 +1869,6 @@ typedef struct _WINED3DBUFFER_DESC DWORD Usage; WINED3DPOOL Pool; UINT Size; - DWORD FVF; } WINED3DBUFFER_DESC;
typedef struct glDescriptor @@ -3349,7 +3348,8 @@ interface IWineD3DDevice : IWineD3DBase [in] UINT vertex_count, [in] IWineD3DBuffer *dest_buffer, [in] IWineD3DVertexDeclaration *declaration, - [in] DWORD flags + [in] DWORD flags, + [in] DWORD DestFVF ); HRESULT BeginStateBlock( );