mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
panvk: Increase robust buffer access alignments
We can't go any higher than 4B for SSBOs but we can go up to 16B for UBOs. This will let us start vectorizing UBO access, even when robust because max-size loads (LD_PKA.i128) will never overrun a binding unless they're entirely outside the binding. Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com> Reviewed-by: Christoph Pillmayer <christoph.pillmayer@arm.com> Reviewed-by: Lorenzo Rossi <lorenzo.rossi@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40576>
This commit is contained in:
parent
f350a69759
commit
e52e7019b9
3 changed files with 11 additions and 8 deletions
|
|
@ -250,12 +250,14 @@ panvk_per_arch(cmd_fill_dyn_bufs)(
|
|||
const struct panvk_descriptor_set *set = desc_state->sets[set_idx];
|
||||
const uint32_t dyn_buf_offset =
|
||||
desc_state->dyn_buf_offsets[set_idx][dyn_buf_idx];
|
||||
const bool is_ssbo =
|
||||
desc_state->dyn_ssbos[set_idx] & BITFIELD_BIT(dyn_buf_idx);
|
||||
|
||||
assert(set_idx < MAX_SETS);
|
||||
assert(set);
|
||||
|
||||
pan_pack(&buffers[i], BUFFER, cfg) {
|
||||
cfg.size = set->dyn_bufs[dyn_buf_idx].size;
|
||||
cfg.size = align(set->dyn_bufs[dyn_buf_idx].size, is_ssbo ? 4 : 16);
|
||||
cfg.address = set->dyn_bufs[dyn_buf_idx].dev_addr + dyn_buf_offset;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ write_buffer_desc(struct panvk_descriptor_set *set,
|
|||
if (type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) {
|
||||
struct panvk_ssbo_addr desc = {
|
||||
.base_addr = panvk_buffer_gpu_ptr(buffer, info->offset),
|
||||
.size = range,
|
||||
.size = align(range, 4),
|
||||
};
|
||||
|
||||
write_desc(set, binding, elem, &desc, NO_SUBDESC);
|
||||
|
|
@ -202,11 +202,12 @@ write_buffer_desc(struct panvk_descriptor_set *set,
|
|||
write_desc(set, binding, elem, &padded_desc, NO_SUBDESC);
|
||||
}
|
||||
#else
|
||||
const bool is_ssbo = type == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
|
||||
struct mali_buffer_packed desc;
|
||||
|
||||
pan_pack(&desc, BUFFER, cfg) {
|
||||
cfg.address = panvk_buffer_gpu_ptr(buffer, info->offset);
|
||||
cfg.size = range;
|
||||
cfg.size = align(range, is_ssbo ? 4 : 16);
|
||||
}
|
||||
write_desc(set, binding, elem, &desc, NO_SUBDESC);
|
||||
#endif
|
||||
|
|
@ -498,7 +499,7 @@ panvk_init_iub(struct panvk_descriptor_set *set, uint32_t binding,
|
|||
|
||||
pan_pack(&desc, BUFFER, cfg) {
|
||||
cfg.address = iub_data_dev;
|
||||
cfg.size = iub_size_dev;
|
||||
cfg.size = align(iub_size_dev, 16);
|
||||
}
|
||||
write_desc(set, binding, 0, &desc, NO_SUBDESC);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -845,8 +845,8 @@ panvk_per_arch(get_physical_device_properties)(
|
|||
.minTexelBufferOffsetAlignment = 16,
|
||||
/* Always aligned on a uniform slot (vec4). */
|
||||
.minUniformBufferOffsetAlignment = 16,
|
||||
/* Lowered to global accesses, which happen at the 32-bit granularity. */
|
||||
.minStorageBufferOffsetAlignment = 4,
|
||||
/* LOAD.i128 and LD_PKA.i128 which require 16B alignment */
|
||||
.minStorageBufferOffsetAlignment = 16,
|
||||
/* Signed 4-bit value. */
|
||||
.minTexelOffset = -8,
|
||||
.maxTexelOffset = 7,
|
||||
|
|
@ -1099,8 +1099,8 @@ panvk_per_arch(get_physical_device_properties)(
|
|||
.pipelineBinaryCompressedData = false,
|
||||
|
||||
/* VK_KHR_robustness2 */
|
||||
.robustStorageBufferAccessSizeAlignment = 1,
|
||||
.robustUniformBufferAccessSizeAlignment = 1,
|
||||
.robustStorageBufferAccessSizeAlignment = 4,
|
||||
.robustUniformBufferAccessSizeAlignment = 16,
|
||||
|
||||
/* VK_EXT_shader_object */
|
||||
/* We do not currently support VK_EXT_shader_object but this is used
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue