diff --git a/computeheadless/computeheadless.cpp b/computeheadless/computeheadless.cpp index 32600dfc..27eab1e1 100644 --- a/computeheadless/computeheadless.cpp +++ b/computeheadless/computeheadless.cpp @@ -328,6 +328,15 @@ public: // Create pipeline VkComputePipelineCreateInfo computePipelineCreateInfo = vks::initializers::computePipelineCreateInfo(pipelineLayout, 0); + // Create specialization constant holding struct + struct SpecializationHolding + { + uint32_t BUFFER_ELEMENT_COUNT = BUFFER_ELEMENTS; + } specialization; + // create a specialization map entry + VkSpecializationMapEntry specializationMapEntry = vks::initializers::specializationMapEntry(0, 0, sizeof(uint32_t)); + VkSpecializationInfo specializationInfo = vks::initializers::specializationInfo(1, &specializationMapEntry, sizeof(SpecializationHolding), &specialization); + VkPipelineShaderStageCreateInfo shaderStage = {}; shaderStage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; shaderStage.stage = VK_SHADER_STAGE_COMPUTE_BIT; @@ -337,6 +346,8 @@ public: shaderStage.module = vks::tools::loadShader(ASSET_PATH "shaders/computeheadless/headless.comp.spv", device); #endif shaderStage.pName = "main"; + shaderStage.pSpecializationInfo = &specializationInfo; + assert(shaderStage.module != VK_NULL_HANDLE); computePipelineCreateInfo.stage = shaderStage; VK_CHECK_RESULT(vkCreateComputePipelines(device, pipelineCache, 1, &computePipelineCreateInfo, nullptr, &pipeline)); diff --git a/data/shaders/computeheadless/headless.comp b/data/shaders/computeheadless/headless.comp index 622ca4fe..08c368eb 100644 --- a/data/shaders/computeheadless/headless.comp +++ b/data/shaders/computeheadless/headless.comp @@ -6,8 +6,7 @@ layout(binding = 0) buffer Pos { layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in; -// todo: pass via specialization constant -#define BUFFER_ELEMENTS 32 +layout(constant_id = 0) const uint BUFFER_ELEMENTS = 32; uint fibonacci(uint n) { if(n <= 1){ diff --git a/data/shaders/computeheadless/headless.comp.spv b/data/shaders/computeheadless/headless.comp.spv index 8f29aa21..c14ac388 100644 Binary files a/data/shaders/computeheadless/headless.comp.spv and b/data/shaders/computeheadless/headless.comp.spv differ