[PATCH vkd3d 3/8] tests: Add tests for selecting physical devices.
Józef Kucia
joseph.kucia at gmail.com
Wed Jan 17 05:48:10 CST 2018
From: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
Makefile.am | 1 +
tests/vkd3d_api.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/Makefile.am b/Makefile.am
index a99fa56163f3..f796befb3672 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -120,6 +120,7 @@ check_PROGRAMS = $(vkd3d_tests) $(vkd3d_cross_tests)
AM_DEFAULT_SOURCE_EXT = .c
TESTS = $(vkd3d_tests) $(vkd3d_cross_tests)
tests_d3d12_LDADD = $(LDADD) @PTHREAD_LIBS@
+tests_vkd3d_api_LDADD = libvkd3d.la @VULKAN_LIBS@
DEMOS_LDADD = $(LDADD) libvkd3d-shader.la @XCB_LIBS@ @VULKAN_LIBS@
DEMOS_CFLAGS = @XCB_CFLAGS@
diff --git a/tests/vkd3d_api.c b/tests/vkd3d_api.c
index 7ca5d264781f..bda0c4ee1798 100644
--- a/tests/vkd3d_api.c
+++ b/tests/vkd3d_api.c
@@ -94,8 +94,8 @@ static void test_create_instance(void)
static void test_create_device(void)
{
+ struct vkd3d_instance *instance, *tmp_instance;
struct vkd3d_device_create_info create_info;
- struct vkd3d_instance *instance;
ID3D12Device *device;
ULONG refcount;
HRESULT hr;
@@ -125,6 +125,8 @@ static void test_create_device(void)
refcount = vkd3d_instance_incref(instance);
ok(refcount >= 3, "Got unexpected refcount %u.\n", refcount);
vkd3d_instance_decref(instance);
+ tmp_instance = vkd3d_instance_from_device(device);
+ ok(tmp_instance == instance, "Got instance %p, expected %p.\n", tmp_instance, instance);
refcount = ID3D12Device_Release(device);
ok(!refcount, "Device has %u references left.\n", refcount);
@@ -137,6 +139,61 @@ static void test_create_device(void)
ok(!refcount, "Instance has %u references left.\n", refcount);
}
+static void test_physical_device(void)
+{
+ struct vkd3d_device_create_info create_info;
+ VkPhysicalDevice *vk_physical_devices;
+ VkPhysicalDevice vk_physical_device;
+ struct vkd3d_instance *instance;
+ VkInstance vk_instance;
+ ID3D12Device *device;
+ uint32_t i, count;
+ ULONG refcount;
+ VkResult vr;
+ HRESULT hr;
+
+ hr = vkd3d_create_instance(&instance_default_create_info, &instance);
+ ok(hr == S_OK, "Failed to create instance, hr %#x.\n", hr);
+ vk_instance = vkd3d_get_vk_instance(instance);
+ ok(vk_instance != VK_NULL_HANDLE, "Failed to get Vulkan instance.\n");
+
+ create_info = device_default_create_info;
+ create_info.instance = instance;
+ create_info.instance_create_info = NULL;
+ create_info.vk_physical_device = VK_NULL_HANDLE;
+ hr = vkd3d_create_device(&create_info, &IID_ID3D12Device, (void **)&device);
+ ok(hr == S_OK, "Failed to create device, hr %#x.\n", hr);
+ vk_physical_device = vkd3d_get_vk_physical_device(device);
+ trace("Default Vulkan physical device %p.\n", vk_physical_device);
+ refcount = ID3D12Device_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+
+ vr = vkEnumeratePhysicalDevices(vk_instance, &count, NULL);
+ ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
+ vk_physical_devices = calloc(count, sizeof(*vk_physical_devices));
+ ok(vk_physical_devices, "Failed to allocate memory.\n");
+ vr = vkEnumeratePhysicalDevices(vk_instance, &count, vk_physical_devices);
+ ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
+
+ for (i = 0; i < count; ++i)
+ {
+ trace("Creating device for Vulkan physical device %p.\n", vk_physical_devices[i]);
+
+ create_info.vk_physical_device = vk_physical_devices[i];
+ hr = vkd3d_create_device(&create_info, &IID_ID3D12Device, (void **)&device);
+ ok(hr == S_OK, "Failed to create device, hr %#x.\n", hr);
+ vk_physical_device = vkd3d_get_vk_physical_device(device);
+ ok(vk_physical_device == vk_physical_devices[i],
+ "Got unexpected Vulkan physical device %p.\n", vk_physical_device);
+ refcount = ID3D12Device_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+ }
+
+ free(vk_physical_devices);
+ refcount = vkd3d_instance_decref(instance);
+ ok(!refcount, "Instance has %u references left.\n", refcount);
+}
+
static void test_vkd3d_queue(void)
{
ID3D12CommandQueue *direct_queue, *compute_queue, *copy_queue;
@@ -198,5 +255,6 @@ START_TEST(vkd3d_api)
run_test(test_create_instance);
run_test(test_create_device);
+ run_test(test_physical_device);
run_test(test_vkd3d_queue);
}
--
2.13.6
More information about the wine-devel
mailing list