radeonsi: don't use lp_build_if for the wrapping if block in merged shaders
authorMarek Olšák <marek.olsak@amd.com>
Wed, 24 Jul 2019 00:34:03 +0000 (20:34 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 31 Jul 2019 02:06:23 +0000 (22:06 -0400)
src/gallium/drivers/radeonsi/gfx10_shader_ngg.c
src/gallium/drivers/radeonsi/si_shader.c
src/gallium/drivers/radeonsi/si_shader_internal.h

index f5899511138158f5c46199dfa0df152a73489d47..27be0661006b9e999ca1d6cd8e020731113583fb 100644 (file)
@@ -581,7 +581,7 @@ void gfx10_emit_ngg_epilogue(struct ac_shader_abi *abi,
                }
        }
 
-       lp_build_endif(&ctx->merged_wrap_if_state);
+       ac_build_endif(&ctx->ac, ctx->merged_wrap_if_label);
 
        LLVMValueRef prims_in_wave = si_unpack_param(ctx, ctx->param_merged_wave_info, 8, 8);
        LLVMValueRef vtx_in_wave = si_unpack_param(ctx, ctx->param_merged_wave_info, 0, 8);
@@ -1058,7 +1058,7 @@ void gfx10_ngg_gs_emit_epilogue(struct si_shader_context *ctx)
                ac_build_endif(&ctx->ac, 5105);
        }
 
-       lp_build_endif(&ctx->merged_wrap_if_state);
+       ac_build_endif(&ctx->ac, ctx->merged_wrap_if_label);
 
        ac_build_s_barrier(&ctx->ac);
 
index edac0ca1dd2fde55265925ab8ec507ee6b1b7bae..886ee092c22100e5f060c7efd8a9b530a2e83f0e 100644 (file)
@@ -3329,11 +3329,11 @@ static void si_llvm_emit_tcs_epilogue(struct ac_shader_abi *abi,
        if (ctx->screen->info.chip_class >= GFX9) {
                LLVMBasicBlockRef blocks[2] = {
                        LLVMGetInsertBlock(builder),
-                       ctx->merged_wrap_if_state.entry_block
+                       ctx->merged_wrap_if_entry_block
                };
                LLVMValueRef values[2];
 
-               lp_build_endif(&ctx->merged_wrap_if_state);
+               ac_build_endif(&ctx->ac, ctx->merged_wrap_if_label);
 
                values[0] = rel_patch_id;
                values[1] = LLVMGetUndef(ctx->i32);
@@ -3617,7 +3617,7 @@ static void emit_gs_epilogue(struct si_shader_context *ctx)
                         si_get_gs_wave_id(ctx));
 
        if (ctx->screen->info.chip_class >= GFX9)
-               lp_build_endif(&ctx->merged_wrap_if_state);
+               ac_build_endif(&ctx->ac, ctx->merged_wrap_if_label);
 }
 
 static void si_llvm_emit_gs_epilogue(struct ac_shader_abi *abi,
@@ -6246,7 +6246,10 @@ static bool si_compile_tgsi_main(struct si_shader_context *ctx)
                        LLVMValueRef ena =
                                LLVMBuildICmp(ctx->ac.builder, LLVMIntULT,
                                            ac_get_thread_id(&ctx->ac), num_threads, "");
-                       lp_build_if(&ctx->merged_wrap_if_state, &ctx->gallivm, ena);
+
+                       ctx->merged_wrap_if_entry_block = LLVMGetInsertBlock(ctx->ac.builder);
+                       ctx->merged_wrap_if_label = 11500;
+                       ac_build_ifcc(&ctx->ac, ena, ctx->merged_wrap_if_label);
 
                        if (nested_barrier) {
                                /* Execute a barrier before the second shader in
index b4bee5e22e236238d2742a0a33f43c3720587698..ae99bf5d37447ad8a53d46f5509dcd5733a75614 100644 (file)
@@ -112,7 +112,8 @@ struct si_shader_context {
        LLVMValueRef *imms;
        unsigned imms_num;
 
-       struct lp_build_if_state merged_wrap_if_state;
+       LLVMBasicBlockRef merged_wrap_if_entry_block;
+       int merged_wrap_if_label;
 
        struct tgsi_array_info *temp_arrays;
        LLVMValueRef *temp_array_allocas;