From 1fc1fe3c6e0ced257082262c6cc03e1a83fab544 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Fri, 16 Nov 2007 20:28:45 +0100 Subject: [PATCH] wined3d: Use standard wine lists for the resource list. --- dlls/wined3d/device.c | 56 +++++++++--------------------------------- dlls/wined3d/directx.c | 1 + dlls/wined3d/palette.c | 10 ++++---- dlls/wined3d/resource.c | 9 +++---- dlls/wined3d/wined3d_private.h | 10 +++----- 5 files changed, 24 insertions(+), 62 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index eb656bbaf92..30ac0b79d41 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -179,9 +179,9 @@ static ULONG WINAPI IWineD3DDeviceImpl_Release(IWineD3DDevice *iface) { /* NOTE: You must release the parent if the object was created via a callback ** ***************************/ - if (This->resources != NULL ) { + if (!list_empty(&This->resources)) { FIXME("(%p) Device released with resources still bound, acceptable but unexpected\n", This); - dumpResources(This->resources); + dumpResources(&This->resources); } if(This->contexts) ERR("Context array not freed!\n"); @@ -6622,18 +6622,18 @@ static BOOL WINAPI IWineD3DDeviceImpl_ShowCursor(IWineD3DDevice* iface, BOO static HRESULT WINAPI IWineD3DDeviceImpl_TestCooperativeLevel(IWineD3DDevice* iface) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; + IWineD3DResourceImpl *resource; TRACE("(%p) : state (%u)\n", This, This->state); + /* TODO: Implement wrapping of the WndProc so that mimimize and maxamise can be monitored and the states adjusted. */ switch (This->state) { case WINED3D_OK: return WINED3D_OK; case WINED3DERR_DEVICELOST: { - ResourceList *resourceList = This->resources; - while (NULL != resourceList) { - if (((IWineD3DResourceImpl *)resourceList->resource)->resource.pool == WINED3DPOOL_DEFAULT /* TODO: IWineD3DResource_GetPool(resourceList->resource)*/) - return WINED3DERR_DEVICENOTRESET; - resourceList = resourceList->next; + LIST_FOR_EACH_ENTRY(resource, &This->resources, IWineD3DResourceImpl, resource.resource_list_entry) { + if (resource->resource.pool == WINED3DPOOL_DEFAULT) + return WINED3DERR_DEVICENOTRESET; } return WINED3DERR_DEVICELOST; } @@ -6876,51 +6876,17 @@ static void WINAPI IWineD3DDeviceImpl_GetGammaRamp(IWineD3DDevice *iface, UINT i *****************************************************/ static void WINAPI IWineD3DDeviceImpl_AddResource(IWineD3DDevice *iface, IWineD3DResource *resource){ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; - ResourceList* resourceList; - - TRACE("(%p) : resource %p\n", This, resource); - /* add a new texture to the frot of the linked list */ - resourceList = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ResourceList)); - resourceList->resource = resource; - - /* Get the old head */ - resourceList->next = This->resources; - - This->resources = resourceList; - TRACE("Added resource %p with element %p pointing to %p\n", resource, resourceList, resourceList->next); - return; + TRACE("(%p) : Adding Resource %p\n", This, resource); + list_add_head(&This->resources, &((IWineD3DResourceImpl *) resource)->resource.resource_list_entry); } static void WINAPI IWineD3DDeviceImpl_RemoveResource(IWineD3DDevice *iface, IWineD3DResource *resource){ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; - ResourceList* resourceList = NULL; - ResourceList* previousResourceList = NULL; - - TRACE("(%p) : resource %p\n", This, resource); - resourceList = This->resources; + TRACE("(%p) : Removing resource %p\n", This, resource); - while (resourceList != NULL) { - if(resourceList->resource == resource) break; - previousResourceList = resourceList; - resourceList = resourceList->next; - } - - if (resourceList == NULL) { - FIXME("Attempted to remove resource %p that hasn't been stored\n", resource); - return; - } else { - TRACE("Found resource %p with element %p pointing to %p (previous %p)\n", resourceList->resource, resourceList, resourceList->next, previousResourceList); - } - /* make sure we don't leave a hole in the list */ - if (previousResourceList != NULL) { - previousResourceList->next = resourceList->next; - } else { - This->resources = resourceList->next; - } - - return; + list_remove(&((IWineD3DResourceImpl *) resource)->resource.resource_list_entry); } diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 8ed2d9246f1..696ce104c87 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2695,6 +2695,7 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter, object->adapter = numAdapters ? &Adapters[Adapter] : NULL; IWineD3D_AddRef(object->wineD3D); object->parent = parent; + list_init(&object->resources); if(This->dxVersion == 7) { object->surface_alignment = 8; diff --git a/dlls/wined3d/palette.c b/dlls/wined3d/palette.c index a1dcc9f95f7..506b4fe0630 100644 --- a/dlls/wined3d/palette.c +++ b/dlls/wined3d/palette.c @@ -107,7 +107,7 @@ static HRESULT WINAPI IWineD3DPaletteImpl_GetEntries(IWineD3DPalette *iface, DW static HRESULT WINAPI IWineD3DPaletteImpl_SetEntries(IWineD3DPalette *iface, DWORD Flags, DWORD Start, DWORD Count, PALETTEENTRY *PalEnt) { IWineD3DPaletteImpl *This = (IWineD3DPaletteImpl *)iface; - ResourceList *res; + IWineD3DResourceImpl *res; TRACE("(%p)->(%08x,%d,%d,%p)\n",This,Flags,Start,Count,PalEnt); @@ -134,11 +134,11 @@ static HRESULT WINAPI IWineD3DPaletteImpl_SetEntries(IWineD3DPalette *iface, DW /* If the palette is attached to the render target, update all render targets */ - for(res = This->wineD3DDevice->resources; res != NULL; res=res->next) { - if(IWineD3DResource_GetType(res->resource) == WINED3DRTYPE_SURFACE) { - IWineD3DSurfaceImpl *impl = (IWineD3DSurfaceImpl *) res->resource; + LIST_FOR_EACH_ENTRY(res, &This->wineD3DDevice->resources, IWineD3DResourceImpl, resource.resource_list_entry) { + if(IWineD3DResource_GetType((IWineD3DResource *) res) == WINED3DRTYPE_SURFACE) { + IWineD3DSurfaceImpl *impl = (IWineD3DSurfaceImpl *) res; if(impl->palette == This) - IWineD3DSurface_RealizePalette( (IWineD3DSurface *) res->resource); + IWineD3DSurface_RealizePalette((IWineD3DSurface *) res); } } diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c index 9faaea575b8..151af2c2838 100644 --- a/dlls/wined3d/resource.c +++ b/dlls/wined3d/resource.c @@ -248,12 +248,11 @@ HRESULT WINAPI IWineD3DResourceImpl_GetParent(IWineD3DResource *iface, IUnknown return WINED3D_OK; } -void dumpResources(ResourceList *resources) { - ResourceList *iterator = resources; +void dumpResources(struct list *list) { + IWineD3DResourceImpl *resource; - while(iterator) { - FIXME("Leftover resource %p with type %d,%s\n", iterator->resource, IWineD3DResource_GetType(iterator->resource), debug_d3dresourcetype(IWineD3DResource_GetType(iterator->resource))); - iterator = iterator->next; + LIST_FOR_EACH_ENTRY(resource, list, IWineD3DResourceImpl, resource.resource_list_entry) { + FIXME("Leftover resource %p with type %d,%s\n", resource, IWineD3DResource_GetType((IWineD3DResource *) resource), debug_d3dresourcetype(IWineD3DResource_GetType((IWineD3DResource *) resource))); } } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index dbcff48520d..c77d2af6a74 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -625,13 +625,8 @@ extern BOOL pbuffer_support; /* allocate one pbuffer per surface */ extern BOOL pbuffer_per_surface; -typedef struct ResourceList { - IWineD3DResource *resource; - struct ResourceList *next; -} ResourceList; - /* A helper function that dumps a resource list */ -void dumpResources(ResourceList *resources); +void dumpResources(struct list *list); /***************************************************************************** * IWineD3DDevice implementation structure @@ -681,7 +676,7 @@ struct IWineD3DDeviceImpl IWineD3DSwapChain **swapchains; UINT NumberOfSwapChains; - ResourceList *resources; /* a linked list to track resources created by the device */ + struct list resources; /* a linked list to track resources created by the device */ /* Render Target Support */ IWineD3DSurface **render_targets; @@ -821,6 +816,7 @@ typedef struct IWineD3DResourceClass BYTE *allocatedMemory; /* Pointer to the real data location */ BYTE *heapMemory; /* Pointer to the HeapAlloced block of memory */ struct list privateData; + struct list resource_list_entry; } IWineD3DResourceClass; -- 2.11.4.GIT