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()); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits