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);
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);

View 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;

View 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);