diff --git a/base/VulkanTexture.cpp b/base/VulkanTexture.cpp index dc7079a5..01093b07 100644 --- a/base/VulkanTexture.cpp +++ b/base/VulkanTexture.cpp @@ -211,8 +211,8 @@ namespace vks device->flushCommandBuffer(copyCmd, copyQueue); // Clean up staging resources - vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr); + vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); } else { @@ -461,8 +461,8 @@ namespace vks device->flushCommandBuffer(copyCmd, copyQueue); // Clean up staging resources - vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr); + vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); // Create sampler VkSamplerCreateInfo samplerCreateInfo = {}; @@ -672,8 +672,8 @@ namespace vks // Clean up staging resources ktxTexture_Destroy(ktxTexture); - vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr); + vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); // Update descriptor image info member that can be used for setting up descriptor sets updateDescriptor(); @@ -859,8 +859,8 @@ namespace vks // Clean up staging resources ktxTexture_Destroy(ktxTexture); - vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr); + vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); // Update descriptor image info member that can be used for setting up descriptor sets updateDescriptor(); diff --git a/base/VulkanglTFModel.cpp b/base/VulkanglTFModel.cpp index a811c958..9d4af8cf 100644 --- a/base/VulkanglTFModel.cpp +++ b/base/VulkanglTFModel.cpp @@ -2,7 +2,7 @@ /* * Vulkan glTF model and texture loading class based on tinyglTF (https://github.com/syoyo/tinygltf) * -* Copyright (C) 2018 by Sascha Willems - www.saschawillems.de +* Copyright (C) 2018-2023 by Sascha Willems - www.saschawillems.de * * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) */ @@ -166,17 +166,16 @@ void vkglTF::Texture::fromglTfImage(tinygltf::Image &gltfimage, std::string path subresourceRange.levelCount = 1; subresourceRange.layerCount = 1; - { - VkImageMemoryBarrier imageMemoryBarrier{}; - imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; - imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; - imageMemoryBarrier.srcAccessMask = 0; - imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - imageMemoryBarrier.image = image; - imageMemoryBarrier.subresourceRange = subresourceRange; - vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier); - } + VkImageMemoryBarrier imageMemoryBarrier{}; + + imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; + imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + imageMemoryBarrier.srcAccessMask = 0; + imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + imageMemoryBarrier.image = image; + imageMemoryBarrier.subresourceRange = subresourceRange; + vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier); VkBufferImageCopy bufferCopyRegion = {}; bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; @@ -189,22 +188,19 @@ void vkglTF::Texture::fromglTfImage(tinygltf::Image &gltfimage, std::string path vkCmdCopyBufferToImage(copyCmd, stagingBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &bufferCopyRegion); - { - VkImageMemoryBarrier imageMemoryBarrier{}; - imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; - imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; - imageMemoryBarrier.image = image; - imageMemoryBarrier.subresourceRange = subresourceRange; - vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier); - } + imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + imageMemoryBarrier.image = image; + imageMemoryBarrier.subresourceRange = subresourceRange; + vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier); device->flushCommandBuffer(copyCmd, copyQueue, true); - vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr); + vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); // Generate the mip chain (glTF uses jpg and png, so we need to create this manually) VkCommandBuffer blitCmd = device->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true); @@ -261,17 +257,14 @@ void vkglTF::Texture::fromglTfImage(tinygltf::Image &gltfimage, std::string path subresourceRange.levelCount = mipLevels; imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - { - VkImageMemoryBarrier imageMemoryBarrier{}; - imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; - imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - imageMemoryBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - imageMemoryBarrier.image = image; - imageMemoryBarrier.subresourceRange = subresourceRange; - vkCmdPipelineBarrier(blitCmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier); - } + imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; + imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; + imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + imageMemoryBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + imageMemoryBarrier.image = image; + imageMemoryBarrier.subresourceRange = subresourceRange; + vkCmdPipelineBarrier(blitCmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier); if (deleteBuffer) { delete[] buffer; @@ -394,8 +387,8 @@ void vkglTF::Texture::fromglTfImage(tinygltf::Image &gltfimage, std::string path device->flushCommandBuffer(copyCmd, copyQueue); this->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; - vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr); + vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); ktxTexture_Destroy(ktxTexture); } @@ -699,8 +692,8 @@ void vkglTF::Model::createEmptyTexture(VkQueue transferQueue) emptyTexture.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; // Clean up staging resources - vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr); + vkFreeMemory(device->logicalDevice, stagingMemory, nullptr); VkSamplerCreateInfo samplerCreateInfo = vks::initializers::samplerCreateInfo(); samplerCreateInfo.magFilter = VK_FILTER_LINEAR; diff --git a/base/VulkanglTFModel.h b/base/VulkanglTFModel.h index 26a0a123..dfcbfad7 100644 --- a/base/VulkanglTFModel.h +++ b/base/VulkanglTFModel.h @@ -1,7 +1,7 @@ /* * Vulkan glTF model and texture loading class based on tinyglTF (https://github.com/syoyo/tinygltf) * -* Copyright (C) 2018 by Sascha Willems - www.saschawillems.de +* Copyright (C) 2018-2023 by Sascha Willems - www.saschawillems.de * * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) */