Browse Source

Remove a whole bunch of variants from the GBufferGeneric. Fix a bug in the hashing of program source

Panagiotis Christopoulos Charitos 5 years ago
parent
commit
a5577cd9b8

+ 1 - 10
shaders/GBufferGeneric.ankiprog

@@ -6,7 +6,7 @@
 #pragma anki mutator ANKI_INSTANCE_COUNT 1 2 4 8 16 32 64
 #pragma anki mutator ANKI_LOD 0 1 2
 #pragma anki mutator ANKI_VELOCITY 0 1
-#pragma anki mutator ANKI_PASS 0 1 2 3
+#pragma anki mutator ANKI_PASS 0 2 3
 #pragma anki mutator ANKI_BONES 0 1
 #pragma anki mutator DIFFUSE_TEX 0 1
 #pragma anki mutator SPECULAR_TEX 0 1
@@ -16,33 +16,24 @@
 #pragma anki mutator PARALLAX 0 1
 #pragma anki mutator EMISSIVE_TEX 0 1
 
-#pragma anki rewrite_mutation ANKI_PASS 1 to ANKI_PASS 0
-
-#pragma anki rewrite_mutation ANKI_PASS 1 DIFFUSE_TEX 1 to ANKI_PASS 1 DIFFUSE_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 2 DIFFUSE_TEX 1 to ANKI_PASS 2 DIFFUSE_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 DIFFUSE_TEX 1 to ANKI_PASS 2 DIFFUSE_TEX 0
 
-#pragma anki rewrite_mutation ANKI_PASS 1 SPECULAR_TEX 1 to ANKI_PASS 1 SPECULAR_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 2 SPECULAR_TEX 1 to ANKI_PASS 2 SPECULAR_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 SPECULAR_TEX 1 to ANKI_PASS 2 SPECULAR_TEX 0
 
-#pragma anki rewrite_mutation ANKI_PASS 1 NORMAL_TEX 1 to ANKI_PASS 1 NORMAL_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 2 NORMAL_TEX 1 to ANKI_PASS 2 NORMAL_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 NORMAL_TEX 1 to ANKI_PASS 2 NORMAL_TEX 0
 
-#pragma anki rewrite_mutation ANKI_PASS 1 ROUGHNESS_TEX 1 to ANKI_PASS 1 ROUGHNESS_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 2 ROUGHNESS_TEX 1 to ANKI_PASS 2 ROUGHNESS_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 ROUGHNESS_TEX 1 to ANKI_PASS 2 ROUGHNESS_TEX 0
 
-#pragma anki rewrite_mutation ANKI_PASS 1 METAL_TEX 1 to ANKI_PASS 1 METAL_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 2 METAL_TEX 1 to ANKI_PASS 2 METAL_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 METAL_TEX 1 to ANKI_PASS 2 METAL_TEX 0
 
-#pragma anki rewrite_mutation ANKI_PASS 1 EMISSIVE_TEX 1 to ANKI_PASS 1 EMISSIVE_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 2 EMISSIVE_TEX 1 to ANKI_PASS 2 EMISSIVE_TEX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 EMISSIVE_TEX 1 to ANKI_PASS 2 EMISSIVE_TEX 0
 
-#pragma anki rewrite_mutation ANKI_PASS 1 PARALLAX 1 to ANKI_PASS 1 PARALLAX 0
 #pragma anki rewrite_mutation ANKI_PASS 2 PARALLAX 1 to ANKI_PASS 2 PARALLAX 0
 #pragma anki rewrite_mutation ANKI_PASS 3 PARALLAX 1 to ANKI_PASS 2 PARALLAX 0
 

+ 23 - 4
src/anki/resource/MaterialResource2.cpp

@@ -274,19 +274,38 @@ Error MaterialResource2::parseMutators(XmlElement mutatorsEl)
 	}
 
 	m_builtinMutators[BuiltinMutatorId2::PASS] = m_prog->tryFindMutator(BUILTIN_MUTATOR_NAMES[BuiltinMutatorId2::PASS]);
+	if(m_builtinMutators[BuiltinMutatorId2::PASS] && m_forwardShading)
+	{
+		ANKI_RESOURCE_LOGE(
+			"Mutator is not required for forward shading: %s", BUILTIN_MUTATOR_NAMES[BuiltinMutatorId2::PASS].cstr());
+		return Error::USER_DATA;
+	}
+	else if(!m_builtinMutators[BuiltinMutatorId2::PASS] && !m_forwardShading)
+	{
+		ANKI_RESOURCE_LOGE(
+			"Mutator is required for opaque shading: %s", BUILTIN_MUTATOR_NAMES[BuiltinMutatorId2::PASS].cstr());
+		return Error::USER_DATA;
+	}
+
 	if(m_builtinMutators[BuiltinMutatorId2::PASS])
 	{
-		if(m_builtinMutators[BuiltinMutatorId2::PASS]->m_values.getSize() != U32(Pass::COUNT))
+		if(m_builtinMutators[BuiltinMutatorId2::PASS]->m_values.getSize() != U32(Pass::COUNT) - 1)
 		{
 			ANKI_RESOURCE_LOGE("Mutator %s should have %u values in the program",
 				BUILTIN_MUTATOR_NAMES[BuiltinMutatorId2::PASS].cstr(),
-				U32(Pass::COUNT));
+				U32(Pass::COUNT) - 1);
 			return Error::USER_DATA;
 		}
 
-		for(U32 i = 0; i < U(Pass::COUNT); ++i)
+		U32 count = 0;
+		for(Pass p : EnumIterable<Pass>())
 		{
-			if(m_builtinMutators[BuiltinMutatorId2::PASS]->m_values[i] != I(i))
+			if(p == Pass::FS)
+			{
+				continue;
+			}
+
+			if(m_builtinMutators[BuiltinMutatorId2::PASS]->m_values[count++] != I(p))
 			{
 				ANKI_RESOURCE_LOGE("Values of the %s mutator in the program are not the expected",
 					BUILTIN_MUTATOR_NAMES[BuiltinMutatorId2::PASS].cstr());

+ 3 - 0
src/anki/shader_compiler/ShaderProgramParser.cpp

@@ -586,6 +586,9 @@ Error ShaderProgramParser::parseLine(CString line, CString fname, Bool& foundPra
 			{
 				ANKI_PP_ERROR_MALFORMED();
 			}
+
+			// Add the line as a comment because of hashing of the source
+			m_codeLines.pushBackSprintf("//%s", line.cstr());
 		}
 		else
 		{