21 #if defined(__METALRT_MOTION__)
39 #if defined(__METALRT_MOTION__)
54 const uint visibility,
63 #if defined(__KERNEL_DEBUG__)
64 if (is_null_instance_acceleration_structure(metal_ancillaries->accel_struct)) {
67 kernel_assert(!
"Invalid metal_ancillaries->accel_struct pointer");
71 if (is_null_intersection_function_table(metal_ancillaries->ift_default)) {
79 metal::raytracing::ray
r(ray->P, ray->D, ray->tmin, ray->tmax);
80 metalrt_intersector_type metalrt_intersect;
84 metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
88 payload.
self = ray->self;
93 typename metalrt_intersector_type::result_type
intersection;
95 uint ray_mask = visibility & 0xFF;
96 if (0 == ray_mask && (visibility & ~0xFF) != 0) {
105 #if defined(__METALRT_MOTION__)
106 payload.time = ray->time;
108 metal_ancillaries->accel_struct,
111 metal_ancillaries->ift_default,
115 r, metal_ancillaries->accel_struct, ray_mask, metal_ancillaries->ift_default, payload);
119 isect->t = ray->tmax;
127 isect->prim = payload.
prim;
128 isect->type = payload.
type;
137 isect->u = payload.
u;
138 isect->v = payload.
v;
154 local_isect->num_hits = 0;
159 # if defined(__KERNEL_DEBUG__)
160 if (is_null_instance_acceleration_structure(metal_ancillaries->accel_struct)) {
162 local_isect->num_hits = 0;
164 kernel_assert(!
"Invalid metal_ancillaries->accel_struct pointer");
168 if (is_null_intersection_function_table(metal_ancillaries->ift_local)) {
170 local_isect->num_hits = 0;
177 metal::raytracing::ray
r(ray->P, ray->D, ray->tmin, ray->tmax);
178 metalrt_intersector_type metalrt_intersect;
180 metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
184 metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
188 payload.
self = ray->self;
198 typename metalrt_intersector_type::result_type
intersection;
200 # if defined(__METALRT_MOTION__)
202 r, metal_ancillaries->accel_struct, 0xFF, ray->time, metal_ancillaries->ift_local, payload);
205 r, metal_ancillaries->accel_struct, 0xFF, metal_ancillaries->ift_local, payload);
219 #ifdef __SHADOW_RECORD_ALL__
232 # if defined(__KERNEL_DEBUG__)
233 if (is_null_instance_acceleration_structure(metal_ancillaries->accel_struct)) {
234 kernel_assert(!
"Invalid metal_ancillaries->accel_struct pointer");
238 if (is_null_intersection_function_table(metal_ancillaries->ift_shadow)) {
244 metal::raytracing::ray
r(ray->P, ray->D, ray->tmin, ray->tmax);
245 metalrt_intersector_type metalrt_intersect;
247 metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
251 metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
255 payload.
self = ray->self;
264 uint ray_mask = visibility & 0xFF;
265 if (0 == ray_mask && (visibility & ~0xFF) != 0) {
269 typename metalrt_intersector_type::result_type
intersection;
271 # if defined(__METALRT_MOTION__)
272 payload.time = ray->time;
274 metal_ancillaries->accel_struct,
277 metal_ancillaries->ift_shadow,
281 r, metal_ancillaries->accel_struct, ray_mask, metal_ancillaries->ift_shadow, payload);
295 const uint visibility)
301 # if defined(__KERNEL_DEBUG__)
302 if (is_null_instance_acceleration_structure(metal_ancillaries->accel_struct)) {
303 kernel_assert(!
"Invalid metal_ancillaries->accel_struct pointer");
307 if (is_null_intersection_function_table(metal_ancillaries->ift_default)) {
313 metal::raytracing::ray
r(ray->P, ray->D, ray->tmin, ray->tmax);
314 metalrt_intersector_type metalrt_intersect;
316 metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
320 metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
324 payload.
self = ray->self;
327 typename metalrt_intersector_type::result_type
intersection;
329 uint ray_mask = visibility & 0xFF;
330 if (0 == ray_mask && (visibility & ~0xFF) != 0) {
334 # if defined(__METALRT_MOTION__)
335 payload.time = ray->time;
337 metal_ancillaries->accel_struct,
340 metal_ancillaries->ift_default,
344 r, metal_ancillaries->accel_struct, ray_mask, metal_ancillaries->ift_default, payload);
351 isect->prim = payload.
prim;
352 isect->type = payload.
type;
361 isect->u = payload.
u;
362 isect->v = payload.
v;
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
__forceinline bool none(const avxb &b)
#define kernel_assert(cond)
#define CCL_NAMESPACE_END
CCL_NAMESPACE_BEGIN ccl_device_inline bool intersection_ray_valid(ccl_private const Ray *ray)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define ccl_device_intersect
Intersection< segment > intersection
IntegratorShadowStateCPU *ccl_restrict IntegratorShadowState