139 struct rv_DrawSetInfo;
140 struct rv_DrawInputInfo;
142 struct rv_Connectivity;
143 struct rv_InstanceGroup;
180 exint gpuMemoryUsage()
const;
188 bool setNumPoints(
exint num_points);
190 exint getNumPoints()
const;
194 void setVertexBufferSize(
exint vert_buffer_elements);
196 exint getVertexBufferSize()
const;
200 void setPrimitiveBufferSize(
exint prim_buffer_elements);
202 exint getPrimitiveBufferSize()
const;
213 bool allow_gpu_write =
false);
224 bool allow_gpu_write =
false);
260 int out_vec_size)
const;
274 void stashAttributes();
278 bool unstashInstanceAttrib(
int group_index,
292 int& out_vec_size)
const;
298 exint& out_len)
const;
314 int& out_vec_size)
const;
324 int instance_group = -1)
const;
331 bool createInstanceGroup(
int group_index);
333 void removeInstanceGroup(
int group_index);
335 bool hasInstanceGroup(
int group_index)
const;
337 int getMaxInstanceGroup()
const;
340 void setInstanceGroupCount(
int instance_group,
int count);
342 int getInstanceGroupCount(
int instance_group)
const;
344 int getInstanceGroupTransformCount(
int instance_group)
const;
347 void setInstanceGroupForceFullDraw(
int instance_group,
bool enable);
349 bool getInstanceGroupForceFullDraw(
int instance_group)
const;
352 void setInstanceGroupIndexList(
int group_index,
354 int max_capacity = -1);
356 void setInstanceGroupConstIndex(
int instance_group,
357 int instance_to_draw);
359 void setInstanceGroupDrawEverything(
int instance_group);
361 void setInstanceGroupDrawNothing(
int instance_group);
367 void setConstInstanceGroupTransform(
int instance_group,
369 bool remove_instanced_xform);
372 void copyConstInstanceGroupTransform(
int instance_group,
int src_group);
377 bool setInstanceGroupAttrib(
int instance_group,
387 bool createSharedInstanceGroupAttrib(
int instance_group,
397 bool assignSharedInstanceGroupAttrib(
int instance_group,
402 bool freeInstanceGroupAttrib(
int instance_group,
412 const char*
name =
nullptr);
420 bool cpu_mapped =
true,
421 const char*
name =
nullptr);
424 RV_Buffer * getInstanceGroupAttrib(
int instance_group,
429 bool getInstanceAttribLength(
int instance_group,
431 exint& out_len)
const;
435 bool getInstanceAttribStride(
int instance_group,
437 exint& out_stride)
const;
440 bool getInstanceAttribVersion(
int instance_group,
444 void setInstanceAttribVersion(
int instance_group,
452 void connectAllPrims(
int connect_index,
456 void connectSomePrims(
int connect_index,
465 void connectIndexedPrims(
int connect_index,
468 bool need_prim_info =
false,
471 void connectSomeVerts(
int connect_index,
478 void connectIndexedVerts(
int connect_index,
481 bool need_prim_info =
false,
487 void setConnectDivisor(
int connect_index,
int divisor,
492 void setConnectUsePrimInfo(
int connect_index,
int base_prim= 0);
496 void setDrawModeOverride(
int connect_index,
501 void resetDrawModeOverride(
int connect_index);
508 int getNumRenderPrims(
int connect_index)
const;
511 RV_PrimType getRenderPrimType(
int connect_index)
const;
514 int getLength(
int connect_index)
const;
517 RV_Buffer *getIndexBuffer(
int connect_index)
const;
519 RV_Buffer *getPrimBuffer(
int connect_index)
const;
521 RV_Buffer *getPrimVertexBuffer(
int connect_index)
const;
524 bool isVertexFrequency(
int connect_index)
const;
527 bool hasConnectGroup(
int connect_index)
const;
529 bool hasNonEmptyConnectGroup(
int connect_index)
const;
531 int getMaxConnectGroup()
const;
534 bool removeConnectedPrims(
int connect_index);
536 void resetConnectedPrims();
562 exint draw_offset = -1,
exint draw_size = -1);
567 void drawInstanceGroup(
572 exint draw_offset = -1,
exint draw_size = -1);
577 int connect_index_start,
578 int num_connect_indexs,
582 void drawInstanceGroupRange(
609 static void cleanupResources();
613 void updateAccelerationStructure(
617 int surface_connect_index,
638 rv_Connectivity* getConnect(
int group_idx,
bool do_create);
643 const char *base_name,
646 int getTransformAttribCount(
const rv_Attribute* attr)
const;
653 int* out_idx =
nullptr)
const;
662 bool attr_owned =
false,
663 bool allow_gpu_write =
false);
664 bool privFreeAttrib(
RV_Render*
r, rv_Attribute &attr);
672 bool allocateConnectBuffers(
RV_Render*
r, rv_Connectivity&
c,
674 bool allocateInstIndexBuffer(
RV_Render*
r, rv_InstanceGroup&
g,
685 bool privPrepareDraw(
687 const rv_Connectivity *connect,
688 int instance_group_idx,
694 const rv_Connectivity *connect,
695 int instance_group_idx,
698 exint draw_offset = -1,
699 exint draw_length = -1
704 const rv_Connectivity *connect,
705 int instance_group_idx,
718 uint32_t myNumPoints = 0;
719 uint32_t myVertBufferSize = 0;
720 uint32_t myPrimBufferSize = 0;
722 bool myAttributesValid =
false;
745 struct rv_DrawSetInfo
749 int myConnectGroupIdx;
750 int myInstanceGroupIdx;
752 bool myIsValid =
false;
760 int myInstTransformUniformIdx = -1;
761 int myInstNestLevelUniformIdx = -1;
775 DrawSetCache myDrawSet;
779 rv_DrawSetInfo* getDrawSet(
782 const rv_Connectivity *connect,
783 int instance_group_idx,
790 rv_DrawSetInfo& set_info,
791 const rv_Connectivity *connect,
792 int instance_group_idx,
796 bool bindInputAttribute(
799 const rv_Connectivity *connect,
800 const rv_Attribute *attrib,
826 bool myIsAccelStructDirty =
true;
827 bool myIsAccelStructInstDirty =
true;
A collection of Vulkan UBO, SSBO, and Image shader bindings (descriptor set)
GLsizei GLenum const void * indices
VkFlags VkBufferUsageFlags
VkPrimitiveTopology RVgetVkPrimType(RV_PrimType t)
UT_UniquePtr< RV_VKBuffer > RV_VKBufferPtr
Object that represents drawable geometry. This object holds vertex, instancing and index buffers for ...
GLuint GLsizei GLsizei * length
RV_GPUType RVconvertFromGPUType(UT_GPUType t)
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
#define UT_ASSERT_MSG(ZZ,...)
GLint GLint GLsizei GLint GLenum GLenum type
UT_UniquePtr< RV_VKAccelerationStructure > RV_VKAccelerationStructurePtr
static const UT_Matrix4T< fpreal32 > & getIdentityMatrix()
GLint GLenum GLboolean GLsizei stride
GLuint const GLchar * name
GLint GLenum GLboolean normalized
Handle to the main interface of Vulkan.
UT_GPUType RVconvertToUTGPUType(RV_GPUType t)
GLsizeiptr const void GLenum usage
UT_UniquePtr< rv_InstanceGroup > rv_InstanceGroupPtr
void dirtyAccelerationStructure()
GR_API RE_GPUType getAttributeType(RE_Render *r, const char *attrib_name, int &vsize, const GT_DataArrayHandle &pa, const GR_DisplayOption &opts, RE_ArrayType array_type)
const UT_StringHolder & getName() const
Get name used for debugging.
Simple class for a mutli-integer cache tag.
UT_UniquePtr< RV_Buffer > RV_BufferPtr
void setName(const UT_StringHolder &name)
Set name used for debugging.
FMT_INLINE void print(format_string< T...> fmt, T &&...args)