mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-19 04:08:25 +02:00
zink: use general-layout when blitting to/from same resource
This avoids a validator warning when for instance generating mipmaps. Fixes:d2bb63c8d4("zink: Use optimal layout instead of general. Reduces valid layer warnings. Fixes RADV image noise.") Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5199> (cherry picked from commitdd2bd68fa6)
This commit is contained in:
parent
e5301cfeef
commit
d043d24654
2 changed files with 29 additions and 7 deletions
|
|
@ -22,7 +22,7 @@
|
|||
"description": "zink: use general-layout when blitting to/from same resource",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "d2bb63c8d4cdc02b1c33afadea5becd58fb7286c"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -89,13 +89,35 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info)
|
|||
zink_batch_reference_resoure(batch, src);
|
||||
zink_batch_reference_resoure(batch, dst);
|
||||
|
||||
if (src->layout != VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
|
||||
zink_resource_barrier(batch->cmdbuf, src, src->aspect,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||
if (src == dst) {
|
||||
/* The Vulkan 1.1 specification says the following about valid usage
|
||||
* of vkCmdBlitImage:
|
||||
*
|
||||
* "srcImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
|
||||
* VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL"
|
||||
*
|
||||
* and:
|
||||
*
|
||||
* "dstImageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
|
||||
* VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL"
|
||||
*
|
||||
* Since we cant have the same image in two states at the same time,
|
||||
* we're effectively left with VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
|
||||
* VK_IMAGE_LAYOUT_GENERAL. And since this isn't a present-related
|
||||
* operation, VK_IMAGE_LAYOUT_GENERAL seems most appropriate.
|
||||
*/
|
||||
if (src->layout != VK_IMAGE_LAYOUT_GENERAL)
|
||||
zink_resource_barrier(batch->cmdbuf, src, src->aspect,
|
||||
VK_IMAGE_LAYOUT_GENERAL);
|
||||
} else {
|
||||
if (src->layout != VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
|
||||
zink_resource_barrier(batch->cmdbuf, src, src->aspect,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||
|
||||
if (dst->layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
|
||||
zink_resource_barrier(batch->cmdbuf, dst, dst->aspect,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||
if (dst->layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
|
||||
zink_resource_barrier(batch->cmdbuf, dst, dst->aspect,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||
}
|
||||
|
||||
VkImageBlit region = {};
|
||||
region.srcSubresource.aspectMask = src->aspect;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue