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));