Blender
V3.3
|
Go to the source code of this file.
Macros | |
#define | MAX_INSTANCE_DATA_SIZE 64 /* Can be adjusted for more */ |
#define | DRW_BUFFER_VERTS_CHUNK 128 |
Typedefs | |
typedef struct DRWInstanceData | DRWInstanceData |
typedef struct DRWInstanceDataList | DRWInstanceDataList |
typedef struct DRWSparseUniformBuf | DRWSparseUniformBuf |
#define DRW_BUFFER_VERTS_CHUNK 128 |
Definition at line 17 of file draw_instance_data.h.
#define MAX_INSTANCE_DATA_SIZE 64 /* Can be adjusted for more */ |
Definition at line 15 of file draw_instance_data.h.
typedef struct DRWInstanceData DRWInstanceData |
Definition at line 1 of file draw_instance_data.h.
typedef struct DRWInstanceDataList DRWInstanceDataList |
Definition at line 1 of file draw_instance_data.h.
typedef struct DRWSparseUniformBuf DRWSparseUniformBuf |
Definition at line 1 of file draw_instance_data.h.
void DRW_instance_buffer_finish | ( | DRWInstanceDataList * | idatalist | ) |
Upload all instance data to the GPU as soon as possible.
Definition at line 200 of file draw_instance_data.c.
References DRWTempInstancingHandle::batch, batch, BLI_memblock_clear(), BLI_memblock_iternew(), BLI_memblock_iterstep(), DRWTempBufferHandle::buf, DRWTempInstancingHandle::buf, DRW_BUFFER_VERTS_CHUNK, DRWTempInstancingHandle::geom, GPU_BATCH_BUILDING, GPU_batch_copy(), GPU_BATCH_INST_VBO_MAX_LEN, GPU_batch_instbuf_add_ex(), GPU_vertbuf_data_len_set(), GPU_vertbuf_data_resize(), GPU_vertbuf_get_vertex_alloc(), GPU_vertbuf_use(), GPUBatch, DRWTempInstancingHandle::instancer, instancing_batch_references_add(), NULL, DRWInstanceDataList::pool_batching, DRWInstanceDataList::pool_buffers, DRWInstanceDataList::pool_instancing, temp_batch_free(), temp_buffer_handle_free(), temp_instancing_handle_free(), and DRWTempBufferHandle::vert_len.
Referenced by DRW_render_instance_buffer_finish().
void DRW_instance_data_list_free_unused | ( | DRWInstanceDataList * | idatalist | ) |
Definition at line 354 of file draw_instance_data.c.
References DRW_instance_data_free(), DRWInstanceDataList::idata_head, DRWInstanceDataList::idata_tail, MAX_INSTANCE_DATA_SIZE, MEM_freeN, DRWInstanceData::next, NULL, and DRWInstanceData::used.
Referenced by drw_viewport_data_reset().
void DRW_instance_data_list_reset | ( | DRWInstanceDataList * | idatalist | ) |
Definition at line 343 of file draw_instance_data.c.
References DRWInstanceDataList::idata_head, MAX_INSTANCE_DATA_SIZE, DRWInstanceData::next, and DRWInstanceData::used.
Referenced by drw_viewport_data_reset().
void DRW_instance_data_list_resize | ( | DRWInstanceDataList * | idatalist | ) |
Definition at line 384 of file draw_instance_data.c.
References BLI_mempool_clear_ex(), BLI_mempool_len(), DRWInstanceDataList::idata_head, MAX_INSTANCE_DATA_SIZE, DRWInstanceData::mempool, and DRWInstanceData::next.
Referenced by drw_viewport_data_reset().
void* DRW_instance_data_next | ( | DRWInstanceData * | idata | ) |
Return a pointer to the next instance data space.
Definition at line 279 of file draw_instance_data.c.
References BLI_mempool_alloc(), and DRWInstanceData::mempool.
Referenced by DRW_drawdata_ensure().
DRWInstanceData* DRW_instance_data_request | ( | DRWInstanceDataList * | idatalist, |
uint | attr_size | ||
) |
Definition at line 284 of file draw_instance_data.c.
References attr_size(), BLI_assert, drw_instance_data_create(), DRWInstanceDataList::idata_head, MAX_INSTANCE_DATA_SIZE, DRWInstanceData::next, and DRWInstanceData::used.
Referenced by DRW_drawdata_ensure().
void DRW_sparse_uniform_buffer_bind | ( | DRWSparseUniformBuf * | buffer, |
int | chunk, | ||
int | location | ||
) |
Bind the UBO for the given chunk, if present. A NULL buffer pointer is handled as empty.
Definition at line 509 of file draw_instance_data.c.
References buffer, drw_sparse_uniform_buffer_get_ubo(), and GPU_uniformbuf_bind().
Referenced by draw_call_resource_bind(), and draw_update_uniforms().
void DRW_sparse_uniform_buffer_clear | ( | DRWSparseUniformBuf * | buffer, |
bool | free_all | ||
) |
Clean all buffers and free unused ones.
Definition at line 448 of file draw_instance_data.c.
References BLI_BITMAP_RESIZE, BLI_bitmap_set_all(), BLI_BITMAP_TEST, buffer, CHUNK_LIST_STEP, GPU_uniformbuf_free(), MEM_recallocN, MEM_SAFE_FREE, and NULL.
Referenced by DRW_sparse_uniform_buffer_free(), DRW_uniform_attrs_pool_clear_all(), and drw_uniform_attrs_pool_free_cb().
void* DRW_sparse_uniform_buffer_ensure_item | ( | DRWSparseUniformBuf * | buffer, |
int | chunk, | ||
int | item | ||
) |
Returns a pointer to the given item of the given chunk, allocating memory if necessary.
Definition at line 525 of file draw_instance_data.c.
References BLI_BITMAP_ENABLE, BLI_BITMAP_RESIZE, BLI_BITMAP_TEST, buffer, CHUNK_LIST_STEP, MEM_callocN, MEM_recallocN, and NULL.
Referenced by drw_uniform_attrs_pool_update().
void DRW_sparse_uniform_buffer_flush | ( | DRWSparseUniformBuf * | buffer | ) |
Flush data from ordinary memory to UBOs.
Definition at line 436 of file draw_instance_data.c.
References BLI_BITMAP_TEST, buffer, GPU_uniformbuf_create, GPU_uniformbuf_update(), and NULL.
Referenced by DRW_uniform_attrs_pool_flush_all().
void DRW_sparse_uniform_buffer_free | ( | DRWSparseUniformBuf * | buffer | ) |
Frees the buffer.
Definition at line 490 of file draw_instance_data.c.
References buffer, DRW_sparse_uniform_buffer_clear(), and MEM_freeN.
bool DRW_sparse_uniform_buffer_is_empty | ( | DRWSparseUniformBuf * | buffer | ) |
Checks if the buffer contains any allocated chunks.
Definition at line 496 of file draw_instance_data.c.
References buffer.
Referenced by DRW_uniform_attrs_pool_clear_all().
DRWSparseUniformBuf* DRW_sparse_uniform_buffer_new | ( | unsigned int | item_size, |
unsigned int | chunk_size | ||
) |
Allocate a chunked UBO with the specified item and chunk size.
Definition at line 429 of file draw_instance_data.c.
References blender::io::obj::chunk_size, drw_sparse_uniform_buffer_init(), and MEM_mallocN.
void DRW_sparse_uniform_buffer_unbind | ( | DRWSparseUniformBuf * | buffer, |
int | chunk | ||
) |
Unbind the UBO for the given chunk, if present. A NULL buffer pointer is handled as empty.
Definition at line 517 of file draw_instance_data.c.
References buffer, drw_sparse_uniform_buffer_get_ubo(), and GPU_uniformbuf_unbind().
Referenced by draw_call_batching_finish(), and draw_call_resource_bind().
GPUBatch* DRW_temp_batch_instance_request | ( | DRWInstanceDataList * | idatalist, |
GPUVertBuf * | buf, | ||
GPUBatch * | instancer, | ||
GPUBatch * | geom | ||
) |
Definition at line 124 of file draw_instance_data.c.
References DRWTempInstancingHandle::batch, batch, BLI_assert, BLI_memblock_alloc(), DRWTempInstancingHandle::buf, DRWTempInstancingHandle::geom, GPU_BATCH_BUILDING, GPU_batch_calloc(), GPU_batch_clear(), GPU_BATCH_VBO_MAX_LEN, GPU_VERTBUF_DATA_UPLOADED, GPU_vertbuf_get_status(), GPUBatch, DRWTempInstancingHandle::instancer, instancing_batch_references_remove(), NULL, and DRWInstanceDataList::pool_instancing.
Referenced by DRW_shgroup_call_buffer_instance(), and DRW_shgroup_call_instances_with_attrs().
GPUBatch* DRW_temp_batch_request | ( | DRWInstanceDataList * | idatalist, |
GPUVertBuf * | buf, | ||
GPUPrimType | type | ||
) |
Definition at line 164 of file draw_instance_data.c.
References batch, BLI_memblock_alloc(), GPU_batch_calloc(), GPU_batch_clear(), GPU_batch_init, GPU_VERTBUF_DATA_UPLOADED, GPU_vertbuf_get_status(), GPUBatch, NULL, and DRWInstanceDataList::pool_batching.
Referenced by DRW_shgroup_call_buffer().
GPUVertBuf* DRW_temp_buffer_request | ( | DRWInstanceDataList * | idatalist, |
GPUVertFormat * | format, | ||
int * | vert_len | ||
) |
This manager allows to distribute existing batches for instancing attributes. This reduce the number of batches creation. Querying a batch is done with a vertex format. This format should be static so that its pointer never changes (because we are using this pointer as identifier [we don't want to check the full format that would be too slow]).
Definition at line 101 of file draw_instance_data.c.
References BLI_assert, BLI_memblock_alloc(), DRWTempBufferHandle::buf, DRW_BUFFER_VERTS_CHUNK, DRWTempBufferHandle::format, GPU_USAGE_DYNAMIC, GPU_vertbuf_calloc(), GPU_vertbuf_data_alloc(), GPU_VERTBUF_DISCARD_SAFE, GPU_vertbuf_init_with_format_ex(), NULL, DRWInstanceDataList::pool_buffers, and DRWTempBufferHandle::vert_len.
Referenced by DRW_shgroup_call_buffer(), and DRW_shgroup_call_buffer_instance().
Definition at line 728 of file draw_instance_data.c.
References BLI_ghash_remove(), buffer, DRW_sparse_uniform_buffer_clear(), DRW_sparse_uniform_buffer_is_empty(), drw_uniform_attrs_pool_free_cb(), GHASH_FOREACH_BEGIN, GHASH_FOREACH_END, and NULL.
Referenced by drw_viewport_data_reset().
struct DRWSparseUniformBuf* DRW_uniform_attrs_pool_find_ubo | ( | struct GHash * | table, |
struct GPUUniformAttrList * | key | ||
) |
Definition at line 700 of file draw_instance_data.c.
References BLI_ghash_lookup(), buffer, DRWUniformAttrBuf::key, and NULL.
Referenced by draw_update_uniforms().
Definition at line 711 of file draw_instance_data.c.
References buffer, DRW_sparse_uniform_buffer_flush(), GHASH_FOREACH_BEGIN, and GHASH_FOREACH_END.
Referenced by drw_resource_buffer_finish().
Definition at line 706 of file draw_instance_data.c.
References GPU_uniform_attr_list_hash_new().
Referenced by DRW_viewport_data_create().