Skip to content

Commit 398b9c5

Browse files
author
joaosaffran
committed
parsing root constant
1 parent 1f0ab77 commit 398b9c5

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,38 @@ static bool reportError(LLVMContext *Ctx, Twine Message,
4040
return true;
4141
}
4242

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+
4375
static bool parseRootFlags(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
4476
MDNode *RootFlagNode) {
4577

0 commit comments

Comments
 (0)