ac/llvm: call the callback in all return paths of ac_cull_triangle
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Mon, 21 Jun 2021 13:04:19 +0000 (15:04 +0200)
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tue, 29 Jun 2021 21:38:21 +0000 (23:38 +0200)
Fixes: 12d2df15f17 ("ac/llvm: add a callback to ac_cull_triangle to generate code in inner-most block")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4959
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11625>

src/amd/llvm/ac_llvm_cull.c

index 028e125..c5ddef7 100644 (file)
@@ -125,8 +125,11 @@ static LLVMValueRef cull_bbox(struct ac_llvm_context *ctx, LLVMValueRef pos[3][4
 {
    LLVMBuilderRef builder = ctx->builder;
 
-   if (!cull_view_xy && !cull_view_near_z && !cull_view_far_z && !cull_small_prims)
+   if (!cull_view_xy && !cull_view_near_z && !cull_view_far_z && !cull_small_prims) {
+      if (accept_func)
+         accept_func(ctx, initially_accepted, userdata);
       return initially_accepted;
+   }
 
    /* Skip the culling if the primitive has already been rejected or
     * if any W is negative. The bounding box culling doesn't work when
@@ -206,6 +209,11 @@ static LLVMValueRef cull_bbox(struct ac_llvm_context *ctx, LLVMValueRef pos[3][4
 
       LLVMBuildStore(builder, accepted, accepted_var);
    }
+   if (accept_func) {
+      /* If the caller provided a accept_func, call it in the else branch */
+      ac_build_else(ctx, 10000000);
+      accept_func(ctx, initially_accepted, userdata);
+   }
    ac_build_endif(ctx, 10000000);
 
    return LLVMBuildLoad(builder, accepted_var, "");