-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathQueue.cpp
78 lines (67 loc) · 2.43 KB
/
Queue.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Author : Jihong Shin (snowapril)
#include <VulkanFramework/pch.h>
#include <VulkanFramework/Device.h>
#include <VulkanFramework/Queue.h>
#include <VulkanFramework/Commands/CommandBuffer.h>
#include <VulkanFramework/Sync/Fence.h>
namespace vfs
{
Queue::Queue(DevicePtr device,
uint32_t familyIndex)
{
assert(initialize(device, familyIndex));
}
Queue::~Queue()
{
destroyQueue();
}
void Queue::destroyQueue(void)
{
_device.reset();
_familyIndex = 0;
}
bool Queue::initialize(DevicePtr device,
uint32_t familyIndex)
{
_device = device;
_familyIndex = familyIndex;
vkGetDeviceQueue(_device->getDeviceHandle(), _familyIndex, 0, &_queueHandle);
return true;
}
void Queue::submitCmdBuffer(const std::vector<CommandBuffer>& cmdBuffers,
const Fence* fence)
{
std::vector<VkCommandBuffer> cmdBufferHandles(cmdBuffers.size());
for (size_t i = 0; i < cmdBuffers.size(); ++i)
{
cmdBufferHandles[i] = cmdBuffers[i].getHandle();
}
VkSubmitInfo submitInfo = {};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submitInfo.pCommandBuffers = cmdBufferHandles.data();
submitInfo.commandBufferCount = static_cast<uint32_t>(cmdBufferHandles.size());
vkQueueSubmit(_queueHandle, 1, &submitInfo, fence == nullptr ? VK_NULL_HANDLE : fence->getFence(0));
}
void Queue::submitCmdBufferSynchronized(const std::vector<CommandBuffer>& cmdBuffers,
const std::vector<VkSemaphore>& waitSemaphores,
const std::vector<VkPipelineStageFlags>& waitDstStageMasks,
const std::vector<VkSemaphore>& signalSemaphores,
const Fence* fence)
{
std::vector<VkCommandBuffer> cmdBufferHandles(cmdBuffers.size());
for (size_t i = 0; i < cmdBuffers.size(); ++i)
{
cmdBufferHandles[i] = cmdBuffers[i].getHandle();
}
VkSubmitInfo submitInfo = {};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submitInfo.pCommandBuffers = cmdBufferHandles.data();
submitInfo.commandBufferCount = static_cast<uint32_t>(cmdBufferHandles.size());
submitInfo.waitSemaphoreCount = static_cast<uint32_t>(waitSemaphores.size());
submitInfo.pWaitSemaphores = waitSemaphores.data();
submitInfo.pWaitDstStageMask = waitDstStageMasks.data();
submitInfo.signalSemaphoreCount = static_cast<uint32_t>(signalSemaphores.size());
submitInfo.pSignalSemaphores = signalSemaphores.data();
vkQueueSubmit(_queueHandle, 1, &submitInfo, fence == nullptr ? VK_NULL_HANDLE : fence->getFence(0));
}
}