- //===- DXContainerYAML.h - DXContainer YAMLIO implementation ----*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- /// 
- /// \file 
- /// This file declares classes for handling the YAML representation 
- /// of DXContainer. 
- /// 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_OBJECTYAML_DXCONTAINERYAML_H 
- #define LLVM_OBJECTYAML_DXCONTAINERYAML_H 
-   
- #include "llvm/ADT/StringRef.h" 
- #include "llvm/BinaryFormat/DXContainer.h" 
- #include "llvm/ObjectYAML/YAML.h" 
- #include "llvm/Support/YAMLTraits.h" 
- #include <cstdint> 
- #include <optional> 
- #include <string> 
- #include <vector> 
-   
- namespace llvm { 
- namespace DXContainerYAML { 
-   
- struct VersionTuple { 
-   uint16_t Major; 
-   uint16_t Minor; 
- }; 
-   
- // The optional header fields are required in the binary and will be populated 
- // when reading from binary, but can be omitted in the YAML text because the 
- // emitter can calculate them. 
- struct FileHeader { 
-   std::vector<llvm::yaml::Hex8> Hash; 
-   VersionTuple Version; 
-   std::optional<uint32_t> FileSize; 
-   uint32_t PartCount; 
-   std::optional<std::vector<uint32_t>> PartOffsets; 
- }; 
-   
- struct DXILProgram { 
-   uint8_t MajorVersion; 
-   uint8_t MinorVersion; 
-   uint16_t ShaderKind; 
-   std::optional<uint32_t> Size; 
-   uint16_t DXILMajorVersion; 
-   uint16_t DXILMinorVersion; 
-   std::optional<uint32_t> DXILOffset; 
-   std::optional<uint32_t> DXILSize; 
-   std::optional<std::vector<llvm::yaml::Hex8>> DXIL; 
- }; 
-   
- #define SHADER_FLAG(Num, Val, Str) bool Val = false; 
- struct ShaderFlags { 
-   ShaderFlags() = default; 
-   ShaderFlags(uint64_t FlagData); 
-   uint64_t getEncodedFlags(); 
- #include "llvm/BinaryFormat/DXContainerConstants.def" 
- }; 
-   
- struct ShaderHash { 
-   ShaderHash() = default; 
-   ShaderHash(const dxbc::ShaderHash &Data); 
-   
-   bool IncludesSource; 
-   std::vector<llvm::yaml::Hex8> Digest; 
- }; 
-   
- struct Part { 
-   Part() = default; 
-   Part(std::string N, uint32_t S) : Name(N), Size(S) {} 
-   std::string Name; 
-   uint32_t Size; 
-   std::optional<DXILProgram> Program; 
-   std::optional<ShaderFlags> Flags; 
-   std::optional<ShaderHash> Hash; 
- }; 
-   
- struct Object { 
-   FileHeader Header; 
-   std::vector<Part> Parts; 
- }; 
-   
- } // namespace DXContainerYAML 
- } // namespace llvm 
-   
- LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::DXContainerYAML::Part) 
- namespace llvm { 
-   
- class raw_ostream; 
-   
- namespace yaml { 
-   
- template <> struct MappingTraits<DXContainerYAML::VersionTuple> { 
-   static void mapping(IO &IO, DXContainerYAML::VersionTuple &Version); 
- }; 
-   
- template <> struct MappingTraits<DXContainerYAML::FileHeader> { 
-   static void mapping(IO &IO, DXContainerYAML::FileHeader &Header); 
- }; 
-   
- template <> struct MappingTraits<DXContainerYAML::DXILProgram> { 
-   static void mapping(IO &IO, DXContainerYAML::DXILProgram &Program); 
- }; 
-   
- template <> struct MappingTraits<DXContainerYAML::ShaderFlags> { 
-   static void mapping(IO &IO, DXContainerYAML::ShaderFlags &Flags); 
- }; 
-   
- template <> struct MappingTraits<DXContainerYAML::ShaderHash> { 
-   static void mapping(IO &IO, DXContainerYAML::ShaderHash &Hash); 
- }; 
-   
- template <> struct MappingTraits<DXContainerYAML::Part> { 
-   static void mapping(IO &IO, DXContainerYAML::Part &Version); 
- }; 
-   
- template <> struct MappingTraits<DXContainerYAML::Object> { 
-   static void mapping(IO &IO, DXContainerYAML::Object &Obj); 
- }; 
-   
- } // namespace yaml 
-   
- } // namespace llvm 
-   
- #endif // LLVM_OBJECTYAML_DXCONTAINERYAML_H 
-