22 #ifndef __ND_CU_VECTOR_H__
23 #define __ND_CU_VECTOR_H__
26 #include <vector_types.h>
27 #include <cuda_runtime.h>
28 #include <ndNewtonStdafx.h>
29 #include "cuIntrinsics.h"
34 inline __device__ __host__
cuVector()
38 inline __device__ __host__
cuVector(
float val)
46 inline __device__ __host__
cuVector(
float val_x,
float val_y,
float val_z,
float val_w)
72 return ndVector(src.x, src.y, src.z, src.w);
75 inline float __device__ __host__ GetElement(
int i)
const
80 inline void __device__ __host__ SetElement(
int i,
float val)
87 return cuVector(x + A.x, y + A.y, z + A.z, w + A.w);
92 return cuVector(x - A.x, y - A.y, z - A.z, w - A.w);
97 return cuVector(x * A.x, y * A.y, z * A.z, w * A.w);
103 cuSelect(x > A.x, 1.0f, 0.0f),
104 cuSelect(y > A.y, 1.0f, 0.0f),
105 cuSelect(z > A.z, 1.0f, 0.0f),
106 cuSelect(w > A.w, 1.0f, 0.0f));
112 cuSelect(x < A.x, 1.0f, 0.0f),
113 cuSelect(y < A.y, 1.0f, 0.0f),
114 cuSelect(z < A.z, 1.0f, 0.0f),
115 cuSelect(w < A.w, 1.0f, 0.0f));
118 inline cuVector __device__ __host__ Abs()
const
120 return cuVector(cuAbs(x), cuAbs(y), cuAbs(z), cuAbs(w));
130 return cuVector(cuMin(x, A.x), cuMin(y, A.y), cuMin(z, A.z), cuMin(w, A.w));
135 return cuVector(cuMax(x, A.x), cuMax(y, A.y), cuMax(z, A.z), cuMax(w, A.w));
138 inline cuVector __device__ __host__ Floor()
const
140 return cuVector(cuFloor(x), cuFloor(y), cuFloor(z), cuFloor(w));
143 inline cuVector __device__ __host__ Scale(
float s)
const
145 return cuVector(x * s, y * s, z * s, w * s);
148 inline float __device__ __host__ AddHorizontal()
const
150 return x + y + z + w;
153 inline float __device__ __host__ DotProduct(
const cuVector& B)
const
155 return (*
this * B).AddHorizontal();
166 inline cuVector __device__ __host__ Normalize()
const
168 float den = 1.0f / sqrt(DotProduct(*
this));
169 return cuVector(x * den, y * den, z * den, w * den);