radv/rt: Get rid of null index AABB intersection handling
authorKonstantin Seurer <konstantin.seurer@gmail.com>
Sat, 12 Nov 2022 23:07:35 +0000 (00:07 +0100)
committerMarge Bot <emma+marge@anholt.net>
Mon, 14 Nov 2022 17:37:38 +0000 (17:37 +0000)
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: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19705>

src/amd/vulkan/radv_pipeline_rt.c

index f114af5..ba11317 100644 (file)
@@ -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));