14 #ifndef RV_ShaderVariableSet_h
15 #define RV_ShaderVariableSet_h
69 return myBindingResourceIdx.isValidIndex(binding_num) &&
70 myBindingResourceIdx[binding_num] != -1;
81 VkDescriptorSet getVkDescriptorSet();
84 {
return myDescriptorSet.get(); };
90 {
return *myLayout.get(); }
110 bool getBufferBlock(
int binding_num,
const RV_ShaderBlock*& out_block)
121 bool getTexture(
int binding_num,
RV_VKImage*& out_image);
124 bool getTexture(
int binding_num,
const RV_VKImage*& out_image)
const;
134 bool getBufferView(
int binding_num,
RV_VKBuffer*& out_buffer);
137 bool getBufferView(
int binding_num,
const RV_VKBuffer*& out_buffer)
const;
159 bool attachBufferBlock(
167 bool attachBufferBlock(
176 bool attachBufferView(
184 bool attachBufferView(
245 bool attachAccelStruct(
253 bool attachAccelStruct(
264 void clearBinding(
int binding_num);
265 void clearBinding(
RV_Render*
r,
int binding_num);
267 void clearExtraBindings();
272 bool validateBinding(
RV_Instance* inst,
int binding_num);
273 bool validateBinding(
RV_Instance* inst,
int binding_num)
const;
288 UT_ASSERT_P(myIsSetDirty == !myDirtyBindings.isEmpty());
302 {
return mySetNumber; }
318 bool isValidBinding(uint32_t binding_num,
int index=0)
const;
322 int& out_binding_num,
350 typedef std::pair<RV_ShaderBlock*, RV_ResourceID> BufferBlockResource;
351 typedef std::pair<RV_VKBuffer*, RV_ResourceID> BufferResource;
352 typedef std::tuple<RV_VKImage*, RV_ResourceID, RV_VKSampler*> TextureResource;
353 typedef std::pair<RV_VKAccelerationStructure*, RV_ResourceID> AccelStructResource;
364 RV_BINDING_UNKNOWN = 0,
365 RV_BINDING_BLOCK_BUFFER,
366 RV_BINDING_TEXEL_BUFFER,
367 RV_BINDING_SSBO_ARRAY_BUFFER,
369 RV_BINDING_ACCELERATION_STRUCTURE,
373 struct BindingResource
377 BindingResource(RV_BindingType
type,
388 : myType(RV_BINDING_BLOCK_BUFFER)
394 : myType(RV_BINDING_TEXEL_BUFFER)
399 : myType(RV_BINDING_IMAGE)
405 : myType(RV_BINDING_ACCELERATION_STRUCTURE)
409 RV_BindingType myType = RV_BINDING_UNKNOWN;
421 const BindingResource &res);
433 typedef std::tuple<int, int, RV_BindingType> BindingRef;
436 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.
bool isCompatibleToBind(const RV_VKDescriptorSetInfo &other) const
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
GLint GLint GLsizei GLint GLenum GLenum type
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.
bool isCompatibleToBind(const RV_VKDescriptorSetInfo &pipe_layout) const
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.