|
|
@@ -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
|
|
|
)";
|