Signed-off-by: Zhiyi Zhang zzhang@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)
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=53218
Your paranoid android.
=== debian9 (32 bit report) ===
d3d11: d3d11.c:6101: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:6111: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0.
=== debian9 (32 bit WoW report) ===
d3d11: d3d11.c:6101: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:6111: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:16849: Test failed: Got {-1.00787401e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001}, expected {-1.00000000e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001} at (0, 0), sub-resource 0.
=== debian9 (64 bit WoW report) ===
d3d11: d3d11.c:6101: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:6111: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:16849: Test failed: Got {-1.00787401e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001}, expected {-1.00000000e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001} at (0, 0), sub-resource 0.