67 const float int_scale = 256.0f;
69 (
int)(int_scale * Ng.
x), (
int)(int_scale * Ng.
y), (
int)(int_scale * Ng.
z));
75 const float origin = 1.0f / 32.0f;
76 const float float_scale = 1.0f / 65536.0f;
78 fabsf(
P.y) < origin ?
P.y + float_scale * Ng.
y : p_i.
y,
79 fabsf(
P.z) < origin ?
P.z + float_scale * Ng.
z : p_i.
z);
88 if (isect_a->
t < isect_b->
t)
90 else if (isect_a->
t > isect_b->
t)
106 for (
int j = 0; j < num_hits - 1; ++j) {
107 if (hits[j].t > hits[j + 1].t) {
110 hits[j] = hits[j + 1];
112 hits[j + 1] = tmp_hit;
148 const int isect_type)
190 while (attr_map.
id !=
id) {
197 attr_offset = attr_map.
offset;
213#define CURVE_SHADOW_TRANSPARENCY_CUTOFF 0.001f
216 KernelGlobals kg,
const int object,
const int prim,
const int type,
const float u)
228 const int k1 = k0 + 1;
233 return (1.0f - u) * f0 + u * f1;
240 return (
self.prim == prim) && (
self.object == object);
247 return ((
self.prim == prim) && (
self.object ==
object)) ||
248 ((
self.light_prim == prim) && (
self.light_object ==
object));
254 return (
self.prim == prim);
257#ifdef __SHADOW_LINKING__
275 const int isect_object)
277#ifdef __SHADOW_LINKING__
282 const uint64_t set_membership = ray_get_shadow_set_membership(kg,
self);
local_group_size(16, 16) .push_constant(Type b
ccl_device_forceinline int intersection_get_shader_flags(KernelGlobals kg, const int prim, const int type)
ccl_device_inline void sort_intersections_and_normals(ccl_private Intersection *hits, ccl_private float3 *Ng, uint num_hits)
ccl_device_inline bool intersection_skip_self_local(ccl_ray_data const RaySelfPrimitives &self, const int prim)
ccl_device_inline bool intersection_skip_self(ccl_ray_data const RaySelfPrimitives &self, const int object, const int prim)
ccl_device_forceinline int intersection_get_object_flags(KernelGlobals kg, ccl_private const Intersection *ccl_restrict isect)
ccl_device_inline bool intersection_skip_shadow_link(KernelGlobals kg, ccl_ray_data const RaySelfPrimitives &self, const int isect_object)
ccl_device_forceinline float intersection_t_offset(const float t)
ccl_device int intersections_compare(const void *a, const void *b)
ccl_device_forceinline int intersection_get_shader(KernelGlobals kg, ccl_private const Intersection *ccl_restrict isect)
ccl_device_inline float intersection_curve_shadow_transparency(KernelGlobals kg, const int object, const int prim, const int type, const float u)
ccl_device_inline bool intersection_skip_self_shadow(ccl_ray_data const RaySelfPrimitives &self, const int object, const int prim)
ccl_device_inline int intersection_find_attribute(KernelGlobals kg, const int object, const uint id)
ccl_device_inline float3 ray_offset(const float3 P, const float3 Ng)
CCL_NAMESPACE_BEGIN ccl_device_inline bool intersection_ray_valid(ccl_private const Ray *ray)
ccl_device_forceinline int intersection_get_shader_from_isect_prim(KernelGlobals kg, const int prim, const int isect_type)
#define kernel_assert(cond)
const KernelGlobalsCPU *ccl_restrict KernelGlobals
#define kernel_data_fetch(name, index)
#define ccl_device_forceinline
#define ccl_device_inline
#define CCL_NAMESPACE_END
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
@ ATTR_STD_SHADOW_TRANSPARENCY
#define PRIMITIVE_UNPACK_SEGMENT(type)
#define KERNEL_FEATURE_SHADOW_LINKING
#define LIGHT_LINK_MASK_ALL
ccl_device_inline float len_squared(const float2 a)
unsigned __int64 uint64_t
ccl_device_inline bool isfinite_safe(float f)