This looks like the right approach to me.
Note that RNDNE is in fact the default rounding mode for IEEE_754-2008
(in fact it was the default for earlier ieee-754 too).
So I see no reason to deviate from that unless there would be some very
good reason, even if it may look "wrong" for humans.

Roland

Am 08.08.2011 11:32, schrieb Lauri Kasanen:
> From f76d23a57996eea6862d3bd899e08f9cb3ac5dec Mon Sep 17 00:00:00 2001
> From: Lauri Kasanen <c...@gmx.com>
> Date: Mon, 8 Aug 2011 12:20:27 +0300
> Subject: [PATCH] r600g: Add support for ROUND, v2
> 
> This is a GLSL 1.3 feature, but also used by MLAA.
> 
> Signed-off-by: Lauri Kasanen <c...@gmx.com>
> ---
>  src/gallium/drivers/r600/r600_asm.c    |    2 ++
>  src/gallium/drivers/r600/r600_shader.c |    6 +++---
>  2 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/src/gallium/drivers/r600/r600_asm.c 
> b/src/gallium/drivers/r600/r600_asm.c
> index 5fae2b0..24af991 100644
> --- a/src/gallium/drivers/r600/r600_asm.c
> +++ b/src/gallium/drivers/r600/r600_asm.c
> @@ -88,6 +88,7 @@ static inline unsigned int r600_bc_get_num_operands(struct 
> r600_bc *bc, struct r
>               case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_INT_TO_FLT:
>               case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SIN:
>               case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_COS:
> +             case V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RNDNE:
>                       return 1;
>               default: R600_ERR(
>                       "Need instruction operand number for 0x%x.\n", 
> alu->inst);
> @@ -140,6 +141,7 @@ static inline unsigned int 
> r600_bc_get_num_operands(struct r600_bc *bc, struct r
>               case EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_INT_TO_FLT:
>               case EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_SIN:
>               case EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_COS:
> +             case EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RNDNE:
>                       return 1;
>               default: R600_ERR(
>                       "Need instruction operand number for 0x%x.\n", 
> alu->inst);
> diff --git a/src/gallium/drivers/r600/r600_shader.c 
> b/src/gallium/drivers/r600/r600_shader.c
> index 3e21ad1..4034a93 100644
> --- a/src/gallium/drivers/r600/r600_shader.c
> +++ b/src/gallium/drivers/r600/r600_shader.c
> @@ -3228,7 +3228,7 @@ static struct r600_shader_tgsi_instruction 
> r600_shader_tgsi_instruction[] = {
>       {TGSI_OPCODE_FRC,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT, 
> tgsi_op2},
>       {TGSI_OPCODE_CLAMP,     0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_unsupported},
>       {TGSI_OPCODE_FLR,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLOOR, 
> tgsi_op2},
> -     {TGSI_OPCODE_ROUND,     0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_unsupported},
> +     {TGSI_OPCODE_ROUND,     0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RNDNE, 
> tgsi_op2},
>       {TGSI_OPCODE_EX2,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_EXP_IEEE, 
> tgsi_trans_srcx_replicate},
>       {TGSI_OPCODE_LG2,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE, 
> tgsi_trans_srcx_replicate},
>       {TGSI_OPCODE_POW,       0, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_pow},
> @@ -3386,7 +3386,7 @@ static struct r600_shader_tgsi_instruction 
> eg_shader_tgsi_instruction[] = {
>       {TGSI_OPCODE_FRC,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT, 
> tgsi_op2},
>       {TGSI_OPCODE_CLAMP,     0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_unsupported},
>       {TGSI_OPCODE_FLR,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLOOR, 
> tgsi_op2},
> -     {TGSI_OPCODE_ROUND,     0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_unsupported},
> +     {TGSI_OPCODE_ROUND,     0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RNDNE, 
> tgsi_op2},
>       {TGSI_OPCODE_EX2,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_EXP_IEEE, 
> tgsi_trans_srcx_replicate},
>       {TGSI_OPCODE_LG2,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE, 
> tgsi_trans_srcx_replicate},
>       {TGSI_OPCODE_POW,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_pow},
> @@ -3544,7 +3544,7 @@ static struct r600_shader_tgsi_instruction 
> cm_shader_tgsi_instruction[] = {
>       {TGSI_OPCODE_FRC,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FRACT, 
> tgsi_op2},
>       {TGSI_OPCODE_CLAMP,     0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_unsupported},
>       {TGSI_OPCODE_FLR,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLOOR, 
> tgsi_op2},
> -     {TGSI_OPCODE_ROUND,     0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> tgsi_unsupported},
> +     {TGSI_OPCODE_ROUND,     0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_RNDNE, 
> tgsi_op2},
>       {TGSI_OPCODE_EX2,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_EXP_IEEE, 
> cayman_emit_float_instr},
>       {TGSI_OPCODE_LG2,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_LOG_IEEE, 
> cayman_emit_float_instr},
>       {TGSI_OPCODE_POW,       0, EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP, 
> cayman_pow},

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to