From 15d080467087b2c23dce6932b1c9e45dc5822108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Tue, 1 Apr 2025 12:35:30 +0200 Subject: [PATCH] radv: Use buffers_written mask when gathering XFB info. We need to enable these buffers regardless of whether or not the shader actually writes any outputs to them, otherwise we break XFB queries. Cc: mesa-stable Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader_info.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index 742fd782673..845dc6ab18f 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -375,14 +375,10 @@ gather_xfb_info(const nir_shader *nir, struct radv_shader_info *info) assert(xfb->output_count <= MAX_SO_OUTPUTS); so->num_outputs = xfb->output_count; - for (unsigned i = 0; i < xfb->output_count; i++) { - unsigned output_buffer = xfb->outputs[i].buffer; - unsigned stream = xfb->buffer_to_stream[xfb->outputs[i].buffer]; + u_foreach_bit(output_buffer, xfb->buffers_written) { + unsigned stream = xfb->buffer_to_stream[output_buffer]; so->enabled_stream_buffers_mask |= (1 << output_buffer) << (stream * 4); - } - - for (unsigned i = 0; i < NIR_MAX_XFB_BUFFERS; i++) { - so->strides[i] = xfb->buffers[i].stride / 4; + so->strides[output_buffer] = xfb->buffers[output_buffer].stride / 4; } }