|
@@ -46,19 +46,23 @@ RTC_NAMESPACE_BEGIN;
|
|
|
|
|
|
RTC_API bool rtcIsSYCLDeviceSupported(const sycl::device device)
|
|
RTC_API bool rtcIsSYCLDeviceSupported(const sycl::device device)
|
|
{
|
|
{
|
|
- RTC_CATCH_BEGIN;
|
|
|
|
- RTC_TRACE(rtcIsSYCLDeviceSupported);
|
|
|
|
- return rthwifIsSYCLDeviceSupported(device) > 0;
|
|
|
|
- RTC_CATCH_END(nullptr);
|
|
|
|
|
|
+ try {
|
|
|
|
+ RTC_TRACE(rtcIsSYCLDeviceSupported);
|
|
|
|
+ return rthwifIsSYCLDeviceSupported(device) > 0;
|
|
|
|
+ } catch (...) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
RTC_API int rtcSYCLDeviceSelector(const sycl::device device)
|
|
RTC_API int rtcSYCLDeviceSelector(const sycl::device device)
|
|
{
|
|
{
|
|
- RTC_CATCH_BEGIN;
|
|
|
|
- RTC_TRACE(rtcSYCLDeviceSelector);
|
|
|
|
- return rthwifIsSYCLDeviceSupported(device);
|
|
|
|
- RTC_CATCH_END(nullptr);
|
|
|
|
|
|
+ try {
|
|
|
|
+ RTC_TRACE(rtcSYCLDeviceSelector);
|
|
|
|
+ return rthwifIsSYCLDeviceSupported(device);
|
|
|
|
+ } catch (...) {
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -79,6 +83,29 @@ RTC_NAMESPACE_BEGIN;
|
|
RTC_CATCH_END(nullptr);
|
|
RTC_CATCH_END(nullptr);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API_CPP sycl::event rtcCommitSceneWithQueue (RTCScene hscene, sycl::queue queue)
|
|
|
|
+ {
|
|
|
|
+ Scene* scene = (Scene*) hscene;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcCommitSceneWithQueue);
|
|
|
|
+ RTC_VERIFY_HANDLE(hscene);
|
|
|
|
+ RTC_ENTER_DEVICE(hscene);
|
|
|
|
+ return scene->commit(false, queue);
|
|
|
|
+ RTC_CATCH_END2(scene);
|
|
|
|
+ return sycl::event();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API_CPP sycl::event rtcCommitBufferWithQueue(RTCBuffer hbuffer, sycl::queue queue) {
|
|
|
|
+ Buffer* buffer = (Buffer*)hbuffer;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcCommitBufferWithQueue);
|
|
|
|
+ RTC_VERIFY_HANDLE(hbuffer);
|
|
|
|
+ RTC_ENTER_DEVICE(hbuffer);
|
|
|
|
+ return buffer->commit(queue);
|
|
|
|
+ RTC_CATCH_END2(buffer);
|
|
|
|
+ return sycl::event();
|
|
|
|
+ }
|
|
|
|
+
|
|
#endif
|
|
#endif
|
|
|
|
|
|
RTC_API void rtcRetainDevice(RTCDevice hdevice)
|
|
RTC_API void rtcRetainDevice(RTCDevice hdevice)
|
|
@@ -138,6 +165,17 @@ RTC_NAMESPACE_BEGIN;
|
|
return RTC_ERROR_UNKNOWN;
|
|
return RTC_ERROR_UNKNOWN;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API const char* rtcGetDeviceLastErrorMessage(RTCDevice hdevice)
|
|
|
|
+ {
|
|
|
|
+ Device* device = (Device*) hdevice;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcGetDeviceLastErrorMessage);
|
|
|
|
+ if (device == nullptr) return Device::getThreadLastErrorMessage();
|
|
|
|
+ else return device->getDeviceLastErrorMessage();
|
|
|
|
+ RTC_CATCH_END(device);
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void rtcSetDeviceErrorFunction(RTCDevice hdevice, RTCErrorFunction error, void* userPtr)
|
|
RTC_API void rtcSetDeviceErrorFunction(RTCDevice hdevice, RTCErrorFunction error, void* userPtr)
|
|
{
|
|
{
|
|
Device* device = (Device*) hdevice;
|
|
Device* device = (Device*) hdevice;
|
|
@@ -163,7 +201,19 @@ RTC_NAMESPACE_BEGIN;
|
|
RTC_TRACE(rtcNewBuffer);
|
|
RTC_TRACE(rtcNewBuffer);
|
|
RTC_VERIFY_HANDLE(hdevice);
|
|
RTC_VERIFY_HANDLE(hdevice);
|
|
RTC_ENTER_DEVICE(hdevice);
|
|
RTC_ENTER_DEVICE(hdevice);
|
|
- Buffer* buffer = new Buffer((Device*)hdevice, byteSize);
|
|
|
|
|
|
+ Buffer* buffer = new Buffer((Device*)hdevice, byteSize, nullptr);
|
|
|
|
+ return (RTCBuffer)buffer->refInc();
|
|
|
|
+ RTC_CATCH_END((Device*)hdevice);
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API RTCBuffer rtcNewBufferHostDevice(RTCDevice hdevice, size_t byteSize)
|
|
|
|
+ {
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcNewBufferHostDevice);
|
|
|
|
+ RTC_VERIFY_HANDLE(hdevice);
|
|
|
|
+ RTC_ENTER_DEVICE(hdevice);
|
|
|
|
+ Buffer* buffer = new Buffer((Device*)hdevice, byteSize, nullptr, nullptr);
|
|
return (RTCBuffer)buffer->refInc();
|
|
return (RTCBuffer)buffer->refInc();
|
|
RTC_CATCH_END((Device*)hdevice);
|
|
RTC_CATCH_END((Device*)hdevice);
|
|
return nullptr;
|
|
return nullptr;
|
|
@@ -181,6 +231,30 @@ RTC_NAMESPACE_BEGIN;
|
|
return nullptr;
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API RTCBuffer rtcNewSharedBufferHostDevice(RTCDevice hdevice, void* ptr, size_t byteSize)
|
|
|
|
+ {
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcNewSharedBufferHostDevice);
|
|
|
|
+ RTC_VERIFY_HANDLE(hdevice);
|
|
|
|
+ RTC_ENTER_DEVICE(hdevice);
|
|
|
|
+ Buffer* buffer = new Buffer((Device*)hdevice, byteSize, ptr, nullptr);
|
|
|
|
+ return (RTCBuffer)buffer->refInc();
|
|
|
|
+ RTC_CATCH_END((Device*)hdevice);
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void* rtcGetBufferDataDevice(RTCBuffer hbuffer)
|
|
|
|
+ {
|
|
|
|
+ Buffer* buffer = (Buffer*)hbuffer;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcGetBufferDataDevice);
|
|
|
|
+ RTC_VERIFY_HANDLE(hbuffer);
|
|
|
|
+ RTC_ENTER_DEVICE(hbuffer);
|
|
|
|
+ return buffer->dataDevice();
|
|
|
|
+ RTC_CATCH_END2(buffer);
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void* rtcGetBufferData(RTCBuffer hbuffer)
|
|
RTC_API void* rtcGetBufferData(RTCBuffer hbuffer)
|
|
{
|
|
{
|
|
Buffer* buffer = (Buffer*)hbuffer;
|
|
Buffer* buffer = (Buffer*)hbuffer;
|
|
@@ -215,6 +289,16 @@ RTC_NAMESPACE_BEGIN;
|
|
RTC_CATCH_END2(buffer);
|
|
RTC_CATCH_END2(buffer);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API void rtcCommitBuffer(RTCBuffer hbuffer) {
|
|
|
|
+ Buffer* buffer = (Buffer*)hbuffer;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcCommitBuffer);
|
|
|
|
+ RTC_VERIFY_HANDLE(hbuffer);
|
|
|
|
+ RTC_ENTER_DEVICE(hbuffer);
|
|
|
|
+ buffer->commit();
|
|
|
|
+ RTC_CATCH_END2(buffer);
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API RTCScene rtcNewScene (RTCDevice hdevice)
|
|
RTC_API RTCScene rtcNewScene (RTCDevice hdevice)
|
|
{
|
|
{
|
|
RTC_CATCH_BEGIN;
|
|
RTC_CATCH_BEGIN;
|
|
@@ -238,6 +322,20 @@ RTC_NAMESPACE_BEGIN;
|
|
return (RTCDevice)nullptr;
|
|
return (RTCDevice)nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API RTCTraversable rtcGetSceneTraversable(RTCScene hscene)
|
|
|
|
+ {
|
|
|
|
+ Scene* scene = (Scene*) hscene;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcGetSceneTraversable);
|
|
|
|
+ RTC_VERIFY_HANDLE(hscene);
|
|
|
|
+ RTCTraversable traversable = (RTCTraversable)scene->getTraversable();
|
|
|
|
+ if (!traversable)
|
|
|
|
+ throw_RTCError(RTC_ERROR_INVALID_OPERATION,"Traversable is NULL. The scene has to be committed first.");
|
|
|
|
+ return traversable;
|
|
|
|
+ RTC_CATCH_END2(scene);
|
|
|
|
+ return (RTCTraversable)nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void rtcSetSceneProgressMonitorFunction(RTCScene hscene, RTCProgressMonitorFunction progress, void* ptr)
|
|
RTC_API void rtcSetSceneProgressMonitorFunction(RTCScene hscene, RTCProgressMonitorFunction progress, void* ptr)
|
|
{
|
|
{
|
|
Scene* scene = (Scene*) hscene;
|
|
Scene* scene = (Scene*) hscene;
|
|
@@ -257,15 +355,10 @@ RTC_NAMESPACE_BEGIN;
|
|
RTC_TRACE(rtcSetSceneBuildQuality);
|
|
RTC_TRACE(rtcSetSceneBuildQuality);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
RTC_ENTER_DEVICE(hscene);
|
|
RTC_ENTER_DEVICE(hscene);
|
|
- //if (quality != RTC_BUILD_QUALITY_LOW &&
|
|
|
|
- // quality != RTC_BUILD_QUALITY_MEDIUM &&
|
|
|
|
- // quality != RTC_BUILD_QUALITY_HIGH)
|
|
|
|
- // throw std::runtime_error("invalid build quality");
|
|
|
|
if (quality != RTC_BUILD_QUALITY_LOW &&
|
|
if (quality != RTC_BUILD_QUALITY_LOW &&
|
|
quality != RTC_BUILD_QUALITY_MEDIUM &&
|
|
quality != RTC_BUILD_QUALITY_MEDIUM &&
|
|
- quality != RTC_BUILD_QUALITY_HIGH) {
|
|
|
|
- abort();
|
|
|
|
- }
|
|
|
|
|
|
+ quality != RTC_BUILD_QUALITY_HIGH)
|
|
|
|
+ abort(); //throw std::runtime_error("invalid build quality");
|
|
scene->setBuildQuality(quality);
|
|
scene->setBuildQuality(quality);
|
|
RTC_CATCH_END2(scene);
|
|
RTC_CATCH_END2(scene);
|
|
}
|
|
}
|
|
@@ -287,20 +380,28 @@ RTC_NAMESPACE_BEGIN;
|
|
RTC_CATCH_BEGIN;
|
|
RTC_CATCH_BEGIN;
|
|
RTC_TRACE(rtcGetSceneFlags);
|
|
RTC_TRACE(rtcGetSceneFlags);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
- RTC_ENTER_DEVICE(hscene);
|
|
|
|
|
|
+ //RTC_ENTER_DEVICE(hscene);
|
|
return scene->getSceneFlags();
|
|
return scene->getSceneFlags();
|
|
RTC_CATCH_END2(scene);
|
|
RTC_CATCH_END2(scene);
|
|
return RTC_SCENE_FLAG_NONE;
|
|
return RTC_SCENE_FLAG_NONE;
|
|
}
|
|
}
|
|
-
|
|
|
|
- RTC_API void rtcCommitScene (RTCScene hscene)
|
|
|
|
|
|
+
|
|
|
|
+ RTC_API_EXTERN_C bool prefetchUSMSharedOnGPU(RTCScene scene);
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcCommitScene (RTCScene hscene)
|
|
{
|
|
{
|
|
Scene* scene = (Scene*) hscene;
|
|
Scene* scene = (Scene*) hscene;
|
|
RTC_CATCH_BEGIN;
|
|
RTC_CATCH_BEGIN;
|
|
RTC_TRACE(rtcCommitScene);
|
|
RTC_TRACE(rtcCommitScene);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
RTC_ENTER_DEVICE(hscene);
|
|
RTC_ENTER_DEVICE(hscene);
|
|
|
|
+
|
|
scene->commit(false);
|
|
scene->commit(false);
|
|
|
|
+
|
|
|
|
+#if defined(EMBREE_SYCL_SUPPORT)
|
|
|
|
+ //prefetchUSMSharedOnGPU(hscene);
|
|
|
|
+#endif
|
|
|
|
+
|
|
RTC_CATCH_END2(scene);
|
|
RTC_CATCH_END2(scene);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -311,6 +412,7 @@ RTC_NAMESPACE_BEGIN;
|
|
RTC_TRACE(rtcJoinCommitScene);
|
|
RTC_TRACE(rtcJoinCommitScene);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
RTC_VERIFY_HANDLE(hscene);
|
|
RTC_ENTER_DEVICE(hscene);
|
|
RTC_ENTER_DEVICE(hscene);
|
|
|
|
+
|
|
scene->commit(true);
|
|
scene->commit(true);
|
|
RTC_CATCH_END2(scene);
|
|
RTC_CATCH_END2(scene);
|
|
}
|
|
}
|
|
@@ -1130,7 +1232,159 @@ RTC_NAMESPACE_BEGIN;
|
|
rtcForwardOccludedN<RTCRay16,16>(valid, args, hscene, iray, instID, instPrimID);
|
|
rtcForwardOccludedN<RTCRay16,16>(valid, args, hscene, iray, instID, instPrimID);
|
|
RTC_CATCH_END2(scene);
|
|
RTC_CATCH_END2(scene);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ RTC_API bool rtcTraversablePointQuery(RTCTraversable htraversable, RTCPointQuery* query, RTCPointQueryContext* userContext, RTCPointQueryFunction queryFunc, void* userPtr)
|
|
|
|
+ {
|
|
|
|
+ return rtcPointQuery((RTCScene)htraversable, query, userContext, queryFunc, userPtr);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API bool rtcTraversablePointQuery4 (const int* valid, RTCTraversable htraversable, RTCPointQuery4* query, struct RTCPointQueryContext* userContext, RTCPointQueryFunction queryFunc, void** userPtrN)
|
|
|
|
+ {
|
|
|
|
+ return rtcPointQuery4(valid, (RTCScene)htraversable, query, userContext, queryFunc, userPtrN);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API bool rtcTraversablePointQuery8 (const int* valid, RTCTraversable htraversable, RTCPointQuery8* query, struct RTCPointQueryContext* userContext, RTCPointQueryFunction queryFunc, void** userPtrN)
|
|
|
|
+ {
|
|
|
|
+ return rtcPointQuery8(valid, (RTCScene)htraversable, query, userContext, queryFunc, userPtrN);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API bool rtcTraversablePointQuery16 (const int* valid, RTCTraversable htraversable, RTCPointQuery16* query, struct RTCPointQueryContext* userContext, RTCPointQueryFunction queryFunc, void** userPtrN)
|
|
|
|
+ {
|
|
|
|
+ return rtcPointQuery16(valid, (RTCScene)htraversable, query, userContext, queryFunc, userPtrN);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableIntersect1 (RTCTraversable htraversable, RTCRayHit* rayhit, RTCIntersectArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcIntersect1((RTCScene)htraversable, rayhit, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect1 (const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay* iray_, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect1(args, (RTCScene)htraversable, iray_, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect1Ex(const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay* iray_, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect1Ex(args, (RTCScene)htraversable, iray_, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableIntersect4 (const int* valid, RTCTraversable htraversable, RTCRayHit4* rayhit, RTCIntersectArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcIntersect4(valid, (RTCScene)htraversable, rayhit, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template<typename RTCRay, typename RTCRayHit, int N>
|
|
|
|
+ __forceinline void rtcTraversableForwardIntersectN(const int* valid, const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersetN(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect4(const int* valid, const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay4* iray, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect4(valid, args, (RTCScene)htraversable, iray, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect4Ex(const int* valid, const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay4* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect4Ex(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableIntersect8 (const int* valid, RTCTraversable htraversable, RTCRayHit8* rayhit, RTCIntersectArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcIntersect8(valid, (RTCScene)htraversable, rayhit, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect8(const int* valid, const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay8* iray, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect8(valid, args, (RTCScene)htraversable, iray, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect8Ex(const int* valid, const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay8* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect8Ex(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableIntersect16 (const int* valid, RTCTraversable htraversable, RTCRayHit16* rayhit, RTCIntersectArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcIntersect16(valid, (RTCScene)htraversable, rayhit, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect16(const int* valid, const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay16* iray, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect16(valid, args, (RTCScene)htraversable, iray, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardIntersect16Ex(const int* valid, const RTCIntersectFunctionNArguments* args, RTCTraversable htraversable, RTCRay16* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardIntersect16Ex(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableOccluded1 (RTCTraversable htraversable, RTCRay* ray, RTCOccludedArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcOccluded1((RTCScene)htraversable, ray, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded1 (const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay* iray_, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded1(args, (RTCScene)htraversable, iray_, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded1Ex(const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay* iray_, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded1Ex(args, (RTCScene)htraversable, iray_, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableOccluded4 (const int* valid, RTCTraversable htraversable, RTCRay4* ray, RTCOccludedArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcOccluded4(valid, (RTCScene)htraversable, ray, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ template<typename RTCRay, int N>
|
|
|
|
+ __forceinline void rtcTraversableForwardOccludedN (const int* valid, const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccludedN(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded4(const int* valid, const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay4* iray, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded4(valid, args, (RTCScene)htraversable, iray, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded4Ex(const int* valid, const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay4* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded4Ex(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableOccluded8 (const int* valid, RTCTraversable htraversable, RTCRay8* ray, RTCOccludedArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcOccluded8(valid, (RTCScene)htraversable, ray, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded8(const int* valid, const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay8* iray, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded8(valid, args, (RTCScene)htraversable, iray, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded8Ex(const int* valid, const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay8* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded8Ex(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableOccluded16 (const int* valid, RTCTraversable htraversable, RTCRay16* ray, RTCOccludedArguments* args)
|
|
|
|
+ {
|
|
|
|
+ rtcOccluded16(valid, (RTCScene)htraversable, ray, args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded16(const int* valid, const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay16* iray, unsigned int instID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded16(valid, args, (RTCScene)htraversable, iray, instID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void rtcTraversableForwardOccluded16Ex(const int* valid, const RTCOccludedFunctionNArguments* args, RTCTraversable htraversable, RTCRay16* iray, unsigned int instID, unsigned int instPrimID)
|
|
|
|
+ {
|
|
|
|
+ rtcForwardOccluded16Ex(valid, args, (RTCScene)htraversable, iray, instID, instPrimID);
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void rtcRetainScene (RTCScene hscene)
|
|
RTC_API void rtcRetainScene (RTCScene hscene)
|
|
{
|
|
{
|
|
Scene* scene = (Scene*) hscene;
|
|
Scene* scene = (Scene*) hscene;
|
|
@@ -1292,6 +1546,11 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
RTC_CATCH_END2(scene);
|
|
RTC_CATCH_END2(scene);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API void rtcGetGeometryTransformFromTraversable(RTCTraversable htraversable, unsigned int geomID, float time, RTCFormat format, void* xfm)
|
|
|
|
+ {
|
|
|
|
+ rtcGetGeometryTransformFromScene((RTCScene)htraversable, geomID, time, format, xfm);
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void rtcInvokeIntersectFilterFromGeometry(const struct RTCIntersectFunctionNArguments* const args_i, const struct RTCFilterFunctionNArguments* filter_args)
|
|
RTC_API void rtcInvokeIntersectFilterFromGeometry(const struct RTCIntersectFunctionNArguments* const args_i, const struct RTCFilterFunctionNArguments* filter_args)
|
|
{
|
|
{
|
|
IntersectFunctionNArguments* args = (IntersectFunctionNArguments*) args_i;
|
|
IntersectFunctionNArguments* args = (IntersectFunctionNArguments*) args_i;
|
|
@@ -1568,17 +1827,11 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
RTC_TRACE(rtcSetGeometryBuildQuality);
|
|
RTC_TRACE(rtcSetGeometryBuildQuality);
|
|
RTC_VERIFY_HANDLE(hgeometry);
|
|
RTC_VERIFY_HANDLE(hgeometry);
|
|
RTC_ENTER_DEVICE(hgeometry);
|
|
RTC_ENTER_DEVICE(hgeometry);
|
|
- //if (quality != RTC_BUILD_QUALITY_LOW &&
|
|
|
|
- // quality != RTC_BUILD_QUALITY_MEDIUM &&
|
|
|
|
- // quality != RTC_BUILD_QUALITY_HIGH &&
|
|
|
|
- // quality != RTC_BUILD_QUALITY_REFIT)
|
|
|
|
- // throw std::runtime_error("invalid build quality");
|
|
|
|
if (quality != RTC_BUILD_QUALITY_LOW &&
|
|
if (quality != RTC_BUILD_QUALITY_LOW &&
|
|
quality != RTC_BUILD_QUALITY_MEDIUM &&
|
|
quality != RTC_BUILD_QUALITY_MEDIUM &&
|
|
quality != RTC_BUILD_QUALITY_HIGH &&
|
|
quality != RTC_BUILD_QUALITY_HIGH &&
|
|
- quality != RTC_BUILD_QUALITY_REFIT) {
|
|
|
|
- abort();
|
|
|
|
- }
|
|
|
|
|
|
+ quality != RTC_BUILD_QUALITY_REFIT)
|
|
|
|
+ abort(); //throw std::runtime_error("invalid build quality");
|
|
geometry->setBuildQuality(quality);
|
|
geometry->setBuildQuality(quality);
|
|
RTC_CATCH_END2(geometry);
|
|
RTC_CATCH_END2(geometry);
|
|
}
|
|
}
|
|
@@ -1667,6 +1920,37 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
RTC_CATCH_END2(geometry);
|
|
RTC_CATCH_END2(geometry);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API void rtcSetSharedGeometryBufferHostDevice(RTCGeometry hgeometry, RTCBufferType type, unsigned int slot, RTCFormat format, const void* ptr, const void* dptr, size_t byteOffset, size_t byteStride, size_t itemCount)
|
|
|
|
+ {
|
|
|
|
+ Geometry* geometry = (Geometry*) hgeometry;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcSetSharedGeometryBufferHostDevice);
|
|
|
|
+ RTC_VERIFY_HANDLE(hgeometry);
|
|
|
|
+ RTC_ENTER_DEVICE(hgeometry);
|
|
|
|
+
|
|
|
|
+#if defined(EMBREE_SYCL_SUPPORT)
|
|
|
|
+ if (geometry->device->is_gpu())
|
|
|
|
+ {
|
|
|
|
+ if (itemCount > 0xFFFFFFFFu)
|
|
|
|
+ throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"buffer too large");
|
|
|
|
+
|
|
|
|
+ if ((ptr == nullptr) || (dptr == nullptr))
|
|
|
|
+ throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"host and device pointer may not be NULL pointers when using SYCL devices");
|
|
|
|
+
|
|
|
|
+ Ref<Buffer> buffer = new Buffer(geometry->device, itemCount*byteStride, (char*)ptr + byteOffset, (char*)dptr + byteOffset);
|
|
|
|
+ geometry->setBuffer(type, slot, format, buffer, 0, byteStride, (unsigned int)itemCount);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+#endif
|
|
|
|
+ {
|
|
|
|
+ if (dptr != nullptr)
|
|
|
|
+ throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"Embree device is no SYCL device. Device pointer argument must not be valid, pass NULL instead");
|
|
|
|
+ rtcSetSharedGeometryBuffer(hgeometry, type, slot, format, ptr, byteOffset, byteStride, itemCount);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_CATCH_END2(geometry);
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void* rtcSetNewGeometryBuffer(RTCGeometry hgeometry, RTCBufferType type, unsigned int slot, RTCFormat format, size_t byteStride, size_t itemCount)
|
|
RTC_API void* rtcSetNewGeometryBuffer(RTCGeometry hgeometry, RTCBufferType type, unsigned int slot, RTCFormat format, size_t byteStride, size_t itemCount)
|
|
{
|
|
{
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
@@ -1683,13 +1967,54 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
if (type == RTC_BUFFER_TYPE_VERTEX || type == RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE)
|
|
if (type == RTC_BUFFER_TYPE_VERTEX || type == RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE)
|
|
bytes += (16 - (byteStride%16))%16;
|
|
bytes += (16 - (byteStride%16))%16;
|
|
|
|
|
|
- Ref<Buffer> buffer = new Buffer(geometry->device, bytes);
|
|
|
|
|
|
+ Ref<Buffer> buffer = new Buffer(geometry->device, bytes, nullptr);
|
|
geometry->setBuffer(type, slot, format, buffer, 0, byteStride, (unsigned int)itemCount);
|
|
geometry->setBuffer(type, slot, format, buffer, 0, byteStride, (unsigned int)itemCount);
|
|
return buffer->data();
|
|
return buffer->data();
|
|
RTC_CATCH_END2(geometry);
|
|
RTC_CATCH_END2(geometry);
|
|
return nullptr;
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API void rtcSetNewGeometryBufferHostDevice(RTCGeometry hgeometry, RTCBufferType bufferType, unsigned int slot, RTCFormat format, size_t byteStride, size_t itemCount, void** ptr, void** dptr)
|
|
|
|
+ {
|
|
|
|
+ Geometry* geometry = (Geometry*) hgeometry;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcSetNewGeometryBufferHostDevice);
|
|
|
|
+ RTC_VERIFY_HANDLE(hgeometry);
|
|
|
|
+ RTC_ENTER_DEVICE(hgeometry);
|
|
|
|
+
|
|
|
|
+#if defined(EMBREE_SYCL_SUPPORT)
|
|
|
|
+ if (geometry->device->is_gpu())
|
|
|
|
+ {
|
|
|
|
+ if (itemCount > 0xFFFFFFFFu)
|
|
|
|
+ throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"buffer too large");
|
|
|
|
+
|
|
|
|
+ /* vertex buffers need to get overallocated slightly as elements are accessed using SSE loads */
|
|
|
|
+ size_t bytes = itemCount*byteStride;
|
|
|
|
+ if (bufferType == RTC_BUFFER_TYPE_VERTEX || bufferType == RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE)
|
|
|
|
+ bytes += (16 - (byteStride%16))%16;
|
|
|
|
+
|
|
|
|
+ Ref<Buffer> buffer = new Buffer(geometry->device, bytes, nullptr, nullptr);
|
|
|
|
+ geometry->setBuffer(bufferType, slot, format, buffer, 0, byteStride, (unsigned int)itemCount);
|
|
|
|
+
|
|
|
|
+ if(ptr)
|
|
|
|
+ *ptr = buffer->getHostPtr();
|
|
|
|
+ if (dptr)
|
|
|
|
+ *dptr = buffer->getDevicePtr();
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+#endif
|
|
|
|
+ {
|
|
|
|
+ void* tmp = rtcSetNewGeometryBuffer(hgeometry, bufferType, slot, format, byteStride, itemCount);
|
|
|
|
+ if(ptr)
|
|
|
|
+ *ptr = tmp;
|
|
|
|
+ if (dptr) {
|
|
|
|
+ *dptr = tmp;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_CATCH_END2(geometry);
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void* rtcGetGeometryBufferData(RTCGeometry hgeometry, RTCBufferType type, unsigned int slot)
|
|
RTC_API void* rtcGetGeometryBufferData(RTCGeometry hgeometry, RTCBufferType type, unsigned int slot)
|
|
{
|
|
{
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
@@ -1697,7 +2022,19 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
RTC_TRACE(rtcGetGeometryBufferData);
|
|
RTC_TRACE(rtcGetGeometryBufferData);
|
|
RTC_VERIFY_HANDLE(hgeometry);
|
|
RTC_VERIFY_HANDLE(hgeometry);
|
|
RTC_ENTER_DEVICE(hgeometry);
|
|
RTC_ENTER_DEVICE(hgeometry);
|
|
- return geometry->getBuffer(type, slot);
|
|
|
|
|
|
+ return geometry->getBufferData(type, slot, BufferDataPointerType::HOST);
|
|
|
|
+ RTC_CATCH_END2(geometry);
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RTC_API void* rtcGetGeometryBufferDataDevice(RTCGeometry hgeometry, RTCBufferType type, unsigned int slot)
|
|
|
|
+ {
|
|
|
|
+ Geometry* geometry = (Geometry*) hgeometry;
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcGetGeometryBufferDataDevice);
|
|
|
|
+ RTC_VERIFY_HANDLE(hgeometry);
|
|
|
|
+ RTC_ENTER_DEVICE(hgeometry);
|
|
|
|
+ return geometry->getBufferData(type, slot, BufferDataPointerType::DEVICE);
|
|
RTC_CATCH_END2(geometry);
|
|
RTC_CATCH_END2(geometry);
|
|
return nullptr;
|
|
return nullptr;
|
|
}
|
|
}
|
|
@@ -1713,7 +2050,7 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
RTC_CATCH_END2(geometry);
|
|
RTC_CATCH_END2(geometry);
|
|
}
|
|
}
|
|
|
|
|
|
- RTC_API void rtcUpdateGeometryBuffer (RTCGeometry hgeometry, RTCBufferType type, unsigned int slot)
|
|
|
|
|
|
+ RTC_API void rtcUpdateGeometryBuffer (RTCGeometry hgeometry, RTCBufferType type, unsigned int slot)
|
|
{
|
|
{
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
RTC_CATCH_BEGIN;
|
|
RTC_CATCH_BEGIN;
|
|
@@ -1784,6 +2121,11 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
return nullptr;
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API void* rtcGetGeometryUserDataFromTraversable (RTCTraversable htraversable, unsigned int geomID)
|
|
|
|
+ {
|
|
|
|
+ return rtcGetGeometryUserDataFromScene((RTCScene)htraversable, geomID);
|
|
|
|
+ }
|
|
|
|
+
|
|
RTC_API void rtcSetGeometryBoundsFunction (RTCGeometry hgeometry, RTCBoundsFunction bounds, void* userPtr)
|
|
RTC_API void rtcSetGeometryBoundsFunction (RTCGeometry hgeometry, RTCBoundsFunction bounds, void* userPtr)
|
|
{
|
|
{
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
Geometry* geometry = (Geometry*) hgeometry;
|
|
@@ -2060,4 +2402,14 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
|
|
return nullptr;
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ RTC_API const char* rtcGetErrorString(RTCError error)
|
|
|
|
+ {
|
|
|
|
+ RTC_CATCH_BEGIN;
|
|
|
|
+ RTC_TRACE(rtcGetErrorString);
|
|
|
|
+ return Device::getErrorString(error);
|
|
|
|
+ RTC_CATCH_END(nullptr);
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
RTC_NAMESPACE_END
|
|
RTC_NAMESPACE_END
|