Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:33

0001 #pragma once
0002 /**
0003 scuda_templated.h
0004 ===================
0005 
0006 Use F2/F4/F4 within "template<typename F>" functions 
0007 to standin for float2/3/4 or double2/3/4 in a more flexible way. 
0008 
0009 Inspired by:
0010 
0011 * :google:`CUDA templated float3 or double3`
0012 * https://forums.developer.nvidia.com/t/no-instance-of-function-template-matches-the-argument-list/19831
0013 
0014 **/
0015 
0016 
0017 template <typename F> struct vec2         { typedef float   Type; }; // dummy 
0018 template <typename F> struct vec3         { typedef float   Type; }; // dummy 
0019 template <typename F> struct vec4         { typedef float   Type; }; // dummy 
0020 template <typename F> struct vquad        { typedef float   Type; }; // dummy 
0021 
0022 template <>           struct vec2<float>  { typedef float2  Type; };
0023 template <>           struct vec3<float>  { typedef float3  Type; };
0024 template <>           struct vec4<float>  { typedef float4  Type; };
0025 template <>           struct vquad<float> { typedef quad    Type; };
0026 
0027 #ifdef WITH_SCUDA_DOUBLE
0028 template <>           struct vec2<double> { typedef double2 Type; };
0029 template <>           struct vec3<double> { typedef double3 Type; };
0030 template <>           struct vec4<double> { typedef double4 Type; };
0031 template <>           struct vquad<double> { typedef dquad Type; };
0032 #endif
0033 
0034 #define F2 typename vec2<F>::Type
0035 #define F3 typename vec3<F>::Type
0036 #define F4 typename vec4<F>::Type
0037 #define Q4 typename vquad<F>::Type
0038 
0039