Blender  V3.3
Macros | Typedefs | Functions
draw_instance_data.h File Reference
#include "BLI_compiler_attrs.h"
#include "BLI_sys_types.h"
#include "GPU_batch.h"

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
 

Functions

voidDRW_instance_data_next (DRWInstanceData *idata)
 
DRWInstanceDataDRW_instance_data_request (DRWInstanceDataList *idatalist, uint attr_size)
 
GPUVertBufDRW_temp_buffer_request (DRWInstanceDataList *idatalist, GPUVertFormat *format, int *vert_len)
 
GPUBatchDRW_temp_batch_instance_request (DRWInstanceDataList *idatalist, GPUVertBuf *buf, GPUBatch *instancer, GPUBatch *geom)
 
GPUBatchDRW_temp_batch_request (DRWInstanceDataList *idatalist, GPUVertBuf *buf, GPUPrimType type)
 
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)
 
DRWSparseUniformBufDRW_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)
 
voidDRW_sparse_uniform_buffer_ensure_item (DRWSparseUniformBuf *buffer, int chunk, int item)
 
struct GHashDRW_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 DRWSparseUniformBufDRW_uniform_attrs_pool_find_ubo (struct GHash *table, struct GPUUniformAttrList *key)
 

Macro Definition Documentation

◆ DRW_BUFFER_VERTS_CHUNK

#define DRW_BUFFER_VERTS_CHUNK   128

Definition at line 17 of file draw_instance_data.h.

◆ MAX_INSTANCE_DATA_SIZE

#define MAX_INSTANCE_DATA_SIZE   64 /* Can be adjusted for more */

Definition at line 15 of file draw_instance_data.h.

Typedef Documentation

◆ DRWInstanceData

Definition at line 1 of file draw_instance_data.h.

◆ DRWInstanceDataList

Definition at line 1 of file draw_instance_data.h.

◆ DRWSparseUniformBuf

Definition at line 1 of file draw_instance_data.h.

Function Documentation

◆ DRW_instance_buffer_finish()

void DRW_instance_buffer_finish ( DRWInstanceDataList idatalist)

◆ DRW_instance_data_list_free_unused()

void DRW_instance_data_list_free_unused ( DRWInstanceDataList idatalist)

◆ DRW_instance_data_list_reset()

void DRW_instance_data_list_reset ( DRWInstanceDataList idatalist)

◆ DRW_instance_data_list_resize()

void DRW_instance_data_list_resize ( DRWInstanceDataList idatalist)

◆ DRW_instance_data_next()

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().

◆ DRW_instance_data_request()

DRWInstanceData* DRW_instance_data_request ( DRWInstanceDataList idatalist,
uint  attr_size 
)

◆ DRW_sparse_uniform_buffer_bind()

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().

◆ DRW_sparse_uniform_buffer_clear()

void DRW_sparse_uniform_buffer_clear ( DRWSparseUniformBuf buffer,
bool  free_all 
)

◆ DRW_sparse_uniform_buffer_ensure_item()

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().

◆ DRW_sparse_uniform_buffer_flush()

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().

◆ DRW_sparse_uniform_buffer_free()

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.

◆ DRW_sparse_uniform_buffer_is_empty()

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().

◆ DRW_sparse_uniform_buffer_new()

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.

◆ DRW_sparse_uniform_buffer_unbind()

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().

◆ DRW_temp_batch_instance_request()

GPUBatch* DRW_temp_batch_instance_request ( DRWInstanceDataList idatalist,
GPUVertBuf buf,
GPUBatch instancer,
GPUBatch geom 
)

◆ DRW_temp_batch_request()

GPUBatch* DRW_temp_batch_request ( DRWInstanceDataList idatalist,
GPUVertBuf buf,
GPUPrimType  type 
)

◆ DRW_temp_buffer_request()

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().

◆ DRW_uniform_attrs_pool_clear_all()

void DRW_uniform_attrs_pool_clear_all ( struct GHash table)

◆ DRW_uniform_attrs_pool_find_ubo()

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().

◆ DRW_uniform_attrs_pool_flush_all()

void DRW_uniform_attrs_pool_flush_all ( struct GHash table)

◆ DRW_uniform_attrs_pool_new()

struct GHash* DRW_uniform_attrs_pool_new ( void  )

Definition at line 706 of file draw_instance_data.c.

References GPU_uniform_attr_list_hash_new().

Referenced by DRW_viewport_data_create().