From 2b3a364e9a804c8217720d2b8a43c3cc5eea0457 Mon Sep 17 00:00:00 2001 From: Michael Stefaniuc Date: Wed, 6 Jul 2011 13:27:01 +0200 Subject: [PATCH] d3d9: Use unsafe_impl_from_IDirect3DVertexBuffer9 for app provided ifaces. --- dlls/d3d9/buffer.c | 9 +++++++++ dlls/d3d9/d3d9_private.h | 1 + dlls/d3d9/device.c | 5 +++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dlls/d3d9/buffer.c b/dlls/d3d9/buffer.c index 6e91b0021c9..11fdab42cb7 100644 --- a/dlls/d3d9/buffer.c +++ b/dlls/d3d9/buffer.c @@ -300,6 +300,15 @@ HRESULT vertexbuffer_init(IDirect3DVertexBuffer9Impl *buffer, IDirect3DDevice9Im return D3D_OK; } +IDirect3DVertexBuffer9Impl *unsafe_impl_from_IDirect3DVertexBuffer9(IDirect3DVertexBuffer9 *iface) +{ + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3d9_vertexbuffer_vtbl); + + return impl_from_IDirect3DVertexBuffer9(iface); +} + static inline IDirect3DIndexBuffer9Impl *impl_from_IDirect3DIndexBuffer9(IDirect3DIndexBuffer9 *iface) { return CONTAINING_RECORD(iface, IDirect3DIndexBuffer9Impl, IDirect3DIndexBuffer9_iface); diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h index 7cd11ee8620..9cb33c88520 100644 --- a/dlls/d3d9/d3d9_private.h +++ b/dlls/d3d9/d3d9_private.h @@ -262,6 +262,7 @@ typedef struct IDirect3DVertexBuffer9Impl HRESULT vertexbuffer_init(IDirect3DVertexBuffer9Impl *buffer, IDirect3DDevice9Impl *device, UINT size, UINT usage, DWORD fvf, D3DPOOL pool) DECLSPEC_HIDDEN; +IDirect3DVertexBuffer9Impl *unsafe_impl_from_IDirect3DVertexBuffer9(IDirect3DVertexBuffer9 *iface) DECLSPEC_HIDDEN; /* --------------------- */ /* IDirect3DIndexBuffer9 */ diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 8646eb21e50..924d43e0750 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -2049,9 +2049,9 @@ static HRESULT WINAPI IDirect3DDevice9Impl_ProcessVertices(IDirect3DDevice9Ex *i IDirect3DVertexDeclaration9 *pVertexDecl, DWORD Flags) { IDirect3DDevice9Impl *This = impl_from_IDirect3DDevice9Ex(iface); + IDirect3DVertexBuffer9Impl *dest = unsafe_impl_from_IDirect3DVertexBuffer9(pDestBuffer); IDirect3DVertexDeclaration9Impl *Decl = (IDirect3DVertexDeclaration9Impl *) pVertexDecl; HRESULT hr; - IDirect3DVertexBuffer9Impl *dest = (IDirect3DVertexBuffer9Impl *) pDestBuffer; TRACE("iface %p, src_start_idx %u, dst_idx %u, vertex_count %u, dst_buffer %p, declaration %p, flags %#x.\n", iface, SrcStartIndex, DestIndex, VertexCount, pDestBuffer, pVertexDecl, Flags); @@ -2446,6 +2446,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_SetStreamSource(IDirect3DDevice9Ex *i UINT StreamNumber, IDirect3DVertexBuffer9 *pStreamData, UINT OffsetInBytes, UINT Stride) { IDirect3DDevice9Impl *This = impl_from_IDirect3DDevice9Ex(iface); + IDirect3DVertexBuffer9Impl *streamdata = unsafe_impl_from_IDirect3DVertexBuffer9(pStreamData); HRESULT hr; TRACE("iface %p, stream_idx %u, buffer %p, offset %u, stride %u.\n", @@ -2453,7 +2454,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_SetStreamSource(IDirect3DDevice9Ex *i wined3d_mutex_lock(); hr = wined3d_device_set_stream_source(This->wined3d_device, StreamNumber, - pStreamData ? ((IDirect3DVertexBuffer9Impl *)pStreamData)->wineD3DVertexBuffer : NULL, + streamdata ? streamdata->wineD3DVertexBuffer : NULL, OffsetInBytes, Stride); wined3d_mutex_unlock(); -- 2.11.4.GIT