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: 9345b95346 ("nvk: Bind 3D depth/stencil images as 2D arrays")
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31033>
(cherry picked from commit e533484d06)
This commit is contained in:
Faith Ekstrand 2024-09-04 11:37:32 -05:00 committed by Dylan Baker
parent 41f579fb85
commit 4bf6575129
2 changed files with 6 additions and 3 deletions

View file

@ -74,7 +74,7 @@
"description": "nvk: Take depth image layer counts from the VkRenderingInfo",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "9345b95346dd3eac280ad152d07357526010b5d0",
"notes": null

View file

@ -818,9 +818,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));
@ -931,7 +933,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;
@ -940,7 +941,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];