diff options
Diffstat (limited to 'src/gallium/drivers/r600/r600_shader.c')
-rw-r--r-- | src/gallium/drivers/r600/r600_shader.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 7185c8e78f0..5ac8c095183 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -5728,7 +5728,7 @@ static void break_loop_on_flag(struct r600_shader_ctx *ctx, unsigned fc_sp) } #endif -static int tgsi_if(struct r600_shader_ctx *ctx) +static int emit_if(struct r600_shader_ctx *ctx, int opcode) { int alu_type = CF_OP_ALU_PUSH_BEFORE; @@ -5742,7 +5742,7 @@ static int tgsi_if(struct r600_shader_ctx *ctx) alu_type = CF_OP_ALU; } - emit_logic_pred(ctx, ALU_OP2_PRED_SETNE_INT, alu_type); + emit_logic_pred(ctx, opcode, alu_type); r600_bytecode_add_cfinst(ctx->bc, CF_OP_JUMP); @@ -5752,6 +5752,16 @@ static int tgsi_if(struct r600_shader_ctx *ctx) return 0; } +static int tgsi_if(struct r600_shader_ctx *ctx) +{ + return emit_if(ctx, ALU_OP2_PRED_SETNE); +} + +static int tgsi_uif(struct r600_shader_ctx *ctx) +{ + return emit_if(ctx, ALU_OP2_PRED_SETNE_INT); +} + static int tgsi_else(struct r600_shader_ctx *ctx) { r600_bytecode_add_cfinst(ctx->bc, CF_OP_ELSE); @@ -6003,8 +6013,7 @@ static struct r600_shader_tgsi_instruction r600_shader_tgsi_instruction[] = { {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if}, - /* gap */ - {75, 0, ALU_OP0_NOP, tgsi_unsupported}, + {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif}, {76, 0, ALU_OP0_NOP, tgsi_unsupported}, {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else}, {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif}, @@ -6197,8 +6206,7 @@ static struct r600_shader_tgsi_instruction eg_shader_tgsi_instruction[] = { {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if}, - /* gap */ - {75, 0, ALU_OP0_NOP, tgsi_unsupported}, + {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif}, {76, 0, ALU_OP0_NOP, tgsi_unsupported}, {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else}, {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif}, @@ -6391,8 +6399,7 @@ static struct r600_shader_tgsi_instruction cm_shader_tgsi_instruction[] = { {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex}, {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont}, {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if}, - /* gap */ - {75, 0, ALU_OP0_NOP, tgsi_unsupported}, + {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif}, {76, 0, ALU_OP0_NOP, tgsi_unsupported}, {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else}, {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif}, |