2#include <UnCompute/Backend/IComputeDevice.h>
3#include <UnCompute/Memory/Ptr.h>
4#include <UnCompute/VulkanBackend/VulkanInclude.h>
12 HardwareQueueKindFlags KindFlags;
13 VkCommandPool CmdPool = VK_NULL_HANDLE;
15 inline VulkanQueueFamily(UInt32 familyIndex, UInt32 queueCount, HardwareQueueKindFlags kindFlags)
16 : FamilyIndex(familyIndex)
17 , QueueCount(queueCount)
18 , KindFlags(kindFlags)
30 std::vector<VulkanQueueFamily> m_QueueFamilies;
32 VkDevice m_NativeDevice = VK_NULL_HANDLE;
33 VkPhysicalDevice m_NativeAdapter = VK_NULL_HANDLE;
38 void FindQueueFamilies();
47 void Reset()
override;
49 inline VkCommandPool GetCommandPool(UInt32 queueFamilyIndex)
51 for (
auto& queue : m_QueueFamilies)
53 if (queue.FamilyIndex == queueFamilyIndex)
59 UN_Verify(
false,
"Couldn't find command pool");
60 return VK_NULL_HANDLE;
63 inline UInt32 GetQueueFamilyIndex(HardwareQueueKindFlags flags)
65 for (
auto& queue : m_QueueFamilies)
67 if (AllFlagsActive(queue.KindFlags, flags))
69 return queue.FamilyIndex;
73 UN_Verify(
false,
"Couldn't find queue family");
74 return std::numeric_limits<UInt32>::max();
77 inline VkQueue GetDeviceQueue(UInt32 queueFamilyIndex, UInt32 queueIndex)
80 vkGetDeviceQueue(m_NativeDevice, queueFamilyIndex, queueIndex, &queue);
84 inline VkQueue GetDeviceQueue(HardwareQueueKindFlags flags)
87 vkGetDeviceQueue(m_NativeDevice, GetQueueFamilyIndex(flags), 0, &queue);
93 return m_pDescriptorAllocator.
Get();
96 ResultCode FindMemoryType(UInt32 typeBits, VkMemoryPropertyFlags properties, UInt32& memoryType);
98 [[nodiscard]]
inline VkDevice GetNativeDevice()
const
100 return m_NativeDevice;
103 ResultCode CreateBuffer(
IBuffer** ppBuffer)
override;
105 ResultCode CreateFence(
IFence** ppFence)
override;
106 ResultCode CreateCommandList(
ICommandList** ppCommandList)
override;
107 ResultCode CreateResourceBinding(
IResourceBinding** ppResourceBinding)
override;
108 ResultCode CreateKernel(
IKernel** ppKernel)
override;
An interface for backend-specific buffers that store the data on the device.
Definition: IBuffer.h:26
An interface for command lists that record commands to be executed by the backend.
Definition: ICommandList.h:180
This class holds a handle to backend-specific memory.
Definition: IDeviceMemory.h:31
An interface for fences - synchronization primitives that can be either signaled or reset.
Definition: IFence.h:31
An interface for compute kernel - a program running on the device.
Definition: IKernel.h:29
Resource binding object used to bind resources to a compute kernel.
Definition: IResourceBinding.h:51
Base class for dynamic reference counted objects.
Definition: Object.h:51
Shared smart pointer implementation that uses reference counting.
Definition: Ptr.h:44
T * Get() const
Get underlying raw pointer.
Definition: Ptr.h:219
Definition: VulkanComputeDevice.h:27
ResultCode Init(const DescriptorType &desc) override
Initializes the compute device with the provided descriptor.
Definition: VulkanComputeDevice.cpp:80
void Reset() override
Reset the object to uninitialized state.
Definition: VulkanComputeDevice.cpp:177
Definition: VulkanDescriptorAllocator.h:25
This class holds a Vulkan API instance.
Definition: VulkanDeviceFactory.h:13
Compute device descriptor.
Definition: IComputeDevice.h:9
Definition: VulkanComputeDevice.h:9