4#include <vk_mem_alloc.h>
11 class VulkanApplication;
12 class VulkanDeviceQueue;
66 vk::raii::DescriptorSetLayout
mLayout{
nullptr};
99 void Reset()
override;
116 void Clear()
override;
233 void*
dest)
const override;
244 void QueryBudget(
size_t& used,
size_t& budget)
const override;
283 void Present(PresentDesc
const& desc)
const override;
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Definition Resource.hpp:332
Definition Resource.hpp:57
Definition Command.hpp:18
Definition Descriptor.hpp:49
Definition Device.hpp:164
Definition Device.hpp:104
Definition Device.hpp:245
Thread-safe type-erased handle dereference facility for RHI Objects.
Definition Details.hpp:148
Definition PipelineState.hpp:28
Definition PipelineState.hpp:45
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Definition Swapchain.hpp:19
Definition Resource.hpp:216
Sub-allocates byte ranges within an abstract fixed-size space.
Definition Resource.hpp:124
Definition Application.hpp:9
const VulkanDevice & mDevice
Definition Device.hpp:65
void DebugSetObjectName(const char *name) override
Definition Device.cpp:939
vk::raii::DescriptorSetLayout mLayout
Definition Device.hpp:66
auto const & GetVkLayout() const
Definition Device.hpp:70
void DebugSetObjectName(const char *name) override
Definition Device.cpp:643
vk::raii::Fence mFence
Definition Device.hpp:55
const VulkanDevice & mDevice
Definition Device.hpp:54
auto const & GetVkFence() const
Definition Device.hpp:59
const VulkanDevice & mDevice
Definition Device.hpp:87
auto const & GetVkQueryPool() const
Definition Device.hpp:95
vk::raii::QueryPool mQueryPool
Definition Device.hpp:89
Vector< uint64_t > mResults
Definition Device.hpp:91
const float GetTimestampResolution() override
Definition Device.hpp:97
void Reset() override
Definition Device.cpp:1039
void DebugSetObjectName(const char *name) override
Definition Device.cpp:1052
Span< const uint64_t > GetResults(bool wait) override
Definition Device.cpp:1041
const float mTimestampResolution
Definition Device.hpp:88
Definition Device.hpp:263
vk::raii::Queue mQueue
Definition Device.hpp:267
void WaitIdle() const override
Definition Device.cpp:750
vk::raii::Queue GetVkQueue() const
Definition Device.hpp:277
const uint32_t mQueueIndex
Definition Device.hpp:265
uint32_t GetVkQueueIndex() const
Definition Device.hpp:278
uint32_t GetVkQueueFamily() const override
Definition Device.hpp:279
void DebugSetObjectName(const char *name) override
Definition Device.cpp:863
const VulkanDevice & mDevice
Definition Device.hpp:264
void Submit(Span< const SubmitDesc >, RHIDeviceFence *completionFence) const override
Definition Device.cpp:756
VulkanDeviceQueue(const VulkanDevice &device, uint32_t family_index, uint32_t queue_index)
Definition Device.hpp:270
const VulkanDevice & GetVulkanDevice() const
Definition Device.hpp:276
const uint32_t mFamilyIndex
Definition Device.hpp:266
const VulkanDevice & mDevice
Definition Device.hpp:76
void DebugSetObjectName(const char *name) override
Definition Device.cpp:1011
auto const & GetVkSampler() const
Definition Device.hpp:81
vk::raii::Sampler mSampler
Definition Device.hpp:77
auto const & GetVkSemaphore() const
Definition Device.hpp:48
const VulkanDevice & mDevice
Definition Device.hpp:43
void DebugSetObjectName(const char *name) override
Definition Device.cpp:626
vk::raii::Semaphore mSemaphore
Definition Device.hpp:44
Definition Device.hpp:122
RHIDeviceFence * GetFence(Handle handle) const override
Definition Device.cpp:668
bool WaitForFences(Span< RHIDeviceFence *const > fences, bool wait_all, size_t timeout) override
Wait for fences to arrive.
Definition Device.cpp:682
RHIObjectPool mStorage
Definition Device.hpp:137
RHIDeviceDescriptorSetLayout * GetDescriptorSetLayout(Handle handle) const override
Definition Device.cpp:988
RHIDeviceDescriptorPool * GetDescriptorPool(Handle handle) const override
Definition Device.cpp:1003
void DestroySemaphore(Handle handle) override
Definition Device.cpp:661
RHIDeviceScopedHandle< RHIDeviceDescriptorPool > CreateDescriptorPool(RHIDeviceDescriptorPool::PoolDesc const &desc) override
Definition Device.cpp:998
vk::AllocationCallbacks const * GetVkAllocationCallbacks() const
Definition Device.cpp:734
RHIDeviceScopedHandle< RHIVirtualAllocator > CreateVirtualAllocator(uint64_t size) override
Definition Device.cpp:1205
RHIDeviceCapabilities mDeviceCaps
Definition Device.hpp:146
void DestroyAccelerationStructure(Handle handle) override
Definition Device.cpp:937
void DestroyQueryPool(Handle handle) override
Definition Device.cpp:1153
VkAllocationCallbacks const * GetVkAllocationCallbacksNative() const
Definition Device.cpp:738
const VulkanApplication & mApp
Definition Device.hpp:123
void ResetFences(Span< RHIDeviceFence *const > fences) override
Definition Device.cpp:671
RHIDeviceScopedHandle< RHIDeviceFence > CreateFence(bool signaled) override
Definition Device.cpp:663
size_t WriteAccelerationStructureInstanceData(RHIAccelerationStructureGeometryInstance const &data, void *dest) const override
Definition Device.cpp:902
void DestroyFence(Handle handle) override
Definition Device.cpp:669
RHIDeviceScopedHandle< RHIPipelineState > CreatePipelineState(RHIPipelineState::PipelineStateDesc const &desc) override
Definition Device.cpp:576
void DestroyPipelineState(Handle handle) override
Definition Device.cpp:586
void QueryBudget(size_t &used, size_t &budget) const override
Definition Device.cpp:429
RHIDeviceScopedHandle< RHIPipelineStateCache > CreatePipelineCache(RHIPipelineStateCache::PipelineStateCacheDesc const &desc) override
Definition Device.cpp:561
Vector< RHISwapchainPresentMode > mSwapchainPresentModes
Definition Device.hpp:132
RHIDeviceScopedHandle< RHIDeviceSampler > CreateSampler(RHIDeviceSampler::SamplerDesc const &desc) override
Definition Device.cpp:1131
RHITexture * GetTexture(Handle handle) const override
Definition Device.cpp:884
RHIBuffer * GetBuffer(Handle handle) const override
Definition Device.cpp:876
RHIDeviceScopedHandle< RHIDeviceSemaphore > CreateSemaphore(bool is_timeline) override
Definition Device.cpp:651
void DestroyShaderModule(Handle handle) override
Definition Device.cpp:600
RHIDeviceScopedHandle< RHIBuffer > CreateBuffer(RHIBufferDesc const &desc) override
Definition Device.cpp:871
void DestroyVirtualAllocator(Handle handle) override
Definition Device.cpp:1215
vk::raii::PhysicalDevice mPhysicalDevice
Definition Device.hpp:127
bool WaitForTimelineSemaphores(Span< const Pair< RHIDeviceSemaphore *, size_t > > semaphores, size_t timeout) override
Wait for timeline semaphores to reach specified values.
Definition Device.cpp:709
RHIAccelerationStructure * GetAccelerationStructure(Handle handle) const override
Definition Device.cpp:932
void DestroyBuffer(Handle handle) override
Definition Device.cpp:877
RHIDeviceScopedHandle< RHIDeviceQueryPool > CreateQueryPool(RHIDeviceQueryPool::QueryPoolDesc const &desc) override
Definition Device.cpp:1143
void DestroySampler(Handle handle) override
Definition Device.cpp:1141
VmaAllocator mVkAllocator
Definition Device.hpp:134
Span< RHISwapchainPresentMode const > GetSwapchainSupportedPresentModes() const override
Definition Device.cpp:547
void QueryAllocationStats(size_t &blockBytes, size_t &allocationBytes) const override
Definition Device.cpp:438
RHIDeviceQueue * GetDeviceQueue(RHIDeviceQueueType type) const override
Definition Device.cpp:528
RHIDeviceScopedHandle< RHISwapchain > CreateSwapchain(RHISwapchain::SwapchainDesc const &desc) override
Definition Device.cpp:552
auto const & GetVkPhysicalDeviceProperties() const
Definition Device.hpp:255
void DestroyDescriptorPool(Handle handle) override
Definition Device.cpp:1008
void DestroySwapchain(Handle handle) override
Definition Device.cpp:558
RHIPipelineState * GetPipelineState(Handle handle) const override
Definition Device.cpp:581
RHIDeviceCapabilities GetCapabilities() const override
Definition Device.hpp:153
~VulkanDevice() override
Definition Device.cpp:413
RHIVirtualAllocator * GetVirtualAllocator(Handle handle) const override
Definition Device.cpp:1210
auto const & GetVkQueues() const
Definition Device.hpp:251
void QueryMemoryStats(RHIDeviceMemoryStats &outStats) const override
Definition Device.cpp:450
auto const & GetVkAllocator() const
Definition Device.hpp:256
Vector< RHISurfaceFormat > mSwapchainFormats
Definition Device.hpp:131
RHIDeviceScopedHandle< RHIAccelerationStructure > CreateAccelerationStructure(RHIAccelerationStructureDesc const &desc) override
Definition Device.cpp:927
Mutex mQueueSubmitMutex
Definition Device.hpp:142
RHICommandPool * GetCommandPool(Handle handle) const override
Definition Device.cpp:609
auto const & GetVkPhysicalDevice() const
Definition Device.hpp:254
vk::raii::Device mDevice
Definition Device.hpp:128
String QueryDeviceString() const override
Definition Device.cpp:517
Allocator * GetAllocator() const
Definition Device.cpp:60
RHIShaderModule * GetShaderModule(Handle handle) const override
Definition Device.cpp:595
RHIDeviceSemaphore * GetSemaphore(Handle handle) const override
Definition Device.cpp:656
void DebugSetObjectName(const char *name) override
Definition Device.cpp:742
vk::PhysicalDeviceProperties mPhysicalDeviceProperties
Definition Device.hpp:144
RHIPipelineStateCacheKey mPipelineCacheKey
Definition Device.hpp:145
void DestroyDescriptorSetLayout(Handle handle) override
Definition Device.cpp:993
auto const & GetVkSurface() const
Definition Device.hpp:253
UniquePtr< VulkanDeviceQueues > mQueues
Definition Device.hpp:139
RHIAccelerationStructureSizeInfo GetAccelerationStructureSizeInfo(RHIAccelerationStructureBuildDesc const &desc, Allocator *scratchAllocator=nullptr) const override
Definition Device.cpp:888
void SignalTimelineSemaphores(Span< const Pair< RHIDeviceSemaphore *, size_t > > semaphores) override
Definition Device.cpp:698
void WaitIdle() const override
Definition Device.cpp:427
RHIPipelineStateCacheKey GetPipelineCacheKey() const override
Definition Device.hpp:154
RHIPipelineStateCache * GetPipelineCache(Handle handle) const override
Definition Device.cpp:566
RHIDeviceScopedHandle< RHITexture > CreateTexture(RHITextureDesc const &desc) override
Definition Device.cpp:879
vk::raii::SurfaceKHR mSurface
Definition Device.hpp:129
RHISwapchain * GetSwapchain(Handle handle) const override
Definition Device.cpp:557
Mutex & GetQueueSubmitMutex() const
Definition Device.hpp:148
Span< RHISurfaceFormat const > GetSwapchainSupportedFormats() const override
Definition Device.cpp:545
void DestroyPipelineCache(Handle handle) override
Definition Device.cpp:571
void DestroyTexture(Handle handle) override
Definition Device.cpp:885
RHIDeviceScopedHandle< RHIShaderModule > CreateShaderModule(RHIShaderModule::ShaderModuleDesc const &desc) override
Definition Device.cpp:590
void DestroyCommandPool(Handle handle) override
Definition Device.cpp:614
SDL_Window * mWindow
Definition Device.hpp:125
auto const & GetVkDevice() const
Definition Device.hpp:252
RHIDeviceQueryPool * GetQueryPool(Handle handle) const override
Definition Device.cpp:1148
RHIDeviceScopedHandle< RHICommandPool > CreateCommandPool(RHICommandPool::PoolDesc desc) override
Definition Device.cpp:604
RHIDeviceScopedHandle< RHIDeviceDescriptorSetLayout > CreateDescriptorSetLayout(RHIDeviceDescriptorSetLayoutDesc const &desc) override
Definition Device.cpp:983
RHIDeviceSampler * GetSampler(Handle handle) const override
Definition Device.cpp:1136
Definition Device.hpp:105
void Clear() override
Definition Device.cpp:1191
uint64_t Allocate(uint64_t size, uint64_t alignment) override
Sub-allocates size bytes with the given alignment.
Definition Device.cpp:1169
Map< uint64_t, VmaVirtualAllocation > mAllocations
Definition Device.hpp:108
const VulkanDevice & mDevice
Definition Device.hpp:106
VmaVirtualBlock mBlock
Definition Device.hpp:107
uint64_t GetPeakUsage() const override
Definition Device.hpp:119
~VulkanVirtualAllocator() override
Definition Device.cpp:1163
uint64_t mPeakUsage
Definition Device.hpp:110
uint64_t GetUsedBytes() const override
Definition Device.cpp:1198
void Free(uint64_t offset) override
Definition Device.cpp:1183
uint64_t mCapacity
Definition Device.hpp:109
uint64_t GetCapacity() const override
Definition Device.hpp:118
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:130
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:112
std::mutex Mutex
Definition Thread.hpp:10
std::pair< First, Second > Pair
Alias for std::pair
Definition Container.hpp:32
std::map< K, V, Predicate, StlAllocator< Pair< const K, V > > > Map
std::map with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:160
std::unique_ptr< T, Deleter > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:170
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:153
std::span< T > Span
Alias for std::span
Definition Container.hpp:60
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:4
Present
Definition Common.hpp:183
uintptr_t Handle
Definition Details.hpp:8
RHIDeviceQueueType
Definition Common.hpp:164
static constexpr Handle kInvalidHandle
Definition Details.hpp:9
constexpr uint32_t kInvalidQueueIndex
Definition Device.hpp:13
Definition Resource.hpp:320
Definition Resource.hpp:256
Definition Resource.hpp:289
Definition Resource.hpp:250
Definition Resource.hpp:28
Definition Command.hpp:24
Definition Device.hpp:189
Definition Descriptor.hpp:53
Definition Device.hpp:237
Definition Device.hpp:170
Definition Device.hpp:110
Definition PipelineState.hpp:13
Definition PipelineState.hpp:35
Definition PipelineState.hpp:49
Definition Swapchain.hpp:23
Definition Resource.hpp:142
VulkanDeviceQueue * Get(Handle handle) const
Definition Device.cpp:526
VulkanDeviceQueues(Allocator *allocator)
Definition Device.hpp:18
Handle compute
Definition Device.hpp:17
Handle graphics
Definition Device.hpp:17
bool IsValid() const
Definition Device.hpp:35
RHIObjectPool< VulkanDeviceQueue > storage
Definition Device.hpp:16
VulkanDeviceQueue * Get(RHIDeviceQueueType type) const
Definition Device.hpp:20
Handle transfer
Definition Device.hpp:17