Mesa (main): radv: add support for clearing multi layers with normal gfx clear path
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Aug 30 16:37:14 UTC 2021
Module: Mesa
Branch: main
Commit: 2d1b85fe22b91eea185fa5066f7334c76549ba0a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d1b85fe22b91eea185fa5066f7334c76549ba0a
Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date: Wed Aug 25 12:45:18 2021 +0200
radv: add support for clearing multi layers with normal gfx clear path
Allow to clear range of layers with vkCmdClear{Color,DepthStencil}Image().
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12557>
---
src/amd/vulkan/radv_meta_clear.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 341e8dea416..21d4ab199e4 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -2103,7 +2103,8 @@ radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer)
static void
radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image,
VkImageLayout image_layout, const VkImageSubresourceRange *range,
- VkFormat format, int level, int layer, const VkClearValue *clear_val)
+ VkFormat format, int level, unsigned layer_count,
+ const VkClearValue *clear_val)
{
VkDevice device_h = radv_device_to_handle(cmd_buffer->device);
struct radv_image_view iview;
@@ -2119,8 +2120,8 @@ radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *im
.subresourceRange = {.aspectMask = range->aspectMask,
.baseMipLevel = range->baseMipLevel + level,
.levelCount = 1,
- .baseArrayLayer = range->baseArrayLayer + layer,
- .layerCount = 1},
+ .baseArrayLayer = range->baseArrayLayer,
+ .layerCount = layer_count},
},
NULL);
@@ -2135,7 +2136,7 @@ radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *im
},
.width = width,
.height = height,
- .layers = 1},
+ .layers = layer_count},
&cmd_buffer->pool->alloc, &fb);
VkAttachmentDescription2 att_desc = {
@@ -2240,8 +2241,8 @@ radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *im
.offset = {0, 0},
.extent = {width, height},
},
- .baseArrayLayer = range->baseArrayLayer,
- .layerCount = 1, /* FINISHME: clear multi-layer framebuffer */
+ .baseArrayLayer = 0,
+ .layerCount = layer_count,
};
emit_clear(cmd_buffer, &clear_att, &clear_rect, NULL, NULL, 0, false);
@@ -2379,9 +2380,9 @@ radv_cmd_clear_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag
const uint32_t layer_count = image->type == VK_IMAGE_TYPE_3D
? radv_minify(image->info.depth, range->baseMipLevel + l)
: radv_get_layerCount(image, range);
- for (uint32_t s = 0; s < layer_count; ++s) {
- if (cs) {
+ if (cs) {
+ for (uint32_t s = 0; s < layer_count; ++s) {
struct radv_meta_blit2d_surf surf;
surf.format = format;
surf.image = image;
@@ -2390,11 +2391,11 @@ radv_cmd_clear_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag
surf.aspect_mask = range->aspectMask;
surf.disable_compression = disable_compression;
radv_meta_clear_image_cs(cmd_buffer, &surf, &internal_clear_value.color);
- } else {
- assert(!disable_compression);
- radv_clear_image_layer(cmd_buffer, image, image_layout, range, format, l, s,
- &internal_clear_value);
}
+ } else {
+ assert(!disable_compression);
+ radv_clear_image_layer(cmd_buffer, image, image_layout, range, format, l, layer_count,
+ &internal_clear_value);
}
}
}
More information about the mesa-commit
mailing list