Skip to content

Commit d9353d1

Browse files
committed
[DirectX backend] emit metadata for DXIL version.
Emit named metadata "dx.version". Default to DXIL 1.0
1 parent 080978d commit d9353d1

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

llvm/lib/Target/DirectX/DXILMetadata.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,18 @@ void dxil::createShaderModelMD(Module &M) {
8181
Entry->addOperand(MDNode::get(Ctx, Vals));
8282
}
8383

84+
void dxil::createDXILVersionMD(Module &M) {
85+
Triple TT(M.getTargetTriple());
86+
VersionTuple Ver = TT.getOSVersion();
87+
LLVMContext &Ctx = M.getContext();
88+
IRBuilder<> B(Ctx);
89+
NamedMDNode *Entry = M.getOrInsertNamedMetadata("dx.version");
90+
Metadata *Vals[2];
91+
Vals[0] = ConstantAsMetadata::get(B.getInt32(1));
92+
Vals[1] = ConstantAsMetadata::get(B.getInt32(Ver.getMinor().value_or(0)));
93+
Entry->addOperand(MDNode::get(Ctx, Vals));
94+
}
95+
8496
static uint32_t getShaderStage(Triple::EnvironmentType Env) {
8597
return (uint32_t)Env - (uint32_t)llvm::Triple::Pixel;
8698
}

llvm/lib/Target/DirectX/DXILMetadata.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ValidatorVersionMD {
3333
};
3434

3535
void createShaderModelMD(Module &M);
36+
void createDXILVersionMD(Module &M);
3637
void createEntryMD(Module &M, const uint64_t ShaderFlags);
3738

3839
} // namespace dxil

llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ bool DXILTranslateMetadata::runOnModule(Module &M) {
4848
if (ValVerMD.isEmpty())
4949
ValVerMD.update(VersionTuple(1, 0));
5050
dxil::createShaderModelMD(M);
51+
dxil::createDXILVersionMD(M);
5152

5253
const dxil::Resources &Res =
5354
getAnalysis<DXILResourceWrapper>().getDXILResource();
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
; RUN: opt -S -dxil-metadata-emit %s | FileCheck %s
2+
target triple = "dxil-pc-shadermodel6.0-vertex"
3+
4+
; CHECK: !dx.version = !{![[DXVER:[0-9]+]]}
5+
; CHECK: ![[DXVER]] = !{i32 1, i32 0}
6+
7+
define void @entry() #0 {
8+
entry:
9+
ret void
10+
}
11+
12+
attributes #0 = { noinline nounwind "hlsl.shader"="vertex" }
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
; RUN: opt -S -dxil-metadata-emit %s | FileCheck %s
2+
target triple = "dxil-pc-shadermodel6.8-compute"
3+
4+
; CHECK: !dx.version = !{![[DXVER:[0-9]+]]}
5+
; CHECK: ![[DXVER]] = !{i32 1, i32 8}
6+
7+
define void @entry() #0 {
8+
entry:
9+
ret void
10+
}
11+
12+
attributes #0 = { noinline nounwind "hlsl.numthreads"="1,2,1" "hlsl.shader"="compute" }

0 commit comments

Comments
 (0)