brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 80c4900 Raw
55 lines · c
1//===----- hlsl_detail.h - HLSL definitions for intrinsics ----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef _HLSL_HLSL_DETAILS_H_10#define _HLSL_HLSL_DETAILS_H_11 12namespace hlsl {13 14namespace __detail {15 16template <typename T, typename U> struct is_same {17  static const bool value = false;18};19 20template <typename T> struct is_same<T, T> {21  static const bool value = true;22};23 24template <bool B, typename T> struct enable_if {};25 26template <typename T> struct enable_if<true, T> {27  using Type = T;28};29 30template <bool B, class T = void>31using enable_if_t = typename enable_if<B, T>::Type;32 33template <typename U, typename T, int N>34constexpr enable_if_t<sizeof(U) == sizeof(T), vector<U, N>>35bit_cast(vector<T, N> V) {36  return __builtin_bit_cast(vector<U, N>, V);37}38 39template <typename U, typename T>40constexpr enable_if_t<sizeof(U) == sizeof(T), U> bit_cast(T F) {41  return __builtin_bit_cast(U, F);42}43 44template <typename T> struct is_arithmetic {45  static const bool Value = __is_arithmetic(T);46};47 48template <typename T, int N>49using HLSL_FIXED_VECTOR =50    vector<__detail::enable_if_t<(N > 1 && N <= 4), T>, N>;51 52} // namespace __detail53} // namespace hlsl54#endif //_HLSL_HLSL_DETAILS_H_55