radv: Replace magic constants with enum values

Signed-off-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15722>
This commit is contained in:
Konstantin Seurer
2022-04-03 11:24:29 +02:00
committed by Marge Bot
parent c8fe408fcc
commit c4650cbdb0
4 changed files with 36 additions and 32 deletions

View File

@@ -302,7 +302,7 @@ insert_terminate_on_first_hit(nir_builder *b, nir_ssa_def *index, struct ray_que
nir_ssa_def *terminate_on_first_hit = nir_ssa_def *terminate_on_first_hit =
nir_ine(b, nir_ine(b,
nir_iand(b, rq_load_var(b, index, vars->flags), nir_iand(b, rq_load_var(b, index, vars->flags),
nir_imm_int(b, 4 /* TerminateOnFirstHitKHR */)), nir_imm_int(b, SpvRayFlagsTerminateOnFirstHitKHRMask)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_push_if(b, terminate_on_first_hit); nir_push_if(b, terminate_on_first_hit);
{ {
@@ -519,34 +519,32 @@ insert_traversal_triangle_case(struct radv_device *device, nir_builder *b, nir_s
nir_ssa_def *frontface = nir_flt(b, nir_imm_float(b, 0), div); nir_ssa_def *frontface = nir_flt(b, nir_imm_float(b, 0), div);
nir_ssa_def *switch_ccw = nir_ine( nir_ssa_def *switch_ccw = nir_ine(
b, b,
nir_iand( nir_iand(b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags),
b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags), nir_imm_int(b, VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR << 24)),
nir_imm_int(b, 2 << 24 /* VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT */)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
frontface = nir_ixor(b, frontface, switch_ccw); frontface = nir_ixor(b, frontface, switch_ccw);
rq_store_var(b, index, vars->candidate.frontface, frontface, 0x1); rq_store_var(b, index, vars->candidate.frontface, frontface, 0x1);
nir_ssa_def *not_cull = nir_ieq(b, nir_ssa_def *not_cull = nir_ieq(b,
nir_iand(b, rq_load_var(b, index, vars->flags), nir_iand(b, rq_load_var(b, index, vars->flags),
nir_imm_int(b, 256 /* RayFlagsSkipTriangles */)), nir_imm_int(b, SpvRayFlagsSkipTrianglesKHRMask)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *not_facing_cull = nir_ieq( nir_ssa_def *not_facing_cull = nir_ieq(
b, b,
nir_iand(b, rq_load_var(b, index, vars->flags), nir_iand(b, rq_load_var(b, index, vars->flags),
nir_bcsel(b, frontface, nir_imm_int(b, 32 /* RayFlagsCullFrontFacingTriangles */), nir_bcsel(b, frontface, nir_imm_int(b, SpvRayFlagsCullFrontFacingTrianglesKHRMask),
nir_imm_int(b, 16 /* RayFlagsCullBackFacingTriangles */))), nir_imm_int(b, SpvRayFlagsCullBackFacingTrianglesKHRMask))),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
not_cull = nir_iand( not_cull = nir_iand(
b, not_cull, b, not_cull,
nir_ior( nir_ior(
b, not_facing_cull, b, not_facing_cull,
nir_ine( nir_ine(b,
b, nir_iand(b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags),
nir_iand( nir_imm_int(
b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags), b, VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR << 24)),
nir_imm_int(b, 1 << 24 /* VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT */)), nir_imm_int(b, 0))));
nir_imm_int(b, 0))));
nir_push_if(b, nir_iand(b, nir_push_if(b, nir_iand(b,
nir_iand(b, nir_flt(b, dist, rq_load_var(b, index, vars->closest.t)), nir_iand(b, nir_flt(b, dist, rq_load_var(b, index, vars->closest.t)),
@@ -567,7 +565,8 @@ insert_traversal_triangle_case(struct radv_device *device, nir_builder *b, nir_s
not_cull = not_cull =
nir_ieq(b, nir_ieq(b,
nir_iand(b, rq_load_var(b, index, vars->flags), nir_iand(b, rq_load_var(b, index, vars->flags),
nir_bcsel(b, is_opaque, nir_imm_int(b, 0x40), nir_imm_int(b, 0x80))), nir_bcsel(b, is_opaque, nir_imm_int(b, SpvRayFlagsCullOpaqueKHRMask),
nir_imm_int(b, SpvRayFlagsCullNoOpaqueKHRMask))),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_push_if(b, not_cull); nir_push_if(b, not_cull);
{ {
@@ -613,13 +612,14 @@ insert_traversal_aabb_case(struct radv_device *device, nir_builder *b, nir_ssa_d
nir_ssa_def *not_skip_aabb = nir_ieq( nir_ssa_def *not_skip_aabb = nir_ieq(
b, b,
nir_iand(b, rq_load_var(b, index, vars->flags), nir_imm_int(b, 512 /* RayFlagsSkipAABB */)), nir_iand(b, rq_load_var(b, index, vars->flags), nir_imm_int(b, SpvRayFlagsSkipAABBsKHRMask)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *not_cull = nir_iand( nir_ssa_def *not_cull = nir_iand(
b, not_skip_aabb, b, not_skip_aabb,
nir_ieq(b, nir_ieq(b,
nir_iand(b, rq_load_var(b, index, vars->flags), nir_iand(b, rq_load_var(b, index, vars->flags),
nir_bcsel(b, is_opaque, nir_imm_int(b, 0x40), nir_imm_int(b, 0x80))), nir_bcsel(b, is_opaque, nir_imm_int(b, SpvRayFlagsCullOpaqueKHRMask),
nir_imm_int(b, SpvRayFlagsCullNoOpaqueKHRMask))),
nir_imm_int(b, 0))); nir_imm_int(b, 0)));
nir_push_if(b, not_cull); nir_push_if(b, not_cull);
{ {

View File

@@ -1129,18 +1129,18 @@ insert_traversal_triangle_case(struct radv_device *device,
b, b,
nir_iand( nir_iand(
b, nir_load_var(b, trav_vars->sbt_offset_and_flags), b, nir_load_var(b, trav_vars->sbt_offset_and_flags),
nir_imm_int(b, 2 << 24 /* VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT */)), nir_imm_int(b, VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR << 24)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
frontface = nir_ixor(b, frontface, switch_ccw); frontface = nir_ixor(b, frontface, switch_ccw);
nir_ssa_def *not_cull = nir_ieq( nir_ssa_def *not_cull = nir_ieq(
b, nir_iand(b, nir_load_var(b, vars->flags), nir_imm_int(b, 256 /* RayFlagsSkipTriangles */)), b, nir_iand(b, nir_load_var(b, vars->flags), nir_imm_int(b, SpvRayFlagsSkipTrianglesKHRMask)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *not_facing_cull = nir_ieq( nir_ssa_def *not_facing_cull = nir_ieq(
b, b,
nir_iand(b, nir_load_var(b, vars->flags), nir_iand(b, nir_load_var(b, vars->flags),
nir_bcsel(b, frontface, nir_imm_int(b, 32 /* RayFlagsCullFrontFacingTriangles */), nir_bcsel(b, frontface, nir_imm_int(b, SpvRayFlagsCullFrontFacingTrianglesKHRMask),
nir_imm_int(b, 16 /* RayFlagsCullBackFacingTriangles */))), nir_imm_int(b, SpvRayFlagsCullBackFacingTrianglesKHRMask))),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
not_cull = nir_iand( not_cull = nir_iand(
@@ -1151,7 +1151,7 @@ insert_traversal_triangle_case(struct radv_device *device,
b, b,
nir_iand( nir_iand(
b, nir_load_var(b, trav_vars->sbt_offset_and_flags), b, nir_load_var(b, trav_vars->sbt_offset_and_flags),
nir_imm_int(b, 1 << 24 /* VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT */)), nir_imm_int(b, VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR << 24)),
nir_imm_int(b, 0)))); nir_imm_int(b, 0))));
nir_push_if(b, nir_iand(b, nir_push_if(b, nir_iand(b,
@@ -1173,7 +1173,8 @@ insert_traversal_triangle_case(struct radv_device *device,
not_cull = not_cull =
nir_ieq(b, nir_ieq(b,
nir_iand(b, nir_load_var(b, vars->flags), nir_iand(b, nir_load_var(b, vars->flags),
nir_bcsel(b, is_opaque, nir_imm_int(b, 0x40), nir_imm_int(b, 0x80))), nir_bcsel(b, is_opaque, nir_imm_int(b, SpvRayFlagsCullOpaqueKHRMask),
nir_imm_int(b, SpvRayFlagsCullNoOpaqueKHRMask))),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_push_if(b, not_cull); nir_push_if(b, not_cull);
{ {
@@ -1236,7 +1237,7 @@ insert_traversal_triangle_case(struct radv_device *device,
nir_ior(b, nir_ior(b,
nir_ine(b, nir_ine(b,
nir_iand(b, nir_load_var(b, vars->flags), nir_iand(b, nir_load_var(b, vars->flags),
nir_imm_int(b, 8 /* SkipClosestHitShader */)), nir_imm_int(b, SpvRayFlagsSkipClosestHitShaderKHRMask)),
nir_imm_int(b, 0)), nir_imm_int(b, 0)),
nir_ieq(b, nir_load_var(b, vars->idx), nir_imm_int(b, 0))), nir_ieq(b, nir_load_var(b, vars->idx), nir_imm_int(b, 0))),
1); 1);
@@ -1244,7 +1245,7 @@ insert_traversal_triangle_case(struct radv_device *device,
nir_ssa_def *terminate_on_first_hit = nir_ssa_def *terminate_on_first_hit =
nir_ine(b, nir_ine(b,
nir_iand(b, nir_load_var(b, vars->flags), nir_iand(b, nir_load_var(b, vars->flags),
nir_imm_int(b, 4 /* TerminateOnFirstHitKHR */)), nir_imm_int(b, SpvRayFlagsTerminateOnFirstHitKHRMask)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *ray_terminated = nir_ssa_def *ray_terminated =
nir_ieq(b, nir_load_var(b, vars->ahit_status), nir_imm_int(b, 2)); nir_ieq(b, nir_load_var(b, vars->ahit_status), nir_imm_int(b, 2));
@@ -1282,7 +1283,8 @@ insert_traversal_aabb_case(struct radv_device *device,
nir_ssa_def *not_cull = nir_ssa_def *not_cull =
nir_iand(b, not_skip_aabb, nir_ieq(b, nir_iand(b, not_skip_aabb, nir_ieq(b,
nir_iand(b, nir_load_var(b, vars->flags), nir_iand(b, nir_load_var(b, vars->flags),
nir_bcsel(b, is_opaque, nir_imm_int(b, 0x40), nir_imm_int(b, 0x80))), nir_bcsel(b, is_opaque, nir_imm_int(b, SpvRayFlagsCullOpaqueKHRMask),
nir_imm_int(b, SpvRayFlagsCullNoOpaqueKHRMask))),
nir_imm_int(b, 0))); nir_imm_int(b, 0)));
nir_push_if(b, not_cull); nir_push_if(b, not_cull);
{ {
@@ -1397,7 +1399,7 @@ insert_traversal_aabb_case(struct radv_device *device,
nir_ior(b, nir_ior(b,
nir_ine(b, nir_ine(b,
nir_iand(b, nir_load_var(b, vars->flags), nir_iand(b, nir_load_var(b, vars->flags),
nir_imm_int(b, 8 /* SkipClosestHitShader */)), nir_imm_int(b, SpvRayFlagsSkipClosestHitShaderKHRMask)),
nir_imm_int(b, 0)), nir_imm_int(b, 0)),
nir_ieq(b, nir_load_var(b, vars->idx), nir_imm_int(b, 0))), nir_ieq(b, nir_load_var(b, vars->idx), nir_imm_int(b, 0))),
1); 1);
@@ -1405,7 +1407,7 @@ insert_traversal_aabb_case(struct radv_device *device,
nir_ssa_def *terminate_on_first_hit = nir_ssa_def *terminate_on_first_hit =
nir_ine(b, nir_ine(b,
nir_iand(b, nir_load_var(b, vars->flags), nir_iand(b, nir_load_var(b, vars->flags),
nir_imm_int(b, 4 /* TerminateOnFirstHitKHR */)), nir_imm_int(b, SpvRayFlagsTerminateOnFirstHitKHRMask)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *ray_terminated = nir_ssa_def *ray_terminated =
nir_ieq(b, nir_load_var(b, vars->ahit_status), nir_imm_int(b, 2)); nir_ieq(b, nir_load_var(b, vars->ahit_status), nir_imm_int(b, 2));

View File

@@ -386,17 +386,17 @@ hit_is_opaque(nir_builder *b, nir_ssa_def *sbt_offset_and_flags, nir_ssa_def *fl
nir_ssa_def *geometry_id_and_flags) nir_ssa_def *geometry_id_and_flags)
{ {
nir_ssa_def *geom_force_opaque = nir_ine( nir_ssa_def *geom_force_opaque = nir_ine(
b, nir_iand(b, geometry_id_and_flags, nir_imm_int(b, 1u << 28 /* VK_GEOMETRY_OPAQUE_BIT */)), b, nir_iand(b, geometry_id_and_flags, nir_imm_int(b, VK_GEOMETRY_OPAQUE_BIT_KHR << 28)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *instance_force_opaque = nir_ssa_def *instance_force_opaque =
nir_ine(b, nir_ine(b,
nir_iand(b, sbt_offset_and_flags, nir_iand(b, sbt_offset_and_flags,
nir_imm_int(b, 4 << 24 /* VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT */)), nir_imm_int(b, VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR << 24)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *instance_force_non_opaque = nir_ssa_def *instance_force_non_opaque =
nir_ine(b, nir_ine(b,
nir_iand(b, sbt_offset_and_flags, nir_iand(b, sbt_offset_and_flags,
nir_imm_int(b, 8 << 24 /* VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT */)), nir_imm_int(b, VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR << 24)),
nir_imm_int(b, 0)); nir_imm_int(b, 0));
nir_ssa_def *opaque = geom_force_opaque; nir_ssa_def *opaque = geom_force_opaque;
@@ -404,9 +404,9 @@ hit_is_opaque(nir_builder *b, nir_ssa_def *sbt_offset_and_flags, nir_ssa_def *fl
opaque = nir_bcsel(b, instance_force_non_opaque, nir_imm_bool(b, false), opaque); opaque = nir_bcsel(b, instance_force_non_opaque, nir_imm_bool(b, false), opaque);
nir_ssa_def *ray_force_opaque = nir_ssa_def *ray_force_opaque =
nir_ine(b, nir_iand(b, flags, nir_imm_int(b, 1 /* RayFlagsOpaque */)), nir_imm_int(b, 0)); nir_ine(b, nir_iand(b, flags, nir_imm_int(b, SpvRayFlagsOpaqueKHRMask)), nir_imm_int(b, 0));
nir_ssa_def *ray_force_non_opaque = nir_ssa_def *ray_force_non_opaque =
nir_ine(b, nir_iand(b, flags, nir_imm_int(b, 2 /* RayFlagsNoOpaque */)), nir_imm_int(b, 0)); nir_ine(b, nir_iand(b, flags, nir_imm_int(b, SpvRayFlagsNoOpaqueKHRMask)), nir_imm_int(b, 0));
opaque = nir_bcsel(b, ray_force_opaque, nir_imm_bool(b, true), opaque); opaque = nir_bcsel(b, ray_force_opaque, nir_imm_bool(b, true), opaque);
opaque = nir_bcsel(b, ray_force_non_opaque, nir_imm_bool(b, false), opaque); opaque = nir_bcsel(b, ray_force_non_opaque, nir_imm_bool(b, false), opaque);

View File

@@ -28,6 +28,8 @@
#include "nir/nir_builder.h" #include "nir/nir_builder.h"
#include "nir/nir_vulkan.h" #include "nir/nir_vulkan.h"
#include "compiler/spirv/spirv.h"
#include "radv_private.h" #include "radv_private.h"
void nir_sort_hit_pair(nir_builder *b, nir_variable *var_distances, nir_variable *var_indices, void nir_sort_hit_pair(nir_builder *b, nir_variable *var_distances, nir_variable *var_indices,