initial commit, 4.5 stable
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
This commit is contained in:
207
thirdparty/embree/kernels/geometry/intersector_epilog_sycl.h
vendored
Normal file
207
thirdparty/embree/kernels/geometry/intersector_epilog_sycl.h
vendored
Normal file
@@ -0,0 +1,207 @@
|
||||
// Copyright 2009-2021 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../common/ray.h"
|
||||
#include "../common/context.h"
|
||||
#include "filter_sycl.h"
|
||||
|
||||
namespace embree
|
||||
{
|
||||
template<typename Ray>
|
||||
struct Intersect1Epilog1_HWIF;
|
||||
|
||||
template<>
|
||||
struct Intersect1Epilog1_HWIF<RayHit>
|
||||
{
|
||||
RayHit& ray;
|
||||
sycl::private_ptr<RayQueryContext> context;
|
||||
const unsigned int geomID;
|
||||
const unsigned int primID;
|
||||
const bool filter;
|
||||
|
||||
__forceinline Intersect1Epilog1_HWIF(RayHit& ray,
|
||||
sycl::private_ptr<RayQueryContext> context,
|
||||
const unsigned int geomID,
|
||||
const unsigned int primID,
|
||||
const bool filter)
|
||||
: ray(ray), context(context), geomID(geomID), primID(primID), filter(filter) {}
|
||||
|
||||
template<typename Hit_i>
|
||||
__forceinline bool operator() (Hit_i& hit_i) const
|
||||
{
|
||||
hit_i.finalize();
|
||||
|
||||
Scene* scene MAYBE_UNUSED = context->scene;
|
||||
Geometry* geometry MAYBE_UNUSED = scene->get(geomID);
|
||||
|
||||
/* ray mask test */
|
||||
#if defined(EMBREE_RAY_MASK)
|
||||
if ((geometry->mask & ray.mask) == 0)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
/* call intersection filter function */
|
||||
#if defined(EMBREE_FILTER_FUNCTION)
|
||||
if (filter && (unlikely(context->hasContextFilter() || geometry->hasIntersectionFilter())))
|
||||
{
|
||||
Hit h(context->user,geomID,primID,Vec2f(hit_i.u,hit_i.v),hit_i.Ng);
|
||||
float old_t = ray.tfar;
|
||||
ray.tfar = hit_i.t;
|
||||
bool found = runIntersectionFilter1SYCL(geometry,ray,context,h);
|
||||
if (!found) {
|
||||
ray.tfar = old_t;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ray.tfar = hit_i.t;
|
||||
ray.u = hit_i.u;
|
||||
ray.v = hit_i.v;
|
||||
ray.Ng.x = hit_i.Ng.x;
|
||||
ray.Ng.y = hit_i.Ng.y;
|
||||
ray.Ng.z = hit_i.Ng.z;
|
||||
ray.geomID = geomID;
|
||||
ray.primID = primID;
|
||||
instance_id_stack::copy_UU(context->user, context->user->instID, ray.instID);
|
||||
#if defined(EMBREE_GEOMETRY_INSTANCE_ARRAY)
|
||||
instance_id_stack::copy_UU(context->user, context->user->instPrimID, ray.instPrimID);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename Hit_i>
|
||||
__forceinline bool operator() (bool, Hit_i& hit_i) const
|
||||
{
|
||||
hit_i.finalize();
|
||||
|
||||
Scene* scene MAYBE_UNUSED = context->scene;
|
||||
Geometry* geometry MAYBE_UNUSED = scene->get(geomID);
|
||||
|
||||
/* ray mask test */
|
||||
#if defined(EMBREE_RAY_MASK)
|
||||
if ((geometry->mask & ray.mask) == 0)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
const Vec3fa Ng = hit_i.Ng();
|
||||
const Vec2f uv = hit_i.uv();
|
||||
|
||||
/* call intersection filter function */
|
||||
#if defined(EMBREE_FILTER_FUNCTION)
|
||||
if (filter && (unlikely(context->hasContextFilter() || geometry->hasIntersectionFilter())))
|
||||
{
|
||||
Hit h(context->user,geomID,primID,uv,Ng);
|
||||
float old_t = ray.tfar;
|
||||
ray.tfar = hit_i.t();
|
||||
bool found = runIntersectionFilter1SYCL(geometry,ray,context,h);
|
||||
if (!found) {
|
||||
ray.tfar = old_t;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ray.tfar = hit_i.t();
|
||||
ray.u = uv.x;
|
||||
ray.v = uv.y;
|
||||
ray.Ng.x = Ng.x;
|
||||
ray.Ng.y = Ng.y;
|
||||
ray.Ng.z = Ng.z;
|
||||
ray.geomID = geomID;
|
||||
ray.primID = primID;
|
||||
instance_id_stack::copy_UU(context->user, context->user->instID, ray.instID);
|
||||
#if defined(EMBREE_GEOMETRY_INSTANCE_ARRAY)
|
||||
instance_id_stack::copy_UU(context->user, context->user->instPrimID, ray.instPrimID);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct Intersect1Epilog1_HWIF<Ray>
|
||||
{
|
||||
Ray& ray;
|
||||
sycl::private_ptr<RayQueryContext> context;
|
||||
const unsigned int geomID;
|
||||
const unsigned int primID;
|
||||
const bool filter;
|
||||
|
||||
__forceinline Intersect1Epilog1_HWIF(Ray& ray,
|
||||
sycl::private_ptr<RayQueryContext> context,
|
||||
const unsigned int geomID,
|
||||
const unsigned int primID,
|
||||
const bool filter)
|
||||
: ray(ray), context(context), geomID(geomID), primID(primID), filter(filter) {}
|
||||
|
||||
template<typename Hit_i>
|
||||
__forceinline bool operator() (Hit_i& hit_i) const
|
||||
{
|
||||
hit_i.finalize();
|
||||
|
||||
Scene* scene MAYBE_UNUSED = context->scene;
|
||||
Geometry* geometry MAYBE_UNUSED = scene->get(geomID);
|
||||
|
||||
/* ray mask test */
|
||||
#if defined(EMBREE_RAY_MASK)
|
||||
if ((geometry->mask & ray.mask) == 0)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
/* call intersection filter function */
|
||||
#if defined(EMBREE_FILTER_FUNCTION)
|
||||
if (filter && (unlikely(context->hasContextFilter() || geometry->hasOcclusionFilter())))
|
||||
{
|
||||
Hit h(context->user,geomID,primID,Vec2f(hit_i.u,hit_i.v),hit_i.Ng);
|
||||
float old_t = ray.tfar;
|
||||
ray.tfar = hit_i.t;
|
||||
bool found = runIntersectionFilter1SYCL(geometry,ray,context,h);
|
||||
if (!found) {
|
||||
ray.tfar = old_t;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ray.tfar = neg_inf;
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename Hit_i>
|
||||
__forceinline bool operator() (bool, Hit_i& hit_i) const
|
||||
{
|
||||
hit_i.finalize();
|
||||
|
||||
Scene* scene MAYBE_UNUSED = context->scene;
|
||||
Geometry* geometry MAYBE_UNUSED = scene->get(geomID);
|
||||
|
||||
/* ray mask test */
|
||||
#if defined(EMBREE_RAY_MASK)
|
||||
if ((geometry->mask & ray.mask) == 0)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
/* call intersection filter function */
|
||||
#if defined(EMBREE_FILTER_FUNCTION)
|
||||
if (filter && (unlikely(context->hasContextFilter() || geometry->hasOcclusionFilter())))
|
||||
{
|
||||
const Vec3fa Ng = hit_i.Ng();
|
||||
const Vec2f uv = hit_i.uv();
|
||||
Hit h(context->user,geomID,primID,uv,Ng);
|
||||
float old_t = ray.tfar;
|
||||
ray.tfar = hit_i.t();
|
||||
bool found = runIntersectionFilter1SYCL(geometry,ray,context,h);
|
||||
if (!found) {
|
||||
ray.tfar = old_t;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ray.tfar = neg_inf;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user