diff options
author | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2019-06-10 17:45:29 +0200 |
---|---|---|
committer | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2019-06-11 08:06:28 +0200 |
commit | 92fa6264cb19b61c7aaaf9c36625f5b7312d4527 (patch) | |
tree | 2d85ed8e3716b5361f4b912768c49740aa9390db /src/amd | |
parent | a8588f512b41cbba37d9a0f3d31e5275a8adb573 (diff) | |
download | mesa-92fa6264cb19b61c7aaaf9c36625f5b7312d4527.tar.gz |
radv: do not resolve all image layers with compute inside a subpass
When resolving inside a subpass, we should rely on the framebuffer
layer count instead of resolving all images layers. This should
improve performance of layered resolves a bit.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-By: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Diffstat (limited to 'src/amd')
-rw-r--r-- | src/amd/vulkan/radv_meta_resolve_cs.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c b/src/amd/vulkan/radv_meta_resolve_cs.c index b6c9e1c2b1f..fc4bcf27bb9 100644 --- a/src/amd/vulkan/radv_meta_resolve_cs.c +++ b/src/amd/vulkan/radv_meta_resolve_cs.c @@ -508,6 +508,10 @@ radv_cmd_buffer_resolve_subpass_cs(struct radv_cmd_buffer *cmd_buffer) struct radv_framebuffer *fb = cmd_buffer->state.framebuffer; const struct radv_subpass *subpass = cmd_buffer->state.subpass; struct radv_subpass_barrier barrier; + uint32_t layer_count = fb->layers; + + if (subpass->view_mask) + layer_count = util_last_bit(subpass->view_mask); /* Resolves happen before the end-of-subpass barriers get executed, so * we have to make the attachment shader-readable. @@ -531,14 +535,14 @@ radv_cmd_buffer_resolve_subpass_cs(struct radv_cmd_buffer *cmd_buffer) .srcSubresource = (VkImageSubresourceLayers) { .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, .mipLevel = src_iview->base_mip, - .baseArrayLayer = 0, - .layerCount = src_iview->image->info.array_size + .baseArrayLayer = src_iview->base_layer, + .layerCount = layer_count, }, .dstSubresource = (VkImageSubresourceLayers) { .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, .mipLevel = dst_iview->base_mip, - .baseArrayLayer = 0, - .layerCount = dst_iview->image->info.array_size + .baseArrayLayer = dst_iview->base_layer, + .layerCount = layer_count, }, .srcOffset = (VkOffset3D){ 0, 0, 0 }, .dstOffset = (VkOffset3D){ 0, 0, 0 }, |