Henri Verbeet : d3d9: Simplify reset_enum_callback().
Alexandre Julliard
julliard at winehq.org
Thu May 5 12:08:06 CDT 2011
Module: wine
Branch: master
Commit: 99092e8a0a74a77efec0526c0ccad61c9ebe3544
URL: http://source.winehq.org/git/wine.git/?a=commit;h=99092e8a0a74a77efec0526c0ccad61c9ebe3544
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Wed May 4 22:18:43 2011 +0200
d3d9: Simplify reset_enum_callback().
Note that the existing code wouldn't work for volumes, since volumes aren't
proper resources in d3d9.
---
dlls/d3d9/device.c | 68 ++++++++++++++++------------------------------------
1 files changed, 21 insertions(+), 47 deletions(-)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 915fdf0..c7ebfc9 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -540,61 +540,35 @@ static UINT WINAPI IDirect3DDevice9Impl_GetNumberOfSwapChains(IDirect3DDevice9Ex
static HRESULT WINAPI reset_enum_callback(struct wined3d_resource *resource, void *data)
{
+ struct wined3d_resource_desc desc;
BOOL *resources_ok = data;
- D3DRESOURCETYPE type;
- HRESULT ret = S_OK;
- D3DSURFACE_DESC surface_desc;
- D3DVOLUME_DESC volume_desc;
- D3DINDEXBUFFER_DESC index_desc;
- D3DVERTEXBUFFER_DESC vertex_desc;
- WINED3DPOOL pool;
- IDirect3DResource9 *parent;
-
- parent = wined3d_resource_get_parent(resource);
- type = IDirect3DResource9_GetType(parent);
- switch(type) {
- case D3DRTYPE_SURFACE:
- IDirect3DSurface9_GetDesc((IDirect3DSurface9 *)parent, &surface_desc);
- pool = surface_desc.Pool;
- break;
-
- case D3DRTYPE_VOLUME:
- IDirect3DVolume9_GetDesc((IDirect3DVolume9 *)parent, &volume_desc);
- pool = volume_desc.Pool;
- break;
-
- case D3DRTYPE_INDEXBUFFER:
- IDirect3DIndexBuffer9_GetDesc((IDirect3DIndexBuffer9 *) parent, &index_desc);
- pool = index_desc.Pool;
- break;
-
- case D3DRTYPE_VERTEXBUFFER:
- IDirect3DVertexBuffer9_GetDesc((IDirect3DVertexBuffer9 *)parent, &vertex_desc);
- pool = vertex_desc.Pool;
- break;
-
- /* No need to check for textures. If there is a D3DPOOL_DEFAULT texture, there
- * is a D3DPOOL_DEFAULT surface or volume as well
- */
- default:
- pool = WINED3DPOOL_SCRATCH; /* a harmless pool */
- break;
- }
- if (pool == WINED3DPOOL_DEFAULT)
+ wined3d_resource_get_desc(resource, &desc);
+ if (desc.pool == WINED3DPOOL_DEFAULT)
{
- IDirect3DResource9_AddRef(parent);
- if (IUnknown_Release(parent) == 0)
+ IDirect3DSurface9 *surface;
+
+ if (desc.resource_type != WINED3DRTYPE_SURFACE)
{
- TRACE("Parent %p is an implicit resource with ref 0\n", parent);
- } else {
- WARN("Resource %p(wineD3D %p) with pool D3DPOOL_DEFAULT blocks the Reset call\n", parent, resource);
- ret = S_FALSE;
+ WARN("Resource %p in pool D3DPOOL_DEFAULT blocks the Reset call.\n", resource);
*resources_ok = FALSE;
+ return S_FALSE;
}
+
+ surface = wined3d_resource_get_parent(resource);
+
+ IDirect3DSurface9_AddRef(surface);
+ if (IDirect3DSurface9_Release(surface))
+ {
+ WARN("Surface %p (resource %p) in pool D3DPOOL_DEFAULT blocks the Reset call.\n", surface, resource);
+ *resources_ok = FALSE;
+ return S_FALSE;
+ }
+
+ WARN("Surface %p (resource %p) is an implicit resource with ref 0.\n", surface, resource);
}
- return ret;
+ return S_OK;
}
static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_Reset(IDirect3DDevice9Ex *iface,
More information about the wine-cvs
mailing list