Generate quad for final composition pass in vertex shader
This commit is contained in:
parent
89f82e328c
commit
bfd0a2e0b4
3 changed files with 49 additions and 11 deletions
|
|
@ -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));
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue