Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_samplercollection.hpp
Go to the documentation of this file.
1#pragma once
4#include <unordered_map>
5
6namespace foray::core {
7
8 class SamplerCollection;
9
13 {
14 friend SamplerCollection;
15
16 public:
17 SamplerReference() = default;
22
26 SamplerReference(Context* context, const VkSamplerCreateInfo& samplerCi);
30 SamplerReference(SamplerCollection* collection, const VkSamplerCreateInfo& samplerCi);
31
35 void Init(Context* context, const VkSamplerCreateInfo& samplerCi);
39 void Init(SamplerCollection* collection, const VkSamplerCreateInfo& samplerCi);
40
42 void Destroy();
43
44 inline operator VkSampler() const { return mSampler; }
45
46 FORAY_GETTER_V(Sampler)
47 FORAY_GETTER_V(Hash)
48 FORAY_GETTER_V(Collection)
49 protected:
51 VkSampler mSampler = nullptr;
53 uint64_t mHash = (uint64_t)0;
56 };
57
61 {
62 public:
67
72 CombinedImageSampler(core::Context* context, core::ManagedImage* image, const VkSamplerCreateInfo& samplerCi);
73
77 void Init(core::Context* context, const VkSamplerCreateInfo& samplerCi);
82 void Init(core::Context* context, core::ManagedImage* image, const VkSamplerCreateInfo& samplerCi);
83
85 VkDescriptorImageInfo GetVkDescriptorInfo(VkImageLayout layout = VkImageLayout::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) const
86 {
87 return VkDescriptorImageInfo{.sampler = mSampler, .imageView = (!!mManagedImage) ? mManagedImage->GetImageView() : nullptr, .imageLayout = layout};
88 }
89
91 protected:
94 };
95
99 class SamplerCollection : public core::VulkanResource<VkObjectType::VK_OBJECT_TYPE_SAMPLER>
100 {
101 friend SamplerReference;
102
103 public:
104 SamplerCollection() = default;
105
108 inline void Init(core::Context* context) { mContext = context; }
109
110 inline virtual bool Exists() const override { return mSamplerInstances.size() > 0; }
111
113 inline virtual void Destroy() override { ClearSamplerMap(); }
114 inline virtual ~SamplerCollection() { ClearSamplerMap(); }
115
116 protected:
117 void GetSampler(SamplerReference& imageSampler, const VkSamplerCreateInfo& samplerCi);
118
119 void Register(SamplerReference& imageSampler);
120 void Unregister(SamplerReference& imageSampler);
121
123 static uint64_t GetHash(const VkSamplerCreateInfo& samplerCi);
124
126
128 {
129 VkSampler Sampler = nullptr;
130 uint64_t SamplerHash = 0ULL;
131 uint64_t RefCount = 0ULL;
132 };
133
134 std::unordered_map<uint64_t, SamplerInstance> mSamplerInstances;
135 };
136} // namespace foray::core
Wraps an image + sampler combination.
Definition foray_samplercollection.hpp:61
CombinedImageSampler(core::Context *context, core::ManagedImage *image, const VkSamplerCreateInfo &samplerCi)
Construct and initialize.
core::ManagedImage * mManagedImage
Reference used only for descriptor image info filling.
Definition foray_samplercollection.hpp:93
void Init(core::Context *context, const VkSamplerCreateInfo &samplerCi)
Initializes by fetching a matching sampler from sampler collection.
VkDescriptorImageInfo GetVkDescriptorInfo(VkImageLayout layout=VkImageLayout::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) const
Build descriptor image info.
Definition foray_samplercollection.hpp:85
CombinedImageSampler(const CombinedImageSampler &other)
void Init(core::Context *context, core::ManagedImage *image, const VkSamplerCreateInfo &samplerCi)
Initializes by fetching a matching sampler from sampler collection.
CombinedImageSampler(CombinedImageSampler &&other)
CombinedImageSampler & operator=(const CombinedImageSampler &other)
Wraps allocation and lifetime functionality of VkImage.
Definition foray_managedimage.hpp:13
Provides sampler objects based on VkSamplerCreateInfo specifications.
Definition foray_samplercollection.hpp:100
void Unregister(SamplerReference &imageSampler)
virtual bool Exists() const override
Return true, if the managed resource is allocated.
Definition foray_samplercollection.hpp:110
void Register(SamplerReference &imageSampler)
static uint64_t GetHash(const VkSamplerCreateInfo &samplerCi)
virtual ~SamplerCollection()
Definition foray_samplercollection.hpp:114
void GetSampler(SamplerReference &imageSampler, const VkSamplerCreateInfo &samplerCi)
std::unordered_map< uint64_t, SamplerInstance > mSamplerInstances
Definition foray_samplercollection.hpp:134
void Init(core::Context *context)
Prepares for use.
Definition foray_samplercollection.hpp:108
core::Context * mContext
Definition foray_samplercollection.hpp:125
virtual void Destroy() override
Make sure no reference to any existing sampler will be used after calling this!
Definition foray_samplercollection.hpp:113
Represents a reference to a VkSampler object managed by a SamplerCollection.
Definition foray_samplercollection.hpp:13
SamplerReference(SamplerCollection *collection, const VkSamplerCreateInfo &samplerCi)
Construct and initialize.
uint64_t mHash
Hash of the Sampler CreateInfo.
Definition foray_samplercollection.hpp:53
SamplerReference(SamplerReference &&other)
void Init(Context *context, const VkSamplerCreateInfo &samplerCi)
Initializes by fetching a matching sampler from sampler collection.
VkSampler mSampler
Sampler (owned by SamplerCollection, this is a loan)
Definition foray_samplercollection.hpp:51
SamplerReference & operator=(const SamplerReference &other)
SamplerReference(Context *context, const VkSamplerCreateInfo &samplerCi)
Construct and initialize.
SamplerReference(const SamplerReference &other)
SamplerCollection * mCollection
Collection owning the Sampler object.
Definition foray_samplercollection.hpp:55
void Init(SamplerCollection *collection, const VkSamplerCreateInfo &samplerCi)
Initializes by fetching a matching sampler from sampler collection.
void Destroy()
Returns the sampler and deinitializes.
ManagedResource variant which automates GetTypeName() overloading by returning a stringified version ...
Definition foray_managedresource.hpp:59
#define FORAY_GETTER_V(member)
Return value.
Definition foray_basics.hpp:39
#define FORAY_PROPERTY_V(member)
Getter+Setter shorthand for value types.
Definition foray_basics.hpp:81
Definition foray_commandbuffer.hpp:6
Non owning context object.
Definition foray_context.hpp:16
Definition foray_samplercollection.hpp:128
uint64_t SamplerHash
Definition foray_samplercollection.hpp:130
uint64_t RefCount
Definition foray_samplercollection.hpp:131
VkSampler Sampler
Definition foray_samplercollection.hpp:129