From 71c4543af1ad7b2b51f18140373b8756c1631d07 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Sun, 13 Nov 2022 00:07:35 +0100 Subject: [PATCH] radv/rt: Get rid of null index AABB intersection handling If the intersection shader is VK_SHADER_UNUSED_KHR (which is only allowed for a zero shader group) then no further processing of the intersection candidate occurs. Part-of: --- src/amd/vulkan/radv_pipeline_rt.c | 38 ------------------------------- 1 file changed, 38 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c index f114af5bac6..ba113178908 100644 --- a/src/amd/vulkan/radv_pipeline_rt.c +++ b/src/amd/vulkan/radv_pipeline_rt.c @@ -1280,44 +1280,6 @@ handle_candidate_aabb(nir_builder *b, struct radv_leaf_intersection *intersectio inner_vars.stage_idx = shader_id; insert_rt_case(b, nir_stage, &inner_vars, nir_load_var(b, inner_vars.idx), 0, i + 2); } - nir_push_else(b, NULL); - { - nir_ssa_def *vec3_zero = nir_channels(b, nir_imm_vec4(b, 0, 0, 0, 0), 0x7); - nir_ssa_def *vec3_inf = - nir_channels(b, nir_imm_vec4(b, INFINITY, INFINITY, INFINITY, 0), 0x7); - - nir_ssa_def *bvh_lo = - nir_build_load_global(b, 3, 32, nir_iadd_imm(b, intersection->node_addr, 0)); - nir_ssa_def *bvh_hi = - nir_build_load_global(b, 3, 32, nir_iadd_imm(b, intersection->node_addr, 12)); - - bvh_lo = nir_fsub(b, bvh_lo, nir_load_var(b, data->trav_vars->origin)); - bvh_hi = nir_fsub(b, bvh_hi, nir_load_var(b, data->trav_vars->origin)); - nir_ssa_def *t_vec = - nir_fmin(b, nir_fmul(b, bvh_lo, nir_load_var(b, data->trav_vars->inv_dir)), - nir_fmul(b, bvh_hi, nir_load_var(b, data->trav_vars->inv_dir))); - nir_ssa_def *t2_vec = - nir_fmax(b, nir_fmul(b, bvh_lo, nir_load_var(b, data->trav_vars->inv_dir)), - nir_fmul(b, bvh_hi, nir_load_var(b, data->trav_vars->inv_dir))); - /* If we run parallel to one of the edges the range should be [0, inf) not [0,0] */ - t2_vec = nir_bcsel(b, nir_feq(b, nir_load_var(b, data->trav_vars->dir), vec3_zero), vec3_inf, - t2_vec); - - nir_ssa_def *t_min = nir_fmax(b, nir_channel(b, t_vec, 0), nir_channel(b, t_vec, 1)); - t_min = nir_fmax(b, t_min, nir_channel(b, t_vec, 2)); - - nir_ssa_def *t_max = nir_fmin(b, nir_channel(b, t2_vec, 0), nir_channel(b, t2_vec, 1)); - t_max = nir_fmin(b, t_max, nir_channel(b, t2_vec, 2)); - - nir_push_if(b, nir_iand(b, nir_fge(b, nir_load_var(b, data->vars->tmax), t_min), - nir_fge(b, t_max, nir_load_var(b, data->vars->tmin)))); - { - nir_store_var(b, data->vars->ahit_accept, nir_imm_true(b), 0x1); - nir_store_var(b, inner_vars.tmax, nir_fmax(b, t_min, nir_load_var(b, data->vars->tmin)), - 1); - } - nir_pop_if(b, NULL); - } nir_pop_if(b, NULL); nir_push_if(b, nir_load_var(b, data->vars->ahit_accept));