Signed-off-by: Christian König <deathsim...@vodafone.de> --- src/gallium/drivers/r600/r600_texture.c | 41 +++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index 2b69fcd..a08cc48 100644 --- a/src/gallium/drivers/r600/r600_texture.c +++ b/src/gallium/drivers/r600/r600_texture.c @@ -1153,6 +1153,47 @@ uint32_t r600_translate_texformat(struct pipe_screen *screen, } } + if (desc->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED) { + const unsigned char *swizzle; + const unsigned char swizzle_zyx[] = { + UTIL_FORMAT_SWIZZLE_Z, + UTIL_FORMAT_SWIZZLE_Y, + UTIL_FORMAT_SWIZZLE_X, + UTIL_FORMAT_SWIZZLE_1, + }; + const unsigned char swizzle_yzx[] = { + UTIL_FORMAT_SWIZZLE_Y, + UTIL_FORMAT_SWIZZLE_Z, + UTIL_FORMAT_SWIZZLE_X, + UTIL_FORMAT_SWIZZLE_1, + }; + + switch (format) { + case PIPE_FORMAT_R8G8_B8G8_UNORM: + swizzle = swizzle_zyx; + result = FMT_BG_RG; + break; + case PIPE_FORMAT_G8R8_G8B8_UNORM: + swizzle = swizzle_zyx; + result = FMT_GB_GR; + break; + case PIPE_FORMAT_R8G8_R8B8_UNORM: + swizzle = swizzle_yzx; + result = FMT_GB_GR; + break; + case PIPE_FORMAT_G8R8_B8R8_UNORM: + swizzle = swizzle_yzx; + result = FMT_BG_RG; + break; + default: + goto out_unknown; + } + word4 &= C_038010_DST_SEL_X & C_038010_DST_SEL_Y & + C_038010_DST_SEL_Z & C_038010_DST_SEL_W; + word4 |= r600_get_swizzle_combined(swizzle, swizzle_view); + goto out_word4; + } + if (format == PIPE_FORMAT_R9G9B9E5_FLOAT) { result = FMT_5_9_9_9_SHAREDEXP; goto out_word4; -- 1.7.5.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev