Refactor: Vulkan move queue ownership to device

Pull Request: https://projects.blender.org/blender/blender/pulls/144934
This commit is contained in:
Jeroen Bakker
2025-08-22 08:46:46 +02:00
parent e964f078b5
commit 451b0f2a87
2 changed files with 11 additions and 10 deletions

View File

@@ -163,6 +163,7 @@ class GHOST_DeviceVK {
VkDevice device = VK_NULL_HANDLE;
uint32_t generic_queue_family = 0;
VkQueue generic_queue = VK_NULL_HANDLE;
VkPhysicalDeviceProperties2 properties = {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,
@@ -243,7 +244,6 @@ class GHOST_DeviceVK {
if (device != VK_NULL_HANDLE) {
return;
}
init_generic_queue_family();
vector<VkDeviceQueueCreateInfo> queue_create_infos;
vector<const char *> device_extensions(required_extensions);
@@ -412,6 +412,9 @@ class GHOST_DeviceVK {
device_create_info.pNext = feature_struct_ptr[0];
vkCreateDevice(physical_device, &device_create_info, nullptr, &device);
init_generic_queue_family();
init_generic_queue();
}
void init_generic_queue_family()
@@ -436,6 +439,11 @@ class GHOST_DeviceVK {
generic_queue_family++;
}
}
void init_generic_queue()
{
vkGetDeviceQueue(device, generic_queue_family, 0, &generic_queue);
}
};
/**
@@ -730,7 +738,7 @@ GHOST_TSuccess GHOST_ContextVK::swapBuffers()
VkResult present_result = VK_SUCCESS;
{
std::scoped_lock lock(vulkan_device->queue_mutex);
present_result = vkQueuePresentKHR(present_queue_, &present_info);
present_result = vkQueuePresentKHR(vulkan_device->generic_queue, &present_info);
}
if (present_result == VK_ERROR_OUT_OF_DATE_KHR || present_result == VK_SUBOPTIMAL_KHR) {
@@ -780,7 +788,7 @@ GHOST_TSuccess GHOST_ContextVK::getVulkanHandles(GHOST_VulkanHandles &r_handles)
vulkan_device->physical_device,
vulkan_device->device,
vulkan_device->generic_queue_family,
graphic_queue_,
vulkan_device->generic_queue,
&vulkan_device->queue_mutex,
};
}
@@ -1379,11 +1387,7 @@ GHOST_TSuccess GHOST_ContextVK::initializeDrawingContext()
vulkan_device->users++;
vulkan_device->ensure_device(required_device_extensions, optional_device_extensions);
vkGetDeviceQueue(vulkan_device->device, vulkan_device->generic_queue_family, 0, &graphic_queue_);
if (use_window_surface) {
vkGetDeviceQueue(
vulkan_device->device, vulkan_device->generic_queue_family, 0, &present_queue_);
recreateSwapchain(use_hdr_swapchain);
}

View File

@@ -230,9 +230,6 @@ class GHOST_ContextVK : public GHOST_Context {
const int context_minor_version_;
const GHOST_GPUDevice preferred_device_;
VkQueue graphic_queue_;
VkQueue present_queue_;
/* For display only. */
VkSurfaceKHR surface_;
VkSwapchainKHR swapchain_;