21 #define KEEP_SINGLE_COPY 1
23 #define RESTART_INDEX 0xFFFFFFFF
53 assert(verts_per_prim != -1);
82 assert(builder->
data !=
nullptr);
84 assert(v <= builder->max_allowed_index);
94 assert(builder->
data !=
nullptr);
122 assert(
v1 !=
v2 &&
v2 != v3 && v3 !=
v1);
146 builder->
data[elem++] =
v1;
160 builder->
data[idx++] =
v1;
161 builder->
data[idx++] =
v2;
176 builder->
data[idx++] =
v1;
177 builder->
data[idx++] =
v2;
178 builder->
data[idx++] = v3;
237 #if GPU_TRACK_INDEX_RANGE
240 uint range = min_index < max_index ? max_index - min_index : 0;
244 if (range <= 0xFFFF) {
246 this->squeeze_indices_short(min_index, max_index);
285 const uint value = uint_idx[i];
289 if (value < min_value) {
292 else if (value > max_value) {
302 return max_value - min_value;
305 void IndexBuf::squeeze_indices_short(
uint min_idx,
uint max_idx)
312 if (max_idx >= 0xFFFF) {
315 ushort_idx[i] = (
uint16_t)
MIN2(0xFFFF, uint_idx[i] - min_idx);
321 ushort_idx[i] = (
uint16_t)(uint_idx[i]);
344 return wrap(GPUBackend::get()->indexbuf_alloc());
367 builder->
data =
nullptr;
380 return unwrap(elem)->read();
385 return unwrap(elem)->unmap(mapped_buffer);
395 return unwrap(elem)->is_init();
405 unwrap(elem)->upload_data();
410 unwrap(elem)->bind_as_ssbo(binding);
MINLINE uint min_uu(uint a, uint b)
MINLINE uint max_uu(uint a, uint b)
struct GPUIndexBuf GPUIndexBuf
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void init(uint indices_len, uint32_t *indices, uint min_index, uint max_index)
uint32_t * unmap(const uint32_t *mapped_memory) const
GPUIndexBufType index_type_
void init_build_on_device(uint index_len)
void init_subrange(IndexBuf *elem_src, uint start, uint length)
void GPU_indexbuf_set_point_vert(GPUIndexBufBuilder *builder, uint elem, uint v1)
int GPU_indexbuf_primitive_len(GPUPrimType prim_type)
void GPU_indexbuf_add_generic_vert(GPUIndexBufBuilder *builder, uint v)
GPUIndexBuf * GPU_indexbuf_build_on_device(uint index_len)
void GPU_indexbuf_set_point_restart(GPUIndexBufBuilder *builder, uint elem)
GPUIndexBuf * GPU_indexbuf_build(GPUIndexBufBuilder *builder)
void GPU_indexbuf_bind_as_ssbo(GPUIndexBuf *elem, int binding)
GPUIndexBuf * GPU_indexbuf_create_subrange(GPUIndexBuf *elem_src, uint start, uint length)
void GPU_indexbuf_init_build_on_device(GPUIndexBuf *elem, uint index_len)
void GPU_indexbuf_set_line_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2)
void GPU_indexbuf_update_sub(GPUIndexBuf *elem, uint start, uint len, const void *data)
const uint32_t * GPU_indexbuf_read(GPUIndexBuf *elem)
void GPU_indexbuf_set_tri_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2, uint v3)
void GPU_indexbuf_use(GPUIndexBuf *elem)
void GPU_indexbuf_set_line_restart(GPUIndexBufBuilder *builder, uint elem)
void GPU_indexbuf_add_line_adj_verts(GPUIndexBufBuilder *builder, uint v1, uint v2, uint v3, uint v4)
void GPU_indexbuf_set_tri_restart(GPUIndexBufBuilder *builder, uint elem)
void GPU_indexbuf_join(GPUIndexBufBuilder *builder_to, const GPUIndexBufBuilder *builder_from)
void GPU_indexbuf_add_primitive_restart(GPUIndexBufBuilder *builder)
void GPU_indexbuf_build_in_place(GPUIndexBufBuilder *builder, GPUIndexBuf *elem)
GPUIndexBuf * GPU_indexbuf_calloc()
void GPU_indexbuf_create_subrange_in_place(GPUIndexBuf *elem, GPUIndexBuf *elem_src, uint start, uint length)
void GPU_indexbuf_discard(GPUIndexBuf *elem)
void GPU_indexbuf_add_point_vert(GPUIndexBufBuilder *builder, uint v)
void GPU_indexbuf_init_ex(GPUIndexBufBuilder *builder, GPUPrimType prim_type, uint index_len, uint vertex_len)
uint32_t * GPU_indexbuf_unmap(const GPUIndexBuf *elem, const uint32_t *mapped_buffer)
bool GPU_indexbuf_is_init(GPUIndexBuf *elem)
void GPU_indexbuf_add_tri_verts(GPUIndexBufBuilder *builder, uint v1, uint v2, uint v3)
void GPU_indexbuf_init(GPUIndexBufBuilder *builder, GPUPrimType prim_type, uint prim_len, uint vertex_len)
void GPU_indexbuf_add_line_verts(GPUIndexBufBuilder *builder, uint v1, uint v2)
ccl_gpu_kernel_postfix int ccl_global int * indices
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static PartialUpdateUserImpl * unwrap(struct PartialUpdateUser *user)
static struct PartialUpdateUser * wrap(PartialUpdateUserImpl *user)
static Context * unwrap(GPUContext *ctx)
static int indices_per_primitive(GPUPrimType prim_type)
T length(const vec_base< T, Size > &a)