Browse Source

Move Ssao to the new format

Panagiotis Christopoulos Charitos 5 years ago
parent
commit
824231b7e2
5 changed files with 25 additions and 28 deletions
  1. 0 0
      shaders/Ssao.ankiprog
  2. 7 7
      shaders/Ssao.glsl
  3. 0 0
      shaders/SsaoCompute.ankiprog
  4. 16 19
      src/anki/renderer/Ssao.cpp
  5. 2 2
      src/anki/renderer/Ssao.h

+ 0 - 0
shaders/Ssao.glslp → shaders/Ssao.ankiprog


+ 7 - 7
shaders/Ssao.glsl

@@ -8,13 +8,12 @@
 #pragma anki mutator USE_NORMAL 0 1
 #pragma anki mutator SOFT_BLUR 0 1
 
-#pragma anki input const U32 NOISE_MAP_SIZE
-#pragma anki input const UVec2 FB_SIZE
-#pragma anki input const F32 RADIUS
-#pragma anki input const F32 BIAS
-#pragma anki input const F32 STRENGTH
-#pragma anki input const U32 SAMPLE_COUNT
-#pragma anki input const UVec2 WORKGROUP_SIZE
+ANKI_SPECIALIZATION_CONSTANT_U32(NOISE_MAP_SIZE, 0, 1);
+ANKI_SPECIALIZATION_CONSTANT_UVEC2(FB_SIZE, 1, UVec2(1));
+ANKI_SPECIALIZATION_CONSTANT_F32(RADIUS, 3, 0.0);
+ANKI_SPECIALIZATION_CONSTANT_F32(BIAS, 4, 0.0);
+ANKI_SPECIALIZATION_CONSTANT_F32(STRENGTH, 5, 0.0);
+ANKI_SPECIALIZATION_CONSTANT_U32(SAMPLE_COUNT, 6, 1);
 
 #pragma once
 
@@ -28,6 +27,7 @@
 #	define USE_COMPUTE 0
 #else
 #	define USE_COMPUTE 1
+const UVec2 WORKGROUP_SIZE = UVec2(16, 16);
 #endif
 
 // Do a compute soft blur

+ 0 - 0
shaders/SsaoCompute.glslp → shaders/SsaoCompute.ankiprog


+ 16 - 19
src/anki/renderer/Ssao.cpp

@@ -26,26 +26,26 @@ Error Ssao::initMain(const ConfigSet& config)
 	// Shader
 	if(m_useCompute)
 	{
-		ANKI_CHECK(getResourceManager().loadResource("shaders/SsaoCompute.glslp", m_main.m_prog));
+		ANKI_CHECK(getResourceManager().loadResource("shaders/SsaoCompute.ankiprog", m_main.m_prog));
 	}
 	else
 	{
-		ANKI_CHECK(getResourceManager().loadResource("shaders/Ssao.glslp", m_main.m_prog));
+		ANKI_CHECK(getResourceManager().loadResource("shaders/Ssao.ankiprog", m_main.m_prog));
 	}
 
-	ShaderProgramResourceMutationInitList<2> mutators(m_main.m_prog);
-	mutators.add("USE_NORMAL", (m_useNormal) ? 1u : 0u).add("SOFT_BLUR", (m_useSoftBlur) ? 1u : 0u);
-
-	ShaderProgramResourceConstantValueInitList<7> consts(m_main.m_prog);
-	consts.add("NOISE_MAP_SIZE", U32(m_main.m_noiseTex->getWidth()))
-		.add("FB_SIZE", UVec2(m_width, m_height))
-		.add("RADIUS", 2.5f)
-		.add("BIAS", 0.0f)
-		.add("STRENGTH", 2.5f)
-		.add("SAMPLE_COUNT", 8u)
-		.add("WORKGROUP_SIZE", UVec2(m_workgroupSize[0], m_workgroupSize[1]));
-	const ShaderProgramResourceVariant* variant;
-	m_main.m_prog->getOrCreateVariant(mutators.get(), consts.get(), variant);
+	ShaderProgramResourceVariantInitInfo2 variantInitInfo(m_main.m_prog);
+	variantInitInfo.addMutation("USE_NORMAL", (m_useNormal) ? 1u : 0u);
+	variantInitInfo.addMutation("SOFT_BLUR", (m_useSoftBlur) ? 1u : 0u);
+	variantInitInfo.addConstant("NOISE_MAP_SIZE", U32(m_main.m_noiseTex->getWidth()));
+	variantInitInfo.addConstant("FB_SIZE", UVec2(m_width, m_height));
+	variantInitInfo.addConstant("RADIUS", 2.5f);
+	variantInitInfo.addConstant("BIAS", 0.0f);
+	variantInitInfo.addConstant("STRENGTH", 2.5f);
+	variantInitInfo.addConstant("SAMPLE_COUNT", 8u);
+	const ShaderProgramResourceVariant2* variant;
+	m_main.m_prog->getOrCreateVariant(variantInitInfo, variant);
+	m_main.m_workgroupSize[0] = variant->getWorkgroupSizes()[0];
+	m_main.m_workgroupSize[1] = variant->getWorkgroupSizes()[1];
 	m_main.m_grProg = variant->getProgram();
 
 	return Error::NONE;
@@ -159,10 +159,7 @@ void Ssao::runMain(const RenderingContext& ctx, RenderPassWorkContext& rgraphCtx
 	if(m_useCompute)
 	{
 		rgraphCtx.bindImage(0, 5, m_runCtx.m_rts[0], TextureSubresourceInfo());
-
-		const U32 sizeX = (m_width + m_workgroupSize[0] - 1) / m_workgroupSize[0];
-		const U32 sizeY = (m_height + m_workgroupSize[1] - 1) / m_workgroupSize[1];
-		cmdb->dispatchCompute(sizeX, sizeY, 1);
+		dispatchPPCompute(cmdb, m_main.m_workgroupSize[0], m_main.m_workgroupSize[1], m_width, m_height);
 	}
 	else
 	{

+ 2 - 2
src/anki/renderer/Ssao.h

@@ -44,14 +44,14 @@ private:
 	static const Bool m_useSoftBlur = true;
 	static const Bool m_blurUseCompute = true;
 	U32 m_width, m_height;
-	Array<U32, 2> m_workgroupSize = {{16, 16}};
 
 	class
 	{
 	public:
-		ShaderProgramResourcePtr m_prog;
+		ShaderProgramResource2Ptr m_prog;
 		ShaderProgramPtr m_grProg;
 		TextureResourcePtr m_noiseTex;
+		Array<U32, 2> m_workgroupSize = {};
 	} m_main; ///< Main noisy pass.
 
 	class