ac->voidt, NULL, 0, AC_FUNC_ATTR_CONVERGENT);
}
+static void radv_emit_kill(struct ac_shader_abi *abi, LLVMValueRef visible)
+{
+ struct radv_shader_context *ctx = radv_shader_context_from_abi(abi);
+ ac_build_kill_if_false(&ctx->ac, visible);
+}
+
static void emit_discard(struct ac_nir_context *ctx,
const nir_intrinsic_instr *instr)
{
cond = LLVMConstInt(ctx->ac.i1, false, 0);
}
- ac_build_kill_if_false(&ctx->ac, cond);
+ ctx->abi->emit_kill(ctx->abi, cond);
}
static LLVMValueRef
ctx.abi.lookup_interp_param = lookup_interp_param;
ctx.abi.load_sample_position = load_sample_position;
ctx.abi.load_sample_mask_in = load_sample_mask_in;
+ ctx.abi.emit_kill = radv_emit_kill;
}
if (i)
void (*emit_primitive)(struct ac_shader_abi *abi,
unsigned stream);
+ void (*emit_kill)(struct ac_shader_abi *abi, LLVMValueRef visible);
+
LLVMValueRef (*load_inputs)(struct ac_shader_abi *abi,
unsigned location,
unsigned driver_location,
ctx->abi.lookup_interp_param = si_nir_lookup_interp_param;
ctx->abi.load_sample_position = load_sample_position;
ctx->abi.load_sample_mask_in = load_sample_mask_in;
+ ctx->abi.emit_kill = si_llvm_emit_kill;
break;
case PIPE_SHADER_COMPUTE:
ctx->abi.load_local_group_size = get_block_size;