Foundation
Loading...
Searching...
No Matches
Bindless.hpp
Go to the documentation of this file.
1#pragma once
3#include <RHICore/Command.hpp>
4#include <Core/AtomicPool.hpp>
6{
7 using namespace RHI;
8 // TODO: Buffers?
10 {
14 >;
15 using View = Variant<
16 // Texture Views
19 >;
28
31
33
40
42 uint32_t mActiveBindings{0};
46
48
49 uint32_t UpdateDescriptor(uint32_t id, RHITextureView* view);
50 void UpdateStorageDescriptor(uint32_t id, RHITextureView* view);
51 void AddStats(Binding const& binding);
52 void RemoveStats(Binding const& binding);
53 public:
55 {
56 uint32_t maxBindings = 1024;
57 };
58 struct Stats
59 {
60 uint32_t activeBindings{};
61 uint32_t capacity{};
65 };
67 BindlessPool(RHIDevice* device, Allocator * allocator, BindlessPoolDesc const& desc);
68
72 uint32_t Allocate(RHITextureView* view);
84 void Free(uint32_t id);
85
86 RHITexture* GetResource(uint32_t id);
87 RHITextureView* GetView(uint32_t id);
88 [[nodiscard]] Stats GetStats() const;
89
94 void UpdateStorageView(uint32_t id, RHITextureView* view);
95 void ClearStorageView(uint32_t id) { UpdateStorageView(id, nullptr); }
96 };
97}
Allocator interface (noexcept)
Definition Allocator.hpp:29
Atomic, bounded object pool of fixed allocation sizes. Being a sibling to AtomicStack - key differenc...
Definition AtomicPool.hpp:24
Definition Descriptor.hpp:12
Definition Device.hpp:246
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:85
Definition Resource.hpp:238
Definition Resource.hpp:216
Definition Bindless.hpp:10
void RemoveStats(Binding const &binding)
Definition Bindless.cpp:50
RHIDeviceDescriptorSet * GetStorageDescriptorSet() const
Definition Bindless.hpp:93
RHIDeviceDescriptorPoolScopedHandle< RHIDeviceDescriptorSet > mDescSet
Definition Bindless.hpp:36
void UpdateStorageView(uint32_t id, RHITextureView *view)
Definition Bindless.cpp:97
Allocator *const mAllocator
Definition Bindless.hpp:30
uint32_t UpdateDescriptor(uint32_t id, RHITextureView *view)
Definition Bindless.cpp:3
RHIDeviceDescriptorSet * GetDescriptorSet() const
Definition Bindless.hpp:91
RHITexture * GetResource(uint32_t id)
Definition Bindless.cpp:111
void Free(uint32_t id)
Free a binding, and - with it - the owned resource (if any).
Definition Bindless.cpp:102
AtomicPool< Binding > mBindings
Definition Bindless.hpp:32
const BindlessPoolDesc mDesc
Definition Bindless.hpp:66
Stats GetStats() const
Definition Bindless.cpp:131
RHIDeviceDescriptorSetLayout * GetDescriptorSetLayout() const
Definition Bindless.hpp:90
void ClearStorageView(uint32_t id)
Definition Bindless.hpp:95
Mutex mDescMutex
Definition Bindless.hpp:41
size_t mReferencedTextureBytes
Definition Bindless.hpp:44
RHIDeviceScopedHandle< RHIDeviceDescriptorPool > mStorageDescPool
Definition Bindless.hpp:38
RHITextureView * GetView(uint32_t id)
Definition Bindless.cpp:121
size_t mOwnedTextureBytes
Definition Bindless.hpp:45
uint32_t mActiveBindings
Definition Bindless.hpp:42
RHIDeviceScopedHandle< RHIDeviceDescriptorPool > mDescPool
Definition Bindless.hpp:35
uint32_t Allocate(RHITextureView *view)
Definition Bindless.cpp:60
void UpdateStorageDescriptor(uint32_t id, RHITextureView *view)
Definition Bindless.cpp:12
RHIDeviceScopedHandle< RHIDeviceDescriptorSetLayout > mStorageDescLayout
Definition Bindless.hpp:37
RHIDeviceIdleGuard mIdleGuard
Definition Bindless.hpp:47
RHIDeviceDescriptorPoolScopedHandle< RHIDeviceDescriptorSet > mStorageDescSet
Definition Bindless.hpp:39
uint32_t mOwnedTextureBindings
Definition Bindless.hpp:43
RHIDeviceDescriptorSetLayout * GetStorageDescriptorSetLayout() const
Definition Bindless.hpp:92
void AddStats(Binding const &binding)
Definition Bindless.cpp:40
RHIDevice *const mDevice
Definition Bindless.hpp:29
RHIDeviceScopedHandle< RHIDeviceDescriptorSetLayout > mDescLayout
Definition Bindless.hpp:34
std::mutex Mutex
Definition Thread.hpp:10
Core functionalities for rendering, including the Frame Graph implementation.
Definition Bindless.cpp:2
RAII guard to wait for device idle on destruction.
Definition Device.hpp:378
View view
Definition Bindless.hpp:24
size_t referencedTextureBytes
Definition Bindless.hpp:25
uint32_t id
Definition Bindless.hpp:22
Resource resource
Definition Bindless.hpp:23
size_t ownedTextureBytes
Definition Bindless.hpp:26
uint32_t maxBindings
Definition Bindless.hpp:56
size_t referencedTextureBytes
Definition Bindless.hpp:63
uint32_t ownedTextureBindings
Definition Bindless.hpp:62
uint32_t capacity
Definition Bindless.hpp:61
size_t ownedTextureBytes
Definition Bindless.hpp:64
uint32_t activeBindings
Definition Bindless.hpp:60