Skip to content

Commit 2c43f38

Browse files
committed
Replace the "FromOptimal" layout transitions with auto. This fixes some rendering errors on NV.
1 parent e0afa26 commit 2c43f38

File tree

1 file changed

+2
-74
lines changed

1 file changed

+2
-74
lines changed

Common/GPU/Vulkan/VulkanQueueRunner.cpp

Lines changed: 2 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -931,78 +931,6 @@ void VulkanQueueRunner::LogReadbackImage(const VKRStep &step) {
931931
INFO_LOG(G3D, "%s", StepToString(vulkan_, step).c_str());
932932
}
933933

934-
static void TransitionColorFromOptimal(VkCommandBuffer cmd, VkImage colorImage, VkImageLayout colorLayout, int numLayers, VulkanBarrierBatch *recordBarrier) {
935-
VkPipelineStageFlags dstStageMask = 0;
936-
VkAccessFlags dstAccessMask = 0;
937-
// And the final transition.
938-
// Don't need to transition it if VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL.
939-
switch (colorLayout) {
940-
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
941-
dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
942-
dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
943-
break;
944-
case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
945-
dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
946-
dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT;
947-
break;
948-
case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
949-
dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
950-
dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT;
951-
break;
952-
case VK_IMAGE_LAYOUT_UNDEFINED:
953-
case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
954-
// Nothing to do.
955-
return;
956-
default:
957-
_dbg_assert_msg_(false, "TransitionFromOptimal: Unexpected final color layout %d", (int)colorLayout);
958-
break;
959-
}
960-
recordBarrier->TransitionImage(
961-
colorImage, 0, 1, numLayers, VK_IMAGE_ASPECT_COLOR_BIT,
962-
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
963-
colorLayout,
964-
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // srcAccessMask
965-
dstAccessMask,
966-
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
967-
dstStageMask
968-
);
969-
}
970-
971-
static void TransitionDepthFromOptimal(VkCommandBuffer cmd, VkImage depthStencilImage, VkImageLayout depthStencilLayout, int numLayers, VulkanBarrierBatch *recordBarrier) {
972-
VkPipelineStageFlags dstStageMask = 0;
973-
VkAccessFlags dstAccessMask = 0;
974-
switch (depthStencilLayout) {
975-
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
976-
dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
977-
dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
978-
break;
979-
case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
980-
dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
981-
dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT;
982-
break;
983-
case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
984-
dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
985-
dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT;
986-
break;
987-
case VK_IMAGE_LAYOUT_UNDEFINED:
988-
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
989-
// Nothing to do.
990-
return;
991-
default:
992-
_dbg_assert_msg_(false, "TransitionFromOptimal: Unexpected final depth layout %d", (int)depthStencilLayout);
993-
break;
994-
}
995-
recordBarrier->TransitionImage(
996-
depthStencilImage, 0, 1, numLayers, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT,
997-
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
998-
depthStencilLayout,
999-
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, // srcAccessMask
1000-
dstAccessMask,
1001-
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
1002-
dstStageMask
1003-
);
1004-
}
1005-
1006934
void VulkanQueueRunner::PerformRenderPass(const VKRStep &step, VkCommandBuffer cmd, int curFrame, QueueProfileContext &profile) {
1007935
for (size_t i = 0; i < step.preTransitions.size(); i++) {
1008936
const TransitionRequest &iter = step.preTransitions[i];
@@ -1303,9 +1231,9 @@ void VulkanQueueRunner::PerformRenderPass(const VKRStep &step, VkCommandBuffer c
13031231

13041232
if (fb) {
13051233
// If the desired final layout aren't the optimal layout needed next, transition.
1306-
TransitionColorFromOptimal(cmd, fb->color.image, step.render.finalColorLayout, fb->numLayers, &recordBarrier_);
1234+
recordBarrier_.TransitionColorImageAuto(fb->color.image, &fb->color.layout, step.render.finalColorLayout, 0, 1, fb->numLayers);
13071235
if (fb->depth.image) {
1308-
TransitionDepthFromOptimal(cmd, fb->depth.image, step.render.finalDepthStencilLayout, fb->numLayers, &recordBarrier_);
1236+
recordBarrier_.TransitionDepthStencilImageAuto(fb->depth.image, &fb->depth.layout, step.render.finalDepthStencilLayout, 0, 1, fb->numLayers);
13091237
}
13101238
recordBarrier_.Flush(cmd);
13111239

0 commit comments

Comments
 (0)