From: Nicolai Hähnle <nicolai.haeh...@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-sta...@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 || + 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-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev