@@ -4291,6 +4358,12 @@ static HRESULT d3d12_device_init(struct d3d12_device *device, if (FAILED(hr = vkd3d_vk_descriptor_heap_layouts_init(device))) goto out_cleanup_uav_clear_state; + if (device->use_vk_heaps && FAILED(hr = vkd3d_create_thread(device->vkd3d_instance, + device_worker_main, device, &device->worker_thread))) + { + WARN("Failed to create worker thread, hr %#x.\n", hr); + }
This means failing to create the worker thread is non-fatal. That's probably fine, but it also means we can't check "device->use_vk_heaps" to determine whether the worker thread exists. That may be benign for d3d12_device_add_descriptor_heap() and d3d12_device_remove_descriptor_heap(), but it seems more questionable for device_worker_stop().