//===- 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 namespace clang { namespace hlsl { constexpr ShaderStage getStageFromEnvironment(const llvm::Triple::EnvironmentType &E) { uint32_t Pipeline = static_cast(E) - static_cast(llvm::Triple::Pixel); if (Pipeline > (uint32_t)ShaderStage::Invalid) return ShaderStage::Invalid; return static_cast(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