Generate quad for final composition pass in vertex shader

This commit is contained in:
saschawillems 2017-01-07 20:40:35 +01:00
parent 89f82e328c
commit bfd0a2e0b4
3 changed files with 49 additions and 11 deletions

View file

@ -536,6 +536,8 @@ public:
// Move viewport to display final composition in lower right corner // Move viewport to display final composition in lower right corner
viewport.x = viewport.width * 0.5f; viewport.x = viewport.width * 0.5f;
viewport.y = viewport.height * 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); vkCmdSetViewport(drawCmdBuffers[i], 0, 1, &viewport);
} }
@ -593,12 +595,13 @@ public:
} }
} }
createBuffer( VK_CHECK_RESULT(vulkanDevice->createBuffer(
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
vertexBuffer.size() * sizeof(Vertex), vertexBuffer.size() * sizeof(Vertex),
vertexBuffer.data(),
&meshes.quad.vertices.buf, &meshes.quad.vertices.buf,
&meshes.quad.vertices.mem); &meshes.quad.vertices.mem,
vertexBuffer.data()));
// Setup indices // Setup indices
std::vector<uint32_t> indexBuffer = { 0,1,2, 2,3,0 }; std::vector<uint32_t> indexBuffer = { 0,1,2, 2,3,0 };
@ -612,12 +615,13 @@ public:
} }
meshes.quad.indexCount = static_cast<uint32_t>(indexBuffer.size()); meshes.quad.indexCount = static_cast<uint32_t>(indexBuffer.size());
createBuffer( VK_CHECK_RESULT(vulkanDevice->createBuffer(
VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
indexBuffer.size() * sizeof(uint32_t), indexBuffer.size() * sizeof(uint32_t),
indexBuffer.data(),
&meshes.quad.indices.buf, &meshes.quad.indices.buf,
&meshes.quad.indices.mem); &meshes.quad.indices.mem,
indexBuffer.data()));
} }
void setupVertexDescriptions() void setupVertexDescriptions()
@ -911,19 +915,14 @@ public:
static_cast<uint32_t>(dynamicStateEnables.size()), static_cast<uint32_t>(dynamicStateEnables.size()),
0); 0);
// Final fullscreen pass pipeline
std::array<VkPipelineShaderStageCreateInfo, 2> shaderStages; std::array<VkPipelineShaderStageCreateInfo, 2> 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 = VkGraphicsPipelineCreateInfo pipelineCreateInfo =
vkTools::initializers::pipelineCreateInfo( vkTools::initializers::pipelineCreateInfo(
pipelineLayouts.deferred, pipelineLayouts.deferred,
renderPass, renderPass,
0); 0);
pipelineCreateInfo.pVertexInputState = &vertices.inputState;
pipelineCreateInfo.pInputAssemblyState = &inputAssemblyState; pipelineCreateInfo.pInputAssemblyState = &inputAssemblyState;
pipelineCreateInfo.pRasterizationState = &rasterizationState; pipelineCreateInfo.pRasterizationState = &rasterizationState;
pipelineCreateInfo.pColorBlendState = &colorBlendState; pipelineCreateInfo.pColorBlendState = &colorBlendState;
@ -934,9 +933,17 @@ public:
pipelineCreateInfo.stageCount = static_cast<uint32_t>(shaderStages.size()); pipelineCreateInfo.stageCount = static_cast<uint32_t>(shaderStages.size());
pipelineCreateInfo.pStages = shaderStages.data(); 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)); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.deferred));
// Debug display pipeline // Debug display pipeline
pipelineCreateInfo.pVertexInputState = &vertices.inputState;
shaderStages[0] = loadShader(getAssetPath() + "shaders/deferred/debug.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); 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); 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)); VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.debug));

View file

@ -89,6 +89,14 @@
<ClInclude Include="..\base\vulkanexamplebase.h" /> <ClInclude Include="..\base\vulkanexamplebase.h" />
<ClInclude Include="..\base\vulkantools.h" /> <ClInclude Include="..\base\vulkantools.h" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="..\data\shaders\deferred\debug.frag" />
<None Include="..\data\shaders\deferred\debug.vert" />
<None Include="..\data\shaders\deferred\deferred.frag" />
<None Include="..\data\shaders\deferred\deferred.vert" />
<None Include="..\data\shaders\deferred\mrt.frag" />
<None Include="..\data\shaders\deferred\mrt.vert" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>

View file

@ -13,6 +13,9 @@
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter> </Filter>
<Filter Include="Shaders">
<UniqueIdentifier>{ebe308dc-b904-4532-ac58-da84d73e2cd7}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\base\vulkandebug.cpp"> <ClCompile Include="..\base\vulkandebug.cpp">
@ -39,4 +42,24 @@
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="..\data\shaders\deferred\debug.frag">
<Filter>Shaders</Filter>
</None>
<None Include="..\data\shaders\deferred\debug.vert">
<Filter>Shaders</Filter>
</None>
<None Include="..\data\shaders\deferred\deferred.frag">
<Filter>Shaders</Filter>
</None>
<None Include="..\data\shaders\deferred\deferred.vert">
<Filter>Shaders</Filter>
</None>
<None Include="..\data\shaders\deferred\mrt.frag">
<Filter>Shaders</Filter>
</None>
<None Include="..\data\shaders\deferred\mrt.vert">
<Filter>Shaders</Filter>
</None>
</ItemGroup>
</Project> </Project>