| /* |
| * Copyright 2017 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can |
| * be found in the LICENSE file. |
| * |
| */ |
| |
| #ifndef SKC_ONCE_TYPES |
| #define SKC_ONCE_TYPES |
| |
| // |
| // |
| // |
| |
| #if !defined(__OPENCL_C_VERSION__) |
| |
| // |
| // What is going on here is that OpenCL defines both host and device |
| // scalar and vector types. |
| // |
| // Our actual device kernels should try to use native compiler types |
| // for anything that's private to the kernel and the skc_* variant for |
| // types and composites that get pulled into host code. |
| // |
| // I'm not excited about redefining all the basic types but this is a |
| // reasonable solution that allows the code to bridge the host (C/C++) |
| // and device (OpenCL) environments as well as provide vector types. |
| // |
| |
| #ifdef __APPLE__ |
| #include "OpenCL/opencl.h" |
| #else |
| #include "CL/opencl.h" |
| #endif |
| |
| // |
| // |
| // |
| |
| #define SKC_TYPE_HELPER(t) skc_##t |
| #define SKC_TYPE(t) SKC_TYPE_HELPER(t) |
| |
| typedef cl_bool skc_bool; |
| |
| typedef cl_char skc_char; |
| typedef cl_char2 skc_char2; |
| typedef cl_char3 skc_char3; |
| typedef cl_char4 skc_char4; |
| typedef cl_char8 skc_char8; |
| typedef cl_char16 skc_char16; |
| |
| typedef cl_uchar skc_uchar; |
| typedef cl_uchar2 skc_uchar2; |
| typedef cl_uchar3 skc_uchar3; |
| typedef cl_uchar4 skc_uchar4; |
| typedef cl_uchar8 skc_uchar8; |
| typedef cl_uchar16 skc_uchar16; |
| |
| typedef cl_short skc_short; |
| typedef cl_short2 skc_short2; |
| typedef cl_short3 skc_short3; |
| typedef cl_short4 skc_short4; |
| typedef cl_short8 skc_short8; |
| typedef cl_short16 skc_short16; |
| |
| typedef cl_ushort skc_ushort; |
| typedef cl_ushort2 skc_ushort2; |
| typedef cl_ushort3 skc_ushort3; |
| typedef cl_ushort4 skc_ushort4; |
| typedef cl_ushort8 skc_ushort8; |
| typedef cl_ushort16 skc_ushort16; |
| |
| typedef cl_int skc_int; |
| typedef cl_int2 skc_int2; |
| typedef cl_int3 skc_int3; |
| typedef cl_int4 skc_int4; |
| typedef cl_int8 skc_int8; |
| typedef cl_int16 skc_int16; |
| |
| typedef cl_uint skc_uint; |
| typedef cl_uint2 skc_uint2; |
| typedef cl_uint3 skc_uint3; |
| typedef cl_uint4 skc_uint4; |
| typedef cl_uint8 skc_uint8; |
| typedef cl_uint16 skc_uint16; |
| |
| typedef cl_ulong skc_ulong; |
| typedef cl_ulong2 skc_ulong2; |
| typedef cl_ulong3 skc_ulong3; |
| typedef cl_ulong4 skc_ulong4; |
| typedef cl_ulong8 skc_ulong8; |
| typedef cl_ulong16 skc_ulong16; |
| |
| typedef cl_long skc_long; |
| typedef cl_long2 skc_long2; |
| typedef cl_long3 skc_long3; |
| typedef cl_long4 skc_long4; |
| typedef cl_long8 skc_long8; |
| typedef cl_long16 skc_long16; |
| |
| typedef cl_float skc_float; |
| typedef cl_float2 skc_float2; |
| typedef cl_float3 skc_float3; |
| typedef cl_float4 skc_float4; |
| typedef cl_float8 skc_float8; |
| typedef cl_float16 skc_float16; |
| |
| typedef cl_half skc_half; |
| |
| #if defined(__CL_HALF2__) |
| typedef cl_half2 skc_half2; |
| #endif |
| #if defined(__CL_HALF4__) |
| typedef cl_half4 skc_half4; |
| #endif |
| #if defined(__CL_HALF8__) |
| typedef cl_half8 skc_half8; |
| #endif |
| #if defined(__CL_HALF16__) |
| typedef cl_half16 skc_half16; |
| #endif |
| |
| // |
| // |
| // |
| |
| #else |
| |
| // |
| // |
| // |
| |
| #define SKC_TYPE(t) t |
| |
| typedef bool skc_bool; |
| |
| typedef char skc_char; |
| typedef char2 skc_char2; |
| typedef char3 skc_char3; |
| typedef char4 skc_char4; |
| typedef char8 skc_char8; |
| typedef char16 skc_char16; |
| |
| typedef uchar skc_uchar; |
| typedef uchar2 skc_uchar2; |
| typedef uchar3 skc_uchar3; |
| typedef uchar4 skc_uchar4; |
| typedef uchar8 skc_uchar8; |
| typedef uchar16 skc_uchar16; |
| |
| typedef short skc_short; |
| typedef short2 skc_short2; |
| typedef short3 skc_short3; |
| typedef short4 skc_short4; |
| typedef short8 skc_short8; |
| typedef short16 skc_short16; |
| |
| typedef ushort skc_ushort; |
| typedef ushort2 skc_ushort2; |
| typedef ushort3 skc_ushort3; |
| typedef ushort4 skc_ushort4; |
| typedef ushort8 skc_ushort8; |
| typedef ushort16 skc_ushort16; |
| |
| typedef int skc_int; |
| typedef int2 skc_int2; |
| typedef int3 skc_int3; |
| typedef int4 skc_int4; |
| typedef int8 skc_int8; |
| typedef int16 skc_int16; |
| |
| typedef uint skc_uint; |
| typedef uint2 skc_uint2; |
| typedef uint3 skc_uint3; |
| typedef uint4 skc_uint4; |
| typedef uint8 skc_uint8; |
| typedef uint16 skc_uint16; |
| |
| typedef ulong skc_ulong; |
| typedef ulong2 skc_ulong2; |
| typedef ulong3 skc_ulong3; |
| typedef ulong4 skc_ulong4; |
| typedef ulong8 skc_ulong8; |
| typedef ulong16 skc_ulong16; |
| |
| typedef long skc_long; |
| typedef long2 skc_long2; |
| typedef long3 skc_long3; |
| typedef long4 skc_long4; |
| typedef long8 skc_long8; |
| typedef long16 skc_long16; |
| |
| typedef float skc_float; |
| typedef float2 skc_float2; |
| typedef float3 skc_float3; |
| typedef float4 skc_float4; |
| typedef float8 skc_float8; |
| typedef float16 skc_float16; |
| |
| typedef half skc_half; |
| |
| #if defined(__CL_HALF2__) |
| typedef half2 skc_half2; |
| #endif |
| #if defined(__CL_HALF4__) |
| typedef half4 skc_half4; |
| #endif |
| #if defined(__CL_HALF8__) |
| typedef half8 skc_half8; |
| #endif |
| #if defined(__CL_HALF16__) |
| typedef half16 skc_half16; |
| #endif |
| |
| // |
| // |
| // |
| |
| #define SKC_AS_HELPER(t) as_##t |
| #define SKC_AS(t) SKC_AS_HELPER(t) |
| |
| #define SKC_CONVERT_HELPER(t) convert_##t |
| #define SKC_CONVERT(t) SKC_CONVERT_HELPER(t) |
| |
| // mode is: sat, rte, rtz, rtp, rtn --or-- sat_rte, sat_rtz, etc. |
| #define SKC_CONVERT_MODE_HELPER(t,m) convert_##t##_##m |
| #define SKC_CONVERT_MODE(t,m) SKC_CONVERT_HELPER(t) |
| |
| // |
| // |
| // |
| |
| #endif |
| |
| // |
| // |
| // |
| |
| #define SKC_UCHAR_MAX 0xFF |
| |
| #define SKC_SHORT_MAX 0x7FFF |
| #define SKC_SHORT_MIN (-SKC_SHORT_MAX - 1) |
| #define SKC_USHORT_MAX 0xFFFF |
| |
| #define SKC_INT_MAX 0x7FFFFFFF |
| #define SKC_INT_MIN (-SKC_INT_MAX - 1) |
| #define SKC_UINT_MAX 0xFFFFFFFF |
| |
| #define SKC_ULONG_MAX 0xFFFFFFFFFFFFFFFFL |
| |
| // |
| // |
| // |
| |
| #endif |
| |
| // |
| // |
| // |
| |