diff options
Diffstat (limited to 'source/blender/draw/intern/draw_instance_data.h')
-rw-r--r-- | source/blender/draw/intern/draw_instance_data.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/source/blender/draw/intern/draw_instance_data.h b/source/blender/draw/intern/draw_instance_data.h index e562d99097e..c959a9e19d6 100644 --- a/source/blender/draw/intern/draw_instance_data.h +++ b/source/blender/draw/intern/draw_instance_data.h @@ -31,8 +31,12 @@ #define DRW_BUFFER_VERTS_CHUNK 128 +struct GHash; +struct GPUUniformAttrList; + typedef struct DRWInstanceData DRWInstanceData; typedef struct DRWInstanceDataList DRWInstanceDataList; +typedef struct DRWSparseUniformBuf DRWSparseUniformBuf; void *DRW_instance_data_next(DRWInstanceData *idata); DRWInstanceData *DRW_instance_data_request(DRWInstanceDataList *idatalist, uint attr_size); @@ -54,3 +58,21 @@ void DRW_instance_buffer_finish(DRWInstanceDataList *idatalist); void DRW_instance_data_list_reset(DRWInstanceDataList *idatalist); void DRW_instance_data_list_free_unused(DRWInstanceDataList *idatalist); void DRW_instance_data_list_resize(DRWInstanceDataList *idatalist); + +/* Sparse chunked UBO manager. */ +DRWSparseUniformBuf *DRW_sparse_uniform_buffer_new(unsigned int item_size, + unsigned int chunk_size); +void DRW_sparse_uniform_buffer_flush(DRWSparseUniformBuf *buffer); +void DRW_sparse_uniform_buffer_clear(DRWSparseUniformBuf *buffer, bool free_all); +void DRW_sparse_uniform_buffer_free(DRWSparseUniformBuf *buffer); +bool DRW_sparse_uniform_buffer_is_empty(DRWSparseUniformBuf *buffer); +void DRW_sparse_uniform_buffer_bind(DRWSparseUniformBuf *buffer, int chunk, int location); +void DRW_sparse_uniform_buffer_unbind(DRWSparseUniformBuf *buffer, int chunk); +void *DRW_sparse_uniform_buffer_ensure_item(DRWSparseUniformBuf *buffer, int chunk, int item); + +/* Uniform attribute UBO management. */ +struct GHash *DRW_uniform_attrs_pool_new(void); +void DRW_uniform_attrs_pool_flush_all(struct GHash *table); +void DRW_uniform_attrs_pool_clear_all(struct GHash *table); +struct DRWSparseUniformBuf *DRW_uniform_attrs_pool_find_ubo(struct GHash *table, + struct GPUUniformAttrList *key); |