[Mesa-dev] [Mesa-stable] [PATCH 1/2] radeonsi: fix array textures layer coordinate

Marek Olšák maraeo at gmail.com
Mon Sep 18 16:37:25 UTC 2017


On Mon, Sep 18, 2017 at 4:57 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Like for cube map (array) gather, we need to round to nearest on <= VI.
>
> Fixes tests in dEQP-GLES3.functional.shaders.texture_functions.texture.*
>
> Cc: mesa-stable at lists.freedesktop.org
> ---
>  src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
> index d0969a7dd02..54832fc0ee4 100644
> --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
> +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c
> @@ -1471,27 +1471,37 @@ static void tex_fetch_args(
>                         for (chan = num_src_deriv_channels;
>                              chan < num_dst_deriv_channels; chan++)
>                                 derivs[param * num_dst_deriv_channels + chan] =
>                                         bld_base->base.zero;
>                 }
>         }
>
>         if (target == TGSI_TEXTURE_CUBE ||
>             target == TGSI_TEXTURE_CUBE_ARRAY ||
>             target == TGSI_TEXTURE_SHADOWCUBE ||
> -           target == TGSI_TEXTURE_SHADOWCUBE_ARRAY)
> +           target == TGSI_TEXTURE_SHADOWCUBE_ARRAY) {
>                 ac_prepare_cube_coords(&ctx->ac,
>                                        opcode == TGSI_OPCODE_TXD,
>                                        target == TGSI_TEXTURE_CUBE_ARRAY ||
>                                        target == TGSI_TEXTURE_SHADOWCUBE_ARRAY,
>                                        opcode == TGSI_OPCODE_LODQ,
>                                        coords, derivs);
> +       } else if (tgsi_is_array_sampler(target) &&
> +                  opcode != TGSI_OPCODE_TXF &&
> +                  opcode != TGSI_OPCODE_TXF_LZ &&
> +                  ctx->screen->b.chip_class <= VI) {
> +               unsigned array_coord = target == TGSI_TEXTURE_1D ||

TGSI_TEXTURE_1D is not an array target.

Marek

> +                                      target == TGSI_TEXTURE_1D_ARRAY ? 1 : 2;
> +               coords[array_coord] =
> +                       ac_build_intrinsic(&ctx->ac, "llvm.rint.f32", ctx->f32,
> +                                          &coords[array_coord], 1, 0);
> +       }
>
>         if (opcode == TGSI_OPCODE_TXD)
>                 for (int i = 0; i < num_deriv_channels * 2; i++)
>                         address[count++] = derivs[i];
>
>         /* Pack texture coordinates */
>         address[count++] = coords[0];
>         if (num_coords > 1)
>                 address[count++] = coords[1];
>         if (num_coords > 2)
> --
> 2.11.0
>
> _______________________________________________
> mesa-stable mailing list
> mesa-stable at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-stable


More information about the mesa-dev mailing list