[PATCH 2/4] gdi32: Implement D3DKMTCloseAdapter.
Zhiyi Zhang
zzhang at codeweavers.com
Tue Jun 4 02:43:25 CDT 2019
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/d3d11/d3d11.spec | 2 +-
dlls/gdi32/driver.c | 24 ++++++++++++++++++++++--
dlls/gdi32/tests/driver.c | 4 ++--
3 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/dlls/d3d11/d3d11.spec b/dlls/d3d11/d3d11.spec
index 365e5d7c0c..87304b7c13 100644
--- a/dlls/d3d11/d3d11.spec
+++ b/dlls/d3d11/d3d11.spec
@@ -5,7 +5,7 @@
@ stdcall D3D11CreateDevice(ptr long ptr long ptr long long ptr ptr ptr)
@ stdcall D3D11CreateDeviceAndSwapChain(ptr long ptr long ptr long long ptr ptr ptr ptr ptr)
@ stdcall D3D11On12CreateDevice(ptr long ptr long ptr long long ptr ptr ptr)
-@ stub D3DKMTCloseAdapter
+@ stdcall D3DKMTCloseAdapter(ptr) gdi32.D3DKMTCloseAdapter
@ stub D3DKMTCreateAllocation
@ stub D3DKMTCreateContext
@ stub D3DKMTCreateDevice
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index 047209a938..cb8c1df2e5 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -1272,8 +1272,28 @@ NTSTATUS WINAPI D3DKMTEscape( const void *pData )
*/
NTSTATUS WINAPI D3DKMTCloseAdapter( const D3DKMT_CLOSEADAPTER *desc )
{
- FIXME("(%p): stub\n", desc);
- return STATUS_SUCCESS;
+ struct d3dkmt_adapter *adapter, *adapter2;
+ NTSTATUS status = STATUS_INVALID_PARAMETER;
+
+ TRACE("(%p)\n", desc);
+
+ if (!desc || !desc->hAdapter)
+ return STATUS_INVALID_PARAMETER;
+
+ EnterCriticalSection( &driver_section );
+ LIST_FOR_EACH_ENTRY_SAFE( adapter, adapter2, &d3dkmt_adapters, struct d3dkmt_adapter, entry )
+ {
+ if (adapter->handle == desc->hAdapter)
+ {
+ list_remove( &adapter->entry );
+ heap_free( adapter );
+ status = STATUS_SUCCESS;
+ break;
+ }
+ }
+ LeaveCriticalSection( &driver_section );
+
+ return status;
}
/******************************************************************************
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c
index 067c162838..caded27aef 100644
--- a/dlls/gdi32/tests/driver.c
+++ b/dlls/gdi32/tests/driver.c
@@ -179,11 +179,11 @@ static void test_D3DKMTCloseAdapter(void)
/* Invalid parameters */
status = pD3DKMTCloseAdapter(NULL);
- todo_wine ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#x.\n", status);
+ ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#x.\n", status);
memset(&close_adapter_desc, 0, sizeof(close_adapter_desc));
status = pD3DKMTCloseAdapter(&close_adapter_desc);
- todo_wine ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#x.\n", status);
+ ok(status == STATUS_INVALID_PARAMETER, "Got unexpected return code %#x.\n", status);
}
static void test_D3DKMTCreateDevice(void)
--
2.20.1
More information about the wine-devel
mailing list