typedef struct {
float4 m[3];
} float3x4;
__constant__ float3x4 c_invViewMatrix_bk;
struct Ray {
float3 o; float3 d; };
__device__
int intersectBox(Ray r, float3 boxmin, float3 boxmax, float *tnear, float *tfar)
{
float3 invR = make_float3(1.0f) / r.d;
float3 tbot = invR * (boxmin - r.o);
float3 ttop = invR * (boxmax - r.o);
float3 tmin = fminf(ttop, tbot);
float3 tmax = fmaxf(ttop, tbot);
float largest_tmin = fmaxf(fmaxf(tmin.x, tmin.y), fmaxf(tmin.x, tmin.z));
float smallest_tmax = fminf(fminf(tmax.x, tmax.y), fminf(tmax.x, tmax.z));