summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Natalie <jenatali@microsoft.com>2024-01-22 15:02:31 -0800
committerMarge Bot <emma+marge@anholt.net>2024-01-24 22:32:59 +0000
commitdf684ee653a24e377d135f9a57cc88762f1a0f6c (patch)
treeef37b100ef7ee73ef421b57289c479a82ed89af0
parentfcd56e31f7ceab8860932a7a30e6d588032b0f1c (diff)
dzn: Fix enhanced barrier layout for depth blits
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27224>
-rw-r--r--src/microsoft/vulkan/dzn_cmd_buffer.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/microsoft/vulkan/dzn_cmd_buffer.c b/src/microsoft/vulkan/dzn_cmd_buffer.c
index 8f3b114064f..cf68511c4c1 100644
--- a/src/microsoft/vulkan/dzn_cmd_buffer.c
+++ b/src/microsoft/vulkan/dzn_cmd_buffer.c
@@ -2895,9 +2895,11 @@ dzn_cmd_buffer_blit_issue_barriers(struct dzn_cmd_buffer *cmdbuf,
if (!post) {
if (cmdbuf->enhanced_barriers) {
+ D3D12_BARRIER_LAYOUT dst_new_layout = (aspect & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) ?
+ D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE : D3D12_BARRIER_LAYOUT_RENDER_TARGET;
*restore_dst_layout = dzn_cmd_buffer_require_layout(cmdbuf, dst,
dst_layout,
- D3D12_BARRIER_LAYOUT_RENDER_TARGET,
+ dst_new_layout,
&dst_range);
} else {
VkImageLayout dst_new_layout = (aspect & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) ?
@@ -2913,10 +2915,17 @@ dzn_cmd_buffer_blit_issue_barriers(struct dzn_cmd_buffer *cmdbuf,
}
} else {
if (cmdbuf->enhanced_barriers) {
- dzn_cmd_buffer_restore_layout(cmdbuf, dst,
- D3D12_BARRIER_SYNC_RENDER_TARGET, D3D12_BARRIER_ACCESS_RENDER_TARGET,
- D3D12_BARRIER_LAYOUT_RENDER_TARGET, *restore_dst_layout,
- &dst_range);
+ if ((aspect & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT))) {
+ dzn_cmd_buffer_restore_layout(cmdbuf, dst,
+ D3D12_BARRIER_SYNC_DEPTH_STENCIL, D3D12_BARRIER_ACCESS_DEPTH_STENCIL_WRITE,
+ D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE, *restore_dst_layout,
+ &dst_range);
+ } else {
+ dzn_cmd_buffer_restore_layout(cmdbuf, dst,
+ D3D12_BARRIER_SYNC_RENDER_TARGET, D3D12_BARRIER_ACCESS_RENDER_TARGET,
+ D3D12_BARRIER_LAYOUT_RENDER_TARGET, *restore_dst_layout,
+ &dst_range);
+ }
} else {
VkImageLayout dst_new_layout = (aspect & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) ?
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;