From c7f2bc6bedb5dbb0d9f713db64d11291204f1cf9 Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Wed, 23 Apr 2025 14:15:16 +0200 Subject: [PATCH] panvk: Take rasterization sample into account in indirect draw on v10+ This has been an oversight when implementing indirect draw. Fixes: 1f3b8bb9188e ("panvk: Add support for Draw[Indexed]Indirect") Signed-off-by: Mary Guillemard Acked-by: Erik Faye-Lund Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 49b7b7c6fb4..7e53d0486f0 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -2162,6 +2162,22 @@ panvk_cmd_draw_indirect(struct panvk_cmd_buffer *cmdbuf, cmdbuf->state.gfx.fs.required = fs_required(&cmdbuf->state.gfx, &cmdbuf->vk.dynamic_graphics_state); + if (!cmdbuf->vk.dynamic_graphics_state.rs.rasterizer_discard_enable) { + struct pan_fb_info *fbinfo = &cmdbuf->state.gfx.render.fb.info; + uint32_t rasterization_samples = + cmdbuf->vk.dynamic_graphics_state.ms.rasterization_samples; + + /* If there's no attachment, we patch nr_samples to match + * rasterization_samples, otherwise, we make sure those two numbers match. + */ + if (!cmdbuf->state.gfx.render.bound_attachments) { + assert(rasterization_samples > 0); + fbinfo->nr_samples = rasterization_samples; + } else { + assert(rasterization_samples == fbinfo->nr_samples); + } + } + /* Layered indirect draw (VK_EXT_shader_viewport_index_layer) needs * additional changes. We allow layer_count == 0 because that happens * when mixing dynamic rendering and secondary command buffers. Once