SpiecsEngine
 
Loading...
Searching...
No Matches
VulkanTimelineSemaphore.cpp
Go to the documentation of this file.
1/**
2* @file VulkanTimelineSemaphore.cpp.
3* @brief The VulkanTimelineSemaphore Class Implementation.
4* @author Spices.
5*/
6
7#include "Pchheader.h"
9
10namespace Spices {
11
13 : VulkanObject(vulkanState)
14 {
16
17 /**
18 * @brief Instance a VkSemaphoreTypeCreateInfo.
19 */
20 VkSemaphoreTypeCreateInfo timelineCreateInfo{};
21 timelineCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO;
22 timelineCreateInfo.pNext = nullptr;
23 timelineCreateInfo.semaphoreType = VK_SEMAPHORE_TYPE_TIMELINE;
24 timelineCreateInfo.initialValue = 0;
25
26 /**
27 * @brief Instance a VkSemaphoreCreateInfo.
28 */
29 VkSemaphoreCreateInfo createInfo{};
30 createInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
31 createInfo.pNext = &timelineCreateInfo;
32 createInfo.flags = 0;
33
34 /**
35 * @brief Create Timeline Semaphore.
36 */
37 VK_CHECK(vkCreateSemaphore(vulkanState.m_Device, &createInfo, nullptr, &m_TimelineSemaphore))
38 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_SEMAPHORE, reinterpret_cast<uint64_t>(m_TimelineSemaphore), vulkanState.m_Device, "Timeline Semaphore")
39 }
40
42 {
44
45 /**
46 * @brief Destroy Timeline Semaphore.
47 */
48 vkDestroySemaphore(m_VulkanState.m_Device, m_TimelineSemaphore, nullptr);
49 }
50
51 void VulkanTimelineSemaphore::Wait(uint64_t waitValue) const
52 {
54
55 /**
56 * @brief Instance a VkSemaphoreWaitInfo.
57 */
58 VkSemaphoreWaitInfo waitInfo{};
59 waitInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO;
60 waitInfo.pNext = nullptr;
61 waitInfo.flags = 0;
62 waitInfo.semaphoreCount = 1;
63 waitInfo.pSemaphores = &m_TimelineSemaphore;
64 waitInfo.pValues = &waitValue;
65
66 /**
67 * @brief Call Wait.
68 */
69 VK_CHECK(vkWaitSemaphores(m_VulkanState.m_Device, &waitInfo, UINT64_MAX))
70 }
71
72 void VulkanTimelineSemaphore::Singal(uint64_t signalValue) const
73 {
75
76 /**
77 * @brief Instance a VkSemaphoreSignalInfo.
78 */
79 VkSemaphoreSignalInfo signalInfo{};
80 signalInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO;
81 signalInfo.pNext = nullptr;
82 signalInfo.semaphore = m_TimelineSemaphore;
83 signalInfo.value = signalValue;
84
85 /**
86 * @brief Call Signal.
87 */
88 VK_CHECK(vkSignalSemaphore(m_VulkanState.m_Device, &signalInfo))
89 }
90
92 {
94
95 uint64_t value;
96 VK_CHECK(vkGetSemaphoreCounterValue(m_VulkanState.m_Device, m_TimelineSemaphore, &value))
97
98 return value;
99 }
100}
#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...
VulkanTimelineSemaphore(VulkanState &vulkanState)
Constructor Function.
void Singal(uint64_t signalValue=1) const
Signal this VkSemaphore using specific value.
uint64_t GetValue() const
Get what Counter this VkSemaphore is now.
virtual ~VulkanTimelineSemaphore() override
Destructor Function.
void Wait(uint64_t waitValue=1) const
Wait on this VkSemaphore using specific value.
VulkanTimelineSemaphore Class. This class is a wrapper of timeline VkSemaphore.
This struct contains all Vulkan object in used global.
Definition VulkanUtils.h:74