[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