mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
gallium/pipe: Align allocation size in pb_cache_manager_create_buffer
Some drivers have minimum buffer size or alignment requirements. When a buffer is created using pb_cache_manager_create_buffer, the cache is first checked for a compatible buffer to return instead. If the requested buffer size is less than (minimum buffer size) / (mgr->size_factor), no buffer in the cache is _ever_ applicable. The alignment is used to determine the true allocation size when evaluating against cached buffers. Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19082>
This commit is contained in:
parent
416b33337d
commit
e902f2ab8c
1 changed files with 6 additions and 4 deletions
|
|
@ -206,9 +206,11 @@ pb_cache_manager_create_buffer(struct pb_manager *_mgr,
|
|||
struct pb_cache_manager *mgr = pb_cache_manager(_mgr);
|
||||
struct pb_cache_buffer *buf;
|
||||
|
||||
pb_size aligned_size = align64(size, desc->alignment);
|
||||
|
||||
/* get a buffer from the cache */
|
||||
buf = (struct pb_cache_buffer *)
|
||||
pb_cache_reclaim_buffer(&mgr->cache, size, desc->alignment,
|
||||
pb_cache_reclaim_buffer(&mgr->cache, aligned_size, desc->alignment,
|
||||
desc->usage, 0);
|
||||
if (buf)
|
||||
return &buf->base;
|
||||
|
|
@ -218,12 +220,12 @@ pb_cache_manager_create_buffer(struct pb_manager *_mgr,
|
|||
if (!buf)
|
||||
return NULL;
|
||||
|
||||
buf->buffer = mgr->provider->create_buffer(mgr->provider, size, desc);
|
||||
buf->buffer = mgr->provider->create_buffer(mgr->provider, aligned_size, desc);
|
||||
|
||||
/* Empty the cache and try again. */
|
||||
if (!buf->buffer) {
|
||||
pb_cache_release_all_buffers(&mgr->cache);
|
||||
buf->buffer = mgr->provider->create_buffer(mgr->provider, size, desc);
|
||||
buf->buffer = mgr->provider->create_buffer(mgr->provider, aligned_size, desc);
|
||||
}
|
||||
|
||||
if(!buf->buffer) {
|
||||
|
|
@ -233,7 +235,7 @@ pb_cache_manager_create_buffer(struct pb_manager *_mgr,
|
|||
|
||||
assert(pipe_is_referenced(&buf->buffer->reference));
|
||||
assert(pb_check_alignment(desc->alignment, 1u << buf->buffer->alignment_log2));
|
||||
assert(buf->buffer->size >= size);
|
||||
assert(buf->buffer->size >= aligned_size);
|
||||
|
||||
pipe_reference_init(&buf->base.reference, 1);
|
||||
buf->base.alignment_log2 = buf->buffer->alignment_log2;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue