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

Author: Timur Kristóf <[email protected]>
Date:   Wed Aug  3 12:03:00 2022 +0200

ac/nir/cull: Make cull functions more consistent.

Now they all return whether the primitive was rejected.

No Fossil DB changes.

Signed-off-by: Timur Kristóf <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Reviewed-by: Qiang Yu <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17870>

---

 src/amd/common/ac_nir_cull.c | 21 +++++++--------------
 1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/src/amd/common/ac_nir_cull.c b/src/amd/common/ac_nir_cull.c
index 212d65a422d..d88dbd85944 100644
--- a/src/amd/common/ac_nir_cull.c
+++ b/src/amd/common/ac_nir_cull.c
@@ -31,16 +31,14 @@
 typedef struct
 {
    nir_ssa_def *w_reflection;
-   nir_ssa_def *w_accepted;
-   nir_ssa_def *all_w_positive;
+   nir_ssa_def *all_w_negative;
    nir_ssa_def *any_w_negative;
 } position_w_info;
 
 static void
 analyze_position_w(nir_builder *b, nir_ssa_def *pos[3][4], position_w_info 
*w_info)
 {
-   nir_ssa_def *all_w_negative = nir_imm_bool(b, true);
-
+   w_info->all_w_negative = nir_imm_bool(b, true);
    w_info->w_reflection = nir_imm_bool(b, false);
    w_info->any_w_negative = nir_imm_bool(b, false);
 
@@ -48,11 +46,8 @@ analyze_position_w(nir_builder *b, nir_ssa_def *pos[3][4], 
position_w_info *w_in
       nir_ssa_def *neg_w = nir_flt(b, pos[i][3], nir_imm_float(b, 0.0f));
       w_info->w_reflection = nir_ixor(b, neg_w, w_info->w_reflection);
       w_info->any_w_negative = nir_ior(b, neg_w, w_info->any_w_negative);
-      all_w_negative = nir_iand(b, neg_w, all_w_negative);
+      w_info->all_w_negative = nir_iand(b, neg_w, w_info->all_w_negative);
    }
-
-   w_info->all_w_positive = nir_inot(b, w_info->any_w_negative);
-   w_info->w_accepted = nir_inot(b, all_w_negative);
 }
 
 static nir_ssa_def *
@@ -80,9 +75,7 @@ cull_face(nir_builder *b, nir_ssa_def *pos[3][4], const 
position_w_info *w_info)
    /* Don't reject NaN and +/-infinity, these are tricky.
     * Just trust fixed-function HW to handle these cases correctly.
     */
-   face_culled = nir_iand(b, face_culled, nir_fisfinite(b, det));
-
-   return nir_inot(b, face_culled);
+   return nir_iand(b, face_culled, nir_fisfinite(b, det));
 }
 
 static void
@@ -153,8 +146,8 @@ ac_nir_cull_triangle(nir_builder *b,
    analyze_position_w(b, pos, &w_info);
 
    nir_ssa_def *accepted = initially_accepted;
-   accepted = nir_iand(b, accepted, w_info.w_accepted);
-   accepted = nir_iand(b, accepted, cull_face(b, pos, &w_info));
+   accepted = nir_iand(b, accepted, nir_inot(b, w_info.all_w_negative));
+   accepted = nir_iand(b, accepted, nir_inot(b, cull_face(b, pos, &w_info)));
 
    nir_if *if_accepted = nir_push_if(b, accepted);
    {
@@ -165,7 +158,7 @@ ac_nir_cull_triangle(nir_builder *b,
       nir_ssa_def *prim_is_small = cull_small_primitive(b, bbox_min, bbox_max);
       nir_ssa_def *prim_invisible = nir_ior(b, prim_outside_view, 
prim_is_small);
 
-      accepted = nir_iand(b, nir_inot(b, prim_invisible), 
w_info.all_w_positive);
+      accepted = nir_iand(b, nir_inot(b, prim_invisible), nir_inot(b, 
w_info.any_w_negative));
       nir_if *if_still_accepted = nir_push_if(b, accepted);
       {
          accept_func(b, state);

Reply via email to