From bfd0a2e0b427b673ff8d94c56ef41391a917f42f Mon Sep 17 00:00:00 2001 From: saschawillems Date: Sat, 7 Jan 2017 20:40:35 +0100 Subject: [PATCH] Generate quad for final composition pass in vertex shader --- deferred/deferred.cpp | 29 ++++++++++++++++++----------- deferred/deferred.vcxproj | 8 ++++++++ deferred/deferred.vcxproj.filters | 23 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/deferred/deferred.cpp b/deferred/deferred.cpp index 948faf53..5d762c06 100644 --- a/deferred/deferred.cpp +++ b/deferred/deferred.cpp @@ -536,6 +536,8 @@ public: // Move viewport to display final composition in lower right corner viewport.x = viewport.width * 0.5f; viewport.y = viewport.height * 0.5f; + viewport.width = viewport.width * 0.5f; + viewport.height = viewport.height * 0.5f; vkCmdSetViewport(drawCmdBuffers[i], 0, 1, &viewport); } @@ -593,12 +595,13 @@ public: } } - createBuffer( + VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, vertexBuffer.size() * sizeof(Vertex), - vertexBuffer.data(), &meshes.quad.vertices.buf, - &meshes.quad.vertices.mem); + &meshes.quad.vertices.mem, + vertexBuffer.data())); // Setup indices std::vector indexBuffer = { 0,1,2, 2,3,0 }; @@ -612,12 +615,13 @@ public: } meshes.quad.indexCount = static_cast(indexBuffer.size()); - createBuffer( + VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_INDEX_BUFFER_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, indexBuffer.size() * sizeof(uint32_t), - indexBuffer.data(), &meshes.quad.indices.buf, - &meshes.quad.indices.mem); + &meshes.quad.indices.mem, + indexBuffer.data())); } void setupVertexDescriptions() @@ -911,19 +915,14 @@ public: static_cast(dynamicStateEnables.size()), 0); - // Final fullscreen pass pipeline std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/deferred/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/deferred/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); - VkGraphicsPipelineCreateInfo pipelineCreateInfo = vkTools::initializers::pipelineCreateInfo( pipelineLayouts.deferred, renderPass, 0); - pipelineCreateInfo.pVertexInputState = &vertices.inputState; pipelineCreateInfo.pInputAssemblyState = &inputAssemblyState; pipelineCreateInfo.pRasterizationState = &rasterizationState; pipelineCreateInfo.pColorBlendState = &colorBlendState; @@ -934,9 +933,17 @@ public: pipelineCreateInfo.stageCount = static_cast(shaderStages.size()); pipelineCreateInfo.pStages = shaderStages.data(); + // Final fullscreen composition pass pipeline + shaderStages[0] = loadShader(getAssetPath() + "shaders/deferred/deferred.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getAssetPath() + "shaders/deferred/deferred.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + // Empty vertex input state, quads are generated by the vertex shader + VkPipelineVertexInputStateCreateInfo emptyInputState = vkTools::initializers::pipelineVertexInputStateCreateInfo(); + pipelineCreateInfo.pVertexInputState = &emptyInputState; + pipelineCreateInfo.layout = pipelineLayouts.deferred; VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.deferred)); // Debug display pipeline + pipelineCreateInfo.pVertexInputState = &vertices.inputState; shaderStages[0] = loadShader(getAssetPath() + "shaders/deferred/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); shaderStages[1] = loadShader(getAssetPath() + "shaders/deferred/debug.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.debug)); diff --git a/deferred/deferred.vcxproj b/deferred/deferred.vcxproj index 8585db1c..e53071cf 100644 --- a/deferred/deferred.vcxproj +++ b/deferred/deferred.vcxproj @@ -89,6 +89,14 @@ + + + + + + + + diff --git a/deferred/deferred.vcxproj.filters b/deferred/deferred.vcxproj.filters index ae2b36da..635a4ec5 100644 --- a/deferred/deferred.vcxproj.filters +++ b/deferred/deferred.vcxproj.filters @@ -13,6 +13,9 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {ebe308dc-b904-4532-ac58-da84d73e2cd7} + @@ -39,4 +42,24 @@ Header Files + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + \ No newline at end of file