Created a paper-thin wrapper around a VkQueue mainly so it manages its own lifecycle so long as its associated device is alive
This commit is contained in:
29
src/vulkan/basalt_queue.cpp
Normal file
29
src/vulkan/basalt_queue.cpp
Normal file
@@ -0,0 +1,29 @@
|
||||
#include "vulkan/basalt_queue.h"
|
||||
#include "vulkan/basalt_device.h"
|
||||
|
||||
basalt::Queue::Queue(basalt::Device& dev, VkQueue queue, u32 family_index, VkSurfaceKHR surface) :
|
||||
device(&dev), queue(queue)
|
||||
{
|
||||
VkResult err = VK_SUCCESS;
|
||||
u32 num_queue_families = 0;
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(dev, &num_queue_families, VK_NULL_HANDLE);
|
||||
basalt::darray<VkQueueFamilyProperties> queue_families(num_queue_families,
|
||||
MEMORY_TAG_CLASS_ARRAY | MEMORY_TAG_ZONE_ENGINE | MEMORY_TAG_ALIGN_ANY);
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(dev, &num_queue_families, queue_families.m_pdata);
|
||||
queue_families.m_nelements = num_queue_families;
|
||||
|
||||
if (queue_families[family_index].queueFlags & VK_QUEUE_GRAPHICS_BIT)
|
||||
this->flags |= QUEUE_FLAG_SUPPORTS_GRAPHICS;
|
||||
if (queue_families[family_index].queueFlags & VK_QUEUE_TRANSFER_BIT)
|
||||
this->flags |= QUEUE_FLAG_SUPPORTS_TRANSFER;
|
||||
if (queue_families[family_index].queueFlags & VK_QUEUE_COMPUTE_BIT)
|
||||
this->flags |= QUEUE_FLAG_SUPPORTS_COMPUTE;
|
||||
|
||||
if (surface != VK_NULL_HANDLE)
|
||||
{
|
||||
VkBool32 present_supported = VK_FALSE;
|
||||
VK_ASSERT(vkGetPhysicalDeviceSurfaceSupportKHR(dev, family_index, surface, &present_supported), "Failed to determine if physical device queue supports presenting to surface\n\tAt %s:%d\n\tError %s\n");
|
||||
if (present_supported)
|
||||
this->flags |= QUEUE_FLAG_SUPPORTS_PRESENT;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user