Ver Fonte

Move VolumetricFogAccumulation and VolumetricLightingAccumulation to the new format

Panagiotis Christopoulos Charitos há 5 anos atrás
pai
commit
32eeb8066e

+ 3 - 5
shaders/VolumetricFogAccumulation.glslp → shaders/VolumetricFogAccumulation.ankiprog

@@ -3,17 +3,15 @@
 // Code licensed under the BSD License.
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 // http://www.anki3d.org/LICENSE
 
 
-#pragma anki input const UVec2 WORKGROUP_SIZE
-#pragma anki input const UVec3 VOLUME_SIZE
-#pragma anki input const UVec3 CLUSTER_COUNT
-#pragma anki input const UVec3 FRACTION
-#pragma anki input const U32 FINAL_CLUSTER_Z
+ANKI_SPECIALIZATION_CONSTANT_UVEC3(VOLUME_SIZE, 0, UVec3(1));
+ANKI_SPECIALIZATION_CONSTANT_U32(FINAL_CLUSTER_Z, 9, 1);
 
 
 #pragma anki start comp
 #pragma anki start comp
 
 
 #include <shaders/glsl_cpp_common/ClusteredShading.h>
 #include <shaders/glsl_cpp_common/ClusteredShading.h>
 #include <shaders/Common.glsl>
 #include <shaders/Common.glsl>
 
 
+const UVec2 WORKGROUP_SIZE = UVec2(8, 8);
 layout(local_size_x = WORKGROUP_SIZE.x, local_size_y = WORKGROUP_SIZE.y, local_size_z = 1) in;
 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;
 layout(set = 0, binding = 0) uniform sampler u_linearAnyClampSampler;

+ 6 - 6
shaders/VolumetricLightingAccumulation.glslp → shaders/VolumetricLightingAccumulation.ankiprog

@@ -7,17 +7,17 @@
 
 
 #pragma anki mutator ENABLE_SHADOWS 0 1
 #pragma anki mutator ENABLE_SHADOWS 0 1
 
 
-#pragma anki input const UVec3 VOLUME_SIZE
-#pragma anki input const UVec3 CLUSTER_COUNT
-#pragma anki input const U32 FINAL_CLUSTER_Z
-#pragma anki input const UVec3 FRACTION
-#pragma anki input const UVec3 WORKGROUP_SIZE
-#pragma anki input const UVec3 NOISE_TEX_SIZE
+ANKI_SPECIALIZATION_CONSTANT_UVEC3(VOLUME_SIZE, 0, UVec3(1));
+ANKI_SPECIALIZATION_CONSTANT_UVEC3(CLUSTER_COUNT, 3, UVec3(1));
+ANKI_SPECIALIZATION_CONSTANT_UVEC3(FRACTION, 6, UVec3(1));
+ANKI_SPECIALIZATION_CONSTANT_UVEC3(NOISE_TEX_SIZE, 9, UVec3(1));
+ANKI_SPECIALIZATION_CONSTANT_U32(FINAL_CLUSTER_Z, 12, 1);
 
 
 #pragma anki start comp
 #pragma anki start comp
 
 
 const F32 PHASE_FUNCTION_ANISOTROPY = 0.3;
 const F32 PHASE_FUNCTION_ANISOTROPY = 0.3;
 
 
+const UVec3 WORKGROUP_SIZE = UVec3(8, 8, 8);
 layout(local_size_x = WORKGROUP_SIZE.x, local_size_y = WORKGROUP_SIZE.y, local_size_z = WORKGROUP_SIZE.z) in;
 layout(local_size_x = WORKGROUP_SIZE.x, local_size_y = WORKGROUP_SIZE.y, local_size_z = WORKGROUP_SIZE.z) in;
 
 
 layout(set = 0, binding = 0) uniform sampler u_linearAnyRepeatSampler;
 layout(set = 0, binding = 0) uniform sampler u_linearAnyRepeatSampler;

+ 8 - 9
src/anki/renderer/VolumetricFog.cpp

@@ -31,18 +31,17 @@ Error VolumetricFog::init(const ConfigSet& config)
 	ANKI_R_LOGI("Initializing volumetric fog. Size %ux%ux%u", m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]);
 	ANKI_R_LOGI("Initializing volumetric fog. Size %ux%ux%u", m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]);
 
 
 	// Shaders
 	// Shaders
-	ANKI_CHECK(getResourceManager().loadResource("shaders/VolumetricFogAccumulation.glslp", m_prog));
+	ANKI_CHECK(getResourceManager().loadResource("shaders/VolumetricFogAccumulation.ankiprog", m_prog));
 
 
-	ShaderProgramResourceConstantValueInitList<5> consts(m_prog);
-	consts.add("VOLUME_SIZE", UVec3(m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]))
-		.add("CLUSTER_COUNT", UVec3(m_r->getClusterCount()[0], m_r->getClusterCount()[1], m_r->getClusterCount()[2]))
-		.add("FINAL_CLUSTER_Z", m_finalClusterZ)
-		.add("FRACTION", UVec3(fractionXY, fractionXY, fractionZ))
-		.add("WORKGROUP_SIZE", UVec2(m_workgroupSize[0], m_workgroupSize[1]));
+	ShaderProgramResourceVariantInitInfo2 variantInitInfo(m_prog);
+	variantInitInfo.addConstant("VOLUME_SIZE", UVec3(m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]));
+	variantInitInfo.addConstant("FINAL_CLUSTER_Z", m_finalClusterZ);
 
 
-	const ShaderProgramResourceVariant* variant;
-	m_prog->getOrCreateVariant(consts.get(), variant);
+	const ShaderProgramResourceVariant2* variant;
+	m_prog->getOrCreateVariant(variantInitInfo, variant);
 	m_grProg = variant->getProgram();
 	m_grProg = variant->getProgram();
+	m_workgroupSize[0] = variant->getWorkgroupSizes()[0];
+	m_workgroupSize[1] = variant->getWorkgroupSizes()[1];
 
 
 	// RT descr
 	// RT descr
 	m_rtDescr =
 	m_rtDescr =

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

@@ -68,14 +68,14 @@ public:
 	}
 	}
 
 
 private:
 private:
-	ShaderProgramResourcePtr m_prog;
+	ShaderProgramResource2Ptr m_prog;
 	ShaderProgramPtr m_grProg;
 	ShaderProgramPtr m_grProg;
 
 
 	RenderTargetDescription m_rtDescr;
 	RenderTargetDescription m_rtDescr;
 
 
 	U32 m_finalClusterZ = 0;
 	U32 m_finalClusterZ = 0;
 
 
-	Array<U32, 2> m_workgroupSize = {{8, 8}};
+	Array<U32, 2> m_workgroupSize = {};
 	Array<U32, 3> m_volumeSize;
 	Array<U32, 3> m_volumeSize;
 
 
 	Vec3 m_fogDiffuseColor = Vec3(1.0f);
 	Vec3 m_fogDiffuseColor = Vec3(1.0f);

+ 15 - 15
src/anki/renderer/VolumetricLightingAccumulation.cpp

@@ -43,22 +43,22 @@ Error VolumetricLightingAccumulation::init(const ConfigSet& config)
 	ANKI_CHECK(getResourceManager().loadResource("engine_data/blue_noise_rgb8_16x16x16_3d.ankitex", m_noiseTex));
 	ANKI_CHECK(getResourceManager().loadResource("engine_data/blue_noise_rgb8_16x16x16_3d.ankitex", m_noiseTex));
 
 
 	// Shaders
 	// Shaders
-	ANKI_CHECK(getResourceManager().loadResource("shaders/VolumetricLightingAccumulation.glslp", m_prog));
-
-	ShaderProgramResourceMutationInitList<1> mutators(m_prog);
-	mutators.add("ENABLE_SHADOWS", 1);
-
-	ShaderProgramResourceConstantValueInitList<6> consts(m_prog);
-	consts.add("VOLUME_SIZE", UVec3(m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]))
-		.add("CLUSTER_COUNT", UVec3(m_r->getClusterCount()[0], m_r->getClusterCount()[1], m_r->getClusterCount()[2]))
-		.add("FINAL_CLUSTER_Z", U32(m_finalClusterZ))
-		.add("FRACTION", UVec3(fractionXY, fractionXY, fractionZ))
-		.add("WORKGROUP_SIZE", UVec3(m_workgroupSize[0], m_workgroupSize[1], m_workgroupSize[2]))
-		.add("NOISE_TEX_SIZE", UVec3(m_noiseTex->getWidth(), m_noiseTex->getHeight(), m_noiseTex->getDepth()));
-
-	const ShaderProgramResourceVariant* variant;
-	m_prog->getOrCreateVariant(mutators.get(), consts.get(), variant);
+	ANKI_CHECK(getResourceManager().loadResource("shaders/VolumetricLightingAccumulation.ankiprog", m_prog));
+
+	ShaderProgramResourceVariantInitInfo2 variantInitInfo(m_prog);
+	variantInitInfo.addMutation("ENABLE_SHADOWS", 1);
+	variantInitInfo.addConstant("VOLUME_SIZE", UVec3(m_volumeSize[0], m_volumeSize[1], m_volumeSize[2]));
+	variantInitInfo.addConstant(
+		"CLUSTER_COUNT", UVec3(m_r->getClusterCount()[0], m_r->getClusterCount()[1], m_r->getClusterCount()[2]));
+	variantInitInfo.addConstant("FINAL_CLUSTER_Z", U32(m_finalClusterZ));
+	variantInitInfo.addConstant("FRACTION", UVec3(fractionXY, fractionXY, fractionZ));
+	variantInitInfo.addConstant(
+		"NOISE_TEX_SIZE", UVec3(m_noiseTex->getWidth(), m_noiseTex->getHeight(), m_noiseTex->getDepth()));
+
+	const ShaderProgramResourceVariant2* variant;
+	m_prog->getOrCreateVariant(variantInitInfo, variant);
 	m_grProg = variant->getProgram();
 	m_grProg = variant->getProgram();
+	m_workgroupSize = variant->getWorkgroupSizes();
 
 
 	// Create RTs
 	// Create RTs
 	TextureInitInfo texinit = m_r->create2DRenderTargetInitInfo(m_volumeSize[0],
 	TextureInitInfo texinit = m_r->create2DRenderTargetInitInfo(m_volumeSize[0],

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

@@ -37,7 +37,7 @@ public:
 	}
 	}
 
 
 private:
 private:
-	ShaderProgramResourcePtr m_prog;
+	ShaderProgramResource2Ptr m_prog;
 	ShaderProgramPtr m_grProg;
 	ShaderProgramPtr m_grProg;
 
 
 	Array<TexturePtr, 2> m_rtTextures;
 	Array<TexturePtr, 2> m_rtTextures;
@@ -45,7 +45,7 @@ private:
 
 
 	U32 m_finalClusterZ = 0;
 	U32 m_finalClusterZ = 0;
 
 
-	Array<U32, 3> m_workgroupSize = {{8, 8, 8}};
+	Array<U32, 3> m_workgroupSize = {};
 	Array<U32, 3> m_volumeSize;
 	Array<U32, 3> m_volumeSize;
 
 
 	class
 	class