From 236282559e168e1bd53054257b6ed9cafee769a3 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Fri, 1 Jul 2022 09:01:03 -0700 Subject: [PATCH] dzn: Use IUnknown instead of IDXGIAdapter1 as the stored adapter WSL doesn't support DXGI, and DirectX-Headers used to build for WSL doesn't have the DXGI headers, so we need to isolate DXGI usage and only build it on Windows Reviewed-by: Boris Brezillon Reviewed-by: Bill Kristiansen Part-of: --- src/microsoft/vulkan/dzn_device.c | 20 ++++++++++---------- src/microsoft/vulkan/dzn_private.h | 4 ++-- src/microsoft/vulkan/dzn_util.c | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/microsoft/vulkan/dzn_device.c b/src/microsoft/vulkan/dzn_device.c index f502f848a69..49ad6fd987e 100644 --- a/src/microsoft/vulkan/dzn_device.c +++ b/src/microsoft/vulkan/dzn_device.c @@ -135,7 +135,7 @@ dzn_physical_device_destroy(struct dzn_physical_device *pdev) ID3D12Device1_Release(pdev->dev); if (pdev->adapter) - IDXGIAdapter1_Release(pdev->adapter); + IUnknown_Release(pdev->adapter); dzn_wsi_finish(pdev); vk_physical_device_finish(&pdev->vk); @@ -299,7 +299,7 @@ const struct vk_pipeline_cache_object_ops *const dzn_pipeline_cache_import_ops[] static VkResult dzn_physical_device_create(struct dzn_instance *instance, - IDXGIAdapter1 *adapter, + IUnknown *adapter, const DXGI_ADAPTER_DESC1 *adapter_desc) { struct dzn_physical_device *pdev = @@ -329,7 +329,7 @@ dzn_physical_device_create(struct dzn_instance *instance, mtx_init(&pdev->dev_lock, mtx_plain); pdev->adapter_desc = *adapter_desc; pdev->adapter = adapter; - IDXGIAdapter1_AddRef(adapter); + IUnknown_AddRef(adapter); list_addtail(&pdev->link, &instance->physical_devices); vk_warn_non_conformant_implementation("dzn"); @@ -998,16 +998,14 @@ dzn_GetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, static VkResult dzn_instance_add_physical_device(struct dzn_instance *instance, - IDXGIAdapter1 *adapter) + IUnknown *adapter, + const DXGI_ADAPTER_DESC1 *desc) { - DXGI_ADAPTER_DESC1 desc; - IDXGIAdapter1_GetDesc1(adapter, &desc); - if ((instance->debug_flags & DZN_DEBUG_WARP) && - !(desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)) + !(desc->Flags & DXGI_ADAPTER_FLAG_SOFTWARE)) return VK_SUCCESS; - return dzn_physical_device_create(instance, adapter, &desc); + return dzn_physical_device_create(instance, adapter, desc); } VKAPI_ATTR VkResult VKAPI_CALL @@ -1022,8 +1020,10 @@ dzn_EnumeratePhysicalDevices(VkInstance inst, IDXGIAdapter1 *adapter = NULL; VkResult result = VK_SUCCESS; for (UINT i = 0; SUCCEEDED(IDXGIFactory4_EnumAdapters1(factory, i, &adapter)); ++i) { + DXGI_ADAPTER_DESC1 desc; + IDXGIAdapter1_GetDesc1(adapter, &desc); result = - dzn_instance_add_physical_device(instance, adapter); + dzn_instance_add_physical_device(instance, (IUnknown *)adapter, &desc); IDXGIAdapter1_Release(adapter); diff --git a/src/microsoft/vulkan/dzn_private.h b/src/microsoft/vulkan/dzn_private.h index b098b6a98e5..d85cd796ff3 100644 --- a/src/microsoft/vulkan/dzn_private.h +++ b/src/microsoft/vulkan/dzn_private.h @@ -182,7 +182,7 @@ struct dzn_physical_device { struct vk_device_extension_table supported_extensions; struct vk_physical_device_dispatch_table dispatch; - IDXGIAdapter1 *adapter; + IUnknown *adapter; DXGI_ADAPTER_DESC1 adapter_desc; uint32_t queue_family_count; @@ -234,7 +234,7 @@ void d3d12_enable_gpu_validation(void); ID3D12Device2 * -d3d12_create_device(IDXGIAdapter1 *adapter, bool experimental_features); +d3d12_create_device(IUnknown *adapter, bool experimental_features); struct dzn_queue { struct vk_queue vk; diff --git a/src/microsoft/vulkan/dzn_util.c b/src/microsoft/vulkan/dzn_util.c index 781dbc6bf4f..3e1c84d12c5 100644 --- a/src/microsoft/vulkan/dzn_util.c +++ b/src/microsoft/vulkan/dzn_util.c @@ -388,9 +388,9 @@ d3d12_enable_gpu_validation(void) } ID3D12Device2 * -d3d12_create_device(IDXGIAdapter1 *adapter, bool experimental_features) +d3d12_create_device(IUnknown *adapter, bool experimental_features) { - typedef HRESULT(WINAPI *PFN_D3D12CREATEDEVICE)(IDXGIAdapter1 *, D3D_FEATURE_LEVEL, REFIID, void **); + typedef HRESULT(WINAPI *PFN_D3D12CREATEDEVICE)(IUnknown *, D3D_FEATURE_LEVEL, REFIID, void **); PFN_D3D12CREATEDEVICE D3D12CreateDevice; struct util_dl_library *d3d12_mod = util_dl_open(UTIL_DL_PREFIX "d3d12" UTIL_DL_EXT);