[Mesa-dev] [PATCH 4/4] st/glsl_to_tgsi: use DDIV if the driver requests it

Marek Olšák maraeo at gmail.com
Mon Jan 16 17:51:56 UTC 2017


For the series:

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Mon, Jan 16, 2017 at 5:20 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Fixes GL45-CTS.gpu_shader_fp64.built_in_functions.
> ---
>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index 9356707..d1059a9 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -955,7 +955,7 @@ glsl_to_tgsi_visitor::get_opcode(unsigned op,
>        case3fid(MUL, UMUL, DMUL);
>        case3fid(MAD, UMAD, DMAD);
>        case3fid(FMA, UMAD, DFMA);
> -      case3(DIV, IDIV, UDIV);
> +      case4d(DIV, IDIV, UDIV, DDIV);
>        case4d(MAX, IMAX, UMAX, DMAX);
>        case4d(MIN, IMIN, UMIN, DMIN);
>        case2iu(MOD, UMOD);
> @@ -1710,10 +1710,7 @@ glsl_to_tgsi_visitor::visit_expression(ir_expression* ir, st_src_reg *op)
>        emit_asm(ir, TGSI_OPCODE_MUL, result_dst, op[0], op[1]);
>        break;
>     case ir_binop_div:
> -      if (result_dst.type == GLSL_TYPE_FLOAT || result_dst.type == GLSL_TYPE_DOUBLE)
> -         assert(!"not reached: should be handled by ir_div_to_mul_rcp");
> -      else
> -         emit_asm(ir, TGSI_OPCODE_DIV, result_dst, op[0], op[1]);
> +      emit_asm(ir, TGSI_OPCODE_DIV, result_dst, op[0], op[1]);
>        break;
>     case ir_binop_mod:
>        if (result_dst.type == GLSL_TYPE_FLOAT)
> @@ -6904,7 +6901,9 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
>        do_mat_op_to_vec(ir);
>        lower_instructions(ir,
>                           MOD_TO_FLOOR |
> -                         DIV_TO_MUL_RCP |
> +                         FDIV_TO_MUL_RCP |
> +                         (pscreen->get_param(pscreen, PIPE_CAP_TGSI_DDIV)
> +                          ? 0 : DDIV_TO_MUL_RCP) |
>                           EXP_TO_EXP2 |
>                           LOG_TO_LOG2 |
>                           LDEXP_TO_ARITH |
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list