@@ -40,6 +40,38 @@ static bool reportError(LLVMContext *Ctx, Twine Message,
40
40
return true ;
41
41
}
42
42
43
+ static bool parseRootConstants (LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
44
+ MDNode *RootConstNode) {
45
+ if (RootConstNode->getNumOperands () != 5 )
46
+ return reportError (Ctx, " Invalid format for RootFlag Element" );
47
+
48
+ dxbc::RootParameter NewParam;
49
+ NewParam.ParameterType = dxbc::RootParameterType::Constants32Bit;
50
+
51
+ auto *ShaderVisibility =
52
+ mdconst::extract<ConstantInt>(RootConstNode->getOperand (1 ));
53
+ dxbc::ShaderVisibilityFlag SvFlag =
54
+ (dxbc::ShaderVisibilityFlag)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
+
60
+ auto *ShaderRegister =
61
+ mdconst::extract<ConstantInt>(RootConstNode->getOperand (2 ));
62
+ NewParam.Constants .ShaderRegister = ShaderRegister->getZExtValue ();
63
+
64
+ auto *RegisterSpace =
65
+ mdconst::extract<ConstantInt>(RootConstNode->getOperand (3 ));
66
+ NewParam.Constants .RegisterSpace = RegisterSpace->getZExtValue ();
67
+
68
+ auto *Num32BitValues =
69
+ mdconst::extract<ConstantInt>(RootConstNode->getOperand (4 ));
70
+ NewParam.Constants .Num32BitValues = Num32BitValues->getZExtValue ();
71
+
72
+ return false ;
73
+ }
74
+
43
75
static bool parseRootFlags (LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
44
76
MDNode *RootFlagNode) {
45
77
0 commit comments