Mesa (main): panvk: Use vk_image_subresource_*_count for clears

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 1 20:24:58 UTC 2022


Module: Mesa
Branch: main
Commit: 78315087406205df0252ed95a73b8470698a3f38
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=78315087406205df0252ed95a73b8470698a3f38

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Thu May 26 12:29:06 2022 -0400

panvk: Use vk_image_subresource_*_count for clears

This handles VK_REMAINING_* for us, instead of underflowing and clearing no
levels/layers.

Fixes dEQP-VK.api.image_clearing.core.clear_color_image.2d.linear.single_layer.*

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16724>

---

 src/panfrost/vulkan/panvk_vX_meta_clear.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/panfrost/vulkan/panvk_vX_meta_clear.c b/src/panfrost/vulkan/panvk_vX_meta_clear.c
index 340d43c77a7..0e5320b9496 100644
--- a/src/panfrost/vulkan/panvk_vX_meta_clear.c
+++ b/src/panfrost/vulkan/panvk_vX_meta_clear.c
@@ -481,8 +481,11 @@ panvk_meta_clear_color_img(struct panvk_cmd_buffer *cmdbuf,
                   img->pimage.layout.format, false);
    memcpy(fbinfo->rts[0].clear_value, clearval, sizeof(fbinfo->rts[0].clear_value));
 
+   unsigned level_count = vk_image_subresource_level_count(&img->vk, range);
+   unsigned layer_count = vk_image_subresource_layer_count(&img->vk, range);
+
    for (unsigned level = range->baseMipLevel;
-        level < range->baseMipLevel + range->levelCount; level++) {
+        level < range->baseMipLevel + level_count; level++) {
       view.first_level = view.last_level = level;
       fbinfo->width = u_minify(img->pimage.layout.width, level);
       fbinfo->height = u_minify(img->pimage.layout.height, level);
@@ -490,7 +493,7 @@ panvk_meta_clear_color_img(struct panvk_cmd_buffer *cmdbuf,
       fbinfo->extent.maxy = fbinfo->height - 1;
 
       for (unsigned layer = range->baseArrayLayer;
-           layer < range->baseArrayLayer + range->layerCount; layer++) {
+           layer < range->baseArrayLayer + layer_count; layer++) {
          view.first_layer = view.last_layer = layer;
          panvk_cmd_open_batch(cmdbuf);
          panvk_per_arch(cmd_alloc_fb_desc)(cmdbuf);
@@ -559,8 +562,11 @@ panvk_meta_clear_zs_img(struct panvk_cmd_buffer *cmdbuf,
    if (fbinfo->zs.clear.s)
       fbinfo->zs.clear_value.stencil = value->stencil;
 
+   unsigned level_count = vk_image_subresource_level_count(&img->vk, range);
+   unsigned layer_count = vk_image_subresource_layer_count(&img->vk, range);
+
    for (unsigned level = range->baseMipLevel;
-        level < range->baseMipLevel + range->levelCount; level++) {
+        level < range->baseMipLevel + level_count; level++) {
       view.first_level = view.last_level = level;
       fbinfo->width = u_minify(img->pimage.layout.width, level);
       fbinfo->height = u_minify(img->pimage.layout.height, level);
@@ -568,7 +574,7 @@ panvk_meta_clear_zs_img(struct panvk_cmd_buffer *cmdbuf,
       fbinfo->extent.maxy = fbinfo->height - 1;
 
       for (unsigned layer = range->baseArrayLayer;
-           layer < range->baseArrayLayer + range->layerCount; layer++) {
+           layer < range->baseArrayLayer + layer_count; layer++) {
          view.first_layer = view.last_layer = layer;
          panvk_cmd_open_batch(cmdbuf);
          panvk_per_arch(cmd_alloc_fb_desc)(cmdbuf);



More information about the mesa-commit mailing list