Set array layer count on image barrier subresource, set initial layout to preinitialized (#29)
This commit is contained in:
parent
be57715bd6
commit
5c7394837d
1 changed files with 27 additions and 14 deletions
|
|
@ -127,6 +127,7 @@ public:
|
|||
imageCreateInfo.tiling = VK_IMAGE_TILING_LINEAR;
|
||||
imageCreateInfo.usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
|
||||
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED;
|
||||
imageCreateInfo.flags = 0;
|
||||
|
||||
VkMemoryAllocateInfo memAllocInfo = vkTools::initializers::memoryAllocateInfo();
|
||||
|
|
@ -186,7 +187,7 @@ public:
|
|||
cmdBuffer,
|
||||
cubeFace[face].image,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_PREINITIALIZED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||
}
|
||||
|
||||
|
|
@ -213,12 +214,21 @@ public:
|
|||
|
||||
// Image barrier for optimal image (target)
|
||||
// Optimal image will be used as destination for the copy
|
||||
|
||||
// Set initial layout for all array layers of the optimal (target) tiled texture
|
||||
VkImageSubresourceRange subresourceRange = {};
|
||||
subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subresourceRange.baseMipLevel = 0;
|
||||
subresourceRange.levelCount = 1;
|
||||
subresourceRange.layerCount = 6;
|
||||
|
||||
vkTools::setImageLayout(
|
||||
cmdBuffer,
|
||||
cubeMap.image,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||
VK_IMAGE_LAYOUT_PREINITIALIZED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
subresourceRange);
|
||||
|
||||
// Copy cube map faces one by one
|
||||
for (uint32_t face = 0; face < 6; ++face)
|
||||
|
|
@ -245,20 +255,23 @@ public:
|
|||
// Put image copy into command buffer
|
||||
vkCmdCopyImage(
|
||||
cmdBuffer,
|
||||
cubeFace[face].image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||
cubeMap.image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
1, ©Region);
|
||||
|
||||
// Change texture image layout to shader read after the copy
|
||||
cubeMap.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
vkTools::setImageLayout(
|
||||
cmdBuffer,
|
||||
cubeMap.image,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
cubeFace[face].image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||
cubeMap.image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
cubeMap.imageLayout);
|
||||
1, ©Region);
|
||||
}
|
||||
|
||||
// Change texture image layout to shader read after all faces have been copied
|
||||
cubeMap.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
vkTools::setImageLayout(
|
||||
cmdBuffer,
|
||||
cubeMap.image,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
cubeMap.imageLayout,
|
||||
subresourceRange);
|
||||
|
||||
err = vkEndCommandBuffer(cmdBuffer);
|
||||
assert(!err);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue