Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit da265d3

Browse files
committed
Remove redundant depth image transition
1 parent ec292bf commit da265d3

5 files changed

Lines changed: 16 additions & 82 deletions

File tree

code/26_depth_buffering.cpp

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -780,8 +780,6 @@ class HelloTriangleApplication {
780780

781781
createImage(swapChainExtent.width, swapChainExtent.height, depthFormat, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, depthImage, depthImageMemory);
782782
depthImageView = createImageView(depthImage, depthFormat, VK_IMAGE_ASPECT_DEPTH_BIT);
783-
784-
transitionImageLayout(depthImage, depthFormat, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
785783
}
786784

787785
VkFormat findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) {
@@ -931,17 +929,7 @@ class HelloTriangleApplication {
931929
barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
932930
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
933931
barrier.image = image;
934-
935-
if (newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
936-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
937-
938-
if (hasStencilComponent(format)) {
939-
barrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
940-
}
941-
} else {
942-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
943-
}
944-
932+
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
945933
barrier.subresourceRange.baseMipLevel = 0;
946934
barrier.subresourceRange.levelCount = 1;
947935
barrier.subresourceRange.baseArrayLayer = 0;
@@ -962,12 +950,6 @@ class HelloTriangleApplication {
962950

963951
sourceStage = VK_PIPELINE_STAGE_TRANSFER_BIT;
964952
destinationStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
965-
} else if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
966-
barrier.srcAccessMask = 0;
967-
barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
968-
969-
sourceStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
970-
destinationStage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;
971953
} else {
972954
throw std::invalid_argument("unsupported layout transition!");
973955
}

code/27_model_loading.cpp

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -787,8 +787,6 @@ class HelloTriangleApplication {
787787

788788
createImage(swapChainExtent.width, swapChainExtent.height, depthFormat, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, depthImage, depthImageMemory);
789789
depthImageView = createImageView(depthImage, depthFormat, VK_IMAGE_ASPECT_DEPTH_BIT);
790-
791-
transitionImageLayout(depthImage, depthFormat, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
792790
}
793791

794792
VkFormat findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) {
@@ -938,17 +936,7 @@ class HelloTriangleApplication {
938936
barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
939937
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
940938
barrier.image = image;
941-
942-
if (newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
943-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
944-
945-
if (hasStencilComponent(format)) {
946-
barrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
947-
}
948-
} else {
949-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
950-
}
951-
939+
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
952940
barrier.subresourceRange.baseMipLevel = 0;
953941
barrier.subresourceRange.levelCount = 1;
954942
barrier.subresourceRange.baseArrayLayer = 0;
@@ -969,12 +957,6 @@ class HelloTriangleApplication {
969957

970958
sourceStage = VK_PIPELINE_STAGE_TRANSFER_BIT;
971959
destinationStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
972-
} else if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
973-
barrier.srcAccessMask = 0;
974-
barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
975-
976-
sourceStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
977-
destinationStage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;
978960
} else {
979961
throw std::invalid_argument("unsupported layout transition!");
980962
}

code/28_mipmapping.cpp

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -788,8 +788,6 @@ class HelloTriangleApplication {
788788

789789
createImage(swapChainExtent.width, swapChainExtent.height, 1, depthFormat, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, depthImage, depthImageMemory);
790790
depthImageView = createImageView(depthImage, depthFormat, VK_IMAGE_ASPECT_DEPTH_BIT, 1);
791-
792-
transitionImageLayout(depthImage, depthFormat, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 1);
793791
}
794792

795793
VkFormat findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) {
@@ -1032,17 +1030,7 @@ class HelloTriangleApplication {
10321030
barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
10331031
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
10341032
barrier.image = image;
1035-
1036-
if (newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
1037-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
1038-
1039-
if (hasStencilComponent(format)) {
1040-
barrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
1041-
}
1042-
} else {
1043-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
1044-
}
1045-
1033+
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
10461034
barrier.subresourceRange.baseMipLevel = 0;
10471035
barrier.subresourceRange.levelCount = mipLevels;
10481036
barrier.subresourceRange.baseArrayLayer = 0;
@@ -1063,12 +1051,6 @@ class HelloTriangleApplication {
10631051

10641052
sourceStage = VK_PIPELINE_STAGE_TRANSFER_BIT;
10651053
destinationStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
1066-
} else if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
1067-
barrier.srcAccessMask = 0;
1068-
barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
1069-
1070-
sourceStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
1071-
destinationStage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;
10721054
} else {
10731055
throw std::invalid_argument("unsupported layout transition!");
10741056
}

code/29_multisampling.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -825,8 +825,6 @@ class HelloTriangleApplication {
825825

826826
createImage(swapChainExtent.width, swapChainExtent.height, 1, msaaSamples, depthFormat, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, depthImage, depthImageMemory);
827827
depthImageView = createImageView(depthImage, depthFormat, VK_IMAGE_ASPECT_DEPTH_BIT, 1);
828-
829-
transitionImageLayout(depthImage, depthFormat, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 1);
830828
}
831829

832830
VkFormat findSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) {
@@ -1084,17 +1082,7 @@ VkSampleCountFlagBits getMaxUsableSampleCount() {
10841082
barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
10851083
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
10861084
barrier.image = image;
1087-
1088-
if (newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
1089-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
1090-
1091-
if (hasStencilComponent(format)) {
1092-
barrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
1093-
}
1094-
} else {
1095-
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
1096-
}
1097-
1085+
barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
10981086
barrier.subresourceRange.baseMipLevel = 0;
10991087
barrier.subresourceRange.levelCount = mipLevels;
11001088
barrier.subresourceRange.baseArrayLayer = 0;
@@ -1115,14 +1103,7 @@ VkSampleCountFlagBits getMaxUsableSampleCount() {
11151103

11161104
sourceStage = VK_PIPELINE_STAGE_TRANSFER_BIT;
11171105
destinationStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
1118-
} else if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
1119-
barrier.srcAccessMask = 0;
1120-
barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
1121-
1122-
sourceStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
1123-
destinationStage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;
1124-
}
1125-
else if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && newLayout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) {
1106+
} else if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && newLayout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) {
11261107
barrier.srcAccessMask = 0;
11271108
barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
11281109
sourceStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;

en/07_Depth_buffering.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,10 +298,17 @@ textureImageView = createImageView(textureImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IM
298298

299299
That's it for creating the depth image. We don't need to map it or copy another
300300
image to it, because we're going to clear it at the start of the render pass
301-
like the color attachment. However, it still needs to be transitioned to a
302-
layout that is suitable for depth attachment usage. We could do this in the
303-
render pass like the color attachment, but here I've chosen to use a pipeline
304-
barrier because the transition only needs to happen once:
301+
like the color attachment.
302+
303+
### Explicitly transitioning the depth image
304+
305+
We don't need to explicitly transition the layout of the image to a depth
306+
attachment because we'll take care of this in the render pass. However, for
307+
completeness I'll still describe the process in this section. You may skip it if
308+
you like.
309+
310+
Make a call to `transitionImageLayout` at the end of the `createDepthResources`
311+
function like so:
305312

306313
```c++
307314
transitionImageLayout(depthImage, depthFormat, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);

0 commit comments

Comments
 (0)