[clang] 5b6207f - [ADT] Flesh out HLSL raytracing environments
Chris Bieneman via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 29 07:43:32 PDT 2022
Author: Chris Bieneman
Date: 2022-03-29T09:43:03-05:00
New Revision: 5b6207f3cd5e266f3fda8085fcebe6dcf45dacbf
URL: https://github.com/llvm/llvm-project/commit/5b6207f3cd5e266f3fda8085fcebe6dcf45dacbf
DIFF: https://github.com/llvm/llvm-project/commit/5b6207f3cd5e266f3fda8085fcebe6dcf45dacbf.diff
LOG: [ADT] Flesh out HLSL raytracing environments
Fleshing this out now allows me to rely on enum math to translate
values rather than having to translate the off cases.
I should have added this in the first pass, but wasn't thinking about
it.
Added:
Modified:
clang/lib/Frontend/InitPreprocessor.cpp
llvm/include/llvm/ADT/Triple.h
llvm/lib/Support/Triple.cpp
llvm/unittests/ADT/TripleTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 89e9cb0250043..011a6743214a7 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -401,11 +401,6 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,
uint32_t StageInteger = StageInteger =
(uint32_t)TI.getTriple().getEnvironment() -
(uint32_t)llvm::Triple::Pixel;
- // TODO: When we add raytracing support we can clean this up
- if (TI.getTriple().getEnvironment() == llvm::Triple::Mesh)
- StageInteger = (uint32_t)ShaderStage::Mesh;
- else if (TI.getTriple().getEnvironment() == llvm::Triple::Amplification)
- StageInteger = (uint32_t)ShaderStage::Amplification;
Builder.defineMacro("__SHADER_TARGET_STAGE", Twine(StageInteger));
// Add target versions
diff --git a/llvm/include/llvm/ADT/Triple.h b/llvm/include/llvm/ADT/Triple.h
index 99ddfca897e63..728b24e235769 100644
--- a/llvm/include/llvm/ADT/Triple.h
+++ b/llvm/include/llvm/ADT/Triple.h
@@ -246,6 +246,12 @@ class Triple {
Domain,
Compute,
Library,
+ RayGeneration,
+ Intersection,
+ AnyHit,
+ ClosestHit,
+ Miss,
+ Callable,
Mesh,
Amplification,
diff --git a/llvm/lib/Support/Triple.cpp b/llvm/lib/Support/Triple.cpp
index 2cde1c69b2f41..ef5152eb302bf 100644
--- a/llvm/lib/Support/Triple.cpp
+++ b/llvm/lib/Support/Triple.cpp
@@ -275,6 +275,12 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
case Domain: return "domain";
case Compute: return "compute";
case Library: return "library";
+ case RayGeneration: return "raygeneration";
+ case Intersection: return "intersection";
+ case AnyHit: return "anyhit";
+ case ClosestHit: return "closesthit";
+ case Miss: return "miss";
+ case Callable: return "callable";
case Mesh: return "mesh";
case Amplification: return "amplification";
}
@@ -608,6 +614,12 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
.StartsWith("domain", Triple::Domain)
.StartsWith("compute", Triple::Compute)
.StartsWith("library", Triple::Library)
+ .StartsWith("raygeneration", Triple::RayGeneration)
+ .StartsWith("intersection", Triple::Intersection)
+ .StartsWith("anyhit", Triple::AnyHit)
+ .StartsWith("closesthit", Triple::ClosestHit)
+ .StartsWith("miss", Triple::Miss)
+ .StartsWith("callable", Triple::Callable)
.StartsWith("mesh", Triple::Mesh)
.StartsWith("amplification", Triple::Amplification)
.Default(Triple::UnknownEnvironment);
@@ -1902,3 +1914,19 @@ static_assert(Triple::Compute - Triple::Pixel == 5,
"incorrect HLSL stage order");
static_assert(Triple::Library - Triple::Pixel == 6,
"incorrect HLSL stage order");
+static_assert(Triple::RayGeneration - Triple::Pixel == 7,
+ "incorrect HLSL stage order");
+static_assert(Triple::Intersection - Triple::Pixel == 8,
+ "incorrect HLSL stage order");
+static_assert(Triple::AnyHit - Triple::Pixel == 9,
+ "incorrect HLSL stage order");
+static_assert(Triple::ClosestHit - Triple::Pixel == 10,
+ "incorrect HLSL stage order");
+static_assert(Triple::Miss - Triple::Pixel == 11,
+ "incorrect HLSL stage order");
+static_assert(Triple::Callable - Triple::Pixel == 12,
+ "incorrect HLSL stage order");
+static_assert(Triple::Mesh - Triple::Pixel == 13,
+ "incorrect HLSL stage order");
+static_assert(Triple::Amplification - Triple::Pixel == 14,
+ "incorrect HLSL stage order");
diff --git a/llvm/unittests/ADT/TripleTest.cpp b/llvm/unittests/ADT/TripleTest.cpp
index 3824769a823ab..ca3163f43883e 100644
--- a/llvm/unittests/ADT/TripleTest.cpp
+++ b/llvm/unittests/ADT/TripleTest.cpp
@@ -662,6 +662,42 @@ TEST(TripleTest, ParsedIDs) {
EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
EXPECT_EQ(Triple::ShaderModel, T.getOS());
EXPECT_EQ(Triple::Library, T.getEnvironment());
+
+ T = Triple("dxil-unknown-shadermodel-raygeneration");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::ShaderModel, T.getOS());
+ EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());
+
+ T = Triple("dxil-unknown-shadermodel-intersection");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::ShaderModel, T.getOS());
+ EXPECT_EQ(Triple::Intersection, T.getEnvironment());
+
+ T = Triple("dxil-unknown-shadermodel-anyhit");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::ShaderModel, T.getOS());
+ EXPECT_EQ(Triple::AnyHit, T.getEnvironment());
+
+ T = Triple("dxil-unknown-shadermodel-closesthit");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::ShaderModel, T.getOS());
+ EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());
+
+ T = Triple("dxil-unknown-shadermodel-miss");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::ShaderModel, T.getOS());
+ EXPECT_EQ(Triple::Miss, T.getEnvironment());
+
+ T = Triple("dxil-unknown-shadermodel-callable");
+ EXPECT_EQ(Triple::dxil, T.getArch());
+ EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
+ EXPECT_EQ(Triple::ShaderModel, T.getOS());
+ EXPECT_EQ(Triple::Callable, T.getEnvironment());
T = Triple("dxil-unknown-shadermodel-mesh");
EXPECT_EQ(Triple::dxil, T.getArch());
More information about the cfe-commits
mailing list