Added #ifdef __SSE__ so it can still build when SSE is disabled at compile time
This commit is contained in:
@@ -33,11 +33,15 @@
|
||||
#include "rayobject_hint.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#ifdef __SSE__
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
|
||||
#ifndef RE_RAYTRACE_BVH_H
|
||||
#define RE_RAYTRACE_BVH_H
|
||||
|
||||
#ifdef __SSE__
|
||||
inline int test_bb_group4(__m128 *bb_group, const Isect *isec)
|
||||
{
|
||||
|
||||
@@ -53,6 +57,7 @@ inline int test_bb_group4(__m128 *bb_group, const Isect *isec)
|
||||
|
||||
return _mm_movemask_ps(_mm_cmpge_ps(tmax3, tmin3));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* bvh tree generics */
|
||||
@@ -159,6 +164,7 @@ static int bvh_node_stack_raycast(Node *root, Isect *isec)
|
||||
}
|
||||
|
||||
|
||||
#ifdef __SSE__
|
||||
/*
|
||||
* Generic SIMD bvh recursion
|
||||
* this was created to be able to use any simd (with the cost of some memmoves)
|
||||
@@ -287,6 +293,7 @@ static int bvh_node_stack_raycast_simd(Node *root, Isect *isec)
|
||||
}
|
||||
return hit;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* recursively transverse a BVH looking for a rayhit using system stack
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
#include "svbvh.h"
|
||||
#include "reorganize.h"
|
||||
|
||||
#ifdef __SSE__
|
||||
|
||||
#define DFS_STACK_SIZE 256
|
||||
|
||||
struct QBVHTree
|
||||
@@ -134,3 +136,14 @@ RayObject *RE_rayobject_qbvh_create(int size)
|
||||
{
|
||||
return bvh_create_tree<QBVHTree,DFS_STACK_SIZE>(size);
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
RayObject *RE_rayobject_qbvh_create(int size)
|
||||
{
|
||||
puts("WARNING: SSE disabled at compile time\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -30,6 +30,8 @@
|
||||
#include "svbvh.h"
|
||||
#include "reorganize.h"
|
||||
|
||||
#ifdef __SSE__
|
||||
|
||||
#define DFS_STACK_SIZE 256
|
||||
|
||||
struct SVBVHTree
|
||||
@@ -168,3 +170,12 @@ RayObject *RE_rayobject_svbvh_create(int size)
|
||||
{
|
||||
return bvh_create_tree<SVBVHTree,DFS_STACK_SIZE>(size);
|
||||
}
|
||||
#else
|
||||
|
||||
RayObject *RE_rayobject_svbvh_create(int size)
|
||||
{
|
||||
puts("WARNING: SSE disabled at compile time\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
#ifdef __SSE__
|
||||
|
||||
#ifndef RE_RAYTRACE_SVBVH_H
|
||||
#define RE_RAYTRACE_SVBVH_H
|
||||
|
||||
@@ -243,3 +245,5 @@ struct Reorganize_SVBVH
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif //__SSE__
|
||||
@@ -78,7 +78,7 @@ static int test_break(void *data)
|
||||
return re->test_break(re->tbh);
|
||||
}
|
||||
|
||||
static RE_rayobject_config_control(RayObject *r, Render *re)
|
||||
static void RE_rayobject_config_control(RayObject *r, Render *re)
|
||||
{
|
||||
if(RE_rayobject_isRayAPI(r))
|
||||
{
|
||||
@@ -96,10 +96,21 @@ RayObject* RE_rayobject_create(Render *re, int type, int size)
|
||||
{
|
||||
//TODO
|
||||
//if(detect_simd())
|
||||
type = R_RAYSTRUCTURE_SIMD_SVBVH;
|
||||
//else
|
||||
// type = R_RAYSTRUCTURE_VBVH;
|
||||
#ifdef __SSE__
|
||||
type = R_RAYSTRUCTURE_SIMD_SVBVH;
|
||||
#else
|
||||
type = R_RAYSTRUCTURE_VBVH;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef __SSE__
|
||||
if(type == R_RAYSTRUCTURE_SIMD_SVBVH || type == R_RAYSTRUCTURE_SIMD_QBVH)
|
||||
{
|
||||
puts("Warning: Using VBVH (SSE was disabled at compile time)");
|
||||
type = R_RAYSTRUCTURE_VBVH;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if(type == R_RAYSTRUCTURE_OCTREE) //TODO dynamic ocres
|
||||
res = RE_rayobject_octree_create(re->r.ocres, size);
|
||||
@@ -111,6 +122,9 @@ RayObject* RE_rayobject_create(Render *re, int type, int size)
|
||||
res = RE_rayobject_svbvh_create(size);
|
||||
else if(type == R_RAYSTRUCTURE_SIMD_QBVH)
|
||||
res = RE_rayobject_qbvh_create(size);
|
||||
else
|
||||
res = RE_rayobject_vbvh_create(size); //Fallback
|
||||
|
||||
|
||||
if(res)
|
||||
RE_rayobject_config_control( res, re );
|
||||
|
||||
Reference in New Issue
Block a user