14 #ifndef RV_ShaderVariableSet_h
15 #define RV_ShaderVariableSet_h
76 return myBindingResourceIdx.isValidIndex(binding_num) &&
77 myBindingResourceIdx[binding_num] != -1;
88 VkDescriptorSet getVkDescriptorSet();
91 {
return myDescriptorSet.get(); }
118 bool getBufferBlock(
int binding_num,
const RV_ShaderBlock*& out_block)
129 bool getTexture(
int binding_num,
RV_VKImage*& out_image);
132 bool getTexture(
int binding_num,
const RV_VKImage*& out_image)
const;
142 bool getBufferView(
int binding_num,
RV_VKBuffer*& out_buffer);
145 bool getBufferView(
int binding_num,
const RV_VKBuffer*& out_buffer)
const;
167 bool attachBufferBlock(
175 bool attachBufferBlock(
184 bool attachBufferView(
192 bool attachBufferView(
253 bool attachAccelStruct(
261 bool attachAccelStruct(
272 void clearBinding(
int binding_num);
273 void clearBinding(
RV_Render*
r,
int binding_num);
275 void clearExtraBindings();
283 bool validateBinding(
RV_Instance* inst,
int binding_num);
284 bool validateBinding(
RV_Instance* inst,
int binding_num)
const;
302 UT_ASSERT_P(myIsSetDirty == !myDirtyBindings.isEmpty());
327 for (
auto &binding : myDirtyBindings)
328 out_list.
append(std::get<0>(binding));
335 bool isValidBinding(uint32_t binding_num,
int index=0)
const;
339 int& out_binding_num,
367 typedef std::pair<RV_ShaderBlock*, RV_ResourceID> BufferBlockResource;
368 typedef std::pair<RV_VKBuffer*, RV_ResourceID> BufferResource;
369 typedef std::tuple<RV_VKImage*, RV_ResourceID, RV_VKSampler*> TextureResource;
370 typedef std::pair<RV_VKAccelerationStructure*, RV_ResourceID> AccelStructResource;
381 RV_BINDING_UNKNOWN = 0,
382 RV_BINDING_BLOCK_BUFFER,
383 RV_BINDING_TEXEL_BUFFER,
384 RV_BINDING_SSBO_ARRAY_BUFFER,
386 RV_BINDING_ACCELERATION_STRUCTURE,
392 struct BindingResource;
398 const BindingResource &res);
412 typedef std::tuple<int, int, RV_BindingType> BindingRef;
415 bool myIsSetDirty =
false;
A collection of Vulkan UBO, SSBO, and Image shader bindings (descriptor set)
const UT_StringHolder & getName() const
Label for debugging.
bool isDirty() const
Return true if the set has been modified since the last commit.
RV_VKDescriptorSet * getRVDescriptorSet()
GLenum GLenum GLsizei void * image
const RV_VKDescriptorSetInfo & getSetInfo() const
The raw Vulkan descritor set create info.
void getDirtyBindings(UT_Array< int > &out_list) const
Build list of which binding numbers are dirty.
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
const RV_ResourceID & getID() const
Return unique ID for descriptorSet object.
GLuint const GLchar * name
Handle to the main interface of Vulkan.
bool hasBinding(uint32_t binding_num) const
Returns true if binding exists.
int getSetNumber() const
Return the binding number of the set that this set was created with.
FMT_INLINE void print(format_string< T...> fmt, T &&...args)
int getLayoutID() const
Return the layout ID of the set that this set was created with.
bool bindSet(RV_ShaderVariableSet *set, const RV_ShaderProgramBase *shr)
Bind a variable set to the specific shader program.