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)