@@ -749,7 +749,7 @@ class HelloTriangleApplication {
749749 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);
750750 createImageView (depthImage, depthFormat, VK_IMAGE_ASPECT_DEPTH_BIT, depthImageView);
751751
752- transitionImageLayout (depthImage, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
752+ transitionImageLayout (depthImage, depthFormat, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
753753 }
754754
755755 VkFormat findSupportedFormat (const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) {
@@ -775,6 +775,10 @@ class HelloTriangleApplication {
775775 );
776776 }
777777
778+ bool hasStencilComponent (VkFormat format) {
779+ return format == VK_FORMAT_D32_SFLOAT_S8_UINT || format == VK_FORMAT_D24_UNORM_S8_UINT;
780+ }
781+
778782 void createTextureImage () {
779783 int texWidth, texHeight, texChannels;
780784 stbi_uc* pixels = stbi_load (" textures/texture.jpg" , &texWidth, &texHeight, &texChannels, STBI_rgb_alpha);
@@ -797,11 +801,11 @@ class HelloTriangleApplication {
797801
798802 createImage (texWidth, texHeight, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, textureImageMemory);
799803
800- transitionImageLayout (stagingImage, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
801- transitionImageLayout (textureImage, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
804+ transitionImageLayout (stagingImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
805+ transitionImageLayout (textureImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_LAYOUT_PREINITIALIZED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
802806 copyImage (stagingImage, textureImage, texWidth, texHeight);
803807
804- transitionImageLayout (textureImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
808+ transitionImageLayout (textureImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
805809 }
806810
807811 void createTextureImageView () {
@@ -881,7 +885,7 @@ class HelloTriangleApplication {
881885 vkBindImageMemory (device, image, imageMemory, 0 );
882886 }
883887
884- void transitionImageLayout (VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout) {
888+ void transitionImageLayout (VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout) {
885889 VkCommandBuffer commandBuffer = beginSingleTimeCommands ();
886890
887891 VkImageMemoryBarrier barrier = {};
@@ -894,6 +898,10 @@ class HelloTriangleApplication {
894898
895899 if (newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) {
896900 barrier.subresourceRange .aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
901+
902+ if (hasStencilComponent (format)) {
903+ barrier.subresourceRange .aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
904+ }
897905 } else {
898906 barrier.subresourceRange .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
899907 }
0 commit comments