| //===- HLSLRuntime.h - HLSL Runtime -----------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| /// \file |
| /// Defines helper utilities for supporting the HLSL runtime environment. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef CLANG_BASIC_HLSLRUNTIME_H |
| #define CLANG_BASIC_HLSLRUNTIME_H |
| |
| #include "clang/Basic/LangOptions.h" |
| #include <cstdint> |
| |
| namespace clang { |
| namespace hlsl { |
| |
| constexpr ShaderStage |
| getStageFromEnvironment(const llvm::Triple::EnvironmentType &E) { |
| uint32_t Pipeline = |
| static_cast<uint32_t>(E) - static_cast<uint32_t>(llvm::Triple::Pixel); |
| |
| if (Pipeline > (uint32_t)ShaderStage::Invalid) |
| return ShaderStage::Invalid; |
| return static_cast<ShaderStage>(Pipeline); |
| } |
| |
| #define ENUM_COMPARE_ASSERT(Value) \ |
| static_assert( \ |
| getStageFromEnvironment(llvm::Triple::Value) == ShaderStage::Value, \ |
| "Mismatch between llvm::Triple and clang::ShaderStage for " #Value); |
| |
| ENUM_COMPARE_ASSERT(Pixel) |
| ENUM_COMPARE_ASSERT(Vertex) |
| ENUM_COMPARE_ASSERT(Geometry) |
| ENUM_COMPARE_ASSERT(Hull) |
| ENUM_COMPARE_ASSERT(Domain) |
| ENUM_COMPARE_ASSERT(Compute) |
| ENUM_COMPARE_ASSERT(Library) |
| ENUM_COMPARE_ASSERT(RayGeneration) |
| ENUM_COMPARE_ASSERT(Intersection) |
| ENUM_COMPARE_ASSERT(AnyHit) |
| ENUM_COMPARE_ASSERT(ClosestHit) |
| ENUM_COMPARE_ASSERT(Miss) |
| ENUM_COMPARE_ASSERT(Callable) |
| ENUM_COMPARE_ASSERT(Mesh) |
| ENUM_COMPARE_ASSERT(Amplification) |
| |
| static_assert(getStageFromEnvironment(llvm::Triple::UnknownEnvironment) == |
| ShaderStage::Invalid, |
| "Mismatch between llvm::Triple and " |
| "clang::ShaderStage for Invalid"); |
| static_assert(getStageFromEnvironment(llvm::Triple::MSVC) == |
| ShaderStage::Invalid, |
| "Mismatch between llvm::Triple and " |
| "clang::ShaderStage for Invalid"); |
| |
| } // namespace hlsl |
| } // namespace clang |
| |
| #endif // CLANG_BASIC_HLSLRUNTIME_H |