Michael Stefaniuc : dxgi: COM cleanup for the IDXGISurface iface.
Alexandre Julliard
julliard at winehq.org
Tue Jun 7 12:02:35 CDT 2011
Module: wine
Branch: master
Commit: 219a830273b634a43fa9face5e324b4c4375ec0e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=219a830273b634a43fa9face5e324b4c4375ec0e
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Tue Jun 7 10:11:55 2011 +0200
dxgi: COM cleanup for the IDXGISurface iface.
---
dlls/dxgi/dxgi_private.h | 2 +-
dlls/dxgi/surface.c | 22 ++++++++++++++--------
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h
index 82cb0b0..047e083 100644
--- a/dlls/dxgi/dxgi_private.h
+++ b/dlls/dxgi/dxgi_private.h
@@ -135,7 +135,7 @@ HRESULT dxgi_swapchain_init(struct dxgi_swapchain *swapchain, struct dxgi_device
/* IDXGISurface */
struct dxgi_surface
{
- const struct IDXGISurfaceVtbl *vtbl;
+ IDXGISurface IDXGISurface_iface;
const struct IUnknownVtbl *inner_unknown_vtbl;
IUnknown *outer_unknown;
LONG refcount;
diff --git a/dlls/dxgi/surface.c b/dlls/dxgi/surface.c
index 6296c1a..4a5ea02 100644
--- a/dlls/dxgi/surface.c
+++ b/dlls/dxgi/surface.c
@@ -42,7 +42,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_surface_inner_QueryInterface(IUnknown *ifa
|| IsEqualGUID(riid, &IID_IDXGIObject)
|| IsEqualGUID(riid, &IID_IUnknown))
{
- IUnknown_AddRef((IUnknown *)This);
+ IDXGISurface_AddRef(&This->IDXGISurface_iface);
*object = This;
return S_OK;
}
@@ -79,25 +79,31 @@ static ULONG STDMETHODCALLTYPE dxgi_surface_inner_Release(IUnknown *iface)
return refcount;
}
+static inline struct dxgi_surface *impl_from_IDXGISurface(IDXGISurface *iface)
+{
+ return CONTAINING_RECORD(iface, struct dxgi_surface, IDXGISurface_iface);
+}
+
/* IUnknown methods */
-static HRESULT STDMETHODCALLTYPE dxgi_surface_QueryInterface(IDXGISurface *iface, REFIID riid, void **object)
+static HRESULT STDMETHODCALLTYPE dxgi_surface_QueryInterface(IDXGISurface *iface, REFIID riid,
+ void **object)
{
- struct dxgi_surface *This = (struct dxgi_surface *)iface;
+ struct dxgi_surface *This = impl_from_IDXGISurface(iface);
TRACE("Forwarding to outer IUnknown\n");
return IUnknown_QueryInterface(This->outer_unknown, riid, object);
}
static ULONG STDMETHODCALLTYPE dxgi_surface_AddRef(IDXGISurface *iface)
{
- struct dxgi_surface *This = (struct dxgi_surface *)iface;
+ struct dxgi_surface *This = impl_from_IDXGISurface(iface);
TRACE("Forwarding to outer IUnknown\n");
return IUnknown_AddRef(This->outer_unknown);
}
static ULONG STDMETHODCALLTYPE dxgi_surface_Release(IDXGISurface *iface)
{
- struct dxgi_surface *This = (struct dxgi_surface *)iface;
+ struct dxgi_surface *This = impl_from_IDXGISurface(iface);
TRACE("Forwarding to outer IUnknown\n");
return IUnknown_Release(This->outer_unknown);
}
@@ -130,7 +136,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_surface_GetPrivateData(IDXGISurface *iface
static HRESULT STDMETHODCALLTYPE dxgi_surface_GetParent(IDXGISurface *iface, REFIID riid, void **parent)
{
- struct dxgi_surface *This = (struct dxgi_surface *)iface;
+ struct dxgi_surface *This = impl_from_IDXGISurface(iface);
TRACE("iface %p, riid %s, parent %p.\n", iface, debugstr_guid(riid), parent);
@@ -141,7 +147,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_surface_GetParent(IDXGISurface *iface, REF
static HRESULT STDMETHODCALLTYPE dxgi_surface_GetDevice(IDXGISurface *iface, REFIID riid, void **device)
{
- struct dxgi_surface *This = (struct dxgi_surface *)iface;
+ struct dxgi_surface *This = impl_from_IDXGISurface(iface);
TRACE("iface %p, riid %s, device %p.\n", iface, debugstr_guid(riid), device);
@@ -199,7 +205,7 @@ static const struct IUnknownVtbl dxgi_surface_inner_unknown_vtbl =
HRESULT dxgi_surface_init(struct dxgi_surface *surface, IDXGIDevice *device, IUnknown *outer)
{
- surface->vtbl = &dxgi_surface_vtbl;
+ surface->IDXGISurface_iface.lpVtbl = &dxgi_surface_vtbl;
surface->inner_unknown_vtbl = &dxgi_surface_inner_unknown_vtbl;
surface->refcount = 1;
surface->outer_unknown = outer ? outer : (IUnknown *)&surface->inner_unknown_vtbl;
More information about the wine-cvs
mailing list