tests: Skip test_graphics_compute_queue_synchronization() on paravirtualized MoltenVK.

This used to work when the macOS runner had a Sonoma host system.
Now it has Sequoia, even if the guest is still Sonoma, and the
test crashes with:

    [mvk-error] VK_TIMEOUT: MTLCommandBuffer "vkQueueSubmit MTLCommandBuffer on Queue 3-0" execution failed (code 2): Caused GPU Hang Error (00000003:kIOGPUCommandBufferCallbackErrorHang)
    vkd3d:56072:err:vkd3d_wait_for_gpu_timeline_semaphore Failed to wait for Vulkan timeline semaphore, vr -4.

Upgrading MoltenVK or the guest to Sequoia doesn't seem to help.
I haven't investigated the problem, but my experience is that
the paravirtualized Metal driver has a number of problems.
This commit is contained in:
Giovanni Mascellani
2025-06-05 16:17:15 +02:00
committed by Henri Verbeet
parent 7e134f85a4
commit d65be3d0c5
Notes: Henri Verbeet 2025-06-05 17:09:15 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1545
2 changed files with 22 additions and 0 deletions

View File

@@ -35116,6 +35116,13 @@ static void test_graphics_compute_queue_synchronization(void)
device = context.device;
queue = context.queue;
if (is_mvk_paravirtualized_device(device))
{
skip("GPU hangs on paravirtualized MVK.\n");
destroy_test_context(&context);
return;
}
root_parameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;
root_parameters[0].Descriptor.ShaderRegister = 1;
root_parameters[0].Descriptor.RegisterSpace = 0;

View File

@@ -538,6 +538,11 @@ static inline bool is_mvk_device(ID3D12Device *device)
return false;
}
static inline bool is_mvk_paravirtualized_device(ID3D12Device *device)
{
return false;
}
static inline bool is_mvk_device_lt(ID3D12Device *device, uint32_t major, uint32_t minor, uint32_t patch)
{
return false;
@@ -872,6 +877,16 @@ static inline bool is_mvk_device(ID3D12Device *device)
return properties.driverID == VK_DRIVER_ID_MOLTENVK;
}
static inline bool is_mvk_paravirtualized_device(ID3D12Device *device)
{
VkPhysicalDeviceDriverPropertiesKHR properties;
VkPhysicalDeviceProperties device_properties;
get_driver_properties(device, &device_properties, &properties);
return properties.driverID == VK_DRIVER_ID_MOLTENVK
&& strcmp(device_properties.deviceName, "Apple Paravirtual device") == 0;
}
/* MoltenVK uses a different pattern than standard Vulkan. */
#define MVK_MAKE_API_VERSION(major, minor, patch) \
((((uint32_t)(major)) * 10000) + (((uint32_t)(minor)) * 100) + (uint32_t)(patch))