[PATCH 2/5] d3d8: Use unsafe_impl_from_IDirect3DSurface8 for app provided ifaces.
Michael Stefaniuc
mstefani at redhat.de
Mon Jul 4 17:34:58 CDT 2011
---
dlls/d3d8/d3d8_private.h | 1 +
dlls/d3d8/device.c | 12 ++++++------
dlls/d3d8/surface.c | 10 ++++++++++
3 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h
index f98b334..3043478 100644
--- a/dlls/d3d8/d3d8_private.h
+++ b/dlls/d3d8/d3d8_private.h
@@ -256,6 +256,7 @@ struct IDirect3DSurface8Impl
HRESULT surface_init(IDirect3DSurface8Impl *surface, IDirect3DDevice8Impl *device,
UINT width, UINT height, D3DFORMAT format, BOOL lockable, BOOL discard, UINT level,
DWORD usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) DECLSPEC_HIDDEN;
+IDirect3DSurface8Impl *unsafe_impl_from_IDirect3DSurface8(IDirect3DSurface8 *iface) DECLSPEC_HIDDEN;
/* ---------------------- */
/* IDirect3DVertexBuffer8 */
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 9ad9117..dd82d69 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -451,7 +451,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_SetCursorProperties(IDirect3DDevice8
UINT XHotSpot, UINT YHotSpot, IDirect3DSurface8 *pCursorBitmap)
{
IDirect3DDevice8Impl *This = impl_from_IDirect3DDevice8(iface);
- IDirect3DSurface8Impl *pSurface = (IDirect3DSurface8Impl*)pCursorBitmap;
+ IDirect3DSurface8Impl *pSurface = unsafe_impl_from_IDirect3DSurface8(pCursorBitmap);
HRESULT hr;
TRACE("iface %p, hotspot_x %u, hotspot_y %u, bitmap %p.\n",
@@ -965,8 +965,8 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CopyRects(IDirect3DDevice8 *iface,
IDirect3DSurface8 *pSourceSurface, const RECT *pSourceRects, UINT cRects,
IDirect3DSurface8 *pDestinationSurface, const POINT *pDestPoints)
{
- IDirect3DSurface8Impl *Source = (IDirect3DSurface8Impl *) pSourceSurface;
- IDirect3DSurface8Impl *Dest = (IDirect3DSurface8Impl *) pDestinationSurface;
+ IDirect3DSurface8Impl *Source = unsafe_impl_from_IDirect3DSurface8(pSourceSurface);
+ IDirect3DSurface8Impl *Dest = unsafe_impl_from_IDirect3DSurface8(pDestinationSurface);
enum wined3d_format_id srcFormat, destFormat;
struct wined3d_resource_desc wined3d_desc;
struct wined3d_resource *wined3d_resource;
@@ -1053,7 +1053,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_GetFrontBuffer(IDirect3DDevice8 *ifac
IDirect3DSurface8 *pDestSurface)
{
IDirect3DDevice8Impl *This = impl_from_IDirect3DDevice8(iface);
- IDirect3DSurface8Impl *destSurface = (IDirect3DSurface8Impl *)pDestSurface;
+ IDirect3DSurface8Impl *destSurface = unsafe_impl_from_IDirect3DSurface8(pDestSurface);
HRESULT hr;
TRACE("iface %p, dst_surface %p.\n", iface, pDestSurface);
@@ -1074,8 +1074,8 @@ static HRESULT WINAPI IDirect3DDevice8Impl_SetRenderTarget(IDirect3DDevice8 *ifa
IDirect3DSurface8 *pRenderTarget, IDirect3DSurface8 *pNewZStencil)
{
IDirect3DDevice8Impl *This = impl_from_IDirect3DDevice8(iface);
- IDirect3DSurface8Impl *pSurface = (IDirect3DSurface8Impl *)pRenderTarget;
- IDirect3DSurface8Impl *pZSurface = (IDirect3DSurface8Impl *)pNewZStencil;
+ IDirect3DSurface8Impl *pSurface = unsafe_impl_from_IDirect3DSurface8(pRenderTarget);
+ IDirect3DSurface8Impl *pZSurface = unsafe_impl_from_IDirect3DSurface8(pNewZStencil);
struct wined3d_surface *original_ds = NULL;
HRESULT hr;
diff --git a/dlls/d3d8/surface.c b/dlls/d3d8/surface.c
index dfda50f..846a7db 100644
--- a/dlls/d3d8/surface.c
+++ b/dlls/d3d8/surface.c
@@ -19,6 +19,7 @@
*/
#include "config.h"
+#include <assert.h>
#include "d3d8_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3d8);
@@ -335,3 +336,12 @@ HRESULT surface_init(IDirect3DSurface8Impl *surface, IDirect3DDevice8Impl *devic
return D3D_OK;
}
+
+IDirect3DSurface8Impl *unsafe_impl_from_IDirect3DSurface8(IDirect3DSurface8 *iface)
+{
+ if (!iface)
+ return NULL;
+ assert(iface->lpVtbl == &Direct3DSurface8_Vtbl);
+
+ return impl_from_IDirect3DSurface8(iface);
+}
--
1.7.6.rc3
More information about the wine-patches
mailing list