From 20668189f1fa6aaf05ca2dbf8785468888dc10d4 Mon Sep 17 00:00:00 2001 From: chuggafan Date: Thu, 21 Sep 2017 17:30:57 -0400 Subject: [PATCH] Adds specialization constant to computeheadless --- computeheadless/computeheadless.cpp | 11 +++++++++++ data/shaders/computeheadless/headless.comp | 3 +-- .../shaders/computeheadless/headless.comp.spv | Bin 1700 -> 1716 bytes 3 files changed, 12 insertions(+), 2 deletions(-) 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 8f29aa21eec30a51c7064f8f1c731493e36a1ef1..c14ac3884b7a8f4d0fd7bde09d7c8ece55322cc4 100644 GIT binary patch delta 29 jcmZ3&yM=c{4kM=-0|Nsi5HoB}Wz=V6G}=6siJt`kUbzLS delta 19 acmdnOyM%W`4&&w;Mh!+r?afP>_*noz$OVD`