Minor best practices related fixes
This commit is contained in:
parent
3532ea8696
commit
f685be3445
3 changed files with 35 additions and 42 deletions
|
|
@ -211,8 +211,8 @@ namespace vks
|
||||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||||
|
|
||||||
// Clean up staging resources
|
// Clean up staging resources
|
||||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
|
||||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||||
|
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -461,8 +461,8 @@ namespace vks
|
||||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||||
|
|
||||||
// Clean up staging resources
|
// Clean up staging resources
|
||||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
|
||||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||||
|
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||||
|
|
||||||
// Create sampler
|
// Create sampler
|
||||||
VkSamplerCreateInfo samplerCreateInfo = {};
|
VkSamplerCreateInfo samplerCreateInfo = {};
|
||||||
|
|
@ -672,8 +672,8 @@ namespace vks
|
||||||
|
|
||||||
// Clean up staging resources
|
// Clean up staging resources
|
||||||
ktxTexture_Destroy(ktxTexture);
|
ktxTexture_Destroy(ktxTexture);
|
||||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
|
||||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, 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
|
// Update descriptor image info member that can be used for setting up descriptor sets
|
||||||
updateDescriptor();
|
updateDescriptor();
|
||||||
|
|
@ -859,8 +859,8 @@ namespace vks
|
||||||
|
|
||||||
// Clean up staging resources
|
// Clean up staging resources
|
||||||
ktxTexture_Destroy(ktxTexture);
|
ktxTexture_Destroy(ktxTexture);
|
||||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
|
||||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, 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
|
// Update descriptor image info member that can be used for setting up descriptor sets
|
||||||
updateDescriptor();
|
updateDescriptor();
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
/*
|
/*
|
||||||
* Vulkan glTF model and texture loading class based on tinyglTF (https://github.com/syoyo/tinygltf)
|
* 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)
|
* 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.levelCount = 1;
|
||||||
subresourceRange.layerCount = 1;
|
subresourceRange.layerCount = 1;
|
||||||
|
|
||||||
{
|
VkImageMemoryBarrier imageMemoryBarrier{};
|
||||||
VkImageMemoryBarrier imageMemoryBarrier{};
|
|
||||||
imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
||||||
imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
|
imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
|
||||||
imageMemoryBarrier.srcAccessMask = 0;
|
imageMemoryBarrier.srcAccessMask = 0;
|
||||||
imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||||
imageMemoryBarrier.image = image;
|
imageMemoryBarrier.image = image;
|
||||||
imageMemoryBarrier.subresourceRange = subresourceRange;
|
imageMemoryBarrier.subresourceRange = subresourceRange;
|
||||||
vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier);
|
vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier);
|
||||||
}
|
|
||||||
|
|
||||||
VkBufferImageCopy bufferCopyRegion = {};
|
VkBufferImageCopy bufferCopyRegion = {};
|
||||||
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
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);
|
vkCmdCopyBufferToImage(copyCmd, stagingBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &bufferCopyRegion);
|
||||||
|
|
||||||
{
|
imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
||||||
VkImageMemoryBarrier imageMemoryBarrier{};
|
imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
|
||||||
imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
|
||||||
imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
|
imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||||
imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
|
imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
|
||||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
imageMemoryBarrier.image = image;
|
||||||
imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
|
imageMemoryBarrier.subresourceRange = subresourceRange;
|
||||||
imageMemoryBarrier.image = image;
|
vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier);
|
||||||
imageMemoryBarrier.subresourceRange = subresourceRange;
|
|
||||||
vkCmdPipelineBarrier(copyCmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier);
|
|
||||||
}
|
|
||||||
|
|
||||||
device->flushCommandBuffer(copyCmd, copyQueue, true);
|
device->flushCommandBuffer(copyCmd, copyQueue, true);
|
||||||
|
|
||||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
|
||||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, 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)
|
// 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);
|
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;
|
subresourceRange.levelCount = mipLevels;
|
||||||
imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
|
|
||||||
{
|
imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
||||||
VkImageMemoryBarrier imageMemoryBarrier{};
|
imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
|
||||||
imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
imageMemoryBarrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
|
imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
|
||||||
imageMemoryBarrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
imageMemoryBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
|
||||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
imageMemoryBarrier.image = image;
|
||||||
imageMemoryBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
|
imageMemoryBarrier.subresourceRange = subresourceRange;
|
||||||
imageMemoryBarrier.image = image;
|
vkCmdPipelineBarrier(blitCmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier);
|
||||||
imageMemoryBarrier.subresourceRange = subresourceRange;
|
|
||||||
vkCmdPipelineBarrier(blitCmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (deleteBuffer) {
|
if (deleteBuffer) {
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
|
|
@ -394,8 +387,8 @@ void vkglTF::Texture::fromglTfImage(tinygltf::Image &gltfimage, std::string path
|
||||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||||
this->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
this->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
|
|
||||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
|
||||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||||
|
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||||
|
|
||||||
ktxTexture_Destroy(ktxTexture);
|
ktxTexture_Destroy(ktxTexture);
|
||||||
}
|
}
|
||||||
|
|
@ -699,8 +692,8 @@ void vkglTF::Model::createEmptyTexture(VkQueue transferQueue)
|
||||||
emptyTexture.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
emptyTexture.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
|
|
||||||
// Clean up staging resources
|
// Clean up staging resources
|
||||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
|
||||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||||
|
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||||
|
|
||||||
VkSamplerCreateInfo samplerCreateInfo = vks::initializers::samplerCreateInfo();
|
VkSamplerCreateInfo samplerCreateInfo = vks::initializers::samplerCreateInfo();
|
||||||
samplerCreateInfo.magFilter = VK_FILTER_LINEAR;
|
samplerCreateInfo.magFilter = VK_FILTER_LINEAR;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Vulkan glTF model and texture loading class based on tinyglTF (https://github.com/syoyo/tinygltf)
|
* 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)
|
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue