Skip to content

Commit 17cee41

Browse files
author
joaosaffran
committed
adding validation
1 parent 4eec78d commit 17cee41

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,8 @@
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

3423
using namespace llvm;
3524
using 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

131116
static 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
}

llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Constants-Error-invalid-shader-visibility.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; RUN: not opt -passes='print<dxil-root-signature>' %s -S -o - 2>&1 | FileCheck %s
22

3-
; CHECK: error: Invalid shader visibility flag value in root constant.
3+
; CHECK: error: Invalid Root Signature parameter shader visibility in metadata 666
44
; CHECK-NOT: Root Signature Definitions
55
target triple = "dxil-unknown-shadermodel6.0-compute"
66

llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags-Validation-Error.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; RUN: not opt -passes='print<dxil-root-signature>' %s -S -o - 2>&1 | FileCheck %s
22

3-
; CHECK: error: Invalid Root Signature flag value
3+
; CHECK: Invalid Root Signature flag value in metadata 2147487744
44
; CHECK-NOT: Root Signature Definitions
55

66
target triple = "dxil-unknown-shadermodel6.0-compute"

0 commit comments

Comments
 (0)