[PATCH 6/6] d3d9: Get rid of IDirect3DVertexDeclaration9Impl.

Henri Verbeet hverbeet at codeweavers.com
Fri Jun 1 10:22:52 CDT 2012


---
 dlls/d3d9/d3d9_private.h      |   36 +++++-----------
 dlls/d3d9/device.c            |   22 +++++-----
 dlls/d3d9/vertexdeclaration.c |   90 ++++++++++++++++++++---------------------
 3 files changed, 67 insertions(+), 81 deletions(-)

diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index 0105010..f386eb5 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
@@ -256,32 +256,20 @@ struct d3d9_stateblock
 HRESULT stateblock_init(struct d3d9_stateblock *stateblock, struct d3d9_device *device,
         D3DSTATEBLOCKTYPE type, struct wined3d_stateblock *wined3d_stateblock) DECLSPEC_HIDDEN;
 
-/* --------------------------- */
-/* IDirect3DVertexDeclaration9 */
-/* --------------------------- */
-
-/*****************************************************************************
- * IDirect3DVertexDeclaration implementation structure
- */
-typedef struct IDirect3DVertexDeclaration9Impl {
-  /* IUnknown fields */
-  IDirect3DVertexDeclaration9 IDirect3DVertexDeclaration9_iface;
-  LONG    ref;
-
-  D3DVERTEXELEMENT9 *elements;
-  UINT element_count;
-
-  /* IDirect3DVertexDeclaration9 fields */
-  struct wined3d_vertex_declaration *wineD3DVertexDeclaration;
-  DWORD convFVF;
-
-  /* Parent reference */
-  LPDIRECT3DDEVICE9EX parentDevice;
-} IDirect3DVertexDeclaration9Impl;
+struct d3d9_vertex_declaration
+{
+    IDirect3DVertexDeclaration9 IDirect3DVertexDeclaration9_iface;
+    LONG refcount;
+    D3DVERTEXELEMENT9 *elements;
+    UINT element_count;
+    struct wined3d_vertex_declaration *wined3d_declaration;
+    DWORD fvf;
+    IDirect3DDevice9Ex *parent_device;
+};
 
 HRESULT d3d9_vertex_declaration_create(struct d3d9_device *device,
-        const D3DVERTEXELEMENT9 *elements, IDirect3DVertexDeclaration9Impl **declaration) DECLSPEC_HIDDEN;
-IDirect3DVertexDeclaration9Impl *unsafe_impl_from_IDirect3DVertexDeclaration9(
+        const D3DVERTEXELEMENT9 *elements, struct d3d9_vertex_declaration **declaration) DECLSPEC_HIDDEN;
+struct d3d9_vertex_declaration *unsafe_impl_from_IDirect3DVertexDeclaration9(
         IDirect3DVertexDeclaration9 *iface) DECLSPEC_HIDDEN;
 
 /* ---------------------- */
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index d17887f..80349cd 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -2019,7 +2019,7 @@ static HRESULT WINAPI d3d9_device_ProcessVertices(IDirect3DDevice9Ex *iface,
 {
     struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
     struct d3d9_vertexbuffer *dst_impl = unsafe_impl_from_IDirect3DVertexBuffer9(dst_buffer);
-    IDirect3DVertexDeclaration9Impl *decl_impl = unsafe_impl_from_IDirect3DVertexDeclaration9(declaration);
+    struct d3d9_vertex_declaration *decl_impl = unsafe_impl_from_IDirect3DVertexDeclaration9(declaration);
     HRESULT hr;
 
     TRACE("iface %p, src_start_idx %u, dst_idx %u, vertex_count %u, dst_buffer %p, declaration %p, flags %#x.\n",
@@ -2027,7 +2027,7 @@ static HRESULT WINAPI d3d9_device_ProcessVertices(IDirect3DDevice9Ex *iface,
 
     wined3d_mutex_lock();
     hr = wined3d_device_process_vertices(device->wined3d_device, src_start_idx, dst_idx, vertex_count,
-            dst_impl->wined3d_buffer, decl_impl ? decl_impl->wineD3DVertexDeclaration : NULL,
+            dst_impl->wined3d_buffer, decl_impl ? decl_impl->wined3d_declaration : NULL,
             flags, dst_impl->fvf);
     wined3d_mutex_unlock();
 
@@ -2038,7 +2038,7 @@ static HRESULT WINAPI d3d9_device_CreateVertexDeclaration(IDirect3DDevice9Ex *if
         const D3DVERTEXELEMENT9 *elements, IDirect3DVertexDeclaration9 **declaration)
 {
     struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
-    IDirect3DVertexDeclaration9Impl *object;
+    struct d3d9_vertex_declaration *object;
     HRESULT hr;
 
     TRACE("iface %p, elements %p, declaration %p.\n", iface, elements, declaration);
@@ -2059,14 +2059,14 @@ static HRESULT WINAPI d3d9_device_SetVertexDeclaration(IDirect3DDevice9Ex *iface
         IDirect3DVertexDeclaration9 *declaration)
 {
     struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
-    IDirect3DVertexDeclaration9Impl *decl_impl = unsafe_impl_from_IDirect3DVertexDeclaration9(declaration);
+    struct d3d9_vertex_declaration *decl_impl = unsafe_impl_from_IDirect3DVertexDeclaration9(declaration);
     HRESULT hr;
 
     TRACE("iface %p, declaration %p.\n", iface, declaration);
 
     wined3d_mutex_lock();
     hr = wined3d_device_set_vertex_declaration(device->wined3d_device,
-            decl_impl ? decl_impl->wineD3DVertexDeclaration : NULL);
+            decl_impl ? decl_impl->wined3d_declaration : NULL);
     wined3d_mutex_unlock();
 
     return hr;
@@ -2077,7 +2077,7 @@ static HRESULT WINAPI d3d9_device_GetVertexDeclaration(IDirect3DDevice9Ex *iface
 {
     struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
     struct wined3d_vertex_declaration *wined3d_declaration = NULL;
-    IDirect3DVertexDeclaration9Impl *declaration_impl;
+    struct d3d9_vertex_declaration *declaration_impl;
     HRESULT hr;
 
     TRACE("iface %p, declaration %p.\n", iface, declaration);
@@ -2107,7 +2107,7 @@ static struct wined3d_vertex_declaration *device_get_fvf_declaration(struct d3d9
 {
     struct wined3d_vertex_declaration *wined3d_declaration;
     struct fvf_declaration *fvf_decls = device->fvf_decls;
-    IDirect3DVertexDeclaration9Impl *d3d9_declaration;
+    struct d3d9_vertex_declaration *d3d9_declaration;
     D3DVERTEXELEMENT9 *elements;
     int p, low, high; /* deliberately signed */
     HRESULT hr;
@@ -2156,8 +2156,8 @@ static struct wined3d_vertex_declaration *device_get_fvf_declaration(struct d3d9
         device->fvf_decl_size += grow;
     }
 
-    d3d9_declaration->convFVF = fvf;
-    wined3d_declaration = d3d9_declaration->wineD3DVertexDeclaration;
+    d3d9_declaration->fvf = fvf;
+    wined3d_declaration = d3d9_declaration->wined3d_declaration;
     wined3d_vertex_declaration_incref(wined3d_declaration);
     IDirect3DVertexDeclaration9_Release(&d3d9_declaration->IDirect3DVertexDeclaration9_iface);
 
@@ -2205,7 +2205,7 @@ static HRESULT WINAPI d3d9_device_GetFVF(IDirect3DDevice9Ex *iface, DWORD *fvf)
 {
     struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface);
     struct wined3d_vertex_declaration *wined3d_declaration;
-    IDirect3DVertexDeclaration9Impl *d3d9_declaration;
+    struct d3d9_vertex_declaration *d3d9_declaration;
     HRESULT hr;
 
     TRACE("iface %p, fvf %p.\n", iface, fvf);
@@ -2222,7 +2222,7 @@ static HRESULT WINAPI d3d9_device_GetFVF(IDirect3DDevice9Ex *iface, DWORD *fvf)
     if (wined3d_declaration)
     {
         d3d9_declaration = wined3d_vertex_declaration_get_parent(wined3d_declaration);
-        *fvf = d3d9_declaration->convFVF;
+        *fvf = d3d9_declaration->fvf;
         wined3d_vertex_declaration_decref(wined3d_declaration);
     }
     else
diff --git a/dlls/d3d9/vertexdeclaration.c b/dlls/d3d9/vertexdeclaration.c
index 5693caf..4fe1189 100644
--- a/dlls/d3d9/vertexdeclaration.c
+++ b/dlls/d3d9/vertexdeclaration.c
@@ -51,9 +51,9 @@ d3d_dtype_lookup[] =
     /* D3DDECLTYPE_FLOAT16_4 */ {WINED3DFMT_R16G16B16A16_FLOAT, 4, sizeof(short int)}
 };
 
-static inline IDirect3DVertexDeclaration9Impl *impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
+static inline struct d3d9_vertex_declaration *impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
 {
-    return CONTAINING_RECORD(iface, IDirect3DVertexDeclaration9Impl, IDirect3DVertexDeclaration9_iface);
+    return CONTAINING_RECORD(iface, struct d3d9_vertex_declaration, IDirect3DVertexDeclaration9_iface);
 }
 
 HRESULT vdecl_convert_fvf(
@@ -197,8 +197,7 @@ HRESULT vdecl_convert_fvf(
     return D3D_OK;
 }
 
-/* IDirect3DVertexDeclaration9 IUnknown parts follow: */
-static HRESULT WINAPI IDirect3DVertexDeclaration9Impl_QueryInterface(IDirect3DVertexDeclaration9 *iface,
+static HRESULT WINAPI d3d9_vertex_declaration_QueryInterface(IDirect3DVertexDeclaration9 *iface,
         REFIID riid, void **out)
 {
     TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
@@ -217,53 +216,52 @@ static HRESULT WINAPI IDirect3DVertexDeclaration9Impl_QueryInterface(IDirect3DVe
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI IDirect3DVertexDeclaration9Impl_AddRef(IDirect3DVertexDeclaration9 *iface)
+static ULONG WINAPI d3d9_vertex_declaration_AddRef(IDirect3DVertexDeclaration9 *iface)
 {
-    IDirect3DVertexDeclaration9Impl *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
-    ULONG ref = InterlockedIncrement(&declaration->ref);
+    struct d3d9_vertex_declaration *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
+    ULONG refcount = InterlockedIncrement(&declaration->refcount);
 
-    TRACE("%p increasing refcount to %u.\n", iface, ref);
+    TRACE("%p increasing refcount to %u.\n", iface, refcount);
 
-    if (ref == 1)
+    if (refcount == 1)
     {
-        IDirect3DDevice9Ex_AddRef(declaration->parentDevice);
+        IDirect3DDevice9Ex_AddRef(declaration->parent_device);
         wined3d_mutex_lock();
-        wined3d_vertex_declaration_incref(declaration->wineD3DVertexDeclaration);
+        wined3d_vertex_declaration_incref(declaration->wined3d_declaration);
         wined3d_mutex_unlock();
     }
 
-    return ref;
+    return refcount;
 }
 
-static ULONG WINAPI IDirect3DVertexDeclaration9Impl_Release(IDirect3DVertexDeclaration9 *iface)
+static ULONG WINAPI d3d9_vertex_declaration_Release(IDirect3DVertexDeclaration9 *iface)
 {
-    IDirect3DVertexDeclaration9Impl *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
-    ULONG ref = InterlockedDecrement(&declaration->ref);
+    struct d3d9_vertex_declaration *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
+    ULONG refcount = InterlockedDecrement(&declaration->refcount);
 
-    TRACE("%p decreasing refcount to %u.\n", iface, ref);
+    TRACE("%p decreasing refcount to %u.\n", iface, refcount);
 
-    if (!ref)
+    if (!refcount)
     {
-        IDirect3DDevice9Ex *parentDevice = declaration->parentDevice;
+        IDirect3DDevice9Ex *parent_device = declaration->parent_device;
         wined3d_mutex_lock();
-        wined3d_vertex_declaration_decref(declaration->wineD3DVertexDeclaration);
+        wined3d_vertex_declaration_decref(declaration->wined3d_declaration);
         wined3d_mutex_unlock();
 
         /* Release the device last, as it may cause the device to be destroyed. */
-        IDirect3DDevice9Ex_Release(parentDevice);
+        IDirect3DDevice9Ex_Release(parent_device);
     }
-    return ref;
+
+    return refcount;
 }
 
-/* IDirect3DVertexDeclaration9 Interface follow: */
-static HRESULT WINAPI IDirect3DVertexDeclaration9Impl_GetDevice(IDirect3DVertexDeclaration9 *iface,
-        IDirect3DDevice9 **device)
+static HRESULT WINAPI d3d9_vertex_declaration_GetDevice(IDirect3DVertexDeclaration9 *iface, IDirect3DDevice9 **device)
 {
-    IDirect3DVertexDeclaration9Impl *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
+    struct d3d9_vertex_declaration *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
 
     TRACE("iface %p, device %p.\n", iface, device);
 
-    *device = (IDirect3DDevice9 *)declaration->parentDevice;
+    *device = (IDirect3DDevice9 *)declaration->parent_device;
     IDirect3DDevice9_AddRef(*device);
 
     TRACE("Returning device %p.\n", *device);
@@ -271,10 +269,10 @@ static HRESULT WINAPI IDirect3DVertexDeclaration9Impl_GetDevice(IDirect3DVertexD
     return D3D_OK;
 }
 
-static HRESULT WINAPI IDirect3DVertexDeclaration9Impl_GetDeclaration(IDirect3DVertexDeclaration9 *iface,
+static HRESULT WINAPI d3d9_vertex_declaration_GetDeclaration(IDirect3DVertexDeclaration9 *iface,
         D3DVERTEXELEMENT9 *elements, UINT *element_count)
 {
-    IDirect3DVertexDeclaration9Impl *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
+    struct d3d9_vertex_declaration *declaration = impl_from_IDirect3DVertexDeclaration9(iface);
 
     TRACE("iface %p, elements %p, element_count %p.\n", iface, elements, element_count);
 
@@ -290,28 +288,28 @@ static HRESULT WINAPI IDirect3DVertexDeclaration9Impl_GetDeclaration(IDirect3DVe
     return D3D_OK;
 }
 
-static const IDirect3DVertexDeclaration9Vtbl Direct3DVertexDeclaration9_Vtbl =
+static const struct IDirect3DVertexDeclaration9Vtbl d3d9_vertex_declaration_vtbl =
 {
     /* IUnknown */
-    IDirect3DVertexDeclaration9Impl_QueryInterface,
-    IDirect3DVertexDeclaration9Impl_AddRef,
-    IDirect3DVertexDeclaration9Impl_Release,
+    d3d9_vertex_declaration_QueryInterface,
+    d3d9_vertex_declaration_AddRef,
+    d3d9_vertex_declaration_Release,
     /* IDirect3DVertexDeclaration9 */
-    IDirect3DVertexDeclaration9Impl_GetDevice,
-    IDirect3DVertexDeclaration9Impl_GetDeclaration
+    d3d9_vertex_declaration_GetDevice,
+    d3d9_vertex_declaration_GetDeclaration,
 };
 
-IDirect3DVertexDeclaration9Impl *unsafe_impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
+struct d3d9_vertex_declaration *unsafe_impl_from_IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9 *iface)
 {
     if (!iface)
         return NULL;
-    assert(iface->lpVtbl == &Direct3DVertexDeclaration9_Vtbl);
-    return CONTAINING_RECORD(iface, IDirect3DVertexDeclaration9Impl, IDirect3DVertexDeclaration9_iface);
+    assert(iface->lpVtbl == &d3d9_vertex_declaration_vtbl);
+    return CONTAINING_RECORD(iface, struct d3d9_vertex_declaration, IDirect3DVertexDeclaration9_iface);
 }
 
 static void STDMETHODCALLTYPE d3d9_vertexdeclaration_wined3d_object_destroyed(void *parent)
 {
-    IDirect3DVertexDeclaration9Impl *declaration = parent;
+    struct d3d9_vertex_declaration *declaration = parent;
     HeapFree(GetProcessHeap(), 0, declaration->elements);
     HeapFree(GetProcessHeap(), 0, declaration);
 }
@@ -366,7 +364,7 @@ static HRESULT convert_to_wined3d_declaration(const D3DVERTEXELEMENT9 *d3d9_elem
     return D3D_OK;
 }
 
-static HRESULT vertexdeclaration_init(IDirect3DVertexDeclaration9Impl *declaration,
+static HRESULT vertexdeclaration_init(struct d3d9_vertex_declaration *declaration,
         struct d3d9_device *device, const D3DVERTEXELEMENT9 *elements)
 {
     struct wined3d_vertex_element *wined3d_elements;
@@ -381,8 +379,8 @@ static HRESULT vertexdeclaration_init(IDirect3DVertexDeclaration9Impl *declarati
         return hr;
     }
 
-    declaration->IDirect3DVertexDeclaration9_iface.lpVtbl = &Direct3DVertexDeclaration9_Vtbl;
-    declaration->ref = 1;
+    declaration->IDirect3DVertexDeclaration9_iface.lpVtbl = &d3d9_vertex_declaration_vtbl;
+    declaration->refcount = 1;
 
     element_count = wined3d_element_count + 1;
     declaration->elements = HeapAlloc(GetProcessHeap(), 0, element_count * sizeof(*declaration->elements));
@@ -397,7 +395,7 @@ static HRESULT vertexdeclaration_init(IDirect3DVertexDeclaration9Impl *declarati
 
     wined3d_mutex_lock();
     hr = wined3d_vertex_declaration_create(device->wined3d_device, wined3d_elements, wined3d_element_count,
-            declaration, &d3d9_vertexdeclaration_wined3d_parent_ops, &declaration->wineD3DVertexDeclaration);
+            declaration, &d3d9_vertexdeclaration_wined3d_parent_ops, &declaration->wined3d_declaration);
     wined3d_mutex_unlock();
     HeapFree(GetProcessHeap(), 0, wined3d_elements);
     if (FAILED(hr))
@@ -407,16 +405,16 @@ static HRESULT vertexdeclaration_init(IDirect3DVertexDeclaration9Impl *declarati
         return hr;
     }
 
-    declaration->parentDevice = &device->IDirect3DDevice9Ex_iface;
-    IDirect3DDevice9Ex_AddRef(declaration->parentDevice);
+    declaration->parent_device = &device->IDirect3DDevice9Ex_iface;
+    IDirect3DDevice9Ex_AddRef(declaration->parent_device);
 
     return D3D_OK;
 }
 
 HRESULT d3d9_vertex_declaration_create(struct d3d9_device *device,
-        const D3DVERTEXELEMENT9 *elements, IDirect3DVertexDeclaration9Impl **declaration)
+        const D3DVERTEXELEMENT9 *elements, struct d3d9_vertex_declaration **declaration)
 {
-    IDirect3DVertexDeclaration9Impl *object;
+    struct d3d9_vertex_declaration *object;
     HRESULT hr;
 
     object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
-- 
1.7.3.4




More information about the wine-patches mailing list