Skip to content

Commit e36024c

Browse files
jozefkuciajulliard
authored andcommitted
tests: Print driver info from VK_KHR_driver_properties.
In preparation for the next commit. Signed-off-by: Józef Kucia <[email protected]> Signed-off-by: Henri Verbeet <[email protected]> Signed-off-by: Alexandre Julliard <[email protected]>
1 parent 0854560 commit e36024c

File tree

2 files changed

+162
-2
lines changed

2 files changed

+162
-2
lines changed

Makefile.am

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ AM_DEFAULT_SOURCE_EXT = .c
142142
if BUILD_TESTS
143143
check_PROGRAMS = $(vkd3d_tests) $(vkd3d_cross_tests)
144144
TESTS = $(vkd3d_tests) $(vkd3d_cross_tests)
145-
tests_d3d12_LDADD = $(LDADD) @PTHREAD_LIBS@
145+
tests_d3d12_LDADD = $(LDADD) @PTHREAD_LIBS@ @VULKAN_LIBS@
146+
tests_d3d12_invalid_usage_LDADD = $(LDADD) @VULKAN_LIBS@
146147
tests_vkd3d_api_LDADD = libvkd3d.la @VULKAN_LIBS@
147148
tests_vkd3d_shader_api_LDADD = libvkd3d-shader.la
148149
endif

tests/d3d12_crosstest.h

Lines changed: 160 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ typedef int HRESULT;
5555
# include "vkd3d_dxgi1_4.h"
5656
#else
5757
# include <pthread.h>
58+
# include "vkd3d.h"
5859
# include "vkd3d_utils.h"
5960
#endif
6061

@@ -324,12 +325,170 @@ static inline bool is_amd_device(ID3D12Device *device)
324325
return desc.VendorId == 0x1002;
325326
}
326327
#else
328+
static bool have_VK_KHR_driver_properties;
329+
330+
static HRESULT create_vkd3d_instance(struct vkd3d_instance **instance)
331+
{
332+
struct vkd3d_optional_instance_extensions_info optional_extensions_info;
333+
struct vkd3d_instance_create_info instance_create_info;
334+
335+
static const char * const optional_instance_extensions[] =
336+
{
337+
VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME,
338+
};
339+
340+
memset(&optional_extensions_info, 0, sizeof(optional_extensions_info));
341+
optional_extensions_info.type = VKD3D_STRUCTURE_TYPE_OPTIONAL_INSTANCE_EXTENSIONS_INFO;
342+
optional_extensions_info.extensions = optional_instance_extensions;
343+
optional_extensions_info.extension_count = ARRAY_SIZE(optional_instance_extensions);
344+
345+
memset(&instance_create_info, 0, sizeof(instance_create_info));
346+
instance_create_info.type = VKD3D_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
347+
instance_create_info.next = &optional_extensions_info;
348+
instance_create_info.pfn_signal_event = vkd3d_signal_event;
349+
instance_create_info.wchar_size = sizeof(WCHAR);
350+
351+
return vkd3d_create_instance(&instance_create_info, instance);
352+
}
353+
354+
static HRESULT create_vkd3d_device(struct vkd3d_instance *instance,
355+
D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device)
356+
{
357+
struct vkd3d_device_create_info device_create_info;
358+
359+
static const char * const device_extensions[] =
360+
{
361+
VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME,
362+
};
363+
364+
memset(&device_create_info, 0, sizeof(device_create_info));
365+
device_create_info.type = VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
366+
device_create_info.minimum_feature_level = minimum_feature_level;
367+
device_create_info.instance = instance;
368+
if (have_VK_KHR_driver_properties)
369+
{
370+
device_create_info.device_extensions = device_extensions;
371+
device_create_info.device_extension_count = ARRAY_SIZE(device_extensions);
372+
}
373+
374+
return vkd3d_create_device(&device_create_info, iid, device);
375+
}
376+
377+
static bool check_device_extension(VkPhysicalDevice vk_physical_device, const char *name)
378+
{
379+
VkExtensionProperties *properties;
380+
bool ret = false;
381+
unsigned int i;
382+
uint32_t count;
383+
VkResult vr;
384+
385+
vr = vkEnumerateDeviceExtensionProperties(vk_physical_device, NULL, &count, NULL);
386+
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
387+
if (!count)
388+
return false;
389+
390+
properties = calloc(count, sizeof(*properties));
391+
ok(properties, "Failed to allocate memory.\n");
392+
393+
vr = vkEnumerateDeviceExtensionProperties(vk_physical_device, NULL, &count, properties);
394+
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
395+
for (i = 0; i < count; ++i)
396+
{
397+
if (!strcmp(properties[i].extensionName, name))
398+
{
399+
ret = true;
400+
break;
401+
}
402+
}
403+
404+
free(properties);
405+
return ret;
406+
}
407+
408+
HRESULT WINAPI D3D12CreateDevice(IUnknown *adapter,
409+
D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device)
410+
{
411+
struct vkd3d_instance *instance;
412+
HRESULT hr;
413+
414+
if (SUCCEEDED(hr = create_vkd3d_instance(&instance)))
415+
{
416+
hr = create_vkd3d_device(instance, minimum_feature_level, iid, device);
417+
vkd3d_instance_decref(instance);
418+
}
419+
420+
return hr;
421+
}
422+
327423
static IUnknown *create_adapter(void)
328424
{
329425
return NULL;
330426
}
331427

332-
static void init_adapter_info(void) {}
428+
static void init_adapter_info(void)
429+
{
430+
PFN_vkGetPhysicalDeviceProperties2KHR pfn_vkGetPhysicalDeviceProperties2KHR;
431+
VkPhysicalDeviceDriverPropertiesKHR driver_properties;
432+
VkPhysicalDeviceProperties2 device_properties2;
433+
VkPhysicalDevice *vk_physical_devices;
434+
VkPhysicalDevice vk_physical_device;
435+
struct vkd3d_instance *instance;
436+
VkInstance vk_instance;
437+
ID3D12Device *device;
438+
uint32_t count, i;
439+
VkResult vr;
440+
HRESULT hr;
441+
442+
if (FAILED(hr = create_vkd3d_instance(&instance)))
443+
return;
444+
445+
vk_instance = vkd3d_instance_get_vk_instance(instance);
446+
447+
vr = vkEnumeratePhysicalDevices(vk_instance, &count, NULL);
448+
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
449+
vk_physical_devices = calloc(count, sizeof(*vk_physical_devices));
450+
ok(vk_physical_devices, "Failed to allocate memory.\n");
451+
vr = vkEnumeratePhysicalDevices(vk_instance, &count, vk_physical_devices);
452+
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
453+
454+
have_VK_KHR_driver_properties = true;
455+
for (i = 0; i < count; ++i)
456+
{
457+
if (!check_device_extension(vk_physical_devices[i],VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME))
458+
{
459+
have_VK_KHR_driver_properties = false;
460+
break;
461+
}
462+
}
463+
464+
free(vk_physical_devices);
465+
466+
if (!have_VK_KHR_driver_properties)
467+
goto done;
468+
469+
if (FAILED(hr = create_vkd3d_device(instance, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device)))
470+
goto done;
471+
472+
vk_physical_device = vkd3d_get_vk_physical_device(device);
473+
474+
pfn_vkGetPhysicalDeviceProperties2KHR
475+
= (void *)vkGetInstanceProcAddr(vk_instance, "vkGetPhysicalDeviceProperties2KHR");
476+
ok(pfn_vkGetPhysicalDeviceProperties2KHR, "vkGetPhysicalDeviceProperties2KHR is NULL.\n");
477+
478+
memset(&device_properties2, 0, sizeof(device_properties2));
479+
device_properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
480+
device_properties2.pNext = &driver_properties;
481+
memset(&driver_properties, 0, sizeof(driver_properties));
482+
driver_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR;
483+
pfn_vkGetPhysicalDeviceProperties2KHR(vk_physical_device, &device_properties2);
484+
485+
trace("Driver name: %s, driver info: %s.\n", driver_properties.driverName, driver_properties.driverInfo);
486+
487+
ID3D12Device_Release(device);
488+
489+
done:
490+
vkd3d_instance_decref(instance);
491+
}
333492

334493
static inline bool is_amd_device(ID3D12Device *device)
335494
{

0 commit comments

Comments
 (0)