From: Marek Olšák Date: Wed, 18 Sep 2013 13:36:38 +0000 (+0200) Subject: radeonsi: fix textureOffset and texelFetchOffset GLSL functions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=defedc0f6195f57abf2553e77b7a3b61e23cf53e;p=mesa.git radeonsi: fix textureOffset and texelFetchOffset GLSL functions Reviewed-by: Michel Dänzer --- diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c index 867a38598db..7e3ac5a7520 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c @@ -1353,17 +1353,31 @@ static void tex_fetch_args( assert(inst->Texture.NumOffsets == 1); - address[0] = - lp_build_add(uint_bld, address[0], - bld->immediates[off->Index][off->SwizzleX]); - if (num_coords > 1) + switch (target) { + case TGSI_TEXTURE_3D: + address[2] = lp_build_add(uint_bld, address[2], + bld->immediates[off->Index][off->SwizzleZ]); + /* fall through */ + case TGSI_TEXTURE_2D: + case TGSI_TEXTURE_SHADOW2D: + case TGSI_TEXTURE_RECT: + case TGSI_TEXTURE_SHADOWRECT: + case TGSI_TEXTURE_2D_ARRAY: + case TGSI_TEXTURE_SHADOW2D_ARRAY: address[1] = lp_build_add(uint_bld, address[1], - bld->immediates[off->Index][off->SwizzleY]); - if (num_coords > 2) - address[2] = - lp_build_add(uint_bld, address[2], - bld->immediates[off->Index][off->SwizzleZ]); + bld->immediates[off->Index][off->SwizzleY]); + /* fall through */ + case TGSI_TEXTURE_1D: + case TGSI_TEXTURE_SHADOW1D: + case TGSI_TEXTURE_1D_ARRAY: + case TGSI_TEXTURE_SHADOW1D_ARRAY: + address[0] = + lp_build_add(uint_bld, address[0], + bld->immediates[off->Index][off->SwizzleX]); + break; + /* texture offsets do not apply to other texture targets */ + } } emit_data->dst_type = LLVMVectorType(