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 <boris.brezillon@collabora.com>
Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17340>
This commit is contained in:
Jesse Natalie 2022-07-01 09:01:03 -07:00 committed by Marge Bot
parent 17c0888cfe
commit 236282559e
3 changed files with 14 additions and 14 deletions

View File

@ -135,7 +135,7 @@ dzn_physical_device_destroy(struct dzn_physical_device *pdev)
ID3D12Device1_Release(pdev->dev); ID3D12Device1_Release(pdev->dev);
if (pdev->adapter) if (pdev->adapter)
IDXGIAdapter1_Release(pdev->adapter); IUnknown_Release(pdev->adapter);
dzn_wsi_finish(pdev); dzn_wsi_finish(pdev);
vk_physical_device_finish(&pdev->vk); 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 static VkResult
dzn_physical_device_create(struct dzn_instance *instance, dzn_physical_device_create(struct dzn_instance *instance,
IDXGIAdapter1 *adapter, IUnknown *adapter,
const DXGI_ADAPTER_DESC1 *adapter_desc) const DXGI_ADAPTER_DESC1 *adapter_desc)
{ {
struct dzn_physical_device *pdev = struct dzn_physical_device *pdev =
@ -329,7 +329,7 @@ dzn_physical_device_create(struct dzn_instance *instance,
mtx_init(&pdev->dev_lock, mtx_plain); mtx_init(&pdev->dev_lock, mtx_plain);
pdev->adapter_desc = *adapter_desc; pdev->adapter_desc = *adapter_desc;
pdev->adapter = adapter; pdev->adapter = adapter;
IDXGIAdapter1_AddRef(adapter); IUnknown_AddRef(adapter);
list_addtail(&pdev->link, &instance->physical_devices); list_addtail(&pdev->link, &instance->physical_devices);
vk_warn_non_conformant_implementation("dzn"); vk_warn_non_conformant_implementation("dzn");
@ -998,16 +998,14 @@ dzn_GetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice,
static VkResult static VkResult
dzn_instance_add_physical_device(struct dzn_instance *instance, 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) && if ((instance->debug_flags & DZN_DEBUG_WARP) &&
!(desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)) !(desc->Flags & DXGI_ADAPTER_FLAG_SOFTWARE))
return VK_SUCCESS; return VK_SUCCESS;
return dzn_physical_device_create(instance, adapter, &desc); return dzn_physical_device_create(instance, adapter, desc);
} }
VKAPI_ATTR VkResult VKAPI_CALL VKAPI_ATTR VkResult VKAPI_CALL
@ -1022,8 +1020,10 @@ dzn_EnumeratePhysicalDevices(VkInstance inst,
IDXGIAdapter1 *adapter = NULL; IDXGIAdapter1 *adapter = NULL;
VkResult result = VK_SUCCESS; VkResult result = VK_SUCCESS;
for (UINT i = 0; SUCCEEDED(IDXGIFactory4_EnumAdapters1(factory, i, &adapter)); ++i) { for (UINT i = 0; SUCCEEDED(IDXGIFactory4_EnumAdapters1(factory, i, &adapter)); ++i) {
DXGI_ADAPTER_DESC1 desc;
IDXGIAdapter1_GetDesc1(adapter, &desc);
result = result =
dzn_instance_add_physical_device(instance, adapter); dzn_instance_add_physical_device(instance, (IUnknown *)adapter, &desc);
IDXGIAdapter1_Release(adapter); IDXGIAdapter1_Release(adapter);

View File

@ -182,7 +182,7 @@ struct dzn_physical_device {
struct vk_device_extension_table supported_extensions; struct vk_device_extension_table supported_extensions;
struct vk_physical_device_dispatch_table dispatch; struct vk_physical_device_dispatch_table dispatch;
IDXGIAdapter1 *adapter; IUnknown *adapter;
DXGI_ADAPTER_DESC1 adapter_desc; DXGI_ADAPTER_DESC1 adapter_desc;
uint32_t queue_family_count; uint32_t queue_family_count;
@ -234,7 +234,7 @@ void
d3d12_enable_gpu_validation(void); d3d12_enable_gpu_validation(void);
ID3D12Device2 * ID3D12Device2 *
d3d12_create_device(IDXGIAdapter1 *adapter, bool experimental_features); d3d12_create_device(IUnknown *adapter, bool experimental_features);
struct dzn_queue { struct dzn_queue {
struct vk_queue vk; struct vk_queue vk;

View File

@ -388,9 +388,9 @@ d3d12_enable_gpu_validation(void)
} }
ID3D12Device2 * 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; PFN_D3D12CREATEDEVICE D3D12CreateDevice;
struct util_dl_library *d3d12_mod = util_dl_open(UTIL_DL_PREFIX "d3d12" UTIL_DL_EXT); struct util_dl_library *d3d12_mod = util_dl_open(UTIL_DL_PREFIX "d3d12" UTIL_DL_EXT);