diff --git a/.pick_status.json b/.pick_status.json index c184fd626a1..f19932a0be1 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -534,7 +534,7 @@ "description": "panvk: Take rasterization sample into account in indirect draw on v10+", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "1f3b8bb9188e0520dea18c0b20fa7f857a2532a2", "notes": null diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index a114f6b0303..063d7a68d0f 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -2166,6 +2166,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