| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // Copyright (C) 2009-2019, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #include <tests/framework/Framework.h>
- #include <anki/shader_compiler/ShaderProgramParser.h>
- ANKI_TEST(ShaderCompiler, ShaderCompilerParser)
- {
- HeapAllocator<U8> alloc(allocAligned, nullptr);
- class FilesystemInterface : public ShaderProgramFilesystemInterface
- {
- public:
- U32 count = 0;
- Error readAllText(CString filename, StringAuto& txt) final
- {
- if(count == 0)
- {
- txt = R"(
- #pragma anki mutator M0 1 2
- #pragma anki mutator M1 3 4
- #pragma anki rewrite_mutation M0 2 M1 4 to M0 1 M1 3
- #if M0 == 1
- #pragma anki input Vec3 var0
- #endif
- #if M1 == 4
- #pragma anki input const Vec3 var1
- #endif
- #pragma anki start vert
- // vert
- #pragma anki end
- #pragma anki start frag
- // frag
- #pragma anki end
- )";
- }
- else
- {
- return Error::FUNCTION_FAILED;
- }
- ++count;
- return Error::NONE;
- }
- } interface;
- ShaderProgramParser parser("filename0", &interface, alloc, 128, 1, 1, GpuVendor::AMD);
- ANKI_TEST_EXPECT_NO_ERR(parser.parse());
- // Check inputs
- ANKI_TEST_EXPECT_EQ(parser.getInputs().getSize(), 2);
- // Test a variant
- Array<MutatorValue, 2> mutation = {{2, 4}};
- ShaderProgramParserVariant variant;
- ANKI_TEST_EXPECT_NO_ERR(parser.generateVariant(mutation, variant));
- ANKI_TEST_EXPECT_EQ(variant.isInputActive(parser.getInputs()[0]), false);
- ANKI_TEST_EXPECT_EQ(variant.isInputActive(parser.getInputs()[1]), true);
- // Test rewrite
- ANKI_TEST_EXPECT_EQ(parser.rewriteMutation(mutation), true);
- ANKI_TEST_EXPECT_EQ(mutation[0], 1);
- ANKI_TEST_EXPECT_EQ(mutation[1], 3);
- // printf("%s\n", variant.getSource(ShaderType::VERTEX).cstr());
- }
|