ShaderProgramParser.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (C) 2009-2019, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <tests/framework/Framework.h>
  6. #include <anki/shader_compiler/ShaderProgramParser.h>
  7. ANKI_TEST(ShaderCompiler, ShaderCompilerParser)
  8. {
  9. HeapAllocator<U8> alloc(allocAligned, nullptr);
  10. class FilesystemInterface : public ShaderProgramParserFilesystemInterface
  11. {
  12. public:
  13. U32 count = 0;
  14. Error readAllText(CString filename, StringAuto& txt) final
  15. {
  16. if(count == 0)
  17. {
  18. txt = R"(
  19. #pragma anki mutator M0 1 2
  20. #pragma anki mutator M1 3 4
  21. #if M0 == 1
  22. #pragma anki input Vec3 var0
  23. #endif
  24. #if M1 == 4
  25. #pragma anki input const Vec3 var1
  26. #endif
  27. #pragma anki start vert
  28. // vert
  29. #pragma anki end
  30. #pragma anki start frag
  31. // frag
  32. #pragma anki end
  33. )";
  34. }
  35. else
  36. {
  37. return Error::FUNCTION_FAILED;
  38. }
  39. ++count;
  40. return Error::NONE;
  41. }
  42. } interface;
  43. ShaderProgramParser parser("filename0", &interface, alloc, 128, 1, 1, GpuVendor::AMD);
  44. ANKI_TEST_EXPECT_NO_ERR(parser.parse());
  45. // Check inputs
  46. ANKI_TEST_EXPECT_EQ(parser.getInputs().getSize(), 2);
  47. // Test a variant
  48. Array<ShaderProgramParserMutatorState, 2> arr = {{{&parser.getMutators()[0], 2}, {&parser.getMutators()[1], 4}}};
  49. ConstWeakArray<ShaderProgramParserMutatorState> mutatorStates(arr);
  50. ShaderProgramParserVariant variant;
  51. ANKI_TEST_EXPECT_NO_ERR(parser.generateVariant(mutatorStates, variant));
  52. ANKI_TEST_EXPECT_EQ(variant.isInputActive(parser.getInputs()[0]), false);
  53. ANKI_TEST_EXPECT_EQ(variant.isInputActive(parser.getInputs()[1]), true);
  54. // printf("%s\n", variant.getSource(ShaderType::VERTEX).cstr());
  55. }