meta.h (2020B)
1 /* See LICENSE for license details. */ 2 #define META_KIND_LIST \ 3 X(M4, m4, f32mat4, float, single, 64, 16) \ 4 X(V4, v4, f32vec4, float, single, 16, 4) \ 5 X(SV4, iv4, i32vec4, int32_t, int32, 16, 4) \ 6 X(UV4, uv4, u32vec4, uint32_t, uint32, 16, 4) \ 7 X(UV2, uv2, u32vec2, uint32_t, uint32, 8, 2) \ 8 X(V3, v3, f32vec3, float, single, 12, 3) \ 9 X(V2, v2, f32vec2, float, single, 8, 2) \ 10 X(F64, f64, float64_t, double, double, 8, 1) \ 11 X(F32, f32, float32_t, float, single, 4, 1) \ 12 X(F16, f16, float16_t, _Float16, half, 2, 1) \ 13 X(S32, i32, int32_t, int32_t, int32, 4, 1) \ 14 X(S16, i16, int16_t, int16_t, int16, 2, 1) \ 15 X(S8, i8, int8_t, int8_t, int8, 1, 1) \ 16 X(B64, b64, uint64_t, uint64_t, uint64, 8, 1) \ 17 X(B32, b32, bool, uint32_t, uint32, 4, 1) \ 18 X(B16, b16, uint16_t, uint16_t, uint16, 2, 1) \ 19 X(B8, b8, uint8_t, uint8_t, uint8, 1, 1) \ 20 X(U64, u64, uint64_t, uint64_t, uint64, 8, 1) \ 21 X(U32, u32, uint32_t, uint32_t, uint32, 4, 1) \ 22 X(U16, u16, uint16_t, uint16_t, uint16, 2, 1) \ 23 X(U8, u8, uint8_t, uint8_t, uint8, 1, 1) \ 24 X(STR, str8, error, error, error, 16, 1) \ 25 26 read_only global str8 meta_kind_glsl_types[] = { 27 #define X(_k, _c, glsl, ...) str8_comp(#glsl), 28 META_KIND_LIST 29 #undef X 30 }; 31 32 read_only global u8 meta_kind_byte_sizes[] = { 33 #define X(_k, _c, _g, _b, _m, bytes, ...) bytes, 34 META_KIND_LIST 35 #undef X 36 }; 37 38 typedef enum { 39 #define X(k, ...) MetaKind_## k, 40 META_KIND_LIST 41 #undef X 42 MetaKind_Count, 43 } MetaKind; 44 45 typedef enum { 46 MetaStructMemberFlag_ReferenceType = 1 << 0, 47 } MetaStructMemberFlags; 48 49 typedef enum { 50 MetaStructFlag_Union = 1 << 0, 51 MetaStructFlag_ContainsUnion = 1 << 1, 52 } MetaStructFlags; 53 54 typedef struct { 55 u32 type_id; 56 u32 offset; 57 u32 elements; 58 u32 flags; 59 } MetaStructMember; 60 61 typedef struct { 62 str8 name; 63 u32 member_count; 64 u32 size; 65 MetaStructFlags flags; 66 } MetaStructInfo;