diff --git a/src/amd/vulkan/radv_pass.c b/src/amd/vulkan/radv_pass.c index 26063f57dd7..ff7c42237ca 100644 --- a/src/amd/vulkan/radv_pass.c +++ b/src/amd/vulkan/radv_pass.c @@ -333,15 +333,23 @@ vk_image_layout_depth_only(VkImageLayout layout) static VkImageLayout stencil_ref_layout(const VkAttachmentReference2 *att_ref) { - if (!vk_image_layout_depth_only(att_ref->layout)) - return att_ref->layout; - const VkAttachmentReferenceStencilLayoutKHR *stencil_ref = vk_find_struct_const(att_ref->pNext, ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR); - if (!stencil_ref) - return VK_IMAGE_LAYOUT_UNDEFINED; - return stencil_ref->stencilLayout; + if (stencil_ref) + return stencil_ref->stencilLayout; + + /* From VUID-VkAttachmentReference2-attachment-04755: + * "If attachment is not VK_ATTACHMENT_UNUSED, and the format of the + * referenced attachment is a depth/stencil format which includes both + * depth and stencil aspects, and layout is + * VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or + * VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pNext chain must include + * a VkAttachmentReferenceStencilLayout structure." + */ + assert(!vk_image_layout_depth_only(att_ref->layout)); + + return att_ref->layout; } /* From the Vulkan Specification 1.2.184: @@ -371,6 +379,17 @@ stencil_desc_layout(const VkAttachmentDescription2KHR *att_desc, bool final) if (stencil_desc) return final ? stencil_desc->stencilFinalLayout : stencil_desc->stencilInitialLayout; + + /* From VUID-VkAttachmentDescription2-format-03302/03303: + * "If format is a depth/stencil format which includes both depth and + * stencil aspects, and initial/finalLayout is + * VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL or + * VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, the pNext chain must include + * a VkAttachmentDescriptionStencilLayout structure." + */ + assert(!vk_image_layout_depth_only(final ? att_desc->finalLayout : + att_desc->initialLayout)); + return final ? att_desc->finalLayout : att_desc->initialLayout; }