Shadowmappingomni: Fix shadowCubeMap layout transitions and layout in descriptor set. Fixes #360
This commit is contained in:
parent
23dc4f4603
commit
b20147f1f4
1 changed files with 24 additions and 23 deletions
|
|
@ -447,6 +447,21 @@ public:
|
||||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||||
|
|
||||||
|
VkImageSubresourceRange cubeFaceSubresourceRange = {};
|
||||||
|
cubeFaceSubresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||||
|
cubeFaceSubresourceRange.baseMipLevel = 0;
|
||||||
|
cubeFaceSubresourceRange.levelCount = 1;
|
||||||
|
cubeFaceSubresourceRange.baseArrayLayer = faceIndex;
|
||||||
|
cubeFaceSubresourceRange.layerCount = 1;
|
||||||
|
|
||||||
|
// Change image layout of one cubemap face to transfer destination
|
||||||
|
vks::tools::setImageLayout(
|
||||||
|
offscreenPass.commandBuffer,
|
||||||
|
shadowCubeMap.image,
|
||||||
|
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||||
|
cubeFaceSubresourceRange);
|
||||||
|
|
||||||
// Copy region for transfer from framebuffer to cube face
|
// Copy region for transfer from framebuffer to cube face
|
||||||
VkImageCopy copyRegion = {};
|
VkImageCopy copyRegion = {};
|
||||||
|
|
||||||
|
|
@ -483,6 +498,14 @@ public:
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||||
|
|
||||||
|
// Change image layout of copied face to shader read
|
||||||
|
vks::tools::setImageLayout(
|
||||||
|
offscreenPass.commandBuffer,
|
||||||
|
shadowCubeMap.image,
|
||||||
|
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||||
|
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||||
|
cubeFaceSubresourceRange);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Command buffer for rendering and copying all cube map faces
|
// Command buffer for rendering and copying all cube map faces
|
||||||
|
|
@ -509,33 +532,11 @@ public:
|
||||||
VkRect2D scissor = vks::initializers::rect2D(offscreenPass.width, offscreenPass.height, 0, 0);
|
VkRect2D scissor = vks::initializers::rect2D(offscreenPass.width, offscreenPass.height, 0, 0);
|
||||||
vkCmdSetScissor(offscreenPass.commandBuffer, 0, 1, &scissor);
|
vkCmdSetScissor(offscreenPass.commandBuffer, 0, 1, &scissor);
|
||||||
|
|
||||||
VkImageSubresourceRange subresourceRange = {};
|
|
||||||
subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
|
||||||
subresourceRange.baseMipLevel = 0;
|
|
||||||
subresourceRange.levelCount = 1;
|
|
||||||
subresourceRange.layerCount = 6;
|
|
||||||
|
|
||||||
// Change image layout for all cubemap faces to transfer destination
|
|
||||||
vks::tools::setImageLayout(
|
|
||||||
offscreenPass.commandBuffer,
|
|
||||||
shadowCubeMap.image,
|
|
||||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
|
||||||
subresourceRange);
|
|
||||||
|
|
||||||
for (uint32_t face = 0; face < 6; ++face)
|
for (uint32_t face = 0; face < 6; ++face)
|
||||||
{
|
{
|
||||||
updateCubeFace(face);
|
updateCubeFace(face);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change image layout for all cubemap faces to shader read after they have been copied
|
|
||||||
vks::tools::setImageLayout(
|
|
||||||
offscreenPass.commandBuffer,
|
|
||||||
shadowCubeMap.image,
|
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
|
||||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
|
||||||
subresourceRange);
|
|
||||||
|
|
||||||
VK_CHECK_RESULT(vkEndCommandBuffer(offscreenPass.commandBuffer));
|
VK_CHECK_RESULT(vkEndCommandBuffer(offscreenPass.commandBuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -748,7 +749,7 @@ public:
|
||||||
vks::initializers::descriptorImageInfo(
|
vks::initializers::descriptorImageInfo(
|
||||||
shadowCubeMap.sampler,
|
shadowCubeMap.sampler,
|
||||||
shadowCubeMap.view,
|
shadowCubeMap.view,
|
||||||
VK_IMAGE_LAYOUT_GENERAL);
|
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||||
|
|
||||||
std::vector<VkWriteDescriptorSet> sceneDescriptorSets =
|
std::vector<VkWriteDescriptorSet> sceneDescriptorSets =
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue