mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 19:30:12 +01:00
venus: ensure invariance of buffer memory requirement size
Need to align the size for the initial cache miss.
Fixes: ef255444c1 ("venus: switch to lazy VkBuffer cache")
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21644>
This commit is contained in:
parent
2e2605e297
commit
b5e7a22c2e
1 changed files with 21 additions and 7 deletions
|
|
@ -91,6 +91,18 @@ vn_buffer_cache_fini(struct vn_device *dev)
|
|||
vn_buffer_cache_debug_dump(&dev->buffer_cache);
|
||||
}
|
||||
|
||||
static inline VkDeviceSize
|
||||
vn_buffer_get_aligned_memory_requirement_size(VkDeviceSize size,
|
||||
const VkMemoryRequirements *req)
|
||||
{
|
||||
/* TODO remove comment after mandating VK_KHR_maintenance4
|
||||
*
|
||||
* This is based on below implementation defined behavior:
|
||||
* req.size <= align64(info.size, req.alignment)
|
||||
*/
|
||||
return align64(size, req->alignment);
|
||||
}
|
||||
|
||||
static struct vn_buffer_cache_entry *
|
||||
vn_buffer_get_cached_memory_requirements(
|
||||
struct vn_buffer_cache *cache,
|
||||
|
|
@ -118,13 +130,9 @@ vn_buffer_get_cached_memory_requirements(
|
|||
if (entry->valid) {
|
||||
*out = entry->requirements;
|
||||
|
||||
/* TODO remove comment after mandating VK_KHR_maintenance4
|
||||
*
|
||||
* This is based on below implementation defined behavior:
|
||||
* req.size <= align64(info.size, req.alignment)
|
||||
*/
|
||||
out->memory.memoryRequirements.size = align64(
|
||||
create_info->size, out->memory.memoryRequirements.alignment);
|
||||
out->memory.memoryRequirements.size =
|
||||
vn_buffer_get_aligned_memory_requirement_size(
|
||||
create_info->size, &out->memory.memoryRequirements);
|
||||
|
||||
p_atomic_inc(&cache->debug.cache_hit_count);
|
||||
} else {
|
||||
|
|
@ -163,6 +171,12 @@ vn_buffer_cache_entry_init(struct vn_buffer_cache *cache,
|
|||
|
||||
unlock:
|
||||
simple_mtx_unlock(&cache->mutex);
|
||||
|
||||
/* ensure invariance of the memory requirement size */
|
||||
req->memoryRequirements.size =
|
||||
vn_buffer_get_aligned_memory_requirement_size(
|
||||
req->memoryRequirements.size,
|
||||
&entry->requirements.memory.memoryRequirements);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue