GPU: Do not fill index buffer object with zero on allocation
There is no need to initialize index buffers with zero since such buffers always have to be filled by the caller. This change replaces the allocation with malloc, so that GPU_indexbuf_init results in an uninitialized buffer. In debug, and with asan, the buffer will be still filled by something, but the caller should initialize zero indices manually instead of relying on a default value. For example, sometimes the cost of zeroing on allocation is similar to the cost of filling the buffer with actual data. For a point cloud with 1'000'000 points, octahedron topology update on each frame of simulation takes: | | Main | PR | | -------------------------- | ------- | ------- | | GPU_indexbuf_init | 2.75 ms | 5233 ns | | pointcloud_extract_indices | 6.95 ms | 4.64 ms | Pull Request: https://projects.blender.org/blender/blender/pulls/141110
This commit is contained in:
@@ -66,7 +66,7 @@ void GPU_indexbuf_init_ex(GPUIndexBufBuilder *builder,
|
||||
builder->restart_index_value = RESTART_INDEX;
|
||||
#endif
|
||||
builder->uses_restart_indices = false;
|
||||
builder->data = MEM_calloc_arrayN<uint>(builder->max_index_len, "IndexBuf data");
|
||||
builder->data = MEM_malloc_arrayN<uint>(builder->max_index_len, "IndexBuf data");
|
||||
}
|
||||
|
||||
void GPU_indexbuf_init(GPUIndexBufBuilder *builder,
|
||||
|
||||
Reference in New Issue
Block a user