Mesa (main): radv: Use nir_test_mask instead of i2b(iand)

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 30 18:29:38 UTC 2022


Module: Mesa
Branch: main
Commit: e83bd87ee94c04a62977c83d4e88f6a151109056
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e83bd87ee94c04a62977c83d4e88f6a151109056

Author: Konstantin Seurer <konstantin.seurer at gmail.com>
Date:   Fri Jun 24 21:28:01 2022 +0200

radv: Use nir_test_mask instead of i2b(iand)

Signed-off-by: Konstantin Seurer <konstantin.seurer at gmail.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17242>

---

 src/amd/vulkan/radv_meta_etc_decode.c       |  8 +++---
 src/amd/vulkan/radv_nir_lower_abi.c         |  3 +-
 src/amd/vulkan/radv_nir_lower_ray_queries.c | 28 ++++++++-----------
 src/amd/vulkan/radv_pipeline_rt.c           | 43 +++++++++++------------------
 src/amd/vulkan/radv_query.c                 | 34 ++++++++++-------------
 src/amd/vulkan/radv_rt_common.c             | 17 +++++-------
 6 files changed, 53 insertions(+), 80 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_etc_decode.c b/src/amd/vulkan/radv_meta_etc_decode.c
index 958c1219a46..ad7f8cbc2a5 100644
--- a/src/amd/vulkan/radv_meta_etc_decode.c
+++ b/src/amd/vulkan/radv_meta_etc_decode.c
@@ -273,7 +273,7 @@ build_shader(struct radv_device *dev)
       color_payload = flip_endian(&b, color_payload, 2);
       nir_ssa_def *color_y = nir_channel(&b, color_payload, 0);
       nir_ssa_def *color_x = nir_channel(&b, color_payload, 1);
-      nir_ssa_def *flip = nir_ine_imm(&b, nir_iand_imm(&b, color_y, 1), 0);
+      nir_ssa_def *flip = nir_test_mask(&b, color_y, 1);
       nir_ssa_def *subblock = nir_ushr_imm(
          &b, nir_bcsel(&b, flip, nir_channel(&b, pixel_coord, 1), nir_channel(&b, pixel_coord, 0)),
          1);
@@ -281,7 +281,7 @@ build_shader(struct radv_device *dev)
       nir_variable *punchthrough =
          nir_variable_create(b.shader, nir_var_shader_temp, glsl_bool_type(), "punchthrough");
       nir_ssa_def *punchthrough_init =
-         nir_iand(&b, alpha_bits_1, nir_ieq_imm(&b, nir_iand_imm(&b, color_y, 2), 0));
+         nir_iand(&b, alpha_bits_1, nir_inot(&b, nir_test_mask(&b, color_y, 2)));
       nir_store_var(&b, punchthrough, punchthrough_init, 0x1);
 
       nir_variable *etc1_compat =
@@ -313,8 +313,8 @@ build_shader(struct radv_device *dev)
          nir_iand_imm(&b, nir_ushr(&b, color_x, nir_iadd_imm(&b, linear_pixel, 15)), 2);
       nir_ssa_def *lsb = nir_iand_imm(&b, nir_ushr(&b, color_x, linear_pixel), 1);
 
-      nir_push_if(&b, nir_iand(&b, nir_inot(&b, alpha_bits_1),
-                               nir_ieq_imm(&b, nir_iand_imm(&b, color_y, 2), 0)));
+      nir_push_if(
+         &b, nir_iand(&b, nir_inot(&b, alpha_bits_1), nir_inot(&b, nir_test_mask(&b, color_y, 2))));
       {
          nir_store_var(&b, etc1_compat, nir_imm_bool(&b, true), 1);
          nir_ssa_def *tmp[3];
diff --git a/src/amd/vulkan/radv_nir_lower_abi.c b/src/amd/vulkan/radv_nir_lower_abi.c
index 0cd9fece947..f23c70b7213 100644
--- a/src/amd/vulkan/radv_nir_lower_abi.c
+++ b/src/amd/vulkan/radv_nir_lower_abi.c
@@ -54,8 +54,7 @@ static nir_ssa_def *
 nggc_bool_setting(nir_builder *b, unsigned mask, lower_abi_state *s)
 {
    nir_ssa_def *settings = ac_nir_load_arg(b, &s->args->ac, s->args->ngg_culling_settings);
-   nir_ssa_def *x = nir_iand_imm(b, settings, mask);
-   return nir_ine(b, x, nir_imm_int(b, 0));
+   return nir_test_mask(b, settings, mask);
 }
 
 static nir_ssa_def *
diff --git a/src/amd/vulkan/radv_nir_lower_ray_queries.c b/src/amd/vulkan/radv_nir_lower_ray_queries.c
index 084c6a83d55..f5ef445d8dc 100644
--- a/src/amd/vulkan/radv_nir_lower_ray_queries.c
+++ b/src/amd/vulkan/radv_nir_lower_ray_queries.c
@@ -298,9 +298,8 @@ static void
 insert_terminate_on_first_hit(nir_builder *b, nir_ssa_def *index, struct ray_query_vars *vars,
                               bool break_on_terminate)
 {
-   nir_ssa_def *terminate_on_first_hit = nir_ine_imm(
-      b, nir_iand_imm(b, rq_load_var(b, index, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask),
-      0);
+   nir_ssa_def *terminate_on_first_hit =
+      nir_test_mask(b, rq_load_var(b, index, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask);
    nir_push_if(b, terminate_on_first_hit);
    {
       rq_store_var(b, index, vars->incomplete, nir_imm_bool(b, false), 0x1);
@@ -512,15 +511,13 @@ insert_traversal_triangle_case(struct radv_device *device, nir_builder *b, nir_s
    dist = nir_fdiv(b, dist, div);
    nir_ssa_def *frontface = nir_flt(b, nir_imm_float(b, 0), div);
    nir_ssa_def *switch_ccw =
-      nir_ine_imm(b,
-                  nir_iand_imm(b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags),
-                               VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR << 24),
-                  0);
+      nir_test_mask(b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags),
+                    VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR << 24);
    frontface = nir_ixor(b, frontface, switch_ccw);
    rq_store_var(b, index, vars->candidate.frontface, frontface, 0x1);
 
-   nir_ssa_def *not_cull = nir_ieq_imm(
-      b, nir_iand_imm(b, rq_load_var(b, index, vars->flags), SpvRayFlagsSkipTrianglesKHRMask), 0);
+   nir_ssa_def *not_cull = nir_inot(
+      b, nir_test_mask(b, rq_load_var(b, index, vars->flags), SpvRayFlagsSkipTrianglesKHRMask));
    nir_ssa_def *not_facing_cull = nir_ieq_imm(
       b,
       nir_iand(b, rq_load_var(b, index, vars->flags),
@@ -530,12 +527,9 @@ insert_traversal_triangle_case(struct radv_device *device, nir_builder *b, nir_s
 
    not_cull = nir_iand(
       b, not_cull,
-      nir_ior(
-         b, not_facing_cull,
-         nir_ine_imm(b,
-                     nir_iand_imm(b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags),
-                                  VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR << 24),
-                     0)));
+      nir_ior(b, not_facing_cull,
+              nir_test_mask(b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags),
+                            VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR << 24)));
 
    nir_push_if(b, nir_iand(b,
                            nir_iand(b, nir_fge(b, rq_load_var(b, index, vars->closest.t), dist),
@@ -599,8 +593,8 @@ insert_traversal_aabb_case(struct radv_device *device, nir_builder *b, nir_ssa_d
       hit_is_opaque(b, rq_load_var(b, index, vars->candidate.sbt_offset_and_flags),
                     rq_load_var(b, index, vars->flags), geometry_id_and_flags);
 
-   nir_ssa_def *not_skip_aabb = nir_ieq_imm(
-      b, nir_iand_imm(b, rq_load_var(b, index, vars->flags), SpvRayFlagsSkipAABBsKHRMask), 0);
+   nir_ssa_def *not_skip_aabb = nir_inot(
+      b, nir_test_mask(b, rq_load_var(b, index, vars->flags), SpvRayFlagsSkipAABBsKHRMask));
    nir_ssa_def *not_cull = nir_iand(
       b, not_skip_aabb,
       nir_ieq_imm(b,
diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c
index a61a073f607..0b79318ef02 100644
--- a/src/amd/vulkan/radv_pipeline_rt.c
+++ b/src/amd/vulkan/radv_pipeline_rt.c
@@ -1128,14 +1128,12 @@ insert_traversal_triangle_case(struct radv_device *device,
    dist = nir_fdiv(b, dist, div);
    nir_ssa_def *frontface = nir_flt(b, nir_imm_float(b, 0), div);
    nir_ssa_def *switch_ccw =
-      nir_ine_imm(b,
-                  nir_iand_imm(b, nir_load_var(b, trav_vars->sbt_offset_and_flags),
-                               VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR << 24),
-                  0);
+      nir_test_mask(b, nir_load_var(b, trav_vars->sbt_offset_and_flags),
+                    VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR << 24);
    frontface = nir_ixor(b, frontface, switch_ccw);
 
-   nir_ssa_def *not_cull = nir_ieq_imm(
-      b, nir_iand_imm(b, nir_load_var(b, vars->flags), SpvRayFlagsSkipTrianglesKHRMask), 0);
+   nir_ssa_def *not_cull =
+      nir_inot(b, nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsSkipTrianglesKHRMask));
    nir_ssa_def *not_facing_cull = nir_ieq_imm(
       b,
       nir_iand(b, nir_load_var(b, vars->flags),
@@ -1145,12 +1143,9 @@ insert_traversal_triangle_case(struct radv_device *device,
 
    not_cull = nir_iand(
       b, not_cull,
-      nir_ior(
-         b, not_facing_cull,
-         nir_ine_imm(b,
-                     nir_iand_imm(b, nir_load_var(b, trav_vars->sbt_offset_and_flags),
-                                  VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR << 24),
-                     0)));
+      nir_ior(b, not_facing_cull,
+              nir_test_mask(b, nir_load_var(b, trav_vars->sbt_offset_and_flags),
+                            VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR << 24)));
 
    nir_push_if(b, nir_iand(b,
                            nir_iand(b, nir_flt(b, dist, nir_load_var(b, vars->tmax)),
@@ -1232,16 +1227,13 @@ insert_traversal_triangle_case(struct radv_device *device,
 
          nir_store_var(b, trav_vars->should_return,
                        nir_ior(b,
-                               nir_ine_imm(b,
-                                           nir_iand_imm(b, nir_load_var(b, vars->flags),
-                                                        SpvRayFlagsSkipClosestHitShaderKHRMask),
-                                           0),
+                               nir_test_mask(b, nir_load_var(b, vars->flags),
+                                             SpvRayFlagsSkipClosestHitShaderKHRMask),
                                nir_ieq_imm(b, nir_load_var(b, vars->idx), 0)),
                        1);
 
-         nir_ssa_def *terminate_on_first_hit = nir_ine_imm(
-            b, nir_iand_imm(b, nir_load_var(b, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask),
-            0);
+         nir_ssa_def *terminate_on_first_hit =
+            nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask);
          nir_ssa_def *ray_terminated =
             nir_ieq_imm(b, nir_load_var(b, vars->ahit_status), rt_ahit_status_terminate);
          nir_push_if(b, nir_ior(b, terminate_on_first_hit, ray_terminated));
@@ -1270,7 +1262,7 @@ insert_traversal_aabb_case(struct radv_device *device,
                                           nir_load_var(b, vars->flags), geometry_id_and_flags);
 
    nir_ssa_def *not_skip_aabb =
-      nir_ieq_imm(b, nir_iand_imm(b, nir_load_var(b, vars->flags), SpvRayFlagsSkipAABBsKHRMask), 0);
+      nir_inot(b, nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsSkipAABBsKHRMask));
    nir_ssa_def *not_cull = nir_iand(
       b, not_skip_aabb,
       nir_ieq_imm(b,
@@ -1386,16 +1378,13 @@ insert_traversal_aabb_case(struct radv_device *device,
 
          nir_store_var(b, trav_vars->should_return,
                        nir_ior(b,
-                               nir_ine_imm(b,
-                                           nir_iand_imm(b, nir_load_var(b, vars->flags),
-                                                        SpvRayFlagsSkipClosestHitShaderKHRMask),
-                                           0),
+                               nir_test_mask(b, nir_load_var(b, vars->flags),
+                                             SpvRayFlagsSkipClosestHitShaderKHRMask),
                                nir_ieq_imm(b, nir_load_var(b, vars->idx), 0)),
                        1);
 
-         nir_ssa_def *terminate_on_first_hit = nir_ine_imm(
-            b, nir_iand_imm(b, nir_load_var(b, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask),
-            0);
+         nir_ssa_def *terminate_on_first_hit =
+            nir_test_mask(b, nir_load_var(b, vars->flags), SpvRayFlagsTerminateOnFirstHitKHRMask);
          nir_ssa_def *ray_terminated =
             nir_ieq_imm(b, nir_load_var(b, vars->ahit_status), rt_ahit_status_terminate);
          nir_push_if(b, nir_ior(b, terminate_on_first_hit, ray_terminated));
diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index 63053f26fbb..d897e8103a5 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -41,19 +41,13 @@
 static const int pipelinestat_block_size = 11 * 8;
 static const unsigned pipeline_statistics_indices[] = {7, 6, 3, 4, 5, 2, 1, 0, 8, 9, 10};
 
-static nir_ssa_def *
-nir_test_flag(nir_builder *b, nir_ssa_def *flags, uint32_t flag)
-{
-   return nir_i2b(b, nir_iand_imm(b, flags, flag));
-}
-
 static void
 radv_store_availability(nir_builder *b, nir_ssa_def *flags, nir_ssa_def *dst_buf,
                         nir_ssa_def *offset, nir_ssa_def *value32)
 {
-   nir_push_if(b, nir_test_flag(b, flags, VK_QUERY_RESULT_WITH_AVAILABILITY_BIT));
+   nir_push_if(b, nir_test_mask(b, flags, VK_QUERY_RESULT_WITH_AVAILABILITY_BIT));
 
-   nir_push_if(b, nir_test_flag(b, flags, VK_QUERY_RESULT_64_BIT));
+   nir_push_if(b, nir_test_mask(b, flags, VK_QUERY_RESULT_64_BIT));
 
    nir_store_ssbo(b, nir_vec2(b, value32, nir_imm_int(b, 0)), dst_buf, offset, .align_mul = 8);
 
@@ -174,10 +168,10 @@ build_occlusion_query_shader(struct radv_device *device)
 
    /* Store the result if complete or if partial results have been requested. */
 
-   nir_ssa_def *result_is_64bit = nir_test_flag(&b, flags, VK_QUERY_RESULT_64_BIT);
+   nir_ssa_def *result_is_64bit = nir_test_mask(&b, flags, VK_QUERY_RESULT_64_BIT);
    nir_ssa_def *result_size =
       nir_bcsel(&b, result_is_64bit, nir_imm_int(&b, 8), nir_imm_int(&b, 4));
-   nir_push_if(&b, nir_ior(&b, nir_test_flag(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
+   nir_push_if(&b, nir_ior(&b, nir_test_mask(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
                            nir_load_var(&b, available)));
 
    nir_push_if(&b, result_is_64bit);
@@ -280,7 +274,7 @@ build_pipeline_statistics_query_shader(struct radv_device *device)
 
    nir_ssa_def *available32 = nir_load_ssbo(&b, 1, 32, src_buf, avail_offset);
 
-   nir_ssa_def *result_is_64bit = nir_test_flag(&b, flags, VK_QUERY_RESULT_64_BIT);
+   nir_ssa_def *result_is_64bit = nir_test_mask(&b, flags, VK_QUERY_RESULT_64_BIT);
    nir_ssa_def *elem_size = nir_bcsel(&b, result_is_64bit, nir_imm_int(&b, 8), nir_imm_int(&b, 4));
    nir_ssa_def *elem_count = nir_ushr_imm(&b, stats_mask, 16);
 
@@ -292,7 +286,7 @@ build_pipeline_statistics_query_shader(struct radv_device *device)
 
    nir_store_var(&b, output_offset, output_base, 0x1);
    for (int i = 0; i < ARRAY_SIZE(pipeline_statistics_indices); ++i) {
-      nir_push_if(&b, nir_test_flag(&b, stats_mask, 1u << i));
+      nir_push_if(&b, nir_test_mask(&b, stats_mask, BITFIELD64_BIT(i)));
 
       nir_ssa_def *start_offset = nir_iadd_imm(&b, input_base, pipeline_statistics_indices[i] * 8);
       nir_ssa_def *start = nir_load_ssbo(&b, 1, 64, src_buf, start_offset);
@@ -341,7 +335,7 @@ build_pipeline_statistics_query_shader(struct radv_device *device)
 
    nir_push_else(&b, NULL); /* nir_i2b(&b, available32) */
 
-   nir_push_if(&b, nir_test_flag(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT));
+   nir_push_if(&b, nir_test_mask(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT));
 
    /* Stores zeros in all outputs. */
 
@@ -444,7 +438,7 @@ build_tfb_query_shader(struct radv_device *device)
    avails[0] = nir_iand(&b, nir_channel(&b, load1, 1), nir_channel(&b, load1, 3));
    avails[1] = nir_iand(&b, nir_channel(&b, load2, 1), nir_channel(&b, load2, 3));
    nir_ssa_def *result_is_available =
-      nir_i2b(&b, nir_iand_imm(&b, nir_iand(&b, avails[0], avails[1]), 0x80000000));
+      nir_test_mask(&b, nir_iand(&b, avails[0], avails[1]), 0x80000000);
 
    /* Only compute result if available. */
    nir_push_if(&b, result_is_available);
@@ -470,12 +464,12 @@ build_tfb_query_shader(struct radv_device *device)
    nir_pop_if(&b, NULL);
 
    /* Determine if result is 64 or 32 bit. */
-   nir_ssa_def *result_is_64bit = nir_test_flag(&b, flags, VK_QUERY_RESULT_64_BIT);
+   nir_ssa_def *result_is_64bit = nir_test_mask(&b, flags, VK_QUERY_RESULT_64_BIT);
    nir_ssa_def *result_size =
       nir_bcsel(&b, result_is_64bit, nir_imm_int(&b, 16), nir_imm_int(&b, 8));
 
    /* Store the result if complete or partial results have been requested. */
-   nir_push_if(&b, nir_ior(&b, nir_test_flag(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
+   nir_push_if(&b, nir_ior(&b, nir_test_mask(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
                            nir_load_var(&b, available)));
 
    /* Store result. */
@@ -574,12 +568,12 @@ build_timestamp_query_shader(struct radv_device *device)
    nir_pop_if(&b, NULL);
 
    /* Determine if result is 64 or 32 bit. */
-   nir_ssa_def *result_is_64bit = nir_test_flag(&b, flags, VK_QUERY_RESULT_64_BIT);
+   nir_ssa_def *result_is_64bit = nir_test_mask(&b, flags, VK_QUERY_RESULT_64_BIT);
    nir_ssa_def *result_size =
       nir_bcsel(&b, result_is_64bit, nir_imm_int(&b, 8), nir_imm_int(&b, 4));
 
    /* Store the result if complete or partial results have been requested. */
-   nir_push_if(&b, nir_ior(&b, nir_test_flag(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
+   nir_push_if(&b, nir_ior(&b, nir_test_mask(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
                            nir_load_var(&b, available)));
 
    /* Store result. */
@@ -723,12 +717,12 @@ build_pg_query_shader(struct radv_device *device)
    nir_pop_if(&b, NULL);
 
    /* Determine if result is 64 or 32 bit. */
-   nir_ssa_def *result_is_64bit = nir_test_flag(&b, flags, VK_QUERY_RESULT_64_BIT);
+   nir_ssa_def *result_is_64bit = nir_test_mask(&b, flags, VK_QUERY_RESULT_64_BIT);
    nir_ssa_def *result_size =
       nir_bcsel(&b, result_is_64bit, nir_imm_int(&b, 16), nir_imm_int(&b, 8));
 
    /* Store the result if complete or partial results have been requested. */
-   nir_push_if(&b, nir_ior(&b, nir_test_flag(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
+   nir_push_if(&b, nir_ior(&b, nir_test_mask(&b, flags, VK_QUERY_RESULT_PARTIAL_BIT),
                            nir_load_var(&b, available)));
 
    /* Store result. */
diff --git a/src/amd/vulkan/radv_rt_common.c b/src/amd/vulkan/radv_rt_common.c
index e44c4f5ba0f..58903d068ab 100644
--- a/src/amd/vulkan/radv_rt_common.c
+++ b/src/amd/vulkan/radv_rt_common.c
@@ -404,21 +404,18 @@ 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 *geom_force_opaque =
-      nir_ine_imm(b, nir_iand_imm(b, geometry_id_and_flags, VK_GEOMETRY_OPAQUE_BIT_KHR << 28), 0);
-   nir_ssa_def *instance_force_opaque = nir_ine_imm(
-      b, nir_iand_imm(b, sbt_offset_and_flags, VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR << 24), 0);
-   nir_ssa_def *instance_force_non_opaque = nir_ine_imm(
-      b, nir_iand_imm(b, sbt_offset_and_flags, VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR << 24),
-      0);
+      nir_test_mask(b, geometry_id_and_flags, VK_GEOMETRY_OPAQUE_BIT_KHR << 28);
+   nir_ssa_def *instance_force_opaque =
+      nir_test_mask(b, sbt_offset_and_flags, VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR << 24);
+   nir_ssa_def *instance_force_non_opaque =
+      nir_test_mask(b, sbt_offset_and_flags, VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR << 24);
 
    nir_ssa_def *opaque = geom_force_opaque;
    opaque = nir_bcsel(b, instance_force_opaque, nir_imm_bool(b, true), opaque);
    opaque = nir_bcsel(b, instance_force_non_opaque, nir_imm_bool(b, false), opaque);
 
-   nir_ssa_def *ray_force_opaque =
-      nir_ine_imm(b, nir_iand_imm(b, flags, SpvRayFlagsOpaqueKHRMask), 0);
-   nir_ssa_def *ray_force_non_opaque =
-      nir_ine_imm(b, nir_iand_imm(b, flags, SpvRayFlagsNoOpaqueKHRMask), 0);
+   nir_ssa_def *ray_force_opaque = nir_test_mask(b, flags, SpvRayFlagsOpaqueKHRMask);
+   nir_ssa_def *ray_force_non_opaque = nir_test_mask(b, flags, SpvRayFlagsNoOpaqueKHRMask);
 
    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);



More information about the mesa-commit mailing list