From 0d6f050b467cb2408c81b2fb4588f3f28fb77f8c Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Mon, 7 Jun 2021 16:20:28 +0300 Subject: [PATCH] nir: add intrinsics for ray queries Signed-off-by: Lionel Landwerlin Reviewed-by: Caio Oliveira Part-of: --- src/compiler/nir/nir.h | 21 +++++++++++++++++++++ src/compiler/nir/nir_intrinsics.py | 22 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 91647d23cfd..ecc2c1db099 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -5318,6 +5318,27 @@ nir_addition_might_overflow(nir_shader *shader, struct hash_table *range_ht, nir_ssa_scalar ssa, unsigned const_val, const nir_unsigned_upper_bound_config *config); +typedef enum { + nir_ray_query_value_intersection_type, + nir_ray_query_value_intersection_t, + nir_ray_query_value_intersection_instance_custom_index, + nir_ray_query_value_intersection_instance_id, + nir_ray_query_value_intersection_instance_sbt_index, + nir_ray_query_value_intersection_geometry_index, + nir_ray_query_value_intersection_primitive_index, + nir_ray_query_value_intersection_barycentrics, + nir_ray_query_value_intersection_front_face, + nir_ray_query_value_intersection_object_ray_direction, + nir_ray_query_value_intersection_object_ray_origin, + nir_ray_query_value_intersection_object_to_world, + nir_ray_query_value_intersection_world_to_object, + nir_ray_query_value_intersection_candidate_aabb_opaque, + nir_ray_query_value_tmin, + nir_ray_query_value_flags, + nir_ray_query_value_world_ray_direction, + nir_ray_query_value_world_ray_origin, +} nir_ray_query_value; + #include "nir_inline_helpers.h" #ifdef __cplusplus diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index bf82670259e..43ec0446b69 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -492,6 +492,28 @@ intrinsic("terminate_ray") # src[] = { sbt_index, payload } intrinsic("execute_callable", src_comp=[1, -1]) +# Initialize a ray query +# +# 0. Ray Query +# 1. Acceleration Structure +# 2. Ray Flags +# 3. Cull Mask +# 4. Ray Origin +# 5. Ray Tmin +# 6. Ray Direction +# 7. Ray Tmax +intrinsic("rq_initialize", src_comp=[-1, -1, 1, 1, 3, 1, 3, 1]) +# src[] = { query } +intrinsic("rq_terminate", src_comp=[-1]) +# src[] = { query } +intrinsic("rq_proceed", src_comp=[-1], dest_comp=1) +# src[] = { query, hit } +intrinsic("rq_generate_intersection", src_comp=[-1, 1]) +# src[] = { query } +intrinsic("rq_confirm_intersection", src_comp=[-1]) +# src[] = { query, committed } BASE=nir_ray_query_value +intrinsic("rq_load", src_comp=[-1, 1], dest_comp=0, indices=[BASE,COLUMN]) + # Driver independent raytracing helpers # rt_resume is a helper that that be the first instruction accesing the