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@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16724>
This commit is contained in:
parent
9ddfcbfbc6
commit
7831508740
|
@ -481,8 +481,11 @@ panvk_meta_clear_color_img(struct panvk_cmd_buffer *cmdbuf,
|
||||||
img->pimage.layout.format, false);
|
img->pimage.layout.format, false);
|
||||||
memcpy(fbinfo->rts[0].clear_value, clearval, sizeof(fbinfo->rts[0].clear_value));
|
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;
|
for (unsigned level = range->baseMipLevel;
|
||||||
level < range->baseMipLevel + range->levelCount; level++) {
|
level < range->baseMipLevel + level_count; level++) {
|
||||||
view.first_level = view.last_level = level;
|
view.first_level = view.last_level = level;
|
||||||
fbinfo->width = u_minify(img->pimage.layout.width, level);
|
fbinfo->width = u_minify(img->pimage.layout.width, level);
|
||||||
fbinfo->height = u_minify(img->pimage.layout.height, 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;
|
fbinfo->extent.maxy = fbinfo->height - 1;
|
||||||
|
|
||||||
for (unsigned layer = range->baseArrayLayer;
|
for (unsigned layer = range->baseArrayLayer;
|
||||||
layer < range->baseArrayLayer + range->layerCount; layer++) {
|
layer < range->baseArrayLayer + layer_count; layer++) {
|
||||||
view.first_layer = view.last_layer = layer;
|
view.first_layer = view.last_layer = layer;
|
||||||
panvk_cmd_open_batch(cmdbuf);
|
panvk_cmd_open_batch(cmdbuf);
|
||||||
panvk_per_arch(cmd_alloc_fb_desc)(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)
|
if (fbinfo->zs.clear.s)
|
||||||
fbinfo->zs.clear_value.stencil = value->stencil;
|
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;
|
for (unsigned level = range->baseMipLevel;
|
||||||
level < range->baseMipLevel + range->levelCount; level++) {
|
level < range->baseMipLevel + level_count; level++) {
|
||||||
view.first_level = view.last_level = level;
|
view.first_level = view.last_level = level;
|
||||||
fbinfo->width = u_minify(img->pimage.layout.width, level);
|
fbinfo->width = u_minify(img->pimage.layout.width, level);
|
||||||
fbinfo->height = u_minify(img->pimage.layout.height, 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;
|
fbinfo->extent.maxy = fbinfo->height - 1;
|
||||||
|
|
||||||
for (unsigned layer = range->baseArrayLayer;
|
for (unsigned layer = range->baseArrayLayer;
|
||||||
layer < range->baseArrayLayer + range->layerCount; layer++) {
|
layer < range->baseArrayLayer + layer_count; layer++) {
|
||||||
view.first_layer = view.last_layer = layer;
|
view.first_layer = view.last_layer = layer;
|
||||||
panvk_cmd_open_batch(cmdbuf);
|
panvk_cmd_open_batch(cmdbuf);
|
||||||
panvk_per_arch(cmd_alloc_fb_desc)(cmdbuf);
|
panvk_per_arch(cmd_alloc_fb_desc)(cmdbuf);
|
||||||
|
|
Loading…
Reference in New Issue