4#include <vk_mem_alloc.h>
11 class VulkanApplication;
12 class VulkanDeviceQueue;
66 vk::raii::DescriptorSetLayout
mLayout{
nullptr};
99 void Reset()
override;
114 [[nodiscard]] uint64_t
Allocate(uint64_t size, uint64_t alignment)
override;
115 void Free(uint64_t offset)
override;
116 void Clear()
override;
232 void* dest)
const override;
239 size_t timeout)
override;
270 mQueue(device.GetVkDevice().getQueue(family_index, queue_index))
Allocator interface (noexcept)
Definition Allocator.hpp:29
Definition Resource.hpp:332
Definition Resource.hpp:57
Definition Command.hpp:18
Definition Descriptor.hpp:49
Definition Device.hpp:165
Definition Device.hpp:105
Definition Device.hpp:246
Thread-safe type-erased handle dereference facility for RHI Objects.
Definition Details.hpp:147
Definition PipelineState.hpp:43
Definition PipelineState.hpp:60
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:85
Definition Swapchain.hpp:32
Definition Resource.hpp:216
Sub-allocates byte ranges within an abstract fixed-size space.
Definition Resource.hpp:124
Definition Application.hpp:8
const VulkanDevice & mDevice
Definition Device.hpp:65
void DebugSetObjectName(const char *name) override
Definition Device.cpp:901
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:603
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:1000
void DebugSetObjectName(const char *name) override
Definition Device.cpp:1041
Span< const uint64_t > GetResults(bool wait) override
Definition Device.cpp:1002
const float mTimestampResolution
Definition Device.hpp:88
Definition Device.hpp:261
vk::raii::Queue mQueue
Definition Device.hpp:265
void WaitIdle() const override
Definition Device.cpp:710
vk::raii::Queue GetVkQueue() const
Definition Device.hpp:275
const uint32_t mQueueIndex
Definition Device.hpp:263
uint32_t GetVkQueueIndex() const
Definition Device.hpp:276
uint32_t GetVkQueueFamily() const override
Definition Device.hpp:277
void DebugSetObjectName(const char *name) override
Definition Device.cpp:825
const VulkanDevice & mDevice
Definition Device.hpp:262
void Submit(Span< const SubmitDesc >, RHIDeviceFence *completionFence) const override
Definition Device.cpp:716
VulkanDeviceQueue(const VulkanDevice &device, uint32_t family_index, uint32_t queue_index)
Definition Device.hpp:268
const VulkanDevice & GetVulkanDevice() const
Definition Device.hpp:274
const uint32_t mFamilyIndex
Definition Device.hpp:264
const VulkanDevice & mDevice
Definition Device.hpp:76
void DebugSetObjectName(const char *name) override
Definition Device.cpp:972
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:587
vk::raii::Semaphore mSemaphore
Definition Device.hpp:44
Definition Device.hpp:122
RHIDeviceFence * GetFence(Handle handle) const override
Definition Device.cpp:628
bool WaitForFences(Span< RHIDeviceFence *const > fences, bool wait_all, size_t timeout) override
Wait for fences to arrive.
Definition Device.cpp:642
RHIObjectPool mStorage
Definition Device.hpp:131
RHIDeviceDescriptorSetLayout * GetDescriptorSetLayout(Handle handle) const override
Definition Device.cpp:949
RHIDeviceDescriptorPool * GetDescriptorPool(Handle handle) const override
Definition Device.cpp:964
void DestroySemaphore(Handle handle) override
Definition Device.cpp:621
RHIDeviceScopedHandle< RHIDeviceDescriptorPool > CreateDescriptorPool(RHIDeviceDescriptorPool::PoolDesc const &desc) override
Definition Device.cpp:959
vk::AllocationCallbacks const * GetVkAllocationCallbacks() const
Definition Device.cpp:694
RHIDeviceScopedHandle< RHIVirtualAllocator > CreateVirtualAllocator(uint64_t size) override
Definition Device.cpp:1197
RHIDeviceCapabilities mDeviceCaps
Definition Device.hpp:140
void DestroyAccelerationStructure(Handle handle) override
Definition Device.cpp:899
void QueryBudget(RHIDeviceHeapType heapType, size_t &used, size_t &budget) const override
Definition Device.cpp:366
void DestroyQueryPool(Handle handle) override
Definition Device.cpp:1145
VkAllocationCallbacks const * GetVkAllocationCallbacksNative() const
Definition Device.cpp:698
const VulkanApplication & mApp
Definition Device.hpp:123
void ResetFences(Span< RHIDeviceFence *const > fences) override
Definition Device.cpp:631
RHIDeviceScopedHandle< RHIDeviceFence > CreateFence(bool signaled) override
Definition Device.cpp:623
size_t WriteAccelerationStructureInstanceData(RHIAccelerationStructureGeometryInstance const &data, void *dest) const override
Definition Device.cpp:864
void DestroyFence(Handle handle) override
Definition Device.cpp:629
RHIDeviceScopedHandle< RHIPipelineState > CreatePipelineState(RHIPipelineState::PipelineStateDesc const &desc) override
Definition Device.cpp:537
void DestroyPipelineState(Handle handle) override
Definition Device.cpp:547
RHIDeviceScopedHandle< RHIPipelineStateCache > CreatePipelineCache(RHIPipelineStateCache::PipelineStateCacheDesc const &desc) override
Definition Device.cpp:522
void DestroySurface(Handle handle) override
Definition Device.cpp:511
RHIDeviceScopedHandle< RHIDeviceSampler > CreateSampler(RHIDeviceSampler::SamplerDesc const &desc) override
Definition Device.cpp:1123
RHITexture * GetTexture(Handle handle) const override
Definition Device.cpp:846
RHIBuffer * GetBuffer(Handle handle) const override
Definition Device.cpp:838
RHIDeviceScopedHandle< RHIDeviceSemaphore > CreateSemaphore(bool is_timeline) override
Definition Device.cpp:611
void DestroyShaderModule(Handle handle) override
Definition Device.cpp:561
const VulkanApplication & GetApp() const
Definition Device.hpp:144
RHIDeviceScopedHandle< RHIBuffer > CreateBuffer(RHIBufferDesc const &desc) override
Definition Device.cpp:833
void DestroyVirtualAllocator(Handle handle) override
Definition Device.cpp:1207
vk::raii::PhysicalDevice mPhysicalDevice
Definition Device.hpp:125
bool WaitForTimelineSemaphores(Span< const Pair< RHIDeviceSemaphore *, size_t > > semaphores, size_t timeout) override
Wait for timeline semaphores to reach specified values.
Definition Device.cpp:669
RHIAccelerationStructure * GetAccelerationStructure(Handle handle) const override
Definition Device.cpp:894
void DestroyBuffer(Handle handle) override
Definition Device.cpp:839
RHIDeviceScopedHandle< RHIDeviceQueryPool > CreateQueryPool(RHIDeviceQueryPool::QueryPoolDesc const &desc) override
Definition Device.cpp:1135
void DestroySampler(Handle handle) override
Definition Device.cpp:1133
VmaAllocator mVkAllocator
Definition Device.hpp:128
void QueryAllocationStats(size_t &blockBytes, size_t &allocationBytes) const override
Definition Device.cpp:398
RHIDeviceQueue * GetDeviceQueue(RHIDeviceQueueType type) const override
Definition Device.cpp:488
RHIDeviceScopedHandle< RHISwapchain > CreateSwapchain(RHISwapchain::SwapchainDesc const &desc) override
Definition Device.cpp:513
auto const & GetVkPhysicalDeviceProperties() const
Definition Device.hpp:253
void DestroyDescriptorPool(Handle handle) override
Definition Device.cpp:969
void DestroySwapchain(Handle handle) override
Definition Device.cpp:519
RHIPipelineState * GetPipelineState(Handle handle) const override
Definition Device.cpp:542
uint32_t mGraphicsQueueFamilyIndex
Definition Device.hpp:141
RHIDeviceCapabilities GetCapabilities() const override
Definition Device.hpp:149
~VulkanDevice() override
Definition Device.cpp:351
RHIVirtualAllocator * GetVirtualAllocator(Handle handle) const override
Definition Device.cpp:1202
auto const & GetVkQueues() const
Definition Device.hpp:250
uint32_t GetGraphicsQueueFamilyIndex() const
Definition Device.hpp:143
void QueryMemoryStats(RHIDeviceMemoryStats &outStats) const override
Definition Device.cpp:410
auto const & GetVkAllocator() const
Definition Device.hpp:254
RHIDeviceScopedHandle< RHIAccelerationStructure > CreateAccelerationStructure(RHIAccelerationStructureDesc const &desc) override
Definition Device.cpp:889
Mutex mQueueSubmitMutex
Definition Device.hpp:136
RHICommandPool * GetCommandPool(Handle handle) const override
Definition Device.cpp:570
auto const & GetVkPhysicalDevice() const
Definition Device.hpp:252
vk::raii::Device mDevice
Definition Device.hpp:126
String QueryDeviceString() const override
Definition Device.cpp:477
Allocator * GetAllocator() const
Definition Device.cpp:53
RHIShaderModule * GetShaderModule(Handle handle) const override
Definition Device.cpp:556
RHIDeviceSemaphore * GetSemaphore(Handle handle) const override
Definition Device.cpp:616
RHISurface * GetSurface(Handle handle) const override
Definition Device.cpp:510
void DebugSetObjectName(const char *name) override
Definition Device.cpp:702
vk::PhysicalDeviceProperties mPhysicalDeviceProperties
Definition Device.hpp:138
RHIPipelineStateCacheKey mPipelineCacheKey
Definition Device.hpp:139
void DestroyDescriptorSetLayout(Handle handle) override
Definition Device.cpp:954
UniquePtr< VulkanDeviceQueues > mQueues
Definition Device.hpp:133
RHIAccelerationStructureSizeInfo GetAccelerationStructureSizeInfo(RHIAccelerationStructureBuildDesc const &desc, Allocator *scratchAllocator=nullptr) const override
Definition Device.cpp:850
void SignalTimelineSemaphores(Span< const Pair< RHIDeviceSemaphore *, size_t > > semaphores) override
Definition Device.cpp:658
void WaitIdle() const override
Definition Device.cpp:364
RHIPipelineStateCacheKey GetPipelineCacheKey() const override
Definition Device.hpp:150
RHIDeviceScopedHandle< RHISurface > CreateSurface(RHISurface::SurfaceDesc const &desc) override
Definition Device.cpp:505
RHIPipelineStateCache * GetPipelineCache(Handle handle) const override
Definition Device.cpp:527
RHIDeviceScopedHandle< RHITexture > CreateTexture(RHITextureDesc const &desc) override
Definition Device.cpp:841
RHISwapchain * GetSwapchain(Handle handle) const override
Definition Device.cpp:518
Mutex & GetQueueSubmitMutex() const
Definition Device.hpp:145
void DestroyPipelineCache(Handle handle) override
Definition Device.cpp:532
void DestroyTexture(Handle handle) override
Definition Device.cpp:847
RHIDeviceScopedHandle< RHIShaderModule > CreateShaderModule(RHIShaderModule::ShaderModuleDesc const &desc) override
Definition Device.cpp:551
void DestroyCommandPool(Handle handle) override
Definition Device.cpp:575
auto const & GetVkDevice() const
Definition Device.hpp:251
RHIDeviceQueryPool * GetQueryPool(Handle handle) const override
Definition Device.cpp:1140
RHIDeviceScopedHandle< RHICommandPool > CreateCommandPool(RHICommandPool::PoolDesc desc) override
Definition Device.cpp:565
RHIDeviceScopedHandle< RHIDeviceDescriptorSetLayout > CreateDescriptorSetLayout(RHIDeviceDescriptorSetLayoutDesc const &desc) override
Definition Device.cpp:944
RHIDeviceSampler * GetSampler(Handle handle) const override
Definition Device.cpp:1128
Definition Device.hpp:105
void Clear() override
Definition Device.cpp:1183
uint64_t Allocate(uint64_t size, uint64_t alignment) override
Sub-allocates size bytes with the given alignment.
Definition Device.cpp:1161
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:1155
uint64_t mPeakUsage
Definition Device.hpp:110
uint64_t GetUsedBytes() const override
Definition Device.cpp:1190
void Free(uint64_t offset) override
Definition Device.cpp:1175
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:149
std::mutex Mutex
Definition Thread.hpp:10
std::pair< First, Second > Pair
Alias for std::pair
Definition Container.hpp:33
std::map< K, V, Predicate, StlAllocator< Pair< const K, V > > > Map
std::map with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:178
std::basic_string< char, std::char_traits< char >, StlDefaultAllocator< char > > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:120
std::unique_ptr< T, Deleter > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:180
std::span< T > Span
Alias for std::span
Definition Container.hpp:62
Low-level Rendering Hardware Interface (RHI) abstractions.
Definition Application.hpp:3
Present
Definition Common.hpp:198
RHIDeviceHeapType
Definition Common.hpp:212
uintptr_t Handle
Definition Details.hpp:9
RHIDeviceQueueType
Definition Common.hpp:179
static constexpr Handle kInvalidHandle
Definition Details.hpp:10
constexpr uint32_t kInvalidQueueIndex
Definition Device.hpp:13
RHISwapchainResult
Definition Swapchain.hpp:9
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:190
Definition Descriptor.hpp:53
Definition Device.hpp:238
Definition Device.hpp:171
Definition Device.hpp:111
Definition PipelineState.hpp:18
Definition PipelineState.hpp:50
Definition PipelineState.hpp:64
Definition Swapchain.hpp:36
Definition Resource.hpp:142
VulkanDeviceQueue * Get(Handle handle) const
Definition Device.cpp:486
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