From a1c5513c175a2c13594dde7110822b205cabfc14 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 9 May 2012 10:31:07 -0600 Subject: [PATCH] svga: implement CEIL opcode translation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: José Fonseca --- src/gallium/drivers/svga/svga_tgsi_insn.c | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/gallium/drivers/svga/svga_tgsi_insn.c b/src/gallium/drivers/svga/svga_tgsi_insn.c index 5e6d1fbc904..a68912608bc 100644 --- a/src/gallium/drivers/svga/svga_tgsi_insn.c +++ b/src/gallium/drivers/svga/svga_tgsi_insn.c @@ -871,6 +871,31 @@ static boolean emit_floor(struct svga_shader_emitter *emit, } +/* Translate the following TGSI CEIL instruction. + * CEIL DST, SRC + * To the following SVGA3D instruction sequence. + * FRC TMP, -SRC + * ADD DST, SRC, TMP + */ +static boolean emit_ceil(struct svga_shader_emitter *emit, + const struct tgsi_full_instruction *insn) +{ + SVGA3dShaderDestToken dst = translate_dst_register(emit, insn, 0); + const struct src_register src0 = translate_src_register(emit, &insn->Src[0]); + SVGA3dShaderDestToken temp = get_temp(emit); + + /* FRC TMP, -SRC */ + if (!submit_op1(emit, inst_token(SVGA3DOP_FRC), temp, negate(src0))) + return FALSE; + + /* ADD DST, SRC, TMP */ + if (!submit_op2(emit, inst_token(SVGA3DOP_ADD), dst, src0, src(temp))) + return FALSE; + + return TRUE; +} + + /* Translate the following TGSI CMP instruction. * CMP DST, SRC0, SRC1, SRC2 * To the following SVGA3D instruction sequence. @@ -2435,6 +2460,9 @@ static boolean svga_emit_instruction( struct svga_shader_emitter *emit, case TGSI_OPCODE_TRUNC: /* should be TRUNC, not FLR */ return emit_floor( emit, insn ); + case TGSI_OPCODE_CEIL: + return emit_ceil( emit, insn ); + case TGSI_OPCODE_CMP: return emit_cmp( emit, insn ); -- 2.30.2