From e533484d06ff9635dfdd41df89eaa6662842f28d Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 4 Sep 2024 11:37:32 -0500 Subject: [PATCH] nvk: Take depth image layer counts from the VkRenderingInfo Otherwise OOB layers may render to the wrong layer in the depth image. While we're here, add the same layer count asserts for color images. Fixes: 9345b95346dd ("nvk: Bind 3D depth/stencil images as 2D arrays") Reviewed-by: Mary Guillemard Part-of: --- src/nouveau/vulkan/nvk_cmd_draw.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_draw.c b/src/nouveau/vulkan/nvk_cmd_draw.c index 1a57ecfeb60..71af4a8eb1a 100644 --- a/src/nouveau/vulkan/nvk_cmd_draw.c +++ b/src/nouveau/vulkan/nvk_cmd_draw.c @@ -836,9 +836,11 @@ nvk_CmdBeginRendering(VkCommandBuffer commandBuffer, addr += nil_image_level_z_offset_B(nil_image, iview->vk.base_mip_level, iview->vk.base_array_layer); + assert(layer_count <= iview->vk.extent.depth); } else { addr += iview->vk.base_array_layer * (uint64_t)nil_image->array_stride_B; + assert(layer_count <= iview->vk.layer_count); } P_MTHD(p, NV9097, SET_COLOR_TARGET_A(i)); @@ -949,7 +951,6 @@ nvk_CmdBeginRendering(VkCommandBuffer commandBuffer, uint64_t addr = nvk_image_base_address(image, ip); uint32_t mip_level = iview->vk.base_mip_level; uint32_t base_array_layer = iview->vk.base_array_layer; - uint32_t layer_count = iview->vk.layer_count; if (nil_image.dim == NIL_IMAGE_DIM_3D) { uint64_t level_offset_B; @@ -958,7 +959,9 @@ nvk_CmdBeginRendering(VkCommandBuffer commandBuffer, addr += level_offset_B; mip_level = 0; base_array_layer = 0; - layer_count = iview->vk.extent.depth; + assert(layer_count <= iview->vk.extent.depth); + } else { + assert(layer_count <= iview->vk.layer_count); } const struct nil_image_level *level = &nil_image.levels[mip_level];