1#pragma once
2
3#include "common/aglResCommon.h"
4#include "common/aglShaderEnum.h"
5
6namespace agl {
7
8struct ResShaderBinaryData {
9 u32 mSize;
10 u32 mShaderType;
11 s32 mDataOffset; // Relative to end of struct
12 u32 mDataSize;
13};
14static_assert(sizeof(ResShaderBinaryData) == 0x10, "agl::ResShaderBinaryData size mismatch");
15
16class ResShaderBinary : public ResCommon<ResShaderBinaryData> {
17public:
18 using ResCommon::ResCommon;
19
20 ShaderType getShaderType() const { return ShaderType(ref().mShaderType); }
21
22 void* getData() const {
23 const DataType* const data = ptr();
24 return (void*)((uintptr_t)(data + 1) + data->mDataOffset);
25 }
26
27 void modifyBinaryEndian();
28 void setUp();
29};
30
31using ResShaderBinaryArray = ResArray<ResShaderBinary>;
32
33using ResShaderBinaryArrayData = ResShaderBinaryArray::DataType;
34static_assert(sizeof(ResShaderBinaryArrayData) == 8, "agl::ResShaderBinaryArrayData size mismatch");
35
36} // namespace agl
37