diff options
author | Marek Olšák <[email protected]> | 2013-09-18 15:36:38 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2013-09-20 20:35:55 +0200 |
commit | defedc0f6195f57abf2553e77b7a3b61e23cf53e (patch) | |
tree | d47b4281b1e418dfeee42315d1c20d33a82e877c | |
parent | 1569b3e536da9337a28a16d0cc6ed07043bf094b (diff) |
radeonsi: fix textureOffset and texelFetchOffset GLSL functions
Reviewed-by: Michel Dänzer <[email protected]>
-rw-r--r-- | src/gallium/drivers/radeonsi/radeonsi_shader.c | 32 |
1 files changed, 23 insertions, 9 deletions
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( |