4#include <vk_mem_alloc.h>
8 class VulkanApplication;
9 class VulkanDeviceQueue;
65 vk::raii::DescriptorSetLayout
mLayout{
nullptr};
98 void Reset()
override;
200 void*
dest)
const override;
246 void Present(PresentDesc
const& desc)
const override;
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Definition Resource.hpp:291
Definition Resource.hpp:57
Definition Command.hpp:18
Definition Descriptor.hpp:49
Definition Device.hpp:164
Definition Device.hpp:104
Definition Device.hpp:189
Thread-safe type-erased handle dereference facility for RHI Objects.
Definition Details.hpp:149
Definition PipelineState.hpp:8
Definition PipelineState.hpp:22
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Definition Swapchain.hpp:19
Definition Resource.hpp:190
Definition Application.hpp:16
const VulkanDevice & mDevice
Definition Device.hpp:64
void DebugSetObjectName(const char *name) override
Definition Device.cpp:632
vk::raii::DescriptorSetLayout mLayout
Definition Device.hpp:65
auto const & GetVkLayout() const
Definition Device.hpp:69
void DebugSetObjectName(const char *name) override
Definition Device.cpp:353
vk::raii::Fence mFence
Definition Device.hpp:54
const VulkanDevice & mDevice
Definition Device.hpp:53
auto const & GetVkFence() const
Definition Device.hpp:58
const VulkanDevice & mDevice
Definition Device.hpp:86
auto const & GetVkQueryPool() const
Definition Device.hpp:94
vk::raii::QueryPool mQueryPool
Definition Device.hpp:88
Vector< uint64_t > mResults
Definition Device.hpp:90
const float GetTimestampResolution() override
Definition Device.hpp:96
void Reset() override
Definition Device.cpp:732
void DebugSetObjectName(const char *name) override
Definition Device.cpp:745
Span< const uint64_t > GetResults(bool wait) override
Definition Device.cpp:734
const float mTimestampResolution
Definition Device.hpp:87
Definition Device.hpp:226
vk::raii::Queue mQueue
Definition Device.hpp:230
void WaitIdle() const override
Definition Device.cpp:452
vk::raii::Queue GetVkQueue() const
Definition Device.hpp:240
const uint32_t mQueueIndex
Definition Device.hpp:228
uint32_t GetVkQueueIndex() const
Definition Device.hpp:241
uint32_t GetVkQueueFamily() const override
Definition Device.hpp:242
void DebugSetObjectName(const char *name) override
Definition Device.cpp:559
const VulkanDevice & mDevice
Definition Device.hpp:227
void Submit(Span< const SubmitDesc >, RHIDeviceFence *completionFence) const override
Definition Device.cpp:454
VulkanDeviceQueue(const VulkanDevice &device, uint32_t family_index, uint32_t queue_index)
Definition Device.hpp:233
const VulkanDevice & GetVulkanDevice() const
Definition Device.hpp:239
const uint32_t mFamilyIndex
Definition Device.hpp:229
const VulkanDevice & mDevice
Definition Device.hpp:75
void DebugSetObjectName(const char *name) override
Definition Device.cpp:704
auto const & GetVkSampler() const
Definition Device.hpp:80
vk::raii::Sampler mSampler
Definition Device.hpp:76
auto const & GetVkSemaphore() const
Definition Device.hpp:47
const VulkanDevice & mDevice
Definition Device.hpp:42
void DebugSetObjectName(const char *name) override
Definition Device.cpp:336
vk::raii::Semaphore mSemaphore
Definition Device.hpp:43
Definition Device.hpp:104
RHIDeviceFence * GetFence(Handle handle) const override
Definition Device.cpp:378
bool WaitForFences(Span< RHIDeviceFence *const > fences, bool wait_all, size_t timeout) override
Wait for fences to arrive.
Definition Device.cpp:392
RHIObjectPool mStorage
Definition Device.hpp:119
RHIDeviceDescriptorSetLayout * GetDescriptorSetLayout(Handle handle) const override
Definition Device.cpp:681
RHIDeviceDescriptorPool * GetDescriptorPool(Handle handle) const override
Definition Device.cpp:696
void DestroySemaphore(Handle handle) override
Definition Device.cpp:371
RHIDeviceScopedHandle< RHIDeviceDescriptorPool > CreateDescriptorPool(RHIDeviceDescriptorPool::PoolDesc const &desc) override
Definition Device.cpp:691
RHIAccelerationStructureSizeInfo GetAccelerationStructureSizeInfo(RHIAccelerationStructureBuildDesc const &desc) const override
Definition Device.cpp:584
void DestroyAccelerationStructure(Handle handle) override
Definition Device.cpp:630
void DestroyQueryPool(Handle handle) override
Definition Device.cpp:846
vk::AllocationCallbacks const & GetVkAllocatorCallbacks() const
Definition Device.cpp:21
const VulkanApplication & mApp
Definition Device.hpp:105
void ResetFences(Span< RHIDeviceFence *const > fences) override
Definition Device.cpp:381
RHIDeviceScopedHandle< RHIDeviceFence > CreateFence(bool signaled) override
Definition Device.cpp:373
size_t WriteAccelerationStructureInstanceData(RHIAccelerationStructureGeometryInstance const &data, void *dest) const override
Definition Device.cpp:596
void DestroyFence(Handle handle) override
Definition Device.cpp:379
RHIDeviceScopedHandle< RHIPipelineState > CreatePipelineState(RHIPipelineState::PipelineStateDesc const &desc) override
Definition Device.cpp:286
void DestroyPipelineState(Handle handle) override
Definition Device.cpp:296
void QueryBudget(size_t &used, size_t &budget) const override
Definition Device.cpp:218
RHIDeviceScopedHandle< RHIPipelineStateCache > CreatePipelineCache(RHIPipelineStateCache::PipelineStateCacheDesc const &desc) override
Definition Device.cpp:271
Vector< RHISwapchainPresentMode > mSwapchainPresentModes
Definition Device.hpp:114
RHIDeviceScopedHandle< RHIDeviceSampler > CreateSampler(RHIDeviceSampler::SamplerDesc const &desc) override
Definition Device.cpp:824
RHITexture * GetTexture(Handle handle) const override
Definition Device.cpp:580
RHIBuffer * GetBuffer(Handle handle) const override
Definition Device.cpp:572
RHIDeviceScopedHandle< RHIDeviceSemaphore > CreateSemaphore(bool is_timeline) override
Definition Device.cpp:361
void DestroyShaderModule(Handle handle) override
Definition Device.cpp:310
RHIDeviceScopedHandle< RHIBuffer > CreateBuffer(RHIBufferDesc const &desc) override
Definition Device.cpp:567
vk::raii::PhysicalDevice mPhysicalDevice
Definition Device.hpp:109
bool WaitForTimelineSemaphores(Span< const Pair< RHIDeviceSemaphore *, size_t > > semaphores, size_t timeout) override
Wait for timeline semaphores to reach specified values.
Definition Device.cpp:419
RHIAccelerationStructure * GetAccelerationStructure(Handle handle) const override
Definition Device.cpp:625
void DestroyBuffer(Handle handle) override
Definition Device.cpp:573
Vector< RHIResourceFormat > mSwapchainFormats
Definition Device.hpp:113
RHIDeviceScopedHandle< RHIDeviceQueryPool > CreateQueryPool(RHIDeviceQueryPool::QueryPoolDesc const &desc) override
Definition Device.cpp:836
void DestroySampler(Handle handle) override
Definition Device.cpp:834
VmaAllocator mVkAllocator
Definition Device.hpp:116
Span< RHISwapchainPresentMode const > GetSwapchainSupportedPresentModes() const override
Definition Device.cpp:257
RHIDeviceQueue * GetDeviceQueue(RHIDeviceQueueType type) const override
Definition Device.cpp:238
RHIDeviceScopedHandle< RHISwapchain > CreateSwapchain(RHISwapchain::SwapchainDesc const &desc) override
Definition Device.cpp:262
void DestroyDescriptorPool(Handle handle) override
Definition Device.cpp:701
void DestroySwapchain(Handle handle) override
Definition Device.cpp:268
RHIPipelineState * GetPipelineState(Handle handle) const override
Definition Device.cpp:291
~VulkanDevice() override
Definition Device.cpp:206
auto const & GetVkQueues() const
Definition Device.hpp:217
auto const & GetVkAllocator() const
Definition Device.hpp:221
RHIDeviceScopedHandle< RHIAccelerationStructure > CreateAccelerationStructure(RHIAccelerationStructureDesc const &desc) override
Definition Device.cpp:620
RHICommandPool * GetCommandPool(Handle handle) const override
Definition Device.cpp:319
auto const & GetVkPhysicalDevice() const
Definition Device.hpp:220
vk::raii::Device mDevice
Definition Device.hpp:110
String QueryDeviceString() const override
Definition Device.cpp:227
Allocator * GetAllocator() const
Definition Device.cpp:20
RHIShaderModule * GetShaderModule(Handle handle) const override
Definition Device.cpp:305
RHIDeviceSemaphore * GetSemaphore(Handle handle) const override
Definition Device.cpp:366
void DebugSetObjectName(const char *name) override
Definition Device.cpp:444
void DestroyDescriptorSetLayout(Handle handle) override
Definition Device.cpp:686
auto const & GetVkSurface() const
Definition Device.hpp:219
UniquePtr< VulkanDeviceQueues > mQueues
Definition Device.hpp:121
void SignalTimelineSemaphores(Span< const Pair< RHIDeviceSemaphore *, size_t > > semaphores) override
Definition Device.cpp:408
void WaitIdle() const override
Definition Device.cpp:216
RHIPipelineStateCache * GetPipelineCache(Handle handle) const override
Definition Device.cpp:276
RHIDeviceScopedHandle< RHITexture > CreateTexture(RHITextureDesc const &desc) override
Definition Device.cpp:575
vk::raii::SurfaceKHR mSurface
Definition Device.hpp:111
RHISwapchain * GetSwapchain(Handle handle) const override
Definition Device.cpp:267
void DestroyPipelineCache(Handle handle) override
Definition Device.cpp:281
Span< RHIResourceFormat const > GetSwapchainSupportedFormats() const override
Definition Device.cpp:255
void DestroyTexture(Handle handle) override
Definition Device.cpp:581
RHIDeviceScopedHandle< RHIShaderModule > CreateShaderModule(RHIShaderModule::ShaderModuleDesc const &desc) override
Definition Device.cpp:300
void DestroyCommandPool(Handle handle) override
Definition Device.cpp:324
SDL_Window * mWindow
Definition Device.hpp:107
auto const & GetVkDevice() const
Definition Device.hpp:218
RHIDeviceQueryPool * GetQueryPool(Handle handle) const override
Definition Device.cpp:841
RHIDeviceScopedHandle< RHICommandPool > CreateCommandPool(RHICommandPool::PoolDesc desc) override
Definition Device.cpp:314
RHIDeviceScopedHandle< RHIDeviceDescriptorSetLayout > CreateDescriptorSetLayout(RHIDeviceDescriptorSetLayoutDesc const &desc) override
Definition Device.cpp:676
RHIDeviceSampler * GetSampler(Handle handle) const override
Definition Device.cpp:829
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::pair< First, Second > Pair
Alias for std::pair
Definition Container.hpp:32
std::unique_ptr< T, Deleter > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:166
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:149
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:128
uintptr_t Handle
Definition Details.hpp:8
RHIDeviceQueueType
Definition Common.hpp:109
static constexpr Handle kInvalidHandle
Definition Details.hpp:9
constexpr uint32_t kInvalidQueueIndex
Definition Device.hpp:10
Definition Resource.hpp:279
Definition Resource.hpp:229
Definition Resource.hpp:250
Definition Resource.hpp:223
Definition Resource.hpp:28
Definition Command.hpp:24
Definition Descriptor.hpp:53
Definition Device.hpp:170
Definition Device.hpp:110
Definition PipelineState.hpp:13
Definition PipelineState.hpp:26
Definition Swapchain.hpp:23
Definition Resource.hpp:116
VulkanDeviceQueue * Get(Handle handle) const
Definition Device.cpp:236
VulkanDeviceQueues(Allocator *allocator)
Definition Device.hpp:15
Handle compute
Definition Device.hpp:14
bool IsDedicatedTransfer() const
Definition Device.hpp:37
Handle graphics
Definition Device.hpp:14
bool IsValid() const
Definition Device.hpp:32
RHIObjectPool< VulkanDeviceQueue > storage
Definition Device.hpp:13
bool IsDedicatedCompute() const
Definition Device.hpp:36
VulkanDeviceQueue * Get(RHIDeviceQueueType type) const
Definition Device.hpp:17
Handle transfer
Definition Device.hpp:14