Sfoglia il codice sorgente

Move TemporalAAResolve to the new format

Panagiotis Christopoulos Charitos 5 anni fa
parent
commit
64ed6e2473

+ 4 - 4
shaders/TemporalAAResolve.glslp → shaders/TemporalAAResolve.ankiprog

@@ -8,16 +8,16 @@
 #pragma anki mutator TONEMAP_FIX 0 1
 #pragma anki mutator YCBCR 0 1
 
-#pragma anki input const F32 VARIANCE_CLIPPING_GAMMA
-#pragma anki input const F32 BLEND_FACTOR
-#pragma anki input const UVec2 FB_SIZE
-#pragma anki input const UVec2 WORKGROUP_SIZE
+ANKI_SPECIALIZATION_CONSTANT_F32(VARIANCE_CLIPPING_GAMMA, 0, 1.0);
+ANKI_SPECIALIZATION_CONSTANT_F32(BLEND_FACTOR, 1, 0.5);
+ANKI_SPECIALIZATION_CONSTANT_UVEC2(FB_SIZE, 2, UVec2(1));
 
 #pragma anki start comp
 #include <shaders/Functions.glsl>
 #include <shaders/Pack.glsl>
 #include <shaders/Tonemapping.glsl>
 
+const UVec2 WORKGROUP_SIZE = UVec2(16, 16);
 layout(local_size_x = WORKGROUP_SIZE.x, local_size_y = WORKGROUP_SIZE.y, local_size_z = 1) in;
 
 layout(set = 0, binding = 0) uniform sampler u_linearAnyClampSampler;

+ 15 - 12
src/anki/renderer/TemporalAA.cpp

@@ -36,22 +36,25 @@ Error TemporalAA::init(const ConfigSet& config)
 
 Error TemporalAA::initInternal(const ConfigSet& config)
 {
-	ANKI_CHECK(m_r->getResourceManager().loadResource("shaders/TemporalAAResolve.glslp", m_prog));
+	ANKI_CHECK(m_r->getResourceManager().loadResource("shaders/TemporalAAResolve.ankiprog", m_prog));
 
 	for(U32 i = 0; i < 2; ++i)
 	{
-		ShaderProgramResourceConstantValueInitList<4> consts(m_prog);
-		consts.add("VARIANCE_CLIPPING_GAMMA", 1.7f)
-			.add("BLEND_FACTOR", 1.0f / 16.0f)
-			.add("FB_SIZE", UVec2(m_r->getWidth(), m_r->getHeight()))
-			.add("WORKGROUP_SIZE", UVec2(m_workgroupSize[0], m_workgroupSize[1]));
-
-		ShaderProgramResourceMutationInitList<4> mutations(m_prog);
-		mutations.add("SHARPEN", i + 1).add("VARIANCE_CLIPPING", 1).add("TONEMAP_FIX", 1).add("YCBCR", 0);
-
-		const ShaderProgramResourceVariant* variant;
-		m_prog->getOrCreateVariant(mutations.get(), consts.get(), variant);
+		ShaderProgramResourceVariantInitInfo2 variantInitInfo(m_prog);
+		variantInitInfo.addConstant("VARIANCE_CLIPPING_GAMMA", 1.7f);
+		variantInitInfo.addConstant("BLEND_FACTOR", 1.0f / 16.0f);
+		variantInitInfo.addConstant("FB_SIZE", UVec2(m_r->getWidth(), m_r->getHeight()));
+		variantInitInfo.addMutation("SHARPEN", i + 1);
+		variantInitInfo.addMutation("VARIANCE_CLIPPING", 1);
+		variantInitInfo.addMutation("TONEMAP_FIX", 1);
+		variantInitInfo.addMutation("YCBCR", 0);
+
+		const ShaderProgramResourceVariant2* variant;
+		m_prog->getOrCreateVariant(variantInitInfo, variant);
 		m_grProgs[i] = variant->getProgram();
+
+		m_workgroupSize[0] = variant->getWorkgroupSizes()[0];
+		m_workgroupSize[1] = variant->getWorkgroupSizes()[1];
 	}
 
 	for(U i = 0; i < 2; ++i)

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

@@ -33,10 +33,10 @@ public:
 private:
 	Array<TexturePtr, 2> m_rtTextures;
 
-	ShaderProgramResourcePtr m_prog;
+	ShaderProgramResource2Ptr m_prog;
 	Array<ShaderProgramPtr, 2> m_grProgs;
 
-	Array<U32, 2> m_workgroupSize = {{16, 16}};
+	Array<U32, 2> m_workgroupSize = {};
 
 	class
 	{