Set SSAO shader constants via specialization

This commit is contained in:
saschawillems 2016-11-01 15:39:54 +01:00
parent 1713a968d4
commit 3983cbd732
3 changed files with 31 additions and 13 deletions

View file

@ -25,6 +25,7 @@
#define ENABLE_VALIDATION false
#define SSAO_KERNEL_SIZE 32
#define SSAO_RADIUS 0.5f
#if defined(__ANDROID__)
#define SSAO_NOISE_DIM 8
@ -948,9 +949,22 @@ public:
// SSAO Pass
shaderStages[0] = loadShader(getAssetPath() + "shaders/ssao/fullscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT);
shaderStages[1] = loadShader(getAssetPath() + "shaders/ssao/ssao.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT);
pipelineCreateInfo.renderPass = frameBuffers.ssao.renderPass;
pipelineCreateInfo.layout = pipelineLayouts.ssao;
VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.ssao));
{
// Set constant parameters via specialization constants
std::array<VkSpecializationMapEntry, 2> specializationMapEntries;
specializationMapEntries[0] = vkTools::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); // SSAO Kernel size
specializationMapEntries[1] = vkTools::initializers::specializationMapEntry(1, sizeof(uint32_t), sizeof(float)); // SSAO radius
struct {
uint32_t kernelSize = SSAO_KERNEL_SIZE;
float radius = SSAO_RADIUS;
} specializationData;
VkSpecializationInfo specializationInfo = vkTools::initializers::specializationInfo(2, specializationMapEntries.data(), sizeof(specializationData), &specializationData);
shaderStages[1].pSpecializationInfo = &specializationInfo;
pipelineCreateInfo.renderPass = frameBuffers.ssao.renderPass;
pipelineCreateInfo.layout = pipelineLayouts.ssao;
VK_CHECK_RESULT(vkCreateGraphicsPipelines(device, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipelines.ssao));
}
// SSAO blur pass
shaderStages[0] = loadShader(getAssetPath() + "shaders/ssao/fullscreen.vert.spv", VK_SHADER_STAGE_VERTEX_BIT);