// Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors. // All rights reserved. // Code licensed under the BSD License. // http://www.anki3d.org/LICENSE // WARNING: This file is auto generated. #pragma once #include #include #include namespace anki { /// A member of a ShaderBinaryStruct. class ShaderBinaryStructMember { public: Array m_name = {}; U32 m_offset = kMaxU32; ShaderVariableDataType m_type = ShaderVariableDataType::kNone; Array m_defaultValues = {}; template static void serializeCommon(TSerializer& s, TClass self) { s.doArray("m_name", offsetof(ShaderBinaryStructMember, m_name), &self.m_name[0], self.m_name.getSize()); s.doValue("m_offset", offsetof(ShaderBinaryStructMember, m_offset), self.m_offset); s.doValue("m_type", offsetof(ShaderBinaryStructMember, m_type), self.m_type); s.doArray("m_defaultValues", offsetof(ShaderBinaryStructMember, m_defaultValues), &self.m_defaultValues[0], self.m_defaultValues.getSize()); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// A type that is a structure. class ShaderBinaryStruct { public: Array m_name = {}; WeakArray m_members; U32 m_size; template static void serializeCommon(TSerializer& s, TClass self) { s.doArray("m_name", offsetof(ShaderBinaryStruct, m_name), &self.m_name[0], self.m_name.getSize()); s.doValue("m_members", offsetof(ShaderBinaryStruct, m_members), self.m_members); s.doValue("m_size", offsetof(ShaderBinaryStruct, m_size), self.m_size); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// Contains the IR (SPIR-V or DXIL). class ShaderBinaryCodeBlock { public: WeakArray m_binary; U64 m_hash = 0; ShaderReflection m_reflection; template static void serializeCommon(TSerializer& s, TClass self) { s.doValue("m_binary", offsetof(ShaderBinaryCodeBlock, m_binary), self.m_binary); s.doValue("m_hash", offsetof(ShaderBinaryCodeBlock, m_hash), self.m_hash); s.doValue("m_reflection", offsetof(ShaderBinaryCodeBlock, m_reflection), self.m_reflection); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// ShaderBinaryTechnique class. class ShaderBinaryTechnique { public: Array m_name; ShaderTypeBit m_shaderTypes = ShaderTypeBit::kNone; template static void serializeCommon(TSerializer& s, TClass self) { s.doArray("m_name", offsetof(ShaderBinaryTechnique, m_name), &self.m_name[0], self.m_name.getSize()); s.doValue("m_shaderTypes", offsetof(ShaderBinaryTechnique, m_shaderTypes), self.m_shaderTypes); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// Shader program mutator. class ShaderBinaryMutator { public: Array m_name = {}; WeakArray m_values; template static void serializeCommon(TSerializer& s, TClass self) { s.doArray("m_name", offsetof(ShaderBinaryMutator, m_name), &self.m_name[0], self.m_name.getSize()); s.doValue("m_values", offsetof(ShaderBinaryMutator, m_values), self.m_values); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// ShaderBinaryTechniqueCodeBlocks class. class ShaderBinaryTechniqueCodeBlocks { public: /// Points to ShaderBinary::m_codeBlocks. If the shader type is not present the value is kMaxU32. Array m_codeBlockIndices = {}; template static void serializeCommon(TSerializer& s, TClass self) { s.doArray("m_codeBlockIndices", offsetof(ShaderBinaryTechniqueCodeBlocks, m_codeBlockIndices), &self.m_codeBlockIndices[0], self.m_codeBlockIndices.getSize()); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// ShaderBinaryVariant class. class ShaderBinaryVariant { public: /// One entry per technique. WeakArray m_techniqueCodeBlocks; template static void serializeCommon(TSerializer& s, TClass self) { s.doValue("m_techniqueCodeBlocks", offsetof(ShaderBinaryVariant, m_techniqueCodeBlocks), self.m_techniqueCodeBlocks); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// A mutation is a unique combination of mutator values. class ShaderBinaryMutation { public: WeakArray m_values; /// Mutation hash. U64 m_hash = 0; /// Points to ShaderBinary::m_variants. U32 m_variantIndex = kMaxU32; template static void serializeCommon(TSerializer& s, TClass self) { s.doValue("m_values", offsetof(ShaderBinaryMutation, m_values), self.m_values); s.doValue("m_hash", offsetof(ShaderBinaryMutation, m_hash), self.m_hash); s.doValue("m_variantIndex", offsetof(ShaderBinaryMutation, m_variantIndex), self.m_variantIndex); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; /// ShaderBinary class. class ShaderBinary { public: Array m_magic = {}; ShaderTypeBit m_shaderTypes = ShaderTypeBit::kNone; WeakArray m_codeBlocks; WeakArray m_mutators; /// It's sorted using the mutation's hash. WeakArray m_mutations; WeakArray m_variants; WeakArray m_techniques; WeakArray m_structs; template static void serializeCommon(TSerializer& s, TClass self) { s.doArray("m_magic", offsetof(ShaderBinary, m_magic), &self.m_magic[0], self.m_magic.getSize()); s.doValue("m_shaderTypes", offsetof(ShaderBinary, m_shaderTypes), self.m_shaderTypes); s.doValue("m_codeBlocks", offsetof(ShaderBinary, m_codeBlocks), self.m_codeBlocks); s.doValue("m_mutators", offsetof(ShaderBinary, m_mutators), self.m_mutators); s.doValue("m_mutations", offsetof(ShaderBinary, m_mutations), self.m_mutations); s.doValue("m_variants", offsetof(ShaderBinary, m_variants), self.m_variants); s.doValue("m_techniques", offsetof(ShaderBinary, m_techniques), self.m_techniques); s.doValue("m_structs", offsetof(ShaderBinary, m_structs), self.m_structs); } template void deserialize(TDeserializer& deserializer) { serializeCommon(deserializer, *this); } template void serialize(TSerializer& serializer) const { serializeCommon(serializer, *this); } }; } // end namespace anki