1717#include " llvm/Analysis/DXILMetadataAnalysis.h"
1818#include " llvm/BinaryFormat/DXContainer.h"
1919#include " llvm/IR/Constants.h"
20- #include " llvm/IR/DiagnosticInfo.h"
21- #include " llvm/IR/Function.h"
22- #include " llvm/IR/LLVMContext.h"
23- #include " llvm/IR/Metadata.h"
24- #include " llvm/IR/Module.h"
2520#include " llvm/InitializePasses.h"
2621#include " llvm/Pass.h"
27- #include " llvm/Support/Error.h"
28- #include " llvm/Support/ErrorHandling.h"
29- #include " llvm/Support/raw_ostream.h"
30- #include < cstdint>
31- #include < optional>
32- #include < utility>
3322
3423using namespace llvm ;
3524using namespace llvm ::dxil;
@@ -50,12 +39,8 @@ static bool parseRootConstants(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
5039
5140 auto *ShaderVisibility =
5241 mdconst::extract<ConstantInt>(RootConstNode->getOperand (1 ));
53- dxbc:: ShaderVisibility SvFlag =
42+ NewParam. ShaderVisibility =
5443 (dxbc::ShaderVisibility)ShaderVisibility->getZExtValue ();
55- if (!dxbc::RootSignatureValidations::isValidShaderVisibility (SvFlag))
56- return reportError (
57- Ctx, " Invalid shader visibility flag value in root constant." );
58- NewParam.ShaderVisibility = SvFlag;
5944
6045 auto *ShaderRegister =
6146 mdconst::extract<ConstantInt>(RootConstNode->getOperand (2 ));
@@ -129,8 +114,24 @@ static bool parse(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
129114}
130115
131116static bool validate (LLVMContext *Ctx, const mcdxbc::RootSignatureDesc &RSD) {
117+
132118 if (!dxbc::RootSignatureValidations::isValidRootFlag (RSD.Header .Flags )) {
133- return reportError (Ctx, " Invalid Root Signature flag value" );
119+ return reportError (Ctx, " Invalid Root Signature flag value in metadata " +
120+ Twine (RSD.Header .Flags ));
121+ }
122+
123+ for (const auto &P : RSD.Parameters ) {
124+ // Parameter Type cannot be set through metadata.
125+ assert (
126+ dxbc::RootSignatureValidations::isValidParameterType (P.ParameterType ));
127+
128+ if (!dxbc::RootSignatureValidations::isValidShaderVisibility (
129+ P.ShaderVisibility )) {
130+ return reportError (
131+ Ctx,
132+ " Invalid Root Signature parameter shader visibility in metadata " +
133+ Twine ((uint32_t )P.ShaderVisibility ));
134+ }
134135 }
135136 return false ;
136137}
0 commit comments