[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