Diligent Engine  v.2.4.g
VulkanLogicalDevice.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019-2021 Diligent Graphics LLC
3  * Copyright 2015-2019 Egor Yusov
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * In no event and under no legal theory, whether in tort (including negligence),
18  * contract, or otherwise, unless required by applicable law (such as deliberate
19  * and grossly negligent acts) or agreed to in writing, shall any Contributor be
20  * liable for any damages, including any direct, indirect, special, incidental,
21  * or consequential damages of any character arising as a result of this License or
22  * out of the use or inability to use the software (including but not limited to damages
23  * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
24  * all other commercial damages or losses), even if such Contributor has been advised
25  * of the possibility of such damages.
26  */
27 
28 #pragma once
29 
30 #include <memory>
31 #include "VulkanPhysicalDevice.hpp"
32 
33 namespace VulkanUtilities
34 {
35 
36 // In 32-bit version, all Vulkan handles are typedefed as uint64_t, so we have to
37 // use VulkanHandleTypeId to distinguish objects.
38 enum class VulkanHandleTypeId : uint32_t
39 {
42  Buffer,
43  BufferView,
44  Image,
45  ImageView,
47  Fence,
48  RenderPass,
49  Pipeline,
52  Sampler,
57  Semaphore,
58  Queue,
59  Event,
60  QueryPool,
62 };
63 
64 template <typename VulkanObjectType, VulkanHandleTypeId>
66 
67 #define DEFINE_VULKAN_OBJECT_WRAPPER(Type) VulkanObjectWrapper<Vk##Type, VulkanHandleTypeId::Type>
85 using AccelStructWrapper = DEFINE_VULKAN_OBJECT_WRAPPER(AccelerationStructureKHR);
86 #undef DEFINE_VULKAN_OBJECT_WRAPPER
87 
88 class VulkanLogicalDevice : public std::enable_shared_from_this<VulkanLogicalDevice>
89 {
90 public:
92 
93  static std::shared_ptr<VulkanLogicalDevice> Create(const VulkanPhysicalDevice& PhysicalDevice,
94  const VkDeviceCreateInfo& DeviceCI,
95  const ExtensionFeatures& EnabledExtFeatures,
96  const VkAllocationCallbacks* vkAllocator);
97 
98  // clang-format off
99  VulkanLogicalDevice (const VulkanLogicalDevice&) = delete;
103  // clang-format on
104 
106 
107  std::shared_ptr<VulkanLogicalDevice> GetSharedPtr()
108  {
109  return shared_from_this();
110  }
111 
112  std::shared_ptr<const VulkanLogicalDevice> GetSharedPtr() const
113  {
114  return shared_from_this();
115  }
116 
117  VkQueue GetQueue(uint32_t queueFamilyIndex, uint32_t queueIndex);
118 
119  VkDevice GetVkDevice() const
120  {
121  return m_VkDevice;
122  }
123 
124  void WaitIdle() const;
125 
126  // clang-format off
127  CommandPoolWrapper CreateCommandPool (const VkCommandPoolCreateInfo& CmdPoolCI, const char* DebugName = "") const;
128  BufferWrapper CreateBuffer (const VkBufferCreateInfo& BufferCI, const char* DebugName = "") const;
129  BufferViewWrapper CreateBufferView (const VkBufferViewCreateInfo& BuffViewCI, const char* DebugName = "") const;
130  ImageWrapper CreateImage (const VkImageCreateInfo& ImageCI, const char* DebugName = "") const;
131  ImageViewWrapper CreateImageView (const VkImageViewCreateInfo& ImageViewCI, const char* DebugName = "") const;
132  SamplerWrapper CreateSampler (const VkSamplerCreateInfo& SamplerCI, const char* DebugName = "") const;
133  FenceWrapper CreateFence (const VkFenceCreateInfo& FenceCI, const char* DebugName = "") const;
134  RenderPassWrapper CreateRenderPass (const VkRenderPassCreateInfo& RenderPassCI,const char* DebugName = "") const;
135  DeviceMemoryWrapper AllocateDeviceMemory(const VkMemoryAllocateInfo & AllocInfo, const char* DebugName = "") const;
136 
137  PipelineWrapper CreateComputePipeline (const VkComputePipelineCreateInfo& PipelineCI, VkPipelineCache cache, const char* DebugName = "") const;
138  PipelineWrapper CreateGraphicsPipeline (const VkGraphicsPipelineCreateInfo& PipelineCI, VkPipelineCache cache, const char* DebugName = "") const;
139  PipelineWrapper CreateRayTracingPipeline(const VkRayTracingPipelineCreateInfoKHR& PipelineCI, VkPipelineCache cache, const char* DebugName = "") const;
140 
141  ShaderModuleWrapper CreateShaderModule (const VkShaderModuleCreateInfo& ShaderModuleCI, const char* DebugName = "") const;
142  PipelineLayoutWrapper CreatePipelineLayout (const VkPipelineLayoutCreateInfo& LayoutCI, const char* DebugName = "") const;
143  FramebufferWrapper CreateFramebuffer (const VkFramebufferCreateInfo& FramebufferCI, const char* DebugName = "") const;
144  DescriptorPoolWrapper CreateDescriptorPool (const VkDescriptorPoolCreateInfo& DescrPoolCI, const char* DebugName = "") const;
145  DescriptorSetLayoutWrapper CreateDescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo& LayoutCI, const char* DebugName = "") const;
146 
147  SemaphoreWrapper CreateSemaphore(const VkSemaphoreCreateInfo& SemaphoreCI, const char* DebugName = "") const;
148  QueryPoolWrapper CreateQueryPool(const VkQueryPoolCreateInfo& QueryPoolCI, const char* DebugName = "") const;
149  AccelStructWrapper CreateAccelStruct(const VkAccelerationStructureCreateInfoKHR& CI, const char* DebugName = "") const;
150 
151  VkCommandBuffer AllocateVkCommandBuffer(const VkCommandBufferAllocateInfo& AllocInfo, const char* DebugName = "") const;
152  VkDescriptorSet AllocateVkDescriptorSet(const VkDescriptorSetAllocateInfo& AllocInfo, const char* DebugName = "") const;
153 
154  void ReleaseVulkanObject(CommandPoolWrapper&& CmdPool) const;
155  void ReleaseVulkanObject(BufferWrapper&& Buffer) const;
156  void ReleaseVulkanObject(BufferViewWrapper&& BufferView) const;
157  void ReleaseVulkanObject(ImageWrapper&& Image) const;
158  void ReleaseVulkanObject(ImageViewWrapper&& ImageView) const;
159  void ReleaseVulkanObject(SamplerWrapper&& Sampler) const;
160  void ReleaseVulkanObject(FenceWrapper&& Fence) const;
161  void ReleaseVulkanObject(RenderPassWrapper&& RenderPass) const;
162  void ReleaseVulkanObject(DeviceMemoryWrapper&& Memory) const;
163  void ReleaseVulkanObject(PipelineWrapper&& Pipeline) const;
164  void ReleaseVulkanObject(ShaderModuleWrapper&& ShaderModule) const;
165  void ReleaseVulkanObject(PipelineLayoutWrapper&& PipelineLayout) const;
166  void ReleaseVulkanObject(FramebufferWrapper&& Framebuffer) const;
167  void ReleaseVulkanObject(DescriptorPoolWrapper&& DescriptorPool) const;
168  void ReleaseVulkanObject(DescriptorSetLayoutWrapper&& DescriptorSetLayout) const;
169  void ReleaseVulkanObject(SemaphoreWrapper&& Semaphore) const;
170  void ReleaseVulkanObject(QueryPoolWrapper&& QueryPool) const;
171  void ReleaseVulkanObject(AccelStructWrapper&& AccelStruct) const;
172 
173  void FreeDescriptorSet(VkDescriptorPool Pool, VkDescriptorSet Set) const;
174  void FreeCommandBuffer(VkCommandPool Pool, VkCommandBuffer CmdBuffer) const;
175 
176  VkMemoryRequirements GetBufferMemoryRequirements(VkBuffer vkBuffer) const;
177  VkMemoryRequirements GetImageMemoryRequirements (VkImage vkImage ) const;
178  VkDeviceAddress GetAccelerationStructureDeviceAddress(VkAccelerationStructureKHR AS) const;
179 
180  VkResult BindBufferMemory(VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
181  VkResult BindImageMemory (VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const;
182  // clang-format on
183 
184  VkResult MapMemory(VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const;
185  void UnmapMemory(VkDeviceMemory memory) const;
186 
187  VkResult InvalidateMappedMemoryRanges(uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
188  VkResult FlushMappedMemoryRanges(uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges) const;
189 
190  VkResult GetFenceStatus(VkFence fence) const;
191  VkResult ResetFence(VkFence fence) const;
192  VkResult WaitForFences(uint32_t fenceCount,
193  const VkFence* pFences,
194  VkBool32 waitAll,
195  uint64_t timeout) const;
196 
197  void UpdateDescriptorSets(uint32_t descriptorWriteCount,
198  const VkWriteDescriptorSet* pDescriptorWrites,
199  uint32_t descriptorCopyCount,
200  const VkCopyDescriptorSet* pDescriptorCopies) const;
201 
202  VkResult ResetCommandPool(VkCommandPool vkCmdPool,
203  VkCommandPoolResetFlags flags = 0) const;
204 
205  VkResult ResetDescriptorPool(VkDescriptorPool descriptorPool,
206  VkDescriptorPoolResetFlags flags = 0) const;
207 
208  VkResult GetQueryPoolResults(VkQueryPool queryPool,
209  uint32_t firstQuery,
210  uint32_t queryCount,
211  size_t dataSize,
212  void* pData,
213  VkDeviceSize stride,
214  VkQueryResultFlags flags) const
215  {
216  return vkGetQueryPoolResults(m_VkDevice, queryPool, firstQuery, queryCount,
217  dataSize, pData, stride, flags);
218  }
219 
220  void GetAccelerationStructureBuildSizes(const VkAccelerationStructureBuildGeometryInfoKHR& BuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR& SizeInfo) const;
221 
222  VkResult GetRayTracingShaderGroupHandles(VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData) const;
223 
224  VkPipelineStageFlags GetEnabledShaderStages() const { return m_EnabledShaderStages; }
225 
226  const VkPhysicalDeviceFeatures& GetEnabledFeatures() const { return m_EnabledFeatures; }
227  const ExtensionFeatures& GetEnabledExtFeatures() const { return m_EnabledExtFeatures; }
228 
229 private:
230  VulkanLogicalDevice(const VulkanPhysicalDevice& PhysicalDevice,
231  const VkDeviceCreateInfo& DeviceCI,
232  const ExtensionFeatures& EnabledExtFeatures,
233  const VkAllocationCallbacks* vkAllocator);
234 
235  template <typename VkObjectType,
236  VulkanHandleTypeId VkTypeId,
237  typename VkCreateObjectFuncType,
238  typename VkObjectCreateInfoType>
239  VulkanObjectWrapper<VkObjectType, VkTypeId> CreateVulkanObject(VkCreateObjectFuncType VkCreateObject,
240  const VkObjectCreateInfoType& CreateInfo,
241  const char* DebugName,
242  const char* ObjectType) const;
243 
244  VkDevice m_VkDevice = VK_NULL_HANDLE;
245  const VkAllocationCallbacks* const m_VkAllocator;
246  VkPipelineStageFlags m_EnabledShaderStages = 0;
247  const VkPhysicalDeviceFeatures m_EnabledFeatures;
248  ExtensionFeatures m_EnabledExtFeatures = {};
249 };
250 
252 
253 } // namespace VulkanUtilities
VulkanUtilities::VulkanLogicalDevice::CreateFence
FenceWrapper CreateFence(const VkFenceCreateInfo &FenceCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:161
VulkanUtilities::VulkanLogicalDevice::UpdateDescriptorSets
void UpdateDescriptorSets(uint32_t descriptorWriteCount, const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet *pDescriptorCopies) const
Definition: VulkanLogicalDevice.cpp:562
VulkanUtilities::VulkanLogicalDevice::GetAccelerationStructureDeviceAddress
VkDeviceAddress GetAccelerationStructureDeviceAddress(VkAccelerationStructureKHR AS) const
Definition: VulkanLogicalDevice.cpp:497
VulkanUtilities::VulkanLogicalDevice::ReleaseVulkanObject
void ReleaseVulkanObject(CommandPoolWrapper &&CmdPool) const
Definition: VulkanLogicalDevice.cpp:347
VulkanUtilities::VulkanLogicalDevice::GetEnabledFeatures
const VkPhysicalDeviceFeatures & GetEnabledFeatures() const
Definition: VulkanLogicalDevice.hpp:226
VulkanUtilities::BufferViewWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(BufferView) BufferViewWrapper
Definition: VulkanLogicalDevice.hpp:70
VulkanUtilities::ShaderModuleWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(ShaderModule) ShaderModuleWrapper
Definition: VulkanLogicalDevice.hpp:77
VulkanUtilities::VulkanHandleTypeId::ShaderModule
@ ShaderModule
VulkanUtilities::VulkanLogicalDevice::GetRayTracingShaderGroupHandles
VkResult GetRayTracingShaderGroupHandles(VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void *pData) const
Definition: VulkanLogicalDevice.cpp:586
VulkanUtilities::VulkanLogicalDevice::CreateSampler
SamplerWrapper CreateSampler(const VkSamplerCreateInfo &SamplerCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:155
VulkanUtilities::VulkanLogicalDevice
Definition: VulkanLogicalDevice.hpp:88
VulkanUtilities::VulkanLogicalDevice::FlushMappedMemoryRanges
VkResult FlushMappedMemoryRanges(uint32_t memoryRangeCount, const VkMappedMemoryRange *pMemoryRanges) const
Definition: VulkanLogicalDevice.cpp:537
VulkanUtilities::VulkanHandleTypeId::AccelerationStructureKHR
@ AccelerationStructureKHR
VulkanUtilities::ImageViewWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(ImageView) ImageViewWrapper
Definition: VulkanLogicalDevice.hpp:72
VulkanUtilities::FenceWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(Fence) FenceWrapper
Definition: VulkanLogicalDevice.hpp:74
VulkanUtilities::VulkanLogicalDevice::BindBufferMemory
VkResult BindBufferMemory(VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset) const
Definition: VulkanLogicalDevice.cpp:487
VulkanUtilities::VulkanLogicalDevice::CreateImageView
ImageViewWrapper CreateImageView(const VkImageViewCreateInfo &ImageViewCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:148
VulkanUtilities::VulkanHandleTypeId::CommandPool
@ CommandPool
VulkanUtilities::DeviceMemoryWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(DeviceMemory) DeviceMemoryWrapper
Definition: VulkanLogicalDevice.hpp:73
VulkanUtilities::ImageWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(Image) ImageWrapper
Definition: VulkanLogicalDevice.hpp:71
VulkanUtilities::VulkanHandleTypeId::QueryPool
@ QueryPool
VulkanUtilities::VulkanHandleTypeId::DeviceMemory
@ DeviceMemory
VulkanUtilities::VulkanLogicalDevice::FreeDescriptorSet
void FreeDescriptorSet(VkDescriptorPool Pool, VkDescriptorSet Set) const
Definition: VulkanLogicalDevice.cpp:459
VulkanUtilities::VulkanHandleTypeId
VulkanHandleTypeId
Definition: VulkanLogicalDevice.hpp:38
VulkanUtilities::VulkanObjectWrapper
Definition: VulkanLogicalDevice.hpp:65
VulkanUtilities::VulkanHandleTypeId::Event
@ Event
VulkanUtilities::EnableRayTracingKHRviaNV
void EnableRayTracingKHRviaNV()
VulkanUtilities::SemaphoreWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(Semaphore) SemaphoreWrapper
Definition: VulkanLogicalDevice.hpp:83
VulkanUtilities::VulkanLogicalDevice::CreateDescriptorPool
DescriptorPoolWrapper CreateDescriptorPool(const VkDescriptorPoolCreateInfo &DescrPoolCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:273
VulkanUtilities::VulkanLogicalDevice::CreateGraphicsPipeline
PipelineWrapper CreateGraphicsPipeline(const VkGraphicsPipelineCreateInfo &PipelineCI, VkPipelineCache cache, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:212
VulkanUtilities::VulkanHandleTypeId::ImageView
@ ImageView
VulkanUtilities::VulkanLogicalDevice::CreateRayTracingPipeline
PipelineWrapper CreateRayTracingPipeline(const VkRayTracingPipelineCreateInfoKHR &PipelineCI, VkPipelineCache cache, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:232
VulkanUtilities::DescriptorPoolWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(DescriptorPool) DescriptorPoolWrapper
Definition: VulkanLogicalDevice.hpp:81
VulkanUtilities::VulkanLogicalDevice::CreateAccelStruct
AccelStructWrapper CreateAccelStruct(const VkAccelerationStructureCreateInfoKHR &CI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:297
VulkanUtilities::VulkanLogicalDevice::GetEnabledExtFeatures
const ExtensionFeatures & GetEnabledExtFeatures() const
Definition: VulkanLogicalDevice.hpp:227
VulkanUtilities::VulkanLogicalDevice::GetEnabledShaderStages
VkPipelineStageFlags GetEnabledShaderStages() const
Definition: VulkanLogicalDevice.hpp:224
VulkanUtilities::VulkanLogicalDevice::CreateImage
ImageWrapper CreateImage(const VkImageCreateInfo &ImageCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:141
VulkanUtilities::VulkanLogicalDevice::GetSharedPtr
std::shared_ptr< VulkanLogicalDevice > GetSharedPtr()
Definition: VulkanLogicalDevice.hpp:107
VulkanUtilities::BufferWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(Buffer) BufferWrapper
Definition: VulkanLogicalDevice.hpp:69
VulkanUtilities::VulkanLogicalDevice::CreateSemaphore
SemaphoreWrapper CreateSemaphore(const VkSemaphoreCreateInfo &SemaphoreCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:285
VulkanUtilities::VulkanLogicalDevice::MapMemory
VkResult MapMemory(VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void **ppData) const
Definition: VulkanLogicalDevice.cpp:522
VulkanUtilities::VulkanLogicalDevice::CreateFramebuffer
FramebufferWrapper CreateFramebuffer(const VkFramebufferCreateInfo &FramebufferCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:267
VulkanUtilities::VulkanLogicalDevice::GetQueryPoolResults
VkResult GetQueryPoolResults(VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void *pData, VkDeviceSize stride, VkQueryResultFlags flags) const
Definition: VulkanLogicalDevice.hpp:208
VulkanUtilities::VulkanLogicalDevice::GetVkDevice
VkDevice GetVkDevice() const
Definition: VulkanLogicalDevice.hpp:119
VulkanUtilities::VulkanLogicalDevice::ResetCommandPool
VkResult ResetCommandPool(VkCommandPool vkCmdPool, VkCommandPoolResetFlags flags=0) const
Definition: VulkanLogicalDevice.cpp:570
VulkanUtilities::VulkanHandleTypeId::Buffer
@ Buffer
VulkanUtilities::VulkanLogicalDevice::GetAccelerationStructureBuildSizes
void GetAccelerationStructureBuildSizes(const VkAccelerationStructureBuildGeometryInfoKHR &BuildInfo, const uint32_t *pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR &SizeInfo) const
Definition: VulkanLogicalDevice.cpp:512
VulkanUtilities::VulkanLogicalDevice::CreateShaderModule
ShaderModuleWrapper CreateShaderModule(const VkShaderModuleCreateInfo &ShaderModuleCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:255
VulkanUtilities::VulkanLogicalDevice::CreateBufferView
BufferViewWrapper CreateBufferView(const VkBufferViewCreateInfo &BuffViewCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:134
VulkanUtilities::VulkanHandleTypeId::CommandBuffer
@ CommandBuffer
VulkanUtilities::AccelStructWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(AccelerationStructureKHR) AccelStructWrapper
Definition: VulkanLogicalDevice.hpp:85
VulkanUtilities::VulkanHandleTypeId::PipelineLayout
@ PipelineLayout
VulkanUtilities::VulkanLogicalDevice::AllocateDeviceMemory
DeviceMemoryWrapper AllocateDeviceMemory(const VkMemoryAllocateInfo &AllocInfo, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:173
VulkanUtilities::VulkanLogicalDevice::CreateBuffer
BufferWrapper CreateBuffer(const VkBufferCreateInfo &BufferCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:127
VulkanUtilities::VulkanHandleTypeId::Pipeline
@ Pipeline
VulkanUtilities::VulkanHandleTypeId::DescriptorSet
@ DescriptorSet
VulkanUtilities::VulkanLogicalDevice::ExtensionFeatures
VulkanPhysicalDevice::ExtensionFeatures ExtensionFeatures
Definition: VulkanLogicalDevice.hpp:91
VulkanUtilities::VulkanHandleTypeId::Sampler
@ Sampler
VulkanUtilities::VulkanHandleTypeId::DescriptorPool
@ DescriptorPool
VulkanUtilities::VulkanLogicalDevice::GetImageMemoryRequirements
VkMemoryRequirements GetImageMemoryRequirements(VkImage vkImage) const
Definition: VulkanLogicalDevice.cpp:480
VulkanUtilities::VulkanLogicalDevice::GetQueue
VkQueue GetQueue(uint32_t queueFamilyIndex, uint32_t queueIndex)
Definition: VulkanLogicalDevice.cpp:79
VulkanUtilities::VulkanHandleTypeId::Fence
@ Fence
VulkanUtilities::SamplerWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(Sampler) SamplerWrapper
Definition: VulkanLogicalDevice.hpp:79
VulkanUtilities::PipelineLayoutWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(PipelineLayout) PipelineLayoutWrapper
Definition: VulkanLogicalDevice.hpp:78
VulkanUtilities::VulkanLogicalDevice::GetFenceStatus
VkResult GetFenceStatus(VkFence fence) const
Definition: VulkanLogicalDevice.cpp:542
VulkanUtilities::QueryPoolWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(QueryPool) QueryPoolWrapper
Definition: VulkanLogicalDevice.hpp:84
VulkanUtilities::VulkanLogicalDevice::ResetFence
VkResult ResetFence(VkFence fence) const
Definition: VulkanLogicalDevice.cpp:547
VulkanUtilities::FramebufferWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(Framebuffer) FramebufferWrapper
Definition: VulkanLogicalDevice.hpp:80
VulkanUtilities::VulkanLogicalDevice::AllocateVkCommandBuffer
VkCommandBuffer AllocateVkCommandBuffer(const VkCommandBufferAllocateInfo &AllocInfo, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:308
VulkanUtilities::VulkanHandleTypeId::DescriptorSetLayout
@ DescriptorSetLayout
VulkanUtilities::VulkanLogicalDevice::~VulkanLogicalDevice
~VulkanLogicalDevice()
Definition: VulkanLogicalDevice.cpp:46
VulkanUtilities::VulkanLogicalDevice::AllocateVkDescriptorSet
VkDescriptorSet AllocateVkDescriptorSet(const VkDescriptorSetAllocateInfo &AllocInfo, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:327
VulkanUtilities::VulkanLogicalDevice::WaitForFences
VkResult WaitForFences(uint32_t fenceCount, const VkFence *pFences, VkBool32 waitAll, uint64_t timeout) const
Definition: VulkanLogicalDevice.cpp:554
VulkanUtilities::VulkanLogicalDevice::UnmapMemory
void UnmapMemory(VkDeviceMemory memory) const
Definition: VulkanLogicalDevice.cpp:527
VulkanUtilities::VulkanLogicalDevice::CreateRenderPass
RenderPassWrapper CreateRenderPass(const VkRenderPassCreateInfo &RenderPassCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:167
VulkanUtilities::RenderPassWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(RenderPass) RenderPassWrapper
Definition: VulkanLogicalDevice.hpp:75
VulkanUtilities::VulkanPhysicalDevice
Definition: VulkanPhysicalDevice.hpp:37
VulkanUtilities::VulkanHandleTypeId::Queue
@ Queue
VulkanUtilities::VulkanPhysicalDevice::ExtensionFeatures
Definition: VulkanPhysicalDevice.hpp:40
VulkanUtilities::VulkanLogicalDevice::CreateQueryPool
QueryPoolWrapper CreateQueryPool(const VkQueryPoolCreateInfo &QueryPoolCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:291
VulkanUtilities::VulkanLogicalDevice::GetBufferMemoryRequirements
VkMemoryRequirements GetBufferMemoryRequirements(VkBuffer vkBuffer) const
Definition: VulkanLogicalDevice.cpp:473
VulkanUtilities::VulkanHandleTypeId::Framebuffer
@ Framebuffer
VulkanUtilities
Definition: VulkanCommandBuffer.hpp:33
VulkanUtilities::VulkanHandleTypeId::RenderPass
@ RenderPass
VulkanUtilities::VulkanLogicalDevice::VulkanLogicalDevice
VulkanLogicalDevice(const VulkanLogicalDevice &)=delete
VulkanUtilities::VulkanLogicalDevice::GetSharedPtr
std::shared_ptr< const VulkanLogicalDevice > GetSharedPtr() const
Definition: VulkanLogicalDevice.hpp:112
VulkanUtilities::VulkanHandleTypeId::Image
@ Image
VulkanUtilities::VulkanLogicalDevice::InvalidateMappedMemoryRanges
VkResult InvalidateMappedMemoryRanges(uint32_t memoryRangeCount, const VkMappedMemoryRange *pMemoryRanges) const
Definition: VulkanLogicalDevice.cpp:532
VulkanUtilities::VulkanHandleTypeId::BufferView
@ BufferView
VulkanUtilities::CommandPoolWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(CommandPool) CommandPoolWrapper
Definition: VulkanLogicalDevice.hpp:68
VulkanUtilities::VulkanLogicalDevice::WaitIdle
void WaitIdle() const
Definition: VulkanLogicalDevice.cpp:90
VulkanUtilities::VulkanLogicalDevice::operator=
VulkanLogicalDevice & operator=(const VulkanLogicalDevice &)=delete
VulkanUtilities::VulkanLogicalDevice::Create
static std::shared_ptr< VulkanLogicalDevice > Create(const VulkanPhysicalDevice &PhysicalDevice, const VkDeviceCreateInfo &DeviceCI, const ExtensionFeatures &EnabledExtFeatures, const VkAllocationCallbacks *vkAllocator)
Definition: VulkanLogicalDevice.cpp:37
VulkanUtilities::PipelineWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(Pipeline) PipelineWrapper
Definition: VulkanLogicalDevice.hpp:76
VulkanUtilities::VulkanLogicalDevice::FreeCommandBuffer
void FreeCommandBuffer(VkCommandPool Pool, VkCommandBuffer CmdBuffer) const
Definition: VulkanLogicalDevice.cpp:466
VulkanUtilities::VulkanLogicalDevice::ResetDescriptorPool
VkResult ResetDescriptorPool(VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags=0) const
Definition: VulkanLogicalDevice.cpp:578
VulkanUtilities::VulkanLogicalDevice::CreateDescriptorSetLayout
DescriptorSetLayoutWrapper CreateDescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo &LayoutCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:279
VulkanPhysicalDevice.hpp
VulkanUtilities::VulkanLogicalDevice::CreateCommandPool
CommandPoolWrapper CreateCommandPool(const VkCommandPoolCreateInfo &CmdPoolCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:120
VulkanUtilities::VulkanLogicalDevice::CreateComputePipeline
PipelineWrapper CreateComputePipeline(const VkComputePipelineCreateInfo &PipelineCI, VkPipelineCache cache, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:192
VulkanUtilities::DescriptorSetLayoutWrapper
DEFINE_VULKAN_OBJECT_WRAPPER(DescriptorSetLayout) DescriptorSetLayoutWrapper
Definition: VulkanLogicalDevice.hpp:82
VulkanUtilities::VulkanHandleTypeId::Semaphore
@ Semaphore
DEFINE_VULKAN_OBJECT_WRAPPER
#define DEFINE_VULKAN_OBJECT_WRAPPER(Type)
Definition: VulkanLogicalDevice.hpp:67
VulkanUtilities::VulkanLogicalDevice::BindImageMemory
VkResult BindImageMemory(VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) const
Definition: VulkanLogicalDevice.cpp:492
VulkanUtilities::VulkanLogicalDevice::CreatePipelineLayout
PipelineLayoutWrapper CreatePipelineLayout(const VkPipelineLayoutCreateInfo &LayoutCI, const char *DebugName="") const
Definition: VulkanLogicalDevice.cpp:261