From 914b60f0dd412e1c64c74cd98d4c605926892de8 Mon Sep 17 00:00:00 2001 From: Jose Maria Casanova Crespo Date: Mon, 8 Sep 2025 13:06:55 +0200 Subject: [PATCH] v3dv: Fix stencil clear values for only stencil clears The attachment loadOp for stencil buffers is not stored at attachment->desc.loadOp. It is stored at attachment->desc.stencilLoadOp so v3dv was ignoring the clear values for stencil if the depth buffer wasn't setup with the VK_ATTACHMENT_LOAD_OP_CLEAR. Fixes: 4d0e497a3e6 ("v3dv: implement support for depth testing") Reviewed-by: Iago Toral Quiroga Part-of: --- src/broadcom/vulkan/v3dv_cmd_buffer.c | 28 +++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c index 9b893782fec..f5ff4ec72df 100644 --- a/src/broadcom/vulkan/v3dv_cmd_buffer.c +++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c @@ -1285,20 +1285,24 @@ cmd_buffer_state_set_clear_values(struct v3dv_cmd_buffer *cmd_buffer, const struct v3dv_render_pass_attachment *attachment = &pass->attachments[i]; - if (attachment->desc.loadOp != VK_ATTACHMENT_LOAD_OP_CLEAR) - continue; - VkImageAspectFlags aspects = vk_format_aspects(attachment->desc.format); if (aspects & VK_IMAGE_ASPECT_COLOR_BIT) { - cmd_buffer_state_set_attachment_clear_color(cmd_buffer, i, - &values[i].color); - } else if (aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | - VK_IMAGE_ASPECT_STENCIL_BIT)) { - cmd_buffer_state_set_attachment_clear_depth_stencil( - cmd_buffer, i, - aspects & VK_IMAGE_ASPECT_DEPTH_BIT, - aspects & VK_IMAGE_ASPECT_STENCIL_BIT, - &values[i].depthStencil); + if (attachment->desc.loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR) { + cmd_buffer_state_set_attachment_clear_color(cmd_buffer, i, + &values[i].color); + } + } else { + bool clear_depth = aspects & VK_IMAGE_ASPECT_DEPTH_BIT && + attachment->desc.loadOp == VK_ATTACHMENT_LOAD_OP_CLEAR; + bool clear_stencil = aspects & VK_IMAGE_ASPECT_STENCIL_BIT && + attachment->desc.stencilLoadOp == VK_ATTACHMENT_LOAD_OP_CLEAR; + if (clear_depth || clear_stencil) { + cmd_buffer_state_set_attachment_clear_depth_stencil( + cmd_buffer, i, + clear_depth, + clear_stencil, + &values[i].depthStencil); + } } } }