tests: Do not crash if a pipeline statistics query heap cannot be created.

This currently happens on MoltenVK.
This commit is contained in:
Giovanni Mascellani 2023-09-18 11:56:20 +02:00 committed by Alexandre Julliard
parent d742770499
commit 6dfdbb5c26
Notes: Alexandre Julliard 2023-09-22 22:47:46 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/354
4 changed files with 25 additions and 3 deletions

2
README
View File

@ -9,7 +9,7 @@ similar, but not identical, to Direct3D 12.
Building vkd3d
==============
Vkd3d depends on SPIRV-Headers and Vulkan-Headers (>= 1.2.139).
Vkd3d depends on SPIRV-Headers and Vulkan-Headers (>= 1.2.148).
Vkd3d generates some of its headers from IDL files. If you are using the
release tarballs, then these headers are pre-generated and are included. If

View File

@ -83,7 +83,7 @@ AS_IF([test "x$ac_cv_header_spirv_unified1_GLSL_std_450_h" != "xyes" \
-a "x$ac_cv_header_vulkan_GLSL_std_450_h" != "xyes"],
[AC_MSG_ERROR([GLSL.std.450.h not found.])])
VKD3D_CHECK_VULKAN_HEADER_VERSION([139], [AC_MSG_ERROR([Vulkan headers are too old, 1.2.139 is required.])])
VKD3D_CHECK_VULKAN_HEADER_VERSION([148], [AC_MSG_ERROR([Vulkan headers are too old, 1.2.148 is required.])])
AC_CHECK_DECL([SpvCapabilityDemoteToHelperInvocationEXT],, [AC_MSG_ERROR([SPIR-V headers are too old.])], [
#ifdef HAVE_SPIRV_UNIFIED1_SPIRV_H

View File

@ -23740,9 +23740,11 @@ static void test_create_query_heap(void)
heap_desc.NodeMask = 0;
hr = ID3D12Device_CreateQueryHeap(device, &heap_desc, &IID_ID3D12QueryHeap, (void **)&query_heap);
bug_if(types[i] == D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS && is_mvk_device(device))
ok(hr == S_OK, "Failed to create query heap, type %u, hr %#x.\n", types[i], hr);
ID3D12QueryHeap_Release(query_heap);
if (hr == S_OK)
ID3D12QueryHeap_Release(query_heap);
}
heap_desc.Type = D3D12_QUERY_HEAP_TYPE_SO_STATISTICS;
@ -23881,7 +23883,14 @@ static void test_query_pipeline_statistics(void)
heap_desc.Count = 2;
heap_desc.NodeMask = 0;
hr = ID3D12Device_CreateQueryHeap(device, &heap_desc, &IID_ID3D12QueryHeap, (void **)&query_heap);
bug_if(is_mvk_device(device))
ok(SUCCEEDED(hr), "Failed to create query heap, type %u, hr %#x.\n", heap_desc.Type, hr);
if (FAILED(hr))
{
ID3D12PipelineState_Release(pso);
destroy_test_context(&context);
return;
}
resource = create_readback_buffer(device, 2 * sizeof(struct D3D12_QUERY_DATA_PIPELINE_STATISTICS));

View File

@ -411,6 +411,11 @@ static inline bool is_radv_device(ID3D12Device *device)
return false;
}
static inline bool is_mvk_device(ID3D12Device *device)
{
return false;
}
static inline bool is_depth_clip_enable_supported(ID3D12Device *device)
{
return true;
@ -660,6 +665,14 @@ static inline bool is_radv_device(ID3D12Device *device)
return properties.driverID == VK_DRIVER_ID_MESA_RADV_KHR;
}
static inline bool is_mvk_device(ID3D12Device *device)
{
VkPhysicalDeviceDriverPropertiesKHR properties;
get_driver_properties(device, &properties);
return properties.driverID == VK_DRIVER_ID_MOLTENVK;
}
static inline bool is_depth_clip_enable_supported(ID3D12Device *device)
{
VkPhysicalDevice vk_physical_device = vkd3d_get_vk_physical_device(device);