| //===- DXILTranslateMetadata.cpp - Pass to emit DXIL metadata ---*- 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 |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #include "DXILMetadata.h" |
| #include "DXILResource.h" |
| #include "DXILResourceAnalysis.h" |
| #include "DXILShaderFlags.h" |
| #include "DirectX.h" |
| #include "llvm/ADT/StringSet.h" |
| #include "llvm/ADT/Triple.h" |
| #include "llvm/IR/Constants.h" |
| #include "llvm/IR/Metadata.h" |
| #include "llvm/IR/Module.h" |
| #include "llvm/Pass.h" |
| |
| using namespace llvm; |
| using namespace llvm::dxil; |
| |
| namespace { |
| class DXILTranslateMetadata : public ModulePass { |
| public: |
| static char ID; // Pass identification, replacement for typeid |
| explicit DXILTranslateMetadata() : ModulePass(ID) {} |
| |
| StringRef getPassName() const override { return "DXIL Metadata Emit"; } |
| |
| void getAnalysisUsage(AnalysisUsage &AU) const override { |
| AU.setPreservesAll(); |
| AU.addRequired<DXILResourceWrapper>(); |
| AU.addRequired<ShaderFlagsAnalysisWrapper>(); |
| } |
| |
| bool runOnModule(Module &M) override; |
| }; |
| |
| } // namespace |
| |
| bool DXILTranslateMetadata::runOnModule(Module &M) { |
| |
| dxil::ValidatorVersionMD ValVerMD(M); |
| if (ValVerMD.isEmpty()) |
| ValVerMD.update(VersionTuple(1, 0)); |
| dxil::createShaderModelMD(M); |
| |
| const dxil::Resources &Res = |
| getAnalysis<DXILResourceWrapper>().getDXILResource(); |
| Res.write(M); |
| |
| const uint64_t Flags = |
| (uint64_t)(getAnalysis<ShaderFlagsAnalysisWrapper>().getShaderFlags()); |
| dxil::createEntryMD(M, Flags); |
| |
| return false; |
| } |
| |
| char DXILTranslateMetadata::ID = 0; |
| |
| ModulePass *llvm::createDXILTranslateMetadataPass() { |
| return new DXILTranslateMetadata(); |
| } |
| |
| INITIALIZE_PASS_BEGIN(DXILTranslateMetadata, "dxil-metadata-emit", |
| "DXIL Metadata Emit", false, false) |
| INITIALIZE_PASS_DEPENDENCY(DXILResourceWrapper) |
| INITIALIZE_PASS_DEPENDENCY(ShaderFlagsAnalysisWrapper) |
| INITIALIZE_PASS_END(DXILTranslateMetadata, "dxil-metadata-emit", |
| "DXIL Metadata Emit", false, false) |