Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/device/metal/kernel.metal
| Show First 20 Lines • Show All 120 Lines • ▼ Show 20 Lines | #ifdef __BVH_LOCAL__ | ||||
| result.accept = false; | result.accept = false; | ||||
| result.continue_search = true; | result.continue_search = true; | ||||
| return result; | return result; | ||||
| #endif | #endif | ||||
| } | } | ||||
| [[intersection(triangle, triangle_data, METALRT_TAGS)]] | [[intersection(triangle, triangle_data, METALRT_TAGS)]] | ||||
| TriangleIntersectionResult | TriangleIntersectionResult | ||||
| __anyhit__kernel_metalrt_local_hit_tri(constant KernelParamsMetal &launch_params_metal [[buffer(1)]], | __anyhit__cycles_metalrt_local_hit_tri(constant KernelParamsMetal &launch_params_metal [[buffer(1)]], | ||||
| ray_data MetalKernelContext::MetalRTIntersectionLocalPayload &payload [[payload]], | ray_data MetalKernelContext::MetalRTIntersectionLocalPayload &payload [[payload]], | ||||
| uint instance_id [[user_instance_id]], | uint instance_id [[user_instance_id]], | ||||
| uint primitive_id [[primitive_id]], | uint primitive_id [[primitive_id]], | ||||
| float2 barycentrics [[barycentric_coord]], | float2 barycentrics [[barycentric_coord]], | ||||
| float ray_tmax [[distance]]) | float ray_tmax [[distance]]) | ||||
| { | { | ||||
| return metalrt_local_hit<TriangleIntersectionResult, METALRT_HIT_TRIANGLE>( | return metalrt_local_hit<TriangleIntersectionResult, METALRT_HIT_TRIANGLE>( | ||||
| launch_params_metal, payload, instance_id, primitive_id, barycentrics, ray_tmax); | launch_params_metal, payload, instance_id, primitive_id, barycentrics, ray_tmax); | ||||
| } | } | ||||
| [[intersection(bounding_box, triangle_data, METALRT_TAGS)]] | [[intersection(bounding_box, triangle_data, METALRT_TAGS)]] | ||||
| BoundingBoxIntersectionResult | BoundingBoxIntersectionResult | ||||
| __anyhit__kernel_metalrt_local_hit_box(const float ray_tmax [[max_distance]]) | __anyhit__cycles_metalrt_local_hit_box(const float ray_tmax [[max_distance]]) | ||||
| { | { | ||||
| /* unused function */ | /* unused function */ | ||||
| BoundingBoxIntersectionResult result; | BoundingBoxIntersectionResult result; | ||||
| result.distance = ray_tmax; | result.distance = ray_tmax; | ||||
| result.accept = false; | result.accept = false; | ||||
| result.continue_search = false; | result.continue_search = false; | ||||
| return result; | return result; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 118 Lines • ▼ Show 20 Lines | |||||
| # endif /* __TRANSPARENT_SHADOWS__ */ | # endif /* __TRANSPARENT_SHADOWS__ */ | ||||
| #endif /* __SHADOW_RECORD_ALL__ */ | #endif /* __SHADOW_RECORD_ALL__ */ | ||||
| return true; | return true; | ||||
| } | } | ||||
| [[intersection(triangle, triangle_data, METALRT_TAGS)]] | [[intersection(triangle, triangle_data, METALRT_TAGS)]] | ||||
| TriangleIntersectionResult | TriangleIntersectionResult | ||||
| __anyhit__kernel_metalrt_shadow_all_hit_tri(constant KernelParamsMetal &launch_params_metal [[buffer(1)]], | __anyhit__cycles_metalrt_shadow_all_hit_tri(constant KernelParamsMetal &launch_params_metal [[buffer(1)]], | ||||
| ray_data MetalKernelContext::MetalRTIntersectionShadowPayload &payload [[payload]], | ray_data MetalKernelContext::MetalRTIntersectionShadowPayload &payload [[payload]], | ||||
| unsigned int object [[user_instance_id]], | unsigned int object [[user_instance_id]], | ||||
| unsigned int primitive_id [[primitive_id]], | unsigned int primitive_id [[primitive_id]], | ||||
| float2 barycentrics [[barycentric_coord]], | float2 barycentrics [[barycentric_coord]], | ||||
| float ray_tmax [[distance]]) | float ray_tmax [[distance]]) | ||||
| { | { | ||||
| uint prim = primitive_id + kernel_tex_fetch(__object_prim_offset, object); | uint prim = primitive_id + kernel_tex_fetch(__object_prim_offset, object); | ||||
| TriangleIntersectionResult result; | TriangleIntersectionResult result; | ||||
| result.continue_search = metalrt_shadow_all_hit<METALRT_HIT_TRIANGLE>( | result.continue_search = metalrt_shadow_all_hit<METALRT_HIT_TRIANGLE>( | ||||
| launch_params_metal, payload, object, prim, barycentrics, ray_tmax); | launch_params_metal, payload, object, prim, barycentrics, ray_tmax); | ||||
| result.accept = !result.continue_search; | result.accept = !result.continue_search; | ||||
| return result; | return result; | ||||
| } | } | ||||
| [[intersection(bounding_box, triangle_data, METALRT_TAGS)]] | [[intersection(bounding_box, triangle_data, METALRT_TAGS)]] | ||||
| BoundingBoxIntersectionResult | BoundingBoxIntersectionResult | ||||
| __anyhit__kernel_metalrt_shadow_all_hit_box(const float ray_tmax [[max_distance]]) | __anyhit__cycles_metalrt_shadow_all_hit_box(const float ray_tmax [[max_distance]]) | ||||
| { | { | ||||
| /* unused function */ | /* unused function */ | ||||
| BoundingBoxIntersectionResult result; | BoundingBoxIntersectionResult result; | ||||
| result.distance = ray_tmax; | result.distance = ray_tmax; | ||||
| result.accept = false; | result.accept = false; | ||||
| result.continue_search = false; | result.continue_search = false; | ||||
| return result; | return result; | ||||
| } | } | ||||
| Show All 36 Lines | # endif | ||||
| result.accept = true; | result.accept = true; | ||||
| result.continue_search = true; | result.continue_search = true; | ||||
| return result; | return result; | ||||
| } | } | ||||
| [[intersection(triangle, triangle_data, METALRT_TAGS)]] | [[intersection(triangle, triangle_data, METALRT_TAGS)]] | ||||
| TriangleIntersectionResult | TriangleIntersectionResult | ||||
| __anyhit__kernel_metalrt_visibility_test_tri(constant KernelParamsMetal &launch_params_metal [[buffer(1)]], | __anyhit__cycles_metalrt_visibility_test_tri(constant KernelParamsMetal &launch_params_metal [[buffer(1)]], | ||||
| ray_data MetalKernelContext::MetalRTIntersectionPayload &payload [[payload]], | ray_data MetalKernelContext::MetalRTIntersectionPayload &payload [[payload]], | ||||
| unsigned int object [[user_instance_id]], | unsigned int object [[user_instance_id]], | ||||
| unsigned int primitive_id [[primitive_id]]) | unsigned int primitive_id [[primitive_id]]) | ||||
| { | { | ||||
| uint prim = primitive_id + kernel_tex_fetch(__object_prim_offset, object); | uint prim = primitive_id + kernel_tex_fetch(__object_prim_offset, object); | ||||
| TriangleIntersectionResult result = metalrt_visibility_test<TriangleIntersectionResult, METALRT_HIT_TRIANGLE>( | TriangleIntersectionResult result = metalrt_visibility_test<TriangleIntersectionResult, METALRT_HIT_TRIANGLE>( | ||||
| launch_params_metal, payload, object, prim, 0.0f); | launch_params_metal, payload, object, prim, 0.0f); | ||||
| if (result.accept) { | if (result.accept) { | ||||
| payload.prim = prim; | payload.prim = prim; | ||||
| payload.type = kernel_tex_fetch(__objects, object).primitive_type; | payload.type = kernel_tex_fetch(__objects, object).primitive_type; | ||||
| } | } | ||||
| return result; | return result; | ||||
| } | } | ||||
| [[intersection(bounding_box, triangle_data, METALRT_TAGS)]] | [[intersection(bounding_box, triangle_data, METALRT_TAGS)]] | ||||
| BoundingBoxIntersectionResult | BoundingBoxIntersectionResult | ||||
| __anyhit__kernel_metalrt_visibility_test_box(const float ray_tmax [[max_distance]]) | __anyhit__cycles_metalrt_visibility_test_box(const float ray_tmax [[max_distance]]) | ||||
| { | { | ||||
| /* Unused function */ | /* Unused function */ | ||||
| BoundingBoxIntersectionResult result; | BoundingBoxIntersectionResult result; | ||||
| result.accept = false; | result.accept = false; | ||||
| result.continue_search = true; | result.continue_search = true; | ||||
| result.distance = ray_tmax; | result.distance = ray_tmax; | ||||
| return result; | return result; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 208 Lines • Show Last 20 Lines | |||||