Merge pull request #289 from Ekzuzy/master
Fixed problems with image layouts and layout transitions.
This commit is contained in:
commit
27f45cb367
5 changed files with 16 additions and 30 deletions
|
|
@ -28,7 +28,6 @@ namespace vks
|
|||
VkFormat format;
|
||||
VkImageSubresourceRange subresourceRange;
|
||||
VkAttachmentDescription description;
|
||||
VkImageLayout initialLayout;
|
||||
|
||||
/**
|
||||
* @brief Returns true if the attachment has a depth component
|
||||
|
|
@ -139,7 +138,6 @@ namespace vks
|
|||
attachment.format = createinfo.format;
|
||||
|
||||
VkImageAspectFlags aspectMask = VK_FLAGS_NONE;
|
||||
VkImageLayout imageLayout;
|
||||
|
||||
// Select aspect mask and layout depending on usage
|
||||
|
||||
|
|
@ -147,8 +145,6 @@ namespace vks
|
|||
if (createinfo.usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
|
||||
{
|
||||
aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
attachment.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
imageLayout = (createinfo.usage & VK_IMAGE_USAGE_SAMPLED_BIT) ? VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
}
|
||||
|
||||
// Depth (and/or stencil) attachment
|
||||
|
|
@ -162,8 +158,6 @@ namespace vks
|
|||
{
|
||||
aspectMask = aspectMask | VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||
}
|
||||
attachment.initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
imageLayout = (createinfo.usage & VK_IMAGE_USAGE_SAMPLED_BIT) ? VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
}
|
||||
|
||||
assert(aspectMask > 0);
|
||||
|
|
@ -218,11 +212,11 @@ namespace vks
|
|||
// If not, final layout depends on attachment type
|
||||
if (attachment.hasDepth() || attachment.hasStencil())
|
||||
{
|
||||
attachment.description.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
attachment.description.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
attachment.description.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
attachment.description.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
|
||||
attachments.push_back(attachment);
|
||||
|
|
|
|||
|
|
@ -519,6 +519,8 @@ namespace vks
|
|||
pipelineCreateInfo.layout = layout;
|
||||
pipelineCreateInfo.renderPass = renderPass;
|
||||
pipelineCreateInfo.flags = flags;
|
||||
pipelineCreateInfo.basePipelineIndex = -1;
|
||||
pipelineCreateInfo.basePipelineHandle = VK_NULL_HANDLE;
|
||||
return pipelineCreateInfo;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -720,19 +720,19 @@ public:
|
|||
vks::initializers::descriptorImageInfo(
|
||||
colorSampler,
|
||||
offScreenFrameBuf.position.view,
|
||||
VK_IMAGE_LAYOUT_GENERAL);
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
|
||||
VkDescriptorImageInfo texDescriptorNormal =
|
||||
vks::initializers::descriptorImageInfo(
|
||||
colorSampler,
|
||||
offScreenFrameBuf.normal.view,
|
||||
VK_IMAGE_LAYOUT_GENERAL);
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
|
||||
VkDescriptorImageInfo texDescriptorAlbedo =
|
||||
vks::initializers::descriptorImageInfo(
|
||||
colorSampler,
|
||||
offScreenFrameBuf.albedo.view,
|
||||
VK_IMAGE_LAYOUT_GENERAL);
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
|
||||
writeDescriptorSets = {
|
||||
// Binding 0 : Vertex shader uniform buffer
|
||||
|
|
|
|||
|
|
@ -260,16 +260,6 @@ public:
|
|||
|
||||
// Create default renderpass for the framebuffer
|
||||
VK_CHECK_RESULT(frameBuffers.shadow->createRenderPass());
|
||||
|
||||
VkCommandBuffer cmdBuf = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
vks::tools::setImageLayout(
|
||||
cmdBuf,
|
||||
frameBuffers.shadow->attachments[0].image,
|
||||
VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||
frameBuffers.shadow->attachments[0].subresourceRange);
|
||||
vulkanDevice->flushCommandBuffer(cmdBuf, queue);
|
||||
}
|
||||
|
||||
// Prepare the framebuffer for offscreen rendering with multiple attachments used as render targets inside the fragment shaders
|
||||
|
|
@ -710,7 +700,7 @@ public:
|
|||
vks::initializers::descriptorImageInfo(
|
||||
frameBuffers.shadow->sampler,
|
||||
frameBuffers.shadow->attachments[0].view,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL);
|
||||
|
||||
writeDescriptorSets = {
|
||||
// Binding 0: Vertex shader uniform buffer
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ public:
|
|||
attachmentDescs[i].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
attachmentDescs[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
attachmentDescs[i].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
attachmentDescs[i].finalLayout = (i == 3) ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
attachmentDescs[i].finalLayout = (i == 3) ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
|
||||
// Formats
|
||||
|
|
@ -799,8 +799,8 @@ public:
|
|||
descriptorAllocInfo.pSetLayouts = &descriptorSetLayouts.ssao;
|
||||
VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorAllocInfo, &descriptorSets.ssao));
|
||||
imageDescriptors = {
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.position.view, VK_IMAGE_LAYOUT_GENERAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.normal.view, VK_IMAGE_LAYOUT_GENERAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.position.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.normal.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
|
||||
};
|
||||
writeDescriptorSets = {
|
||||
vks::initializers::writeDescriptorSet(descriptorSets.ssao, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 0, &imageDescriptors[0]), // FS Position+Depth
|
||||
|
|
@ -846,11 +846,11 @@ public:
|
|||
descriptorAllocInfo.pSetLayouts = &descriptorSetLayouts.composition;
|
||||
VK_CHECK_RESULT(vkAllocateDescriptorSets(device, &descriptorAllocInfo, &descriptorSets.composition));
|
||||
imageDescriptors = {
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.position.view, VK_IMAGE_LAYOUT_GENERAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.normal.view, VK_IMAGE_LAYOUT_GENERAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.albedo.view, VK_IMAGE_LAYOUT_GENERAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssao.color.view, VK_IMAGE_LAYOUT_GENERAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssaoBlur.color.view, VK_IMAGE_LAYOUT_GENERAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.position.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.normal.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.offscreen.albedo.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssao.color.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
|
||||
vks::initializers::descriptorImageInfo(colorSampler, frameBuffers.ssaoBlur.color.view, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL),
|
||||
};
|
||||
writeDescriptorSets = {
|
||||
vks::initializers::writeDescriptorSet(descriptorSets.composition, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 0, &imageDescriptors[0]), // FS Sampler Position+Depth
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue