@@ -8,6 +8,14 @@ using namespace metal;
88#define lc_assume (...) __builtin_assume(__VA_ARGS__)
99#define lc_assert (...)// TODO: implement assert?
1010
11+ #ifdef LUISA_ENABLE_EXTENDED_LIMITS
12+ #define LC_EXTENDED_LIMITS_TAG , extended_limits
13+ #define LC_INSTANCE_ACCELERATION_STRUCTURE instance_acceleration_structure<extended_limits>
14+ #else
15+ #define LC_EXTENDED_LIMITS_TAG
16+ #define LC_INSTANCE_ACCELERATION_STRUCTURE instance_acceleration_structure
17+ #endif
18+
1119template <typename Ptr>
1220[[nodiscard]] inline auto lc_address_of_impl (Ptr ptr) {
1321 return reinterpret_cast <ulong>(ptr);
@@ -768,19 +776,19 @@ static_assert(sizeof(LCInstance) == 64u, "");
768776
769777struct LCAccel {
770778#ifdef LUISA_ENABLE_MOTION_BLUR
771- acceleration_structure<instancing, primitive_motion, instance_motion> handle;
779+ acceleration_structure<instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > handle;
772780#else
773- instance_acceleration_structure handle;
781+ LC_INSTANCE_ACCELERATION_STRUCTURE handle;
774782#endif
775783 device LCInstance *__restrict__ instances;
776784};
777785
778786[[nodiscard]] inline auto lc_intersector_base () {
779787#ifdef LUISA_ENABLE_CURVE
780788#ifdef LUISA_ENABLE_MOTION_BLUR
781- intersector<triangle_data, curve_data, instancing, primitive_motion, instance_motion> i;
789+ intersector<triangle_data, curve_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > i;
782790#else
783- intersector<triangle_data, curve_data, instancing> i;
791+ intersector<triangle_data, curve_data, instancing LC_EXTENDED_LIMITS_TAG > i;
784792#endif
785793 i.assume_geometry_type (geometry_type::triangle | geometry_type::curve);
786794 i.assume_curve_type (curve_type::round);
@@ -807,9 +815,9 @@ struct LCAccel {
807815#endif
808816#else
809817#ifdef LUISA_ENABLE_MOTION_BLUR
810- intersector<triangle_data, instancing, primitive_motion, instance_motion> i;
818+ intersector<triangle_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > i;
811819#else
812- intersector<triangle_data, instancing> i;
820+ intersector<triangle_data, instancing LC_EXTENDED_LIMITS_TAG > i;
813821#endif
814822 i.assume_geometry_type (geometry_type::triangle);
815823#endif
@@ -889,25 +897,25 @@ struct LCAccel {
889897
890898struct LCRayQuery {
891899#ifdef LUISA_ENABLE_MOTION_BLUR
892- acceleration_structure<instancing, primitive_motion, instance_motion> accel;
900+ acceleration_structure<instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > accel;
893901#else
894- instance_acceleration_structure accel;
902+ LC_INSTANCE_ACCELERATION_STRUCTURE accel;
895903#endif
896904 ray ray;
897905 uint mask;
898906 float time;
899907 bool terminate_on_first_hit;
900908#ifdef LUISA_ENABLE_CURVE
901909#ifdef LUISA_ENABLE_MOTION_BLUR
902- thread intersection_query<triangle_data, curve_data, instancing, primitive_motion, instance_motion> *i;
910+ thread intersection_query<triangle_data, curve_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > *i;
903911#else
904- thread intersection_query<triangle_data, curve_data, instancing> *i;
912+ thread intersection_query<triangle_data, curve_data, instancing LC_EXTENDED_LIMITS_TAG > *i;
905913#endif
906914#else
907915#ifdef LUISA_ENABLE_MOTION_BLUR
908- thread intersection_query<triangle_data, instancing, primitive_motion, instance_motion> *i;
916+ thread intersection_query<triangle_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > *i;
909917#else
910- thread intersection_query<triangle_data, instancing> *i;
918+ thread intersection_query<triangle_data, instancing LC_EXTENDED_LIMITS_TAG > *i;
911919#endif
912920#endif
913921};
@@ -941,15 +949,15 @@ struct LCRayQuery {
941949void ray_query_init (thread LCRayQuery &q,
942950#ifdef LUISA_ENABLE_CURVE
943951#ifdef LUISA_ENABLE_MOTION_BLUR
944- thread intersection_query<triangle_data, curve_data, instancing, primitive_motion, instance_motion> &i,
952+ thread intersection_query<triangle_data, curve_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > &i,
945953#else
946- thread intersection_query<triangle_data, curve_data, instancing> &i,
954+ thread intersection_query<triangle_data, curve_data, instancing LC_EXTENDED_LIMITS_TAG > &i,
947955#endif
948956#else
949957#ifdef LUISA_ENABLE_MOTION_BLUR
950- thread intersection_query<triangle_data, instancing, primitive_motion, instance_motion> &i,
958+ thread intersection_query<triangle_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > &i,
951959#else
952- thread intersection_query<triangle_data, instancing> &i,
960+ thread intersection_query<triangle_data, instancing LC_EXTENDED_LIMITS_TAG > &i,
953961#endif
954962#endif
955963 bool has_procedural_branch) {
@@ -993,18 +1001,18 @@ void ray_query_init(thread LCRayQuery &q,
9931001#ifdef LUISA_ENABLE_CURVE
9941002#ifdef LUISA_ENABLE_MOTION_BLUR
9951003#define LC_RAY_QUERY_SHADOW_VARIABLE (q ) \
996- intersection_query<triangle_data, curve_data, instancing, primitive_motion, instance_motion> q##_i
1004+ intersection_query<triangle_data, curve_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > q##_i
9971005#else
9981006#define LC_RAY_QUERY_SHADOW_VARIABLE (q ) \
999- intersection_query<triangle_data, curve_data, instancing> q##_i
1007+ intersection_query<triangle_data, curve_data, instancing LC_EXTENDED_LIMITS_TAG > q##_i
10001008#endif
10011009#else
10021010#ifdef LUISA_ENABLE_MOTION_BLUR
10031011#define LC_RAY_QUERY_SHADOW_VARIABLE (q ) \
1004- intersection_query<triangle_data, instancing, primitive_motion, instance_motion> q##_i
1012+ intersection_query<triangle_data, instancing, primitive_motion, instance_motion LC_EXTENDED_LIMITS_TAG > q##_i
10051013#else
10061014#define LC_RAY_QUERY_SHADOW_VARIABLE (q ) \
1007- intersection_query<triangle_data, instancing> q##_i
1015+ intersection_query<triangle_data, instancing LC_EXTENDED_LIMITS_TAG > q##_i
10081016#endif
10091017#endif
10101018
0 commit comments