diff options
Diffstat (limited to 'thirdparty/embree/kernels/common/rtcore.h')
-rw-r--r-- | thirdparty/embree/kernels/common/rtcore.h | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/thirdparty/embree/kernels/common/rtcore.h b/thirdparty/embree/kernels/common/rtcore.h index ac58a84d6f..47526482c1 100644 --- a/thirdparty/embree/kernels/common/rtcore.h +++ b/thirdparty/embree/kernels/common/rtcore.h @@ -3,26 +3,14 @@ #pragma once -#include "../../include/embree3/rtcore.h" +#include "../../include/embree4/rtcore.h" RTC_NAMESPACE_USE namespace embree { /*! decoding of intersection flags */ - __forceinline bool isCoherent (RTCIntersectContextFlags flags) { return (flags & RTC_INTERSECT_CONTEXT_FLAG_COHERENT) == RTC_INTERSECT_CONTEXT_FLAG_COHERENT; } - __forceinline bool isIncoherent(RTCIntersectContextFlags flags) { return (flags & RTC_INTERSECT_CONTEXT_FLAG_COHERENT) == RTC_INTERSECT_CONTEXT_FLAG_INCOHERENT; } - -#if defined(TASKING_TBB) && (TBB_INTERFACE_VERSION_MAJOR >= 8) -# define USE_TASK_ARENA 1 -#else -# define USE_TASK_ARENA 0 -#endif - -#if defined(TASKING_TBB) && (TBB_INTERFACE_VERSION >= 11009) // TBB 2019 Update 9 -# define TASKING_TBB_USE_TASK_ISOLATION 1 -#else -# define TASKING_TBB_USE_TASK_ISOLATION 0 -#endif + __forceinline bool isCoherent (RTCRayQueryFlags flags) { return (flags & RTC_RAY_QUERY_FLAG_COHERENT) == RTC_RAY_QUERY_FLAG_COHERENT; } + __forceinline bool isIncoherent(RTCRayQueryFlags flags) { return (flags & RTC_RAY_QUERY_FLAG_COHERENT) == RTC_RAY_QUERY_FLAG_INCOHERENT; } /*! Macros used in the rtcore API implementation */ // -- GODOT start -- @@ -30,8 +18,8 @@ namespace embree #define RTC_CATCH_END(device) #define RTC_CATCH_END2(scene) #define RTC_CATCH_END2_FALSE(scene) return false; - #if 0 +// -- GODOT end -- #define RTC_CATCH_BEGIN try { #define RTC_CATCH_END(device) \ @@ -47,7 +35,7 @@ namespace embree #define RTC_CATCH_END2(scene) \ } catch (std::bad_alloc&) { \ - Device* device = scene ? scene->device : nullptr; \ + Device* device = scene ? scene->device : nullptr; \ Device::process_error(device,RTC_ERROR_OUT_OF_MEMORY,"out of memory"); \ } catch (rtcore_error& e) { \ Device* device = scene ? scene->device : nullptr; \ @@ -78,9 +66,9 @@ namespace embree Device::process_error(device,RTC_ERROR_UNKNOWN,"unknown exception caught"); \ return false; \ } -#endif -// -- GODOT end -- +#endif + #define RTC_VERIFY_HANDLE(handle) \ if (handle == nullptr) { \ throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"invalid argument"); \ @@ -137,5 +125,38 @@ namespace embree // -- GODOT end -- #define RTC_BUILD_ARGUMENTS_HAS(settings,member) \ - (settings.byteSize > (offsetof(RTCBuildArguments,member)+sizeof(settings.member))) + (settings.byteSize > (offsetof(RTCBuildArguments,member)+sizeof(settings.member))) + + + inline void storeTransform(const AffineSpace3fa& space, RTCFormat format, float* xfm) + { + switch (format) + { + case RTC_FORMAT_FLOAT3X4_ROW_MAJOR: + xfm[ 0] = space.l.vx.x; xfm[ 1] = space.l.vy.x; xfm[ 2] = space.l.vz.x; xfm[ 3] = space.p.x; + xfm[ 4] = space.l.vx.y; xfm[ 5] = space.l.vy.y; xfm[ 6] = space.l.vz.y; xfm[ 7] = space.p.y; + xfm[ 8] = space.l.vx.z; xfm[ 9] = space.l.vy.z; xfm[10] = space.l.vz.z; xfm[11] = space.p.z; + break; + + case RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR: + xfm[ 0] = space.l.vx.x; xfm[ 1] = space.l.vx.y; xfm[ 2] = space.l.vx.z; + xfm[ 3] = space.l.vy.x; xfm[ 4] = space.l.vy.y; xfm[ 5] = space.l.vy.z; + xfm[ 6] = space.l.vz.x; xfm[ 7] = space.l.vz.y; xfm[ 8] = space.l.vz.z; + xfm[ 9] = space.p.x; xfm[10] = space.p.y; xfm[11] = space.p.z; + break; + + case RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR: + xfm[ 0] = space.l.vx.x; xfm[ 1] = space.l.vx.y; xfm[ 2] = space.l.vx.z; xfm[ 3] = 0.f; + xfm[ 4] = space.l.vy.x; xfm[ 5] = space.l.vy.y; xfm[ 6] = space.l.vy.z; xfm[ 7] = 0.f; + xfm[ 8] = space.l.vz.x; xfm[ 9] = space.l.vz.y; xfm[10] = space.l.vz.z; xfm[11] = 0.f; + xfm[12] = space.p.x; xfm[13] = space.p.y; xfm[14] = space.p.z; xfm[15] = 1.f; + break; + + default: +#if !defined(__SYCL_DEVICE_ONLY__) + throw_RTCError(RTC_ERROR_INVALID_OPERATION, "invalid matrix format"); +#endif + break; + } + } } |