From 307a4bf4abcf0c1f86879e616945236c8635d996 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Tue, 29 Jun 2021 18:54:45 +0100 Subject: [PATCH] radv: use null vertex descriptor if num_records=0 Signed-off-by: Rhys Perry Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index ec7e11e20cd..55d7ee4e6a3 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -2920,8 +2920,16 @@ radv_flush_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer, bool pipeline_ /* GFX10 uses OOB_SELECT_RAW if stride==0, so convert num_records from elements into * into bytes in that case. GFX8 always uses bytes. */ - if (num_records && (chip == GFX8 || (chip >= GFX10 && !stride))) + if (num_records && (chip == GFX8 || (chip >= GFX10 && !stride))) { num_records = (num_records - 1) * stride + attrib_end; + } else if (!num_records) { + /* On GFX9 (GFX6/7 untested), it seems bounds checking is disabled if both + * num_records and stride are zero. This doesn't seem necessary on GFX8, GFX10 and + * GFX10.3 but it doesn't hurt. + */ + memset(desc, 0, 16); + continue; + } } else { if (chip != GFX8 && stride) num_records = DIV_ROUND_UP(num_records, stride);