mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
gallivm: fix breakc
we break when the mask values are 0 not, 1, plus it's bit comparison not a floating point comparison. This fixes both. Signed-off-by: Zack Rusin <zackr@vmware.com> Reviewed-by: Jose Fonseca <jfonseca@vmware.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
parent
e4484a0309
commit
1ad4a4eeb3
1 changed files with 14 additions and 12 deletions
|
|
@ -217,15 +217,14 @@ static void lp_exec_break_condition(struct lp_exec_mask *mask,
|
|||
LLVMValueRef cond)
|
||||
{
|
||||
LLVMBuilderRef builder = mask->bld->gallivm->builder;
|
||||
LLVMValueRef exec_mask = LLVMBuildNot(builder,
|
||||
LLVMValueRef cond_mask = LLVMBuildAnd(builder,
|
||||
mask->exec_mask,
|
||||
"break");
|
||||
|
||||
exec_mask = LLVMBuildAnd(builder, exec_mask, cond, "");
|
||||
cond, "cond_mask");
|
||||
cond_mask = LLVMBuildNot(builder, cond, "break_cond");
|
||||
|
||||
mask->break_mask = LLVMBuildAnd(builder,
|
||||
mask->break_mask,
|
||||
exec_mask, "break_full");
|
||||
cond_mask, "breakc_full");
|
||||
|
||||
lp_exec_mask_update(mask);
|
||||
}
|
||||
|
|
@ -287,14 +286,14 @@ static void lp_exec_endloop(struct gallivm_state *gallivm,
|
|||
builder,
|
||||
LLVMIntNE,
|
||||
LLVMBuildBitCast(builder, mask->exec_mask, reg_type, ""),
|
||||
LLVMConstNull(reg_type), "");
|
||||
LLVMConstNull(reg_type), "i1cond");
|
||||
|
||||
/* i2cond = (looplimiter > 0) */
|
||||
i2cond = LLVMBuildICmp(
|
||||
builder,
|
||||
LLVMIntSGT,
|
||||
limiter,
|
||||
LLVMConstNull(int_type), "");
|
||||
LLVMConstNull(int_type), "i2cond");
|
||||
|
||||
/* if( i1cond && i2cond ) */
|
||||
icond = LLVMBuildAnd(builder, i1cond, i2cond, "");
|
||||
|
|
@ -2298,13 +2297,16 @@ breakc_emit(
|
|||
struct lp_build_tgsi_context * bld_base,
|
||||
struct lp_build_emit_data * emit_data)
|
||||
{
|
||||
LLVMValueRef tmp;
|
||||
struct lp_build_tgsi_soa_context * bld = lp_soa_context(bld_base);
|
||||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
struct lp_build_context *uint_bld = &bld_base->uint_bld;
|
||||
LLVMValueRef unsigned_cond =
|
||||
LLVMBuildBitCast(builder, emit_data->args[0], uint_bld->vec_type, "");
|
||||
LLVMValueRef cond = lp_build_cmp(uint_bld, PIPE_FUNC_NOTEQUAL,
|
||||
unsigned_cond,
|
||||
uint_bld->zero);
|
||||
|
||||
tmp = lp_build_cmp(&bld_base->base, PIPE_FUNC_NOTEQUAL,
|
||||
emit_data->args[0], bld->bld_base.base.zero);
|
||||
|
||||
lp_exec_break_condition(&bld->exec_mask, tmp);
|
||||
lp_exec_break_condition(&bld->exec_mask, cond);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue