dzn: Use IUnknown instead of IDXGIAdapter1 as the stored adapter
authorJesse Natalie <jenatali@microsoft.com>
Fri, 1 Jul 2022 16:01:03 +0000 (09:01 -0700)
committerMarge Bot <emma+marge@anholt.net>
Wed, 6 Jul 2022 12:18:55 +0000 (12:18 +0000)
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 <boris.brezillon@collabora.com>
Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17340>

src/microsoft/vulkan/dzn_device.c
src/microsoft/vulkan/dzn_private.h
src/microsoft/vulkan/dzn_util.c

index f502f84..49ad6fd 100644 (file)
@@ -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);
 
index b098b6a..d85cd79 100644 (file)
@@ -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;
index 781dbc6..3e1c84d 100644 (file)
@@ -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);