76                                                const char *attrib_name,
 
   81                                                bool &out_isnormalized);
 
   86                                              const char        *attrib_name,
 
   90                                              bool build_string_tables = 
true,
 
  100                                              bool is_offset = 
true,
 
  101                                              int inst_per_prim = 1,
 
  108                                     bool* created = 
nullptr,
 
  109                                     const char* 
name = 
nullptr);
 
  115                                     uint32_t array_size = 0);
 
  129 template <
typename Range, 
typename Body>
 
  131                        int subscribe_ratio = 2,
 
  132                        int min_grain_size = 1)
 
  141         body(main_rc, range);
 
  152     exint grain = 
SYSmax(1, (size/nthreads + ((size%nthreads) ? 1 : 0)));
 
  154     bool do_parallel = (nthreads > 1) && (grain >= min_grain_size);
 
  157         body(main_rc, range);
 
  169         GR_Uniforms::prepareThreadedUniforms(nthreads);
 
  174             GR_Uniforms::returnThreadedUniforms();
 
  193         GR_Uniforms* u = GR_Uniforms::getForThread(&u_count, r_idx);
 
  205 #ifdef WIP_VULKAN_DEFER_DRAW 
  212 #endif // WIP_VULKAN_DEFER_DRAW 
  220         exint l = u->pushObjectUniforms();
 
  221         u->objects() = objects;
 
  222         if ( memcmp(&((
const GR_Uniforms*)u)->globals(), &globals, 
sizeof(globals)))
 
  223             u->globals() = globals;
 
  227             u->popObjectUniforms(l);
 
  228             GR_Uniforms::returnForThread(&u_count);
 
  241     if (subscribe_ratio > 1)
 
  242         grain = 
SYSmax(min_grain_size, grain / subscribe_ratio);
 
  244     main_r->getTaskArena().execute([&](){
 
  250     main_r->copyRenderState(&render_state);
 
  251     if ( memcmp(&((
const GR_Uniforms*)main_u)->globals(), &globals, 
sizeof(globals)))
 
  252         main_u->globals() = globals;
 
  264         body(main_rc, 
range);
 
A collection of Vulkan UBO, SSBO, and Image shader bindings (descriptor set) 
void UTparallelFor(const Range &range, const Body &body, const int subscribe_ratio=2, const int min_grain_size=1, const bool force_use_task_scope=true)
void init(RV_Render *r, int entries)
GA_API size_t UTestimatedNumItems(const GA_PolyCounts::Range &range)
#define UT_AT_SCOPE_EXIT(...)
GR_API void loadAtlas(RV_Instance *inst, RV_ShaderAtlas &atlas, UT_Map< exint, RV_ShaderProgram * > &programmap)
RV_GPUType getRVType(GT_Storage s)
GR_API void buildCurvePrimInfo(const GT_PrimCurveMesh *cmesh, const GR_UpdateParms &p, RV_Geometry *geo, GR_GeoRender *gr, RE_CacheVersion geo_version, UT_Vector4iArray &data, UT_Int32Array *opt_curve_oder=nullptr)
Object that represents drawable geometry. This object holds vertex, instancing and index buffers for ...
UT_ScopeExit which runs the given lambda on destruction. 
RV_Render * getThreadedRender(int &out_depth, int &out_idx)
Temporary container for either a RV_Render and an RE_Render. 
GR_API bool createOrReuseSet(RV_Render *r, UT_UniquePtr< RV_ShaderVariableSet > &set, int set_num, const RV_ShaderProgramBase *shader, bool *created=nullptr, const char *name=nullptr)
void endFrame(int frame_depth)
int getNumRenderThreads() const 
Get desired number of threads to use for parallel rendering. 
GR_API void * fillAttribData(RE_Render *r, const char *attrib_name, const GT_DataArrayHandle &pa, const GR_DisplayOption &opts, RE_ArrayType array, bool build_string_tables=true)
void enableThreadedRender()
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects. 
void returnThreadedRender(int depth)
set of parameters sent to GR_Primitive::update() 
UT_UniquePtr< RV_VKBuffer > Buffer
GLint GLint GLsizei GLint GLenum GLenum type
constexpr auto set(type rhs) -> int
bool isMainRender() const 
check whether this RV_Render is doing a threaded task 
static int getNumProcessors()
GLuint const GLchar * name
GLint GLenum GLboolean normalized
Handle to the main interface of Vulkan. 
GR_InstanceBuffer(const char *name, RV_GPUType type, int vsize, int ninstances, int step=1, bool normalized=true)
bool isThreading() const 
check whether this RV_Render is doing a threaded task 
static int isMainThread()
GR_API bool initBuiltinBlock(RV_Render *r, UT_UniquePtr< RV_ShaderBlock > &block, const char *name, RV_ShaderVariableSet *set, const RV_ShaderProgramBase *shader, uint32_t array_size=0)
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)
GR_API GR_SelectMode buildInstSelectInfo(RE_Render *r, RE_Geometry *geo, const GR_UpdateParms &p, RE_CacheVersion top_ver, GT_DataArrayHandle primid, GT_DataArrayHandle vtxid, GT_DataArrayHandle vertid, bool is_offsets=true, int instances_per_prim=1, UT_Array< uint8 > *result=NULL)
UT_StringHolder AttribName
Simple class for a mutli-integer cache tag. 
RenderState getRenderState()
void copyRenderState(RV_Render *other)
Copy render state from another RV_Render. 
void initCPUMapped(RV_Render *r, int entries, bool cpu_mapped=true)
UT_NON_COPYABLE(GR_InstanceBuffer)
void renderParallelFor(RE_RenderContext main_rc, const Range &range, const Body &body, int subscribe_ratio=2, int min_grain_size=1)