From 5a37a62bed352e1fcc82f3ca4c0f8bdc76bf9ae3 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Tue, 23 Apr 2024 15:30:06 +0200 Subject: [PATCH] panvk: Set unused attribute buffers descriptors to zero We assume two attribute buffer slot for each attribute buffer. Let's fill unused slots with zeros so we don't risk unexpected read accesses if the slot contains garbage. Signed-off-by: Boris Brezillon Reviewed-by: Mary Guillemard Acked-by: Erik Faye-Lund Part-of: --- src/panfrost/vulkan/panvk_vX_cmd_buffer.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c index af3af45e65f..1703ddd97de 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_buffer.c @@ -831,6 +831,7 @@ panvk_draw_emit_attrib_buf(const struct panvk_draw_info *draw, mali_ptr addr = buf->address & ~63ULL; unsigned size = buf->size + (buf->address & 63); unsigned divisor = draw->padded_vertex_count * buf_info->instance_divisor; + void *buf_ext = desc + pan_size(ATTRIBUTE_BUFFER); /* TODO: support instanced arrays */ if (draw->instance_count <= 1) { @@ -879,12 +880,17 @@ panvk_draw_emit_attrib_buf(const struct panvk_draw_info *draw, cfg.divisor_e = divisor_e; } - desc += pan_size(ATTRIBUTE_BUFFER); - pan_pack(desc, ATTRIBUTE_BUFFER_CONTINUATION_NPOT, cfg) { + pan_pack(buf_ext, ATTRIBUTE_BUFFER_CONTINUATION_NPOT, cfg) { cfg.divisor_numerator = divisor_num; cfg.divisor = buf_info->instance_divisor; } + + buf_ext = NULL; } + + /* If the buffer extension wasn't used, memset(0) */ + if (buf_ext) + memset(buf_ext, 0, pan_size(ATTRIBUTE_BUFFER)); } static void