[PATCH 5/5] d3d9: Get rid of IDirect3DCubeTexture9Impl.

Henri Verbeet hverbeet at codeweavers.com
Sun Apr 22 15:47:44 CDT 2012


---
 dlls/d3d9/{texture.c => cubetexture.c} |  207 +++++++++++++++++---------------
 dlls/d3d9/d3d9_private.h               |   19 +---
 dlls/d3d9/device.c                     |    6 +-
 dlls/d3d9/texture.c                    |    4 +-
 4 files changed, 117 insertions(+), 119 deletions(-)
 copy dlls/d3d9/{texture.c => cubetexture.c} (56%)

diff --git a/dlls/d3d9/texture.c b/dlls/d3d9/cubetexture.c
similarity index 56%
copy from dlls/d3d9/texture.c
copy to dlls/d3d9/cubetexture.c
index 76a942a..3409116 100644
--- a/dlls/d3d9/texture.c
+++ b/dlls/d3d9/cubetexture.c
@@ -1,5 +1,5 @@
 /*
- * IDirect3DTexture9 implementation
+ * IDirect3DCubeTexture9 implementation
  *
  * Copyright 2002-2005 Jason Edmeades
  * Copyright 2002-2005 Raphael Junqueira
@@ -25,21 +25,22 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(d3d9);
 
-static inline struct d3d9_texture *impl_from_IDirect3DTexture9(IDirect3DTexture9 *iface)
+
+static inline struct d3d9_texture *impl_from_IDirect3DCubeTexture9(IDirect3DCubeTexture9 *iface)
 {
-    return CONTAINING_RECORD(iface, struct d3d9_texture, IDirect3DTexture9_iface);
+    return CONTAINING_RECORD(iface, struct d3d9_texture, IDirect3DBaseTexture9_iface);
 }
 
-static HRESULT WINAPI d3d9_texture_2d_QueryInterface(IDirect3DTexture9 *iface, REFIID riid, void **out)
+static HRESULT WINAPI d3d9_texture_cube_QueryInterface(IDirect3DCubeTexture9 *iface, REFIID riid, void **out)
 {
     TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
 
-    if (IsEqualGUID(riid, &IID_IDirect3DTexture9)
+    if (IsEqualGUID(riid, &IID_IDirect3DCubeTexture9)
             || IsEqualGUID(riid, &IID_IDirect3DBaseTexture9)
             || IsEqualGUID(riid, &IID_IDirect3DResource9)
             || IsEqualGUID(riid, &IID_IUnknown))
     {
-        IDirect3DTexture9_AddRef(iface);
+        IDirect3DCubeTexture9_AddRef(iface);
         *out = iface;
         return S_OK;
     }
@@ -50,9 +51,9 @@ static HRESULT WINAPI d3d9_texture_2d_QueryInterface(IDirect3DTexture9 *iface, R
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI d3d9_texture_2d_AddRef(IDirect3DTexture9 *iface)
+static ULONG WINAPI d3d9_texture_cube_AddRef(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     ULONG ref = InterlockedIncrement(&texture->refcount);
 
     TRACE("%p increasing refcount to %u.\n", iface, ref);
@@ -68,9 +69,9 @@ static ULONG WINAPI d3d9_texture_2d_AddRef(IDirect3DTexture9 *iface)
     return ref;
 }
 
-static ULONG WINAPI d3d9_texture_2d_Release(IDirect3DTexture9 *iface)
+static ULONG WINAPI d3d9_texture_cube_Release(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     ULONG ref = InterlockedDecrement(&texture->refcount);
 
     TRACE("%p decreasing refcount to %u.\n", iface, ref);
@@ -79,6 +80,8 @@ static ULONG WINAPI d3d9_texture_2d_Release(IDirect3DTexture9 *iface)
     {
         IDirect3DDevice9Ex *parent_device = texture->parent_device;
 
+        TRACE("Releasing child %p.\n", texture->wined3d_texture);
+
         wined3d_mutex_lock();
         wined3d_texture_decref(texture->wined3d_texture);
         wined3d_mutex_unlock();
@@ -89,9 +92,9 @@ static ULONG WINAPI d3d9_texture_2d_Release(IDirect3DTexture9 *iface)
     return ref;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_GetDevice(IDirect3DTexture9 *iface, IDirect3DDevice9 **device)
+static HRESULT WINAPI d3d9_texture_cube_GetDevice(IDirect3DCubeTexture9 *iface, IDirect3DDevice9 **device)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
 
     TRACE("iface %p, device %p.\n", iface, device);
 
@@ -103,10 +106,10 @@ static HRESULT WINAPI d3d9_texture_2d_GetDevice(IDirect3DTexture9 *iface, IDirec
     return D3D_OK;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_SetPrivateData(IDirect3DTexture9 *iface,
+static HRESULT WINAPI d3d9_texture_cube_SetPrivateData(IDirect3DCubeTexture9 *iface,
         REFGUID guid, const void *data, DWORD data_size, DWORD flags)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     struct wined3d_resource *resource;
     HRESULT hr;
 
@@ -121,10 +124,10 @@ static HRESULT WINAPI d3d9_texture_2d_SetPrivateData(IDirect3DTexture9 *iface,
     return hr;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_GetPrivateData(IDirect3DTexture9 *iface,
+static HRESULT WINAPI d3d9_texture_cube_GetPrivateData(IDirect3DCubeTexture9 *iface,
         REFGUID guid, void *data, DWORD *data_size)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     struct wined3d_resource *resource;
     HRESULT hr;
 
@@ -139,9 +142,9 @@ static HRESULT WINAPI d3d9_texture_2d_GetPrivateData(IDirect3DTexture9 *iface,
     return hr;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_FreePrivateData(IDirect3DTexture9 *iface, REFGUID guid)
+static HRESULT WINAPI d3d9_texture_cube_FreePrivateData(IDirect3DCubeTexture9 *iface, REFGUID guid)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     struct wined3d_resource *resource;
     HRESULT hr;
 
@@ -155,9 +158,9 @@ static HRESULT WINAPI d3d9_texture_2d_FreePrivateData(IDirect3DTexture9 *iface,
     return hr;
 }
 
-static DWORD WINAPI d3d9_texture_2d_SetPriority(IDirect3DTexture9 *iface, DWORD priority)
+static DWORD WINAPI d3d9_texture_cube_SetPriority(IDirect3DCubeTexture9 *iface, DWORD priority)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     DWORD ret;
 
     TRACE("iface %p, priority %u.\n", iface, priority);
@@ -169,9 +172,9 @@ static DWORD WINAPI d3d9_texture_2d_SetPriority(IDirect3DTexture9 *iface, DWORD
     return ret;
 }
 
-static DWORD WINAPI d3d9_texture_2d_GetPriority(IDirect3DTexture9 *iface)
+static DWORD WINAPI d3d9_texture_cube_GetPriority(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     DWORD ret;
 
     TRACE("iface %p.\n", iface);
@@ -183,9 +186,9 @@ static DWORD WINAPI d3d9_texture_2d_GetPriority(IDirect3DTexture9 *iface)
     return ret;
 }
 
-static void WINAPI d3d9_texture_2d_PreLoad(IDirect3DTexture9 *iface)
+static void WINAPI d3d9_texture_cube_PreLoad(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
 
     TRACE("iface %p.\n", iface);
 
@@ -194,16 +197,16 @@ static void WINAPI d3d9_texture_2d_PreLoad(IDirect3DTexture9 *iface)
     wined3d_mutex_unlock();
 }
 
-static D3DRESOURCETYPE WINAPI d3d9_texture_2d_GetType(IDirect3DTexture9 *iface)
+static D3DRESOURCETYPE WINAPI d3d9_texture_cube_GetType(IDirect3DCubeTexture9 *iface)
 {
     TRACE("iface %p.\n", iface);
 
-    return D3DRTYPE_TEXTURE;
+    return D3DRTYPE_CUBETEXTURE;
 }
 
-static DWORD WINAPI d3d9_texture_2d_SetLOD(IDirect3DTexture9 *iface, DWORD lod)
+static DWORD WINAPI d3d9_texture_cube_SetLOD(IDirect3DCubeTexture9 *iface, DWORD lod)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     DWORD ret;
 
     TRACE("iface %p, lod %u.\n", iface, lod);
@@ -215,9 +218,9 @@ static DWORD WINAPI d3d9_texture_2d_SetLOD(IDirect3DTexture9 *iface, DWORD lod)
     return ret;
 }
 
-static DWORD WINAPI d3d9_texture_2d_GetLOD(IDirect3DTexture9 *iface)
+static DWORD WINAPI d3d9_texture_cube_GetLOD(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     DWORD ret;
 
     TRACE("iface %p.\n", iface);
@@ -229,9 +232,9 @@ static DWORD WINAPI d3d9_texture_2d_GetLOD(IDirect3DTexture9 *iface)
     return ret;
 }
 
-static DWORD WINAPI d3d9_texture_2d_GetLevelCount(IDirect3DTexture9 *iface)
+static DWORD WINAPI d3d9_texture_cube_GetLevelCount(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     DWORD ret;
 
     TRACE("iface %p.\n", iface);
@@ -243,9 +246,10 @@ static DWORD WINAPI d3d9_texture_2d_GetLevelCount(IDirect3DTexture9 *iface)
     return ret;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_SetAutoGenFilterType(IDirect3DTexture9 *iface, D3DTEXTUREFILTERTYPE filter_type)
+static HRESULT WINAPI d3d9_texture_cube_SetAutoGenFilterType(IDirect3DCubeTexture9 *iface,
+        D3DTEXTUREFILTERTYPE filter_type)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     HRESULT hr;
 
     TRACE("iface %p, filter_type %#x.\n", iface, filter_type);
@@ -258,9 +262,9 @@ static HRESULT WINAPI d3d9_texture_2d_SetAutoGenFilterType(IDirect3DTexture9 *if
     return hr;
 }
 
-static D3DTEXTUREFILTERTYPE WINAPI d3d9_texture_2d_GetAutoGenFilterType(IDirect3DTexture9 *iface)
+static D3DTEXTUREFILTERTYPE WINAPI d3d9_texture_cube_GetAutoGenFilterType(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     D3DTEXTUREFILTERTYPE ret;
 
     TRACE("iface %p.\n", iface);
@@ -272,9 +276,9 @@ static D3DTEXTUREFILTERTYPE WINAPI d3d9_texture_2d_GetAutoGenFilterType(IDirect3
     return ret;
 }
 
-static void WINAPI d3d9_texture_2d_GenerateMipSubLevels(IDirect3DTexture9 *iface)
+static void WINAPI d3d9_texture_cube_GenerateMipSubLevels(IDirect3DCubeTexture9 *iface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
 
     TRACE("iface %p.\n", iface);
 
@@ -283,9 +287,9 @@ static void WINAPI d3d9_texture_2d_GenerateMipSubLevels(IDirect3DTexture9 *iface
     wined3d_mutex_unlock();
 }
 
-static HRESULT WINAPI d3d9_texture_2d_GetLevelDesc(IDirect3DTexture9 *iface, UINT level, D3DSURFACE_DESC *desc)
+static HRESULT WINAPI d3d9_texture_cube_GetLevelDesc(IDirect3DCubeTexture9 *iface, UINT level, D3DSURFACE_DESC *desc)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     struct wined3d_resource *sub_resource;
     HRESULT hr = D3D_OK;
 
@@ -313,16 +317,18 @@ static HRESULT WINAPI d3d9_texture_2d_GetLevelDesc(IDirect3DTexture9 *iface, UIN
     return hr;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_GetSurfaceLevel(IDirect3DTexture9 *iface,
-        UINT level, IDirect3DSurface9 **surface)
+static HRESULT WINAPI d3d9_texture_cube_GetCubeMapSurface(IDirect3DCubeTexture9 *iface,
+        D3DCUBEMAP_FACES face, UINT level, IDirect3DSurface9 **surface)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     struct wined3d_resource *sub_resource;
+    UINT sub_resource_idx;
 
-    TRACE("iface %p, level %u, surface %p.\n", iface, level, surface);
+    TRACE("iface %p, face %#x, level %u, surface %p.\n", iface, face, level, surface);
 
     wined3d_mutex_lock();
-    if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level)))
+    sub_resource_idx = wined3d_texture_get_level_count(texture->wined3d_texture) * face + level;
+    if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, sub_resource_idx)))
     {
         wined3d_mutex_unlock();
         return D3DERR_INVALIDCALL;
@@ -335,18 +341,21 @@ static HRESULT WINAPI d3d9_texture_2d_GetSurfaceLevel(IDirect3DTexture9 *iface,
     return D3D_OK;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_LockRect(IDirect3DTexture9 *iface,
-        UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags)
+static HRESULT WINAPI d3d9_texture_cube_LockRect(IDirect3DCubeTexture9 *iface,
+        D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect,
+        DWORD flags)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     struct wined3d_resource *sub_resource;
+    UINT sub_resource_idx;
     HRESULT hr;
 
-    TRACE("iface %p, level %u, locked_rect %p, rect %p, flags %#x.\n",
-            iface, level, locked_rect, rect, flags);
+    TRACE("iface %p, face %#x, level %u, locked_rect %p, rect %p, flags %#x.\n",
+            iface, face, level, locked_rect, rect, flags);
 
     wined3d_mutex_lock();
-    if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level)))
+    sub_resource_idx = wined3d_texture_get_level_count(texture->wined3d_texture) * face + level;
+    if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, sub_resource_idx)))
         hr = D3DERR_INVALIDCALL;
     else
         hr = IDirect3DSurface9_LockRect((IDirect3DSurface9 *)wined3d_resource_get_parent(sub_resource),
@@ -356,16 +365,19 @@ static HRESULT WINAPI d3d9_texture_2d_LockRect(IDirect3DTexture9 *iface,
     return hr;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_UnlockRect(IDirect3DTexture9 *iface, UINT level)
+static HRESULT WINAPI d3d9_texture_cube_UnlockRect(IDirect3DCubeTexture9 *iface,
+        D3DCUBEMAP_FACES face, UINT level)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     struct wined3d_resource *sub_resource;
+    UINT sub_resource_idx;
     HRESULT hr;
 
-    TRACE("iface %p, level %u.\n", iface, level);
+    TRACE("iface %p, face %#x, level %u.\n", iface, face, level);
 
     wined3d_mutex_lock();
-    if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level)))
+    sub_resource_idx = wined3d_texture_get_level_count(texture->wined3d_texture) * face + level;
+    if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, sub_resource_idx)))
         hr = D3DERR_INVALIDCALL;
     else
         hr = IDirect3DSurface9_UnlockRect((IDirect3DSurface9 *)wined3d_resource_get_parent(sub_resource));
@@ -374,17 +386,18 @@ static HRESULT WINAPI d3d9_texture_2d_UnlockRect(IDirect3DTexture9 *iface, UINT
     return hr;
 }
 
-static HRESULT WINAPI d3d9_texture_2d_AddDirtyRect(IDirect3DTexture9 *iface, const RECT *dirty_rect)
+static HRESULT  WINAPI d3d9_texture_cube_AddDirtyRect(IDirect3DCubeTexture9 *iface,
+        D3DCUBEMAP_FACES face, const RECT *dirty_rect)
 {
-    struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface);
+    struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface);
     HRESULT hr;
 
-    TRACE("iface %p, dirty_rect %s.\n",
-            iface, wine_dbgstr_rect(dirty_rect));
+    TRACE("iface %p, face %#x, dirty_rect %s.\n",
+            iface, face, wine_dbgstr_rect(dirty_rect));
 
     wined3d_mutex_lock();
     if (!dirty_rect)
-        hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, 0, NULL);
+        hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, face, NULL);
     else
     {
         struct wined3d_box dirty_region;
@@ -395,69 +408,69 @@ static HRESULT WINAPI d3d9_texture_2d_AddDirtyRect(IDirect3DTexture9 *iface, con
         dirty_region.bottom = dirty_rect->bottom;
         dirty_region.front = 0;
         dirty_region.back = 1;
-        hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, 0, &dirty_region);
+        hr = wined3d_texture_add_dirty_region(texture->wined3d_texture, face, &dirty_region);
     }
     wined3d_mutex_unlock();
 
     return hr;
 }
 
-static const IDirect3DTexture9Vtbl d3d9_texture_2d_vtbl =
+static const IDirect3DCubeTexture9Vtbl d3d9_texture_cube_vtbl =
 {
     /* IUnknown */
-    d3d9_texture_2d_QueryInterface,
-    d3d9_texture_2d_AddRef,
-    d3d9_texture_2d_Release,
-     /* IDirect3DResource9 */
-    d3d9_texture_2d_GetDevice,
-    d3d9_texture_2d_SetPrivateData,
-    d3d9_texture_2d_GetPrivateData,
-    d3d9_texture_2d_FreePrivateData,
-    d3d9_texture_2d_SetPriority,
-    d3d9_texture_2d_GetPriority,
-    d3d9_texture_2d_PreLoad,
-    d3d9_texture_2d_GetType,
-    /* IDirect3dBaseTexture9 */
-    d3d9_texture_2d_SetLOD,
-    d3d9_texture_2d_GetLOD,
-    d3d9_texture_2d_GetLevelCount,
-    d3d9_texture_2d_SetAutoGenFilterType,
-    d3d9_texture_2d_GetAutoGenFilterType,
-    d3d9_texture_2d_GenerateMipSubLevels,
-    /* IDirect3DTexture9 */
-    d3d9_texture_2d_GetLevelDesc,
-    d3d9_texture_2d_GetSurfaceLevel,
-    d3d9_texture_2d_LockRect,
-    d3d9_texture_2d_UnlockRect,
-    d3d9_texture_2d_AddDirtyRect,
+    d3d9_texture_cube_QueryInterface,
+    d3d9_texture_cube_AddRef,
+    d3d9_texture_cube_Release,
+    /* IDirect3DResource9 */
+    d3d9_texture_cube_GetDevice,
+    d3d9_texture_cube_SetPrivateData,
+    d3d9_texture_cube_GetPrivateData,
+    d3d9_texture_cube_FreePrivateData,
+    d3d9_texture_cube_SetPriority,
+    d3d9_texture_cube_GetPriority,
+    d3d9_texture_cube_PreLoad,
+    d3d9_texture_cube_GetType,
+    /* IDirect3DBaseTexture9 */
+    d3d9_texture_cube_SetLOD,
+    d3d9_texture_cube_GetLOD,
+    d3d9_texture_cube_GetLevelCount,
+    d3d9_texture_cube_SetAutoGenFilterType,
+    d3d9_texture_cube_GetAutoGenFilterType,
+    d3d9_texture_cube_GenerateMipSubLevels,
+    /* IDirect3DCubeTexture9 */
+    d3d9_texture_cube_GetLevelDesc,
+    d3d9_texture_cube_GetCubeMapSurface,
+    d3d9_texture_cube_LockRect,
+    d3d9_texture_cube_UnlockRect,
+    d3d9_texture_cube_AddDirtyRect,
 };
 
-static void STDMETHODCALLTYPE d3d9_texture_wined3d_object_destroyed(void *parent)
+static void STDMETHODCALLTYPE cubetexture_wined3d_object_destroyed(void *parent)
 {
     HeapFree(GetProcessHeap(), 0, parent);
 }
 
-static const struct wined3d_parent_ops d3d9_texture_wined3d_parent_ops =
+static const struct wined3d_parent_ops d3d9_cubetexture_wined3d_parent_ops =
 {
-    d3d9_texture_wined3d_object_destroyed,
+    cubetexture_wined3d_object_destroyed,
 };
 
-HRESULT texture_init(struct d3d9_texture *texture, IDirect3DDevice9Impl *device,
-        UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool)
+HRESULT cubetexture_init(struct d3d9_texture *texture, IDirect3DDevice9Impl *device,
+        UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool)
 {
     HRESULT hr;
 
-    texture->IDirect3DTexture9_iface.lpVtbl = &d3d9_texture_2d_vtbl;
+    texture->IDirect3DBaseTexture9_iface.lpVtbl = (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_cube_vtbl;
     texture->refcount = 1;
 
     wined3d_mutex_lock();
-    hr = wined3d_texture_create_2d(device->wined3d_device, width, height, levels,
-            usage & WINED3DUSAGE_MASK, wined3dformat_from_d3dformat(format), pool,
-            texture, &d3d9_texture_wined3d_parent_ops, &texture->wined3d_texture);
+    hr = wined3d_texture_create_cube(device->wined3d_device, edge_length,
+            levels, usage, wined3dformat_from_d3dformat(format), pool, texture,
+            &d3d9_cubetexture_wined3d_parent_ops, &texture->wined3d_texture);
     wined3d_mutex_unlock();
     if (FAILED(hr))
     {
-        WARN("Failed to create wined3d texture, hr %#x.\n", hr);
+        WARN("Failed to create wined3d cube texture, hr %#x.\n", hr);
         return hr;
     }
 
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index c1d8788..143763a 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
@@ -305,28 +305,13 @@ typedef struct IDirect3DBaseTexture9Impl
 
 struct d3d9_texture
 {
-    IDirect3DTexture9 IDirect3DTexture9_iface;
+    IDirect3DBaseTexture9 IDirect3DBaseTexture9_iface;
     LONG refcount;
     struct wined3d_texture *wined3d_texture;
     IDirect3DDevice9Ex *parent_device;
 };
 
-/* --------------------- */
-/* IDirect3DCubeTexture9 */
-/* --------------------- */
-
-/*****************************************************************************
- * IDirect3DCubeTexture9 implementation structure
- */
-typedef struct IDirect3DCubeTexture9Impl
-{
-    IDirect3DCubeTexture9 IDirect3DCubeTexture9_iface;
-    LONG ref;
-    struct wined3d_texture *wined3d_texture;
-    IDirect3DDevice9Ex *parentDevice;
-}  IDirect3DCubeTexture9Impl;
-
-HRESULT cubetexture_init(IDirect3DCubeTexture9Impl *texture, IDirect3DDevice9Impl *device,
+HRESULT cubetexture_init(struct d3d9_texture *texture, IDirect3DDevice9Impl *device,
         UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool) DECLSPEC_HIDDEN;
 HRESULT texture_init(struct d3d9_texture *texture, IDirect3DDevice9Impl *device,
         UINT width, UINT height, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool) DECLSPEC_HIDDEN;
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 9721268..86eda85 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -721,7 +721,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_CreateTexture(IDirect3DDevice9Ex *ifa
     }
 
     TRACE("Created texture %p.\n", object);
-    *texture = &object->IDirect3DTexture9_iface;
+    *texture = (IDirect3DTexture9 *)&object->IDirect3DBaseTexture9_iface;
 
     return D3D_OK;
 }
@@ -768,7 +768,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_CreateCubeTexture(IDirect3DDevice9Ex
         IDirect3DCubeTexture9 **texture, HANDLE *shared_handle)
 {
     IDirect3DDevice9Impl *This = impl_from_IDirect3DDevice9Ex(iface);
-    IDirect3DCubeTexture9Impl *object;
+    struct d3d9_texture *object;
     HRESULT hr;
 
     TRACE("iface %p, edge_length %u, levels %u, usage %#x, format %#x, pool %#x, texture %p, shared_handle %p.\n",
@@ -793,7 +793,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_CreateCubeTexture(IDirect3DDevice9Ex
     }
 
     TRACE("Created cube texture %p.\n", object);
-    *texture = &object->IDirect3DCubeTexture9_iface;
+    *texture = (IDirect3DCubeTexture9 *)&object->IDirect3DBaseTexture9_iface;
 
     return D3D_OK;
 }
diff --git a/dlls/d3d9/texture.c b/dlls/d3d9/texture.c
index 76a942a..6ece7c5 100644
--- a/dlls/d3d9/texture.c
+++ b/dlls/d3d9/texture.c
@@ -27,7 +27,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d9);
 
 static inline struct d3d9_texture *impl_from_IDirect3DTexture9(IDirect3DTexture9 *iface)
 {
-    return CONTAINING_RECORD(iface, struct d3d9_texture, IDirect3DTexture9_iface);
+    return CONTAINING_RECORD(iface, struct d3d9_texture, IDirect3DBaseTexture9_iface);
 }
 
 static HRESULT WINAPI d3d9_texture_2d_QueryInterface(IDirect3DTexture9 *iface, REFIID riid, void **out)
@@ -447,7 +447,7 @@ HRESULT texture_init(struct d3d9_texture *texture, IDirect3DDevice9Impl *device,
 {
     HRESULT hr;
 
-    texture->IDirect3DTexture9_iface.lpVtbl = &d3d9_texture_2d_vtbl;
+    texture->IDirect3DBaseTexture9_iface.lpVtbl = (const IDirect3DBaseTexture9Vtbl *)&d3d9_texture_2d_vtbl;
     texture->refcount = 1;
 
     wined3d_mutex_lock();
-- 
1.7.3.4




More information about the wine-patches mailing list