17
17
#include " llvm/Analysis/DXILMetadataAnalysis.h"
18
18
#include " llvm/BinaryFormat/DXContainer.h"
19
19
#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"
25
20
#include " llvm/InitializePasses.h"
26
21
#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>
33
22
34
23
using namespace llvm ;
35
24
using namespace llvm ::dxil;
@@ -50,12 +39,8 @@ static bool parseRootConstants(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
50
39
51
40
auto *ShaderVisibility =
52
41
mdconst::extract<ConstantInt>(RootConstNode->getOperand (1 ));
53
- dxbc:: ShaderVisibility SvFlag =
42
+ NewParam. ShaderVisibility =
54
43
(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;
59
44
60
45
auto *ShaderRegister =
61
46
mdconst::extract<ConstantInt>(RootConstNode->getOperand (2 ));
@@ -129,8 +114,24 @@ static bool parse(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
129
114
}
130
115
131
116
static bool validate (LLVMContext *Ctx, const mcdxbc::RootSignatureDesc &RSD) {
117
+
132
118
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
+ }
134
135
}
135
136
return false ;
136
137
}
0 commit comments