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