Go to the documentation of this file.
67 size_t CommandQueueCount,
69 std::shared_ptr<VulkanUtilities::VulkanInstance> Instance,
70 std::unique_ptr<VulkanUtilities::VulkanPhysicalDevice> PhysicalDevice,
71 std::shared_ptr<VulkanUtilities::VulkanLogicalDevice> LogicalDevice) noexcept(
false);
88 IBuffer** ppBuffer)
override final;
96 ITexture** ppTexture)
override final;
115 bool IsDeviceInternal);
140 bool IsDeviceInternal);
158 ITexture** ppTexture)
override final;
164 IBuffer** ppBuffer)
override final;
193 return m_DescriptorSetAllocator.
Allocate(CommandQueueMask, SetLayout, DebugName);
197 std::shared_ptr<const VulkanUtilities::VulkanInstance>
GetVulkanInstance()
const {
return m_VulkanInstance; }
207 return m_MemoryMgr.
Allocate(MemReqs, MemoryProperties, AllocateFlags);
211 const auto& MemoryProps = m_PhysicalDevice->GetMemoryProperties();
212 VERIFY_EXPR(MemoryTypeIndex < MemoryProps.memoryTypeCount);
213 const auto MemoryFlags = MemoryProps.memoryTypes[MemoryTypeIndex].propertyFlags;
214 return m_MemoryMgr.
Allocate(Size, Alignment, MemoryTypeIndex, (MemoryFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0, AllocateFlags);
249 void SubmitCommandBuffer(
Uint32 QueueIndex,
250 const VkSubmitInfo& SubmitInfo,
251 Uint64& SubmittedCmdBuffNumber,
252 Uint64& SubmittedFenceValue,
255 std::shared_ptr<VulkanUtilities::VulkanInstance> m_VulkanInstance;
256 std::unique_ptr<VulkanUtilities::VulkanPhysicalDevice> m_PhysicalDevice;
257 std::shared_ptr<VulkanUtilities::VulkanLogicalDevice> m_LogicalVkDevice;
276 std::unique_ptr<IDXCompiler> m_pDxCompiler;
278 Properties m_Properties;
virtual void TestTextureFormat(TEXTURE_FORMAT TexFormat) override final
Definition: RenderDeviceVkImpl.cpp:516
Definition: DescriptorPoolManager.hpp:187
IDXCompiler * GetDxCompiler() const
Definition: RenderDeviceVkImpl.hpp:222
FramebufferCache & GetFramebufferCache()
Definition: RenderDeviceVkImpl.hpp:202
Base interface for a reference counter object that stores the number of strong and weak references an...
Definition: ReferenceCounters.h:44
Render device implementation in Vulkan backend.
Definition: RenderDeviceVkImpl.hpp:58
Graphics pipeline state creation attributes.
Definition: PipelineState.h:397
char Char
Definition: BasicTypes.h:64
Sampler description.
Definition: Sampler.h:58
Texture sampler interface.
Definition: Sampler.h:192
Ray tracing pipeline state description.
Definition: PipelineState.h:443
Pipeline resource signature interface.
Definition: PipelineResourceSignature.h:226
RenderPassCache & GetImplicitRenderPassCache()
Definition: RenderDeviceVkImpl.hpp:203
const Uint32 ShaderGroupHandleSize
Definition: RenderDeviceVkImpl.hpp:226
Pipeline resource signature description.
Definition: PipelineResourceSignature.h:166
Shader binding table interface.
Definition: ShaderBindingTable.h:93
Command queue interface.
Definition: CommandQueueVk.h:51
Definition: VulkanLogicalDevice.hpp:88
Definition: FramebufferCache.hpp:42
Top-level AS description.
Definition: TopLevelAS.h:49
Pipeline state interface.
Definition: PipelineState.h:505
Query description.
Definition: Query.h:150
DescriptorSetAllocation AllocateDescriptorSet(Uint64 CommandQueueMask, VkDescriptorSetLayout SetLayout, const char *DebugName="")
Definition: RenderDeviceVkImpl.hpp:191
virtual Uint32 GetVkVersion() override final
Implementation of IRenderDeviceVk::GetVkVersion().
Definition: RenderDeviceVkImpl.hpp:152
DescriptorSetAllocation Allocate(Uint64 CommandQueueMask, VkDescriptorSetLayout SetLayout, const char *DebugName="")
Definition: DescriptorPoolManager.cpp:198
virtual void CreateSBT(const ShaderBindingTableDesc &Desc, IShaderBindingTable **ppSBT) override final
Implementation of IRenderDevice::CreateSBT() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:744
Uint64 ExecuteCommandBuffer(Uint32 QueueIndex, const VkSubmitInfo &SubmitInfo, class DeviceContextVkImpl *pImmediateCtx, std::vector< std::pair< Uint64, RefCntAutoPtr< IFence >>> *pSignalFences)
Definition: RenderDeviceVkImpl.cpp:477
Shader interface.
Definition: Shader.h:428
uint64_t Uint64
64-bit unsigned integer
Definition: BasicTypes.h:50
Top-level AS interface.
Definition: TopLevelAS.h:151
virtual void CreateBLAS(const BottomLevelASDesc &Desc, IBottomLevelAS **ppBLAS) override final
Implementation of IRenderDevice::CreateBLAS() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:724
virtual VkPhysicalDevice GetVkPhysicalDevice() override final
Implementation of IRenderDeviceVk::GetVkPhysicalDevice().
Definition: RenderDeviceVkImpl.hpp:146
virtual void ReleaseStaleResources(bool ForceRelease=false) override final
Implementation of IRenderDevice::ReleaseStaleResources() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:509
void ExecuteAndDisposeTransientCmdBuff(Uint32 QueueIndex, VkCommandBuffer vkCmdBuff, VulkanUtilities::CommandPoolWrapper &&CmdPool)
Definition: RenderDeviceVkImpl.cpp:339
Framebuffer interface.
Definition: Framebuffer.h:73
virtual void CreateSampler(const SamplerDesc &SamplerDesc, ISampler **ppSampler) override final
Implementation of IRenderDevice::CreateSampler() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:684
std::shared_ptr< const VulkanUtilities::VulkanInstance > GetVulkanInstance() const
Definition: RenderDeviceVkImpl.hpp:197
void AllocateTransientCmdPool(VulkanUtilities::CommandPoolWrapper &CmdPool, VkCommandBuffer &vkCmdBuff, const Char *DebugPoolName=nullptr)
Definition: RenderDeviceVkImpl.cpp:307
Render pass description.
Definition: RenderPass.h:341
VulkanDynamicMemoryManager & GetDynamicMemoryManager()
Definition: RenderDeviceVkImpl.hpp:218
const Properties & GetProperties() const
Definition: RenderDeviceVkImpl.hpp:234
Shader creation attributes.
Definition: Shader.h:241
Buffer interface.
Definition: Buffer.h:187
virtual void CreateTLAS(const TopLevelASDesc &Desc, ITopLevelAS **ppTLAS) override final
Implementation of IRenderDevice::CreateTLAS() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:738
Definition: CommandPoolManager.hpp:40
Base implementation of the render device for next-generation backends.
Definition: RenderDeviceNextGenBase.hpp:49
Shader binding table description.
Definition: ShaderBindingTable.h:50
VulkanMemoryAllocation Allocate(VkDeviceSize Size, VkDeviceSize Alignment, uint32_t MemoryTypeIndex, bool HostVisible, VkMemoryAllocateFlags AllocateFlags)
Definition: VulkanMemoryManager.cpp:161
const Uint32 MaxDrawMeshTasksCount
Definition: RenderDeviceVkImpl.hpp:229
virtual VkInstance GetVkInstance() override final
Implementation of IRenderDeviceVk::GetVkInstance().
Definition: RenderDeviceVkImpl.hpp:149
Texture description.
Definition: Texture.h:47
virtual void CreateTextureFromVulkanImage(VkImage vkImage, const TextureDesc &TexDesc, RESOURCE_STATE InitialState, ITexture **ppTexture) override final
Implementation of IRenderDeviceVk::CreateTextureFromVulkanImage().
Definition: RenderDeviceVkImpl.cpp:660
DXC compiler interface.
Definition: DXCompiler.hpp:55
RenderDeviceVkImpl(IReferenceCounters *pRefCounters, IMemoryAllocator &RawMemAllocator, IEngineFactory *pEngineFactory, const EngineVkCreateInfo &EngineCI, size_t CommandQueueCount, ICommandQueueVk **pCmdQueues, std::shared_ptr< VulkanUtilities::VulkanInstance > Instance, std::unique_ptr< VulkanUtilities::VulkanPhysicalDevice > PhysicalDevice, std::shared_ptr< VulkanUtilities::VulkanLogicalDevice > LogicalDevice) noexcept(false)
Definition: RenderDeviceVkImpl.cpp:54
Definition: DescriptorPoolManager.hpp:50
virtual void CreateBuffer(const BufferDesc &BuffDesc, const BufferData *pBuffData, IBuffer **ppBuffer) override final
Implementation of IRenderDevice::CreateBuffer() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:648
const Uint32 MaxRayTracingRecursionDepth
Definition: RenderDeviceVkImpl.hpp:230
virtual void CreateTexture(const TextureDesc &TexDesc, const TextureData *pData, ITexture **ppTexture) override final
Implementation of IRenderDevice::CreateTexture() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:679
#define IMPLEMENT_QUERY_INTERFACE_IN_PLACE(InterfaceID, ParentClassName)
Definition: ObjectBase.hpp:59
DescriptorPoolManager & GetDynamicDescriptorPool()
Definition: RenderDeviceVkImpl.hpp:195
virtual void CreateQuery(const QueryDesc &Desc, IQuery **ppQuery) override final
Implementation of IRenderDevice::CreateQuery() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:694
Definition: DescriptorPoolManager.hpp:133
virtual VkDevice GetVkDevice() override final
Implementation of IRenderDeviceVk::GetVkDevice().
Definition: RenderDeviceVkImpl.hpp:143
const Uint32 MaxShaderRecordStride
Definition: RenderDeviceVkImpl.hpp:227
Template class that implements reference counting.
Definition: RefCntAutoPtr.hpp:73
#define DILIGENT_CALL_TYPE
Definition: CommonDefinitions.h:45
Describes the initial data to store in the texture.
Definition: Texture.h:221
Compute pipeline state description.
Definition: PipelineState.h:427
virtual void CreateBufferFromVulkanResource(VkBuffer vkBuffer, const BufferDesc &BuffDesc, RESOURCE_STATE InitialState, IBuffer **ppBuffer) override final
Implementation of IRenderDeviceVk::CreateBufferFromVulkanResource().
Definition: RenderDeviceVkImpl.cpp:643
virtual void CreateShader(const ShaderCreateInfo &ShaderCreateInfo, IShader **ppShader) override final
Implementation of IRenderDevice::CreateShader() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:654
uint32_t Uint32
32-bit unsigned integer
Definition: BasicTypes.h:51
const VulkanUtilities::VulkanPhysicalDevice & GetPhysicalDevice() const
Definition: RenderDeviceVkImpl.hpp:199
Device context implementation in Vulkan backend.
Definition: DeviceContextVkImpl.hpp:67
virtual void CreateGraphicsPipelineState(const GraphicsPipelineStateCreateInfo &PSOCreateInfo, IPipelineState **ppPipelineState) override final
Implementation of IRenderDevice::CreateGraphicsPipelineState() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:628
virtual void CreateComputePipelineState(const ComputePipelineStateCreateInfo &PSOCreateInfo, IPipelineState **ppPipelineState) override final
Implementation of IRenderDevice::CreateComputePipelineState() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:633
TEXTURE_FORMAT
Texture formats.
Definition: GraphicsTypes.h:328
Buffer description.
Definition: Buffer.h:74
Texture object implementation in Vulkan backend.
Definition: TextureVkImpl.hpp:42
Definition: VulkanPhysicalDevice.hpp:37
virtual void IdleGPU() override final
Implementation of IRenderDevice::IdleGPU() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:494
Base interface for a raw memory allocator.
Definition: MemoryAllocator.h:41
const Uint32 MaxRayGenThreads
Definition: RenderDeviceVkImpl.hpp:231
Fence interface.
Definition: Fence.h:62
Definition: AdvancedMath.hpp:979
VulkanUtilities::VulkanMemoryManager & GetGlobalMemoryManager()
Definition: RenderDeviceVkImpl.hpp:216
Query interface.
Definition: Query.h:177
VulkanUtilities::VulkanMemoryAllocation AllocateMemory(const VkMemoryRequirements &MemReqs, VkMemoryPropertyFlags MemoryProperties, VkMemoryAllocateFlags AllocateFlags=0)
Definition: RenderDeviceVkImpl.hpp:205
#define VERIFY_EXPR(...)
Definition: DebugUtilities.hpp:79
Framebuffer description.
Definition: Framebuffer.h:46
Definition: VulkanMemoryManager.hpp:146
const Uint32 ShaderGroupBaseAlignment
Definition: RenderDeviceVkImpl.hpp:228
Bottom-level AS interface.
Definition: BottomLevelAS.h:207
Definition: RenderPassCache.hpp:48
VulkanUtilities::VulkanMemoryAllocation AllocateMemory(VkDeviceSize Size, VkDeviceSize Alignment, uint32_t MemoryTypeIndex, VkMemoryAllocateFlags AllocateFlags=0)
Definition: RenderDeviceVkImpl.hpp:209
Definition: VulkanCommandBuffer.hpp:33
Definition: RenderDeviceVkImpl.hpp:224
virtual void CreatePipelineResourceSignature(const PipelineResourceSignatureDesc &Desc, IPipelineResourceSignature **ppSignature) override final
Implementation of IRenderDevice::CreatePipelineResourceSignature() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:750
DEFINE_VULKAN_OBJECT_WRAPPER(CommandPool) CommandPoolWrapper
Definition: VulkanLogicalDevice.hpp:68
RESOURCE_STATE
Resource usage state.
Definition: GraphicsTypes.h:2814
Definition: VulkanDynamicHeap.hpp:117
virtual void CreateFramebuffer(const FramebufferDesc &Desc, IFramebuffer **ppFramebuffer) override final
Implementation of IRenderDevice::CreateFramebuffer() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:711
Describes the buffer initial data.
Definition: Buffer.h:155
Bottom-level AS description.
Definition: BottomLevelAS.h:145
virtual void CreateRayTracingPipelineState(const RayTracingPipelineStateCreateInfo &PSOCreateInfo, IPipelineState **ppPipelineState) override final
Implementation of IRenderDevice::CreateRayTracingPipelineState() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:638
Engine factory base interface.
Definition: EngineFactory.h:60
Attributes specific to Vulkan engine.
Definition: GraphicsTypes.h:2282
virtual void CreateTLASFromVulkanResource(VkAccelerationStructureKHR vkTLAS, const TopLevelASDesc &Desc, RESOURCE_STATE InitialState, ITopLevelAS **ppTLAS) override final
Implementation of IRenderDeviceVk::CreateTLASFromVulkanResource().
Definition: RenderDeviceVkImpl.cpp:730
virtual void CreateRenderPass(const RenderPassDesc &Desc, IRenderPass **ppRenderPass) override final
Implementation of IRenderDevice::CreateRenderPass() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:706
Fence description.
Definition: Fence.h:43
~RenderDeviceVkImpl()
Definition: RenderDeviceVkImpl.cpp:273
Texture inteface.
Definition: Texture.h:273
Definition: VulkanMemoryManager.hpp:48
virtual void CreateBLASFromVulkanResource(VkAccelerationStructureKHR vkBLAS, const BottomLevelASDesc &Desc, RESOURCE_STATE InitialState, IBottomLevelAS **ppBLAS) override final
Implementation of IRenderDeviceVk::CreateBLASFromVulkanResource().
Definition: RenderDeviceVkImpl.cpp:716
Render pass interface.
Definition: RenderPass.h:369
The library uses Direct3D-style math:
Definition: AdvancedMath.hpp:37
virtual void CreateFence(const FenceDesc &Desc, IFence **ppFence) override final
Implementation of IRenderDevice::CreateFence() in Vulkan backend.
Definition: RenderDeviceVkImpl.cpp:689
const VulkanUtilities::VulkanLogicalDevice & GetLogicalDevice()
Definition: RenderDeviceVkImpl.hpp:200
void FlushStaleResources(Uint32 CmdQueueIndex)
Definition: RenderDeviceVkImpl.cpp:501