1#pragma once
2
3#include "common/aglResShaderMacro.h"
4#include "common/aglResShaderSymbol.h"
5#include "common/aglResShaderVariation.h"
6
7namespace agl {
8
9struct ResShaderProgramData {
10 u32 mSize;
11 u32 mNameLen;
12 s32 mSourceIndex[cShaderType_Num];
13 // char mName[];
14};
15#ifdef SWITCH
16static_assert(sizeof(ResShaderProgramData) == 0x18, "agl::ResShaderProgramData size mismatch");
17#endif
18#ifdef cafe
19static_assert(sizeof(ResShaderProgramData) == 0x14, "agl::ResShaderProgramData size mismatch");
20#endif
21
22class ResShaderProgram : public ResCommon<ResShaderProgramData> {
23public:
24 using ResCommon::ResCommon;
25
26 const char* getName() const { return (const char*)(ptr() + 1); }
27
28 ResShaderMacroArray getResShaderMacroArray(ShaderType type) const;
29
30 ResShaderVariationArray getResShaderVariationArray() const;
31
32 ResShaderVariationArray getResShaderVariationDefaultArray() const {
33 return (const ResShaderVariationArrayData*)((uintptr_t)getResShaderVariationArray().ptr() +
34 getResShaderVariationArray().ref().mSize);
35 }
36
37 ResShaderSymbolArray getResShaderSymbolArray(ShaderSymbolType type) const;
38};
39
40using ResShaderProgramArray = ResArray<ResShaderProgram>;
41
42using ResShaderProgramArrayData = ResShaderProgramArray::DataType;
43static_assert(sizeof(ResShaderProgramArrayData) == 8,
44 "agl::ResShaderProgramArrayData size mismatch");
45
46} // namespace agl
47