SpiecsEngine
 
Loading...
Searching...
No Matches
VulkanThreadQueue.cpp
Go to the documentation of this file.
1/**
2* @file VulkanThreadQueue.cpp.
3* @brief The VulkanThreadQueue Class Implementation.
4* @author Spices.
5*/
6
7#include "Pchheader.h"
9
10namespace Spices {
11
14
15 VulkanThreadQueue::VulkanThreadQueue(VulkanState& vulkanState, VkQueue queue)
16 : VulkanObject(vulkanState)
17 , m_Queue(queue)
18 {}
19
21 {}
22
23 void VulkanThreadQueue::CreateGraphic(VulkanState & vulkanState, VkQueue queue)
24 {
26
27 m_GraphicQueues.Push(std::make_shared<VulkanThreadQueue>(vulkanState, queue));
28 }
29
30 void VulkanThreadQueue::CreateCompute(VulkanState& vulkanState, VkQueue queue)
31 {
33
34 m_ComputeQueues.Push(std::make_shared<VulkanThreadQueue>(vulkanState, queue));
35 }
36
38 {
40
41 return m_GraphicQueues.Pop();
42 }
43
45 {
47
48 return m_ComputeQueues.Pop();
49 }
50
51 void VulkanThreadQueue::PushToGraphic(std::shared_ptr<VulkanThreadQueue>& queue)
52 {
54
55 m_GraphicQueues.Push(std::move(queue));
56 }
57
58 void VulkanThreadQueue::PushToCompute(std::shared_ptr<VulkanThreadQueue>& queue)
59 {
61
62 m_ComputeQueues.Push(std::move(queue));
63 }
64
66 {
68
69 m_GraphicQueues.Clear();
70 m_ComputeQueues.Clear();
71 }
72
73 void VulkanThreadQueue::Submit(VkCommandBuffer commandBuffer) const
74 {
76
77 /**
78 * @brief Instanced a VkSubmitInfo with default value.
79 */
80 VkSubmitInfo submitInfo{};
81 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
82 submitInfo.commandBufferCount = 1;
83 submitInfo.pCommandBuffers = &commandBuffer;
84
85 VK_CHECK(vkQueueSubmit(m_Queue, 1, &submitInfo, VK_NULL_HANDLE))
86 }
87
88 void VulkanThreadQueue::Wait() const
89 {
91
92 VK_CHECK(vkQueueWaitIdle(m_Queue))
93 }
94}
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
Definition VulkanUtils.h:68
VulkanObject(VulkanState &vulkanState)
Constructor Function. Init member variables.
VulkanObject Class. This class defines the basic behaves of VulkanObject. When we create an new Vulka...
static void Destroy()
Destroy all ThreadQueue.
static scl::thread_queue< std::shared_ptr< VulkanThreadQueue > > m_ComputeQueues
Compute VulkanThreadQueue.
void Submit(VkCommandBuffer commandBuffer) const
Submit the CommandBuffer in this Queue.
void Wait() const
Wait for queue execute.
static void PushToGraphic(std::shared_ptr< VulkanThreadQueue > &queue)
Push queue to Graphic ThreadQueue.
static std::shared_ptr< VulkanThreadQueue > FetchGraphicQueue()
Fetch valid Graphic Queue.
static std::shared_ptr< VulkanThreadQueue > FetchComputeQueue()
Fetch valid Compute Queue.
virtual ~VulkanThreadQueue() override
Destructor Function.
static void PushToCompute(std::shared_ptr< VulkanThreadQueue > &queue)
Push queue to Compute ThreadQueue.
static scl::thread_queue< std::shared_ptr< VulkanThreadQueue > > m_GraphicQueues
Graphic VulkanThreadQueue.
VulkanThreadQueue(VulkanState &vulkanState, VkQueue queue)
Constructor Function.
VulkanThreadQueue Class. This class is a wrapper of Thread VkQueue.
Thread safe Queue.
Definition ThreadQueue.h:17
This struct contains all Vulkan object in used global.
Definition VulkanUtils.h:74