浏览代码

Some test improvements

Panagiotis Christopoulos Charitos 6 年之前
父节点
当前提交
9abf519137
共有 2 个文件被更改,包括 91 次插入27 次删除
  1. 9 0
      src/anki/shader_compiler/ShaderProgramParser.cpp
  2. 82 27
      tests/shader_compiler/ShaderProgramCompiler.cpp

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

@@ -81,6 +81,15 @@ static const char* SHADER_HEADER = R"(#version 450 core
 	layout(constant_id = id + 2) const I32 ANKI_CONCATENATE(x, _2) = defltVal[2]
 
 #define ANKI_SPECIALIZATION_CONSTANT_F32(x, id, defltVal) layout(constant_id = id) const F32 x = defltVal
+
+#define ANKI_SPECIALIZATION_CONSTANT_VEC2(x, id, defltVal) \
+	layout(constant_id = id) const F32 ANKI_CONCATENATE(x, _0) = defltVal[0]; \
+	layout(constant_id = id + 1) const F32 ANKI_CONCATENATE(x, _1) = defltVal[1]
+
+#define ANKI_SPECIALIZATION_CONSTANT_VEC3(x, id, defltVal) \
+	layout(constant_id = id) const F32 ANKI_CONCATENATE(x, _0) = defltVal[0]; \
+	layout(constant_id = id + 1) const F32 ANKI_CONCATENATE(x, _1) = defltVal[1]; \
+	layout(constant_id = id + 2) const F32 ANKI_CONCATENATE(x, _2) = defltVal[2]
 )";
 
 ShaderProgramParser::ShaderProgramParser(CString fname,

+ 82 - 27
tests/shader_compiler/ShaderProgramCompiler.cpp

@@ -9,45 +9,104 @@
 ANKI_TEST(ShaderCompiler, ShaderProgramCompiler)
 {
 	const CString sourceCode = R"(
+#pragma anki mutator INSTANCE_COUNT 1 2 4 8 16 32 64
 #pragma anki mutator LOD 0 1 2
 #pragma anki mutator PASS 0 1 2 3
 #pragma anki mutator DIFFUSE_TEX 0 1
+#pragma anki mutator SPECULAR_TEX 0 1
+#pragma anki mutator ROUGHNESS_TEX 0 1
+#pragma anki mutator METAL_TEX 0 1
+#pragma anki mutator NORMAL_TEX 0 1
+#pragma anki mutator PARALLAX 0 1
+#pragma anki mutator EMISSIVE_TEX 0 1
+#pragma anki mutator BONES 0 1
+#pragma anki mutator VELOCITY 0 1
 
 #pragma anki rewrite_mutation PASS 1 DIFFUSE_TEX 1 to PASS 1 DIFFUSE_TEX 0
 #pragma anki rewrite_mutation PASS 2 DIFFUSE_TEX 1 to PASS 2 DIFFUSE_TEX 0
 #pragma anki rewrite_mutation PASS 3 DIFFUSE_TEX 1 to PASS 2 DIFFUSE_TEX 0
 
-ANKI_SPECIALIZATION_CONSTANT_I32(INSTANCE_COUNT, 0, 1);
+#pragma anki rewrite_mutation PASS 1 SPECULAR_TEX 1 to PASS 1 SPECULAR_TEX 0
+#pragma anki rewrite_mutation PASS 2 SPECULAR_TEX 1 to PASS 2 SPECULAR_TEX 0
+#pragma anki rewrite_mutation PASS 3 SPECULAR_TEX 1 to PASS 2 SPECULAR_TEX 0
 
-struct PerInstance
+#pragma anki rewrite_mutation PASS 1 ROUGHNESS_TEX 1 to PASS 1 ROUGHNESS_TEX 0
+#pragma anki rewrite_mutation PASS 2 ROUGHNESS_TEX 1 to PASS 2 ROUGHNESS_TEX 0
+#pragma anki rewrite_mutation PASS 3 ROUGHNESS_TEX 1 to PASS 2 ROUGHNESS_TEX 0
+
+#pragma anki rewrite_mutation PASS 1 METAL_TEX 1 to PASS 1 METAL_TEX 0
+#pragma anki rewrite_mutation PASS 2 METAL_TEX 1 to PASS 2 METAL_TEX 0
+#pragma anki rewrite_mutation PASS 3 METAL_TEX 1 to PASS 2 METAL_TEX 0
+
+#pragma anki rewrite_mutation PASS 1 NORMAL_TEX 1 to PASS 1 NORMAL_TEX 0
+#pragma anki rewrite_mutation PASS 2 NORMAL_TEX 1 to PASS 2 NORMAL_TEX 0
+#pragma anki rewrite_mutation PASS 3 NORMAL_TEX 1 to PASS 2 NORMAL_TEX 0
+
+#pragma anki rewrite_mutation PASS 1 EMISSIVE_TEX 1 to PASS 1 EMISSIVE_TEX 0
+#pragma anki rewrite_mutation PASS 2 EMISSIVE_TEX 1 to PASS 2 EMISSIVE_TEX 0
+#pragma anki rewrite_mutation PASS 3 EMISSIVE_TEX 1 to PASS 2 EMISSIVE_TEX 0
+
+#pragma anki rewrite_mutation PASS 1 VELOCITY 1 to PASS 1 VELOCITY 0
+#pragma anki rewrite_mutation PASS 2 VELOCITY 1 to PASS 2 VELOCITY 0
+#pragma anki rewrite_mutation PASS 3 VELOCITY 1 to PASS 2 VELOCITY 0
+
+layout(set = 0, binding = 0) uniform ankiMaterial
 {
-	Mat4 m_mvp;
-#if PASS > 1
-	Mat3 m_normalMat[2];
+	Mat4 u_ankiMvp[INSTANCE_COUNT];
+
+#if PASS == 0
+	Mat3 u_ankiRotationMat[INSTANCE_COUNT];
 #endif
-};
 
-layout(set = 1, binding = 0) uniform perInstance
-{
-	PerInstance u_perInstance[INSTANCE_COUNT];
-};
+#if PASS == 0 && PARALLAX == 1
+	Mat4 u_ankiModelViewMat[INSTANCE_COUNT];
+#endif
 
-layout(set = 1, binding = 1) buffer perDrawcall
-{
-	Vec4 u_color;
-#if PASS > 1
-	Mat3 u_someMat;
+#if PASS == 0 && VELOCITY == 1
+	Mat4 u_ankiPrevMvp[INSTANCE_COUNT];
 #endif
 };
 
-#if DIFFUSE_TEX == 1
-layout(set = 0, binding = 0) uniform texture2D u_tex[3];
+#if PASS == 0
+
+#if DIFFUSE_TEX == 0
+ANKI_SPECIALIZATION_CONSTANT_VEC3(diffColor, 0, Vec3(0));
+#else
+layout(set = 0, binding = 1) uniform texture2D diffTex;
 #endif
-layout(set = 0, binding = 1) uniform sampler u_sampler;
 
-#pragma anki start vert
-ANKI_SPECIALIZATION_CONSTANT_F32(specConst, 1, 0);
+#if SPECULAR_TEX == 0
+ANKI_SPECIALIZATION_CONSTANT_VEC3(specColor, 3, Vec3(0));
+#else
+layout(set = 0, binding = 2) uniform texture2D specTex;
+#endif
 
+#if ROUGHNESS_TEX == 0
+ANKI_SPECIALIZATION_CONSTANT_F32(roughness, 6, 0.0);
+#else
+layout(set = 0, binding = 3) uniform texture2D roughnessTex;
+#endif
+
+#if METAL_TEX == 0
+ANKI_SPECIALIZATION_CONSTANT_F32(metallic, 7, 0.0);
+#else
+layout(set = 0, binding = 4) uniform texture2D metallicTex;
+#endif
+
+#if EMISSIVE_TEX == 0
+ANKI_SPECIALIZATION_CONSTANT_VEC3(emission, 8, Vec3(0.0));
+#else
+layout(set = 0, binding = 5) uniform texture2D emissiveTex;
+#endif
+
+#if PARALLAX == 1 && LOD == 0
+ANKI_SPECIALIZATION_CONSTANT_F32(heightMapScale, 11, 0.0);
+layout(set = 0, binding = 6) uniform texture2D heightTex;
+#endif
+
+#endif
+
+#pragma anki start vert
 out gl_PerVertex
 {
 	Vec4 gl_Position;
@@ -55,20 +114,16 @@ out gl_PerVertex
 
 void main()
 {
-	gl_Position = u_perInstance[gl_InstanceID].m_mvp * Vec4(specConst);
+	gl_Position = Vec4(gl_VertexID);
 }
 #pragma anki end
 
 #pragma anki start frag
-layout(location = 0) out Vec4 out_color;
+layout(location = 0) out Vec3 out_color;
 
 void main()
 {
-#if DIFFUSE_TEX == 1
-	out_color = texture(sampler2D(u_tex[0], u_sampler), Vec2(0));
-#else
-	out_color = u_color;
-#endif
+	out_color = Vec3(0.0);
 }
 #pragma anki end
 	)";