2
0

ShaderProgramReflection.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/ShaderCompiler/Common.h>
  7. #include <AnKi/Gr/Enums.h>
  8. #include <AnKi/Gr/Common.h>
  9. #include <AnKi/Util/WeakArray.h>
  10. namespace anki {
  11. /// @addtogroup shader_compiler
  12. /// @{
  13. /// A visitor class that will be used to populate reflection information.
  14. class ShaderReflectionVisitorInterface
  15. {
  16. public:
  17. virtual ANKI_USE_RESULT Error setWorkgroupSizes(U32 x, U32 y, U32 z, U32 specConstMask) = 0;
  18. virtual ANKI_USE_RESULT Error setCounts(U32 uniformBlockCount, U32 storageBlockCount, U32 opaqueCount,
  19. Bool pushConstantBlock, U32 constsCount, U32 structCount) = 0;
  20. virtual ANKI_USE_RESULT Error visitUniformBlock(U32 idx, CString name, U32 set, U32 binding, U32 size,
  21. U32 varCount) = 0;
  22. virtual ANKI_USE_RESULT Error visitUniformVariable(U32 blockIdx, U32 idx, CString name, ShaderVariableDataType type,
  23. const ShaderVariableBlockInfo& blockInfo) = 0;
  24. virtual ANKI_USE_RESULT Error visitStorageBlock(U32 idx, CString name, U32 set, U32 binding, U32 size,
  25. U32 varCount) = 0;
  26. virtual ANKI_USE_RESULT Error visitStorageVariable(U32 blockIdx, U32 idx, CString name, ShaderVariableDataType type,
  27. const ShaderVariableBlockInfo& blockInfo) = 0;
  28. virtual ANKI_USE_RESULT Error visitPushConstantsBlock(CString name, U32 size, U32 varCount) = 0;
  29. virtual ANKI_USE_RESULT Error visitPushConstant(U32 idx, CString name, ShaderVariableDataType type,
  30. const ShaderVariableBlockInfo& blockInfo) = 0;
  31. virtual ANKI_USE_RESULT Error visitOpaque(U32 idx, CString name, ShaderVariableDataType type, U32 set, U32 binding,
  32. U32 arraySize) = 0;
  33. virtual ANKI_USE_RESULT Error visitConstant(U32 idx, CString name, ShaderVariableDataType type, U32 constantId) = 0;
  34. virtual ANKI_USE_RESULT Error visitStruct(U32 idx, CString name, U32 memberCount, U32 size) = 0;
  35. virtual ANKI_USE_RESULT Error visitStructMember(U32 structIdx, CString structName, U32 memberIdx,
  36. CString memberName, ShaderVariableDataType type,
  37. CString typeStructName, U32 offset, U32 arraySize) = 0;
  38. virtual ANKI_USE_RESULT Bool skipSymbol(CString symbol) const = 0;
  39. };
  40. /// Does reflection using SPIR-V.
  41. ANKI_USE_RESULT Error performSpirvReflection(Array<ConstWeakArray<U8>, U32(ShaderType::COUNT)> spirv,
  42. GenericMemoryPoolAllocator<U8> tmpAlloc,
  43. ShaderReflectionVisitorInterface& interface);
  44. /// @}
  45. } // end namespace anki