Fixed image layout transitions and initial layouts and command buffer submissions for offscreen examples
This commit is contained in:
parent
01f0a1a574
commit
72e6cd8ee5
5 changed files with 77 additions and 46 deletions
|
|
@ -200,7 +200,7 @@ public:
|
|||
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
// Texture will be sampled in a shader and is also the blit destination
|
||||
imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
imageCreateInfo.flags = 0;
|
||||
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED;
|
||||
|
||||
VkMemoryAllocateInfo memAllocInfo = vkTools::initializers::memoryAllocateInfo();
|
||||
VkMemoryRequirements memReqs;
|
||||
|
|
@ -218,12 +218,12 @@ public:
|
|||
// Image memory barrier
|
||||
// Set initial layout for the offscreen texture transfer destination
|
||||
// Will be transformed while updating the texture
|
||||
offScreenFrameBuf.textureTarget.imageLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
|
||||
offScreenFrameBuf.textureTarget.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
vkTools::setImageLayout(
|
||||
setupCmdBuffer,
|
||||
offScreenFrameBuf.textureTarget.image,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_PREINITIALIZED,
|
||||
offScreenFrameBuf.textureTarget.imageLayout);
|
||||
|
||||
// Create sampler
|
||||
|
|
@ -264,6 +264,7 @@ public:
|
|||
// blitted to our render target
|
||||
void prepareOffscreenFramebuffer()
|
||||
{
|
||||
|
||||
createSetupCommandBuffer();
|
||||
|
||||
offScreenFrameBuf.width = FB_DIM;
|
||||
|
|
@ -293,6 +294,7 @@ public:
|
|||
image.flags = 0;
|
||||
|
||||
VkMemoryAllocateInfo memAlloc = vkTools::initializers::memoryAllocateInfo();
|
||||
VkMemoryRequirements memReqs;
|
||||
|
||||
VkImageViewCreateInfo colorImageView = vkTools::initializers::imageViewCreateInfo();
|
||||
colorImageView.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
|
|
@ -305,8 +307,6 @@ public:
|
|||
colorImageView.subresourceRange.baseArrayLayer = 0;
|
||||
colorImageView.subresourceRange.layerCount = 1;
|
||||
|
||||
VkMemoryRequirements memReqs;
|
||||
|
||||
err = vkCreateImage(device, &image, nullptr, &offScreenFrameBuf.color.image);
|
||||
assert(!err);
|
||||
vkGetImageMemoryRequirements(device, offScreenFrameBuf.color.image, &memReqs);
|
||||
|
|
@ -317,11 +317,12 @@ public:
|
|||
|
||||
err = vkBindImageMemory(device, offScreenFrameBuf.color.image, offScreenFrameBuf.color.mem, 0);
|
||||
assert(!err);
|
||||
|
||||
vkTools::setImageLayout(
|
||||
setupCmdBuffer,
|
||||
offScreenFrameBuf.color.image,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
setupCmdBuffer,
|
||||
offScreenFrameBuf.color.image,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
||||
|
||||
colorImageView.image = offScreenFrameBuf.color.image;
|
||||
|
|
@ -353,25 +354,25 @@ public:
|
|||
|
||||
err = vkBindImageMemory(device, offScreenFrameBuf.depth.image, offScreenFrameBuf.depth.mem, 0);
|
||||
assert(!err);
|
||||
createSetupCommandBuffer();
|
||||
|
||||
vkTools::setImageLayout(
|
||||
setupCmdBuffer,
|
||||
offScreenFrameBuf.depth.image,
|
||||
VK_IMAGE_ASPECT_DEPTH_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
setupCmdBuffer,
|
||||
offScreenFrameBuf.depth.image,
|
||||
VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
||||
|
||||
depthStencilView.image = offScreenFrameBuf.depth.image;
|
||||
err = vkCreateImageView(device, &depthStencilView, nullptr, &offScreenFrameBuf.depth.view);
|
||||
assert(!err);
|
||||
|
||||
|
||||
flushSetupCommandBuffer();
|
||||
|
||||
VkImageView attachments[2];
|
||||
attachments[0] = offScreenFrameBuf.color.view;
|
||||
attachments[1] = offScreenFrameBuf.depth.view;
|
||||
|
||||
VkFramebufferCreateInfo fbufCreateInfo = {};
|
||||
fbufCreateInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
fbufCreateInfo.pNext = NULL;
|
||||
VkFramebufferCreateInfo fbufCreateInfo = vkTools::initializers::framebufferCreateInfo();
|
||||
fbufCreateInfo.renderPass = renderPass;
|
||||
fbufCreateInfo.attachmentCount = 2;
|
||||
fbufCreateInfo.pAttachments = attachments;
|
||||
|
|
@ -381,8 +382,6 @@ public:
|
|||
|
||||
err = vkCreateFramebuffer(device, &fbufCreateInfo, nullptr, &offScreenFrameBuf.frameBuffer);
|
||||
assert(!err);
|
||||
|
||||
flushSetupCommandBuffer();
|
||||
}
|
||||
|
||||
void createOffscreenCommandBuffer()
|
||||
|
|
@ -519,7 +518,6 @@ public:
|
|||
|
||||
err = vkEndCommandBuffer(offScreenCmdBuffer);
|
||||
assert(!err);
|
||||
|
||||
}
|
||||
|
||||
void buildCommandBuffers()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue