mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 11:40:10 +01:00
radv/rt: Use traversal vars for object origin/direction in ahit/isec
We already did the work of transforming the ray data, no need to do it multiple times. Should theoretically be a lot better. However, none of the fossils appear to use object-space ray data in anyhit/intersection shaders. :( Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38809>
This commit is contained in:
parent
a488203e85
commit
f692ac76ca
1 changed files with 7 additions and 12 deletions
|
|
@ -225,6 +225,13 @@ lower_ahit_isec_intrinsics(nir_builder *b, nir_intrinsic_instr *intr, void *_par
|
||||||
|
|
||||||
nir_def *ret = NULL;
|
nir_def *ret = NULL;
|
||||||
switch (intr->intrinsic) {
|
switch (intr->intrinsic) {
|
||||||
|
/* When any-hit shaders are invoked, the traversal ray origin/direction is in object space */
|
||||||
|
case nir_intrinsic_load_ray_object_origin:
|
||||||
|
ret = nir_load_var(b, params->trav_vars->origin);
|
||||||
|
break;
|
||||||
|
case nir_intrinsic_load_ray_object_direction:
|
||||||
|
ret = nir_load_var(b, params->trav_vars->dir);
|
||||||
|
break;
|
||||||
case nir_intrinsic_load_ray_world_origin:
|
case nir_intrinsic_load_ray_world_origin:
|
||||||
ret = nir_load_var(b, params->anyhit_vars->origin);
|
ret = nir_load_var(b, params->anyhit_vars->origin);
|
||||||
break;
|
break;
|
||||||
|
|
@ -287,18 +294,6 @@ lower_ahit_isec_intrinsics(nir_builder *b, nir_intrinsic_instr *intr, void *_par
|
||||||
nir_channel(b, otw_matrix[2], c));
|
nir_channel(b, otw_matrix[2], c));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case nir_intrinsic_load_ray_object_origin: {
|
|
||||||
nir_def *wto_matrix[3];
|
|
||||||
radv_load_wto_matrix(params->device, b, nir_load_var(b, params->trav_vars->instance_addr), wto_matrix);
|
|
||||||
ret = nir_build_vec3_mat_mult(b, nir_load_var(b, params->anyhit_vars->origin), wto_matrix, true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case nir_intrinsic_load_ray_object_direction: {
|
|
||||||
nir_def *wto_matrix[3];
|
|
||||||
radv_load_wto_matrix(params->device, b, nir_load_var(b, params->trav_vars->instance_addr), wto_matrix);
|
|
||||||
ret = nir_build_vec3_mat_mult(b, nir_load_var(b, params->anyhit_vars->dir), wto_matrix, false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case nir_intrinsic_ignore_ray_intersection: {
|
case nir_intrinsic_ignore_ray_intersection: {
|
||||||
nir_store_var(b, params->anyhit_vars->ahit_accept, nir_imm_false(b), 0x1);
|
nir_store_var(b, params->anyhit_vars->ahit_accept, nir_imm_false(b), 0x1);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue