diff options
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r-- | src/gallium/drivers/svga/svga_tgsi_insn.c | 94 |
1 files changed, 47 insertions, 47 deletions
diff --git a/src/gallium/drivers/svga/svga_tgsi_insn.c b/src/gallium/drivers/svga/svga_tgsi_insn.c index 88c96c076f5..4d78e96375c 100644 --- a/src/gallium/drivers/svga/svga_tgsi_insn.c +++ b/src/gallium/drivers/svga/svga_tgsi_insn.c @@ -729,45 +729,6 @@ alias_src_dst(struct src_register src, /** - * Translate/emit a LRP (linear interpolation) instruction. - */ -static boolean -submit_lrp(struct svga_shader_emitter *emit, - SVGA3dShaderDestToken dst, - struct src_register src0, - struct src_register src1, - struct src_register src2) -{ - SVGA3dShaderDestToken tmp; - boolean need_dst_tmp = FALSE; - - /* The dst reg must be a temporary, and not be the same as src0 or src2 */ - if (SVGA3dShaderGetRegType(dst.value) != SVGA3DREG_TEMP || - alias_src_dst(src0, dst) || - alias_src_dst(src2, dst)) - need_dst_tmp = TRUE; - - if (need_dst_tmp) { - tmp = get_temp( emit ); - tmp.mask = dst.mask; - } - else { - tmp = dst; - } - - if (!submit_op3(emit, inst_token( SVGA3DOP_LRP ), tmp, src0, src1, src2)) - return FALSE; - - if (need_dst_tmp) { - if (!submit_op1(emit, inst_token( SVGA3DOP_MOV ), dst, src( tmp ))) - return FALSE; - } - - return TRUE; -} - - -/** * Helper for emitting SVGA immediate values using the SVGA3DOP_DEF[I] * instructions. */ @@ -1092,20 +1053,20 @@ emit_if(struct svga_shader_emitter *emit, static boolean -emit_endif(struct svga_shader_emitter *emit, - const struct tgsi_full_instruction *insn) +emit_else(struct svga_shader_emitter *emit, + const struct tgsi_full_instruction *insn) { - emit->dynamic_branching_level--; - - return emit_instruction(emit, inst_token(SVGA3DOP_ENDIF)); + return emit_instruction(emit, inst_token(SVGA3DOP_ELSE)); } static boolean -emit_else(struct svga_shader_emitter *emit, - const struct tgsi_full_instruction *insn) +emit_endif(struct svga_shader_emitter *emit, + const struct tgsi_full_instruction *insn) { - return emit_instruction(emit, inst_token(SVGA3DOP_ELSE)); + emit->dynamic_branching_level--; + + return emit_instruction(emit, inst_token(SVGA3DOP_ENDIF)); } @@ -2335,6 +2296,45 @@ emit_xpd(struct svga_shader_emitter *emit, /** + * Emit a LRP (linear interpolation) instruction. + */ +static boolean +submit_lrp(struct svga_shader_emitter *emit, + SVGA3dShaderDestToken dst, + struct src_register src0, + struct src_register src1, + struct src_register src2) +{ + SVGA3dShaderDestToken tmp; + boolean need_dst_tmp = FALSE; + + /* The dst reg must be a temporary, and not be the same as src0 or src2 */ + if (SVGA3dShaderGetRegType(dst.value) != SVGA3DREG_TEMP || + alias_src_dst(src0, dst) || + alias_src_dst(src2, dst)) + need_dst_tmp = TRUE; + + if (need_dst_tmp) { + tmp = get_temp( emit ); + tmp.mask = dst.mask; + } + else { + tmp = dst; + } + + if (!submit_op3(emit, inst_token( SVGA3DOP_LRP ), tmp, src0, src1, src2)) + return FALSE; + + if (need_dst_tmp) { + if (!submit_op1(emit, inst_token( SVGA3DOP_MOV ), dst, src( tmp ))) + return FALSE; + } + + return TRUE; +} + + +/** * Translate/emit LRP (Linear Interpolation) instruction. */ static boolean |