Added initial image layout transitions for msaa tragets

This commit is contained in:
saschawillems 2016-03-29 21:35:41 +02:00
parent ae2ccd92d0
commit d19a4422ce

View file

@ -24,7 +24,7 @@
#define VERTEX_BUFFER_BIND_ID 0 #define VERTEX_BUFFER_BIND_ID 0
#define ENABLE_VALIDATION false #define ENABLE_VALIDATION false
#define SAMPLE_COUNT VK_SAMPLE_COUNT_8_BIT #define SAMPLE_COUNT VK_SAMPLE_COUNT_4_BIT
struct { struct {
struct { struct {
@ -85,7 +85,7 @@ public:
VulkanExample() : VulkanExampleBase(ENABLE_VALIDATION) VulkanExample() : VulkanExampleBase(ENABLE_VALIDATION)
{ {
zoom = -12.0f; zoom = -7.5f;
zoomSpeed = 2.5f; zoomSpeed = 2.5f;
rotation = { 0.0f, -90.0f, 0.0f }; rotation = { 0.0f, -90.0f, 0.0f };
title = "Vulkan Example - Multisampling"; title = "Vulkan Example - Multisampling";
@ -326,6 +326,30 @@ public:
void buildCommandBuffers() void buildCommandBuffers()
{ {
// Initial image layout transitions
// We need to transform the MSAA target layouts before using them
createSetupCommandBuffer();
// Tansform MSAA color target
vkTools::setImageLayout(
setupCmdBuffer,
multisampleTarget.color.image,
VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
// Tansform MSAA depth target
vkTools::setImageLayout(
setupCmdBuffer,
multisampleTarget.depth.image,
VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
flushSetupCommandBuffer();
VkCommandBufferBeginInfo cmdBufInfo = vkTools::initializers::commandBufferBeginInfo(); VkCommandBufferBeginInfo cmdBufInfo = vkTools::initializers::commandBufferBeginInfo();
VkClearValue clearValues[3]; VkClearValue clearValues[3];
@ -347,14 +371,6 @@ public:
vkTools::checkResult(vkBeginCommandBuffer(drawCmdBuffers[i], &cmdBufInfo)); vkTools::checkResult(vkBeginCommandBuffer(drawCmdBuffers[i], &cmdBufInfo));
// todo : don't transform on each command buffer
vkTools::setImageLayout(
drawCmdBuffers[i],
multisampleTarget.color.image,
VK_IMAGE_ASPECT_COLOR_BIT,
VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
vkCmdBeginRenderPass(drawCmdBuffers[i], &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); vkCmdBeginRenderPass(drawCmdBuffers[i], &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
VkViewport viewport = vkTools::initializers::viewport((float)width, (float)height, 0.0f, 1.0f); VkViewport viewport = vkTools::initializers::viewport((float)width, (float)height, 0.0f, 1.0f);