Module: wine Branch: master Commit: 5a7ff3b45c78784dca0a465d9e21483f72bce6e5 URL: https://gitlab.winehq.org/wine/wine/-/commit/5a7ff3b45c78784dca0a465d9e21483...
Author: Paul Gofman pgofman@codeweavers.com Date: Fri Mar 15 19:56:46 2024 -0600
ddraw: Store surface handles in the global table.
---
dlls/ddraw/device.c | 10 +--------- dlls/ddraw/executebuffer.c | 6 ++---- dlls/ddraw/main.c | 4 ++++ dlls/ddraw/surface.c | 5 ++--- 4 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 725c925e602..9677c352258 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -319,14 +319,6 @@ static ULONG WINAPI d3d_device_inner_Release(IUnknown *iface) break; }
- case DDRAW_HANDLE_SURFACE: - { - struct ddraw_surface *surf = entry->object; - FIXME("Texture handle %#lx (%p) not unset properly.\n", i + 1, surf); - surf->Handle = 0; - break; - } - default: FIXME("Handle %#lx (%p) has unknown type %#x.\n", i + 1, entry->object, entry->type); break; @@ -2760,7 +2752,7 @@ static HRESULT WINAPI d3d_device3_SetRenderState(IDirect3DDevice3 *iface, break; }
- surf = ddraw_get_object(&device->handle_table, value - 1, DDRAW_HANDLE_SURFACE); + surf = ddraw_get_object(NULL, value - 1, DDRAW_HANDLE_SURFACE); if (!surf) { WARN("Invalid texture handle.\n"); diff --git a/dlls/ddraw/executebuffer.c b/dlls/ddraw/executebuffer.c index 320ce6649d4..c6988a3347b 100644 --- a/dlls/ddraw/executebuffer.c +++ b/dlls/ddraw/executebuffer.c @@ -347,14 +347,12 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, struct d3d
instr += size;
- if (!(dst = ddraw_get_object(&device->handle_table, - ci->hDestTexture - 1, DDRAW_HANDLE_SURFACE))) + if (!(dst = ddraw_get_object(NULL, ci->hDestTexture - 1, DDRAW_HANDLE_SURFACE))) { WARN("Invalid destination texture handle %#lx.\n", ci->hDestTexture); continue; } - if (!(src = ddraw_get_object(&device->handle_table, - ci->hSrcTexture - 1, DDRAW_HANDLE_SURFACE))) + if (!(src = ddraw_get_object(NULL, ci->hSrcTexture - 1, DDRAW_HANDLE_SURFACE))) { WARN("Invalid source texture handle %#lx.\n", ci->hSrcTexture); continue; diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c index b4e6b3d4893..a08cfd12613 100644 --- a/dlls/ddraw/main.c +++ b/dlls/ddraw/main.c @@ -916,6 +916,10 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, void *reserved) WARN("Material handle %#x (%p) not unset properly.\n", i + 1, entry->object); break;
+ case DDRAW_HANDLE_SURFACE: + WARN("Texture handle %#x (%p) not unset properly.\n", i + 1, entry->object); + break; + default: WARN("Handle %#x (%p) has unknown type %#x.\n", i + 1, entry->object, entry->type); break; diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index a096c5d7d8e..46fefb2f727 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -5441,7 +5441,6 @@ static HRESULT WINAPI d3d_texture2_GetHandle(IDirect3DTexture2 *iface, IDirect3DDevice2 *device, D3DTEXTUREHANDLE *handle) { struct ddraw_surface *surface = impl_from_IDirect3DTexture2(iface); - struct d3d_device *device_impl = unsafe_impl_from_IDirect3DDevice2(device);
TRACE("iface %p, device %p, handle %p.\n", iface, device, handle);
@@ -5449,7 +5448,7 @@ static HRESULT WINAPI d3d_texture2_GetHandle(IDirect3DTexture2 *iface,
if (!surface->Handle) { - DWORD h = ddraw_allocate_handle(&device_impl->handle_table, surface, DDRAW_HANDLE_SURFACE); + DWORD h = ddraw_allocate_handle(NULL, surface, DDRAW_HANDLE_SURFACE); if (h == DDRAW_INVALID_HANDLE) { ERR("Failed to allocate a texture handle.\n"); @@ -6060,7 +6059,7 @@ static void STDMETHODCALLTYPE ddraw_surface_wined3d_object_destroyed(void *paren
/* Having a texture handle set implies that the device still exists. */ if (surface->Handle) - ddraw_free_handle(&surface->ddraw->d3ddevice->handle_table, surface->Handle - 1, DDRAW_HANDLE_SURFACE); + ddraw_free_handle(NULL, surface->Handle - 1, DDRAW_HANDLE_SURFACE);
/* Reduce the ddraw surface count. */ list_remove(&surface->surface_list_entry);