From 74a757f92f7377f59c0feb7f84c7518f9a167631 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 9 Mar 2015 20:04:04 +0100 Subject: [PATCH] r300g: fix RGTC1 and LATC1 SNORM formats Cc: 10.5 10.4 --- src/gallium/drivers/r300/r300_fs.c | 18 ++------------- src/gallium/drivers/r300/r300_texture.c | 30 ++++++++++++------------- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/gallium/drivers/r300/r300_fs.c b/src/gallium/drivers/r300/r300_fs.c index c00f55f5d90..79eee73e236 100644 --- a/src/gallium/drivers/r300/r300_fs.c +++ b/src/gallium/drivers/r300/r300_fs.c @@ -170,24 +170,10 @@ static void get_external_state( } state->unit[i].non_normalized_coords = !s->state.normalized_coords; - state->unit[i].convert_unorm_to_snorm = - v->base.format == PIPE_FORMAT_RGTC1_SNORM || - v->base.format == PIPE_FORMAT_LATC1_SNORM; + state->unit[i].convert_unorm_to_snorm = 0; /* Pass texture swizzling to the compiler, some lowering passes need it. */ - if (v->base.format == PIPE_FORMAT_RGTC1_SNORM || - v->base.format == PIPE_FORMAT_LATC1_SNORM) { - unsigned char swizzle[4]; - - util_format_compose_swizzles( - util_format_description(v->base.format)->swizzle, - v->swizzle, - swizzle); - - state->unit[i].texture_swizzle = - RC_MAKE_SWIZZLE(swizzle[0], swizzle[1], - swizzle[2], swizzle[3]); - } else if (state->unit[i].compare_mode_enabled) { + if (state->unit[i].compare_mode_enabled) { state->unit[i].texture_swizzle = RC_MAKE_SWIZZLE(v->swizzle[0], v->swizzle[1], v->swizzle[2], v->swizzle[3]); diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 340b8fc076e..e85a818a33a 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -169,22 +169,21 @@ uint32_t r300_translate_texformat(enum pipe_format format, /* Add swizzling. */ /* The RGTC1_SNORM and LATC1_SNORM swizzle is done in the shader. */ - if (format != PIPE_FORMAT_RGTC1_SNORM && + if (util_format_is_compressed(format) && + dxtc_swizzle && + format != PIPE_FORMAT_RGTC2_UNORM && + format != PIPE_FORMAT_RGTC2_SNORM && + format != PIPE_FORMAT_LATC2_UNORM && + format != PIPE_FORMAT_LATC2_SNORM && + format != PIPE_FORMAT_RGTC1_UNORM && + format != PIPE_FORMAT_RGTC1_SNORM && + format != PIPE_FORMAT_LATC1_UNORM && format != PIPE_FORMAT_LATC1_SNORM) { - if (util_format_is_compressed(format) && - dxtc_swizzle && - format != PIPE_FORMAT_RGTC2_UNORM && - format != PIPE_FORMAT_RGTC2_SNORM && - format != PIPE_FORMAT_LATC2_UNORM && - format != PIPE_FORMAT_LATC2_SNORM && - format != PIPE_FORMAT_RGTC1_UNORM && - format != PIPE_FORMAT_LATC1_UNORM) { - result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view, - TRUE); - } else { - result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view, - FALSE); - } + result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view, + TRUE); + } else { + result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view, + FALSE); } /* S3TC formats. */ @@ -215,6 +214,7 @@ uint32_t r300_translate_texformat(enum pipe_format format, switch (format) { case PIPE_FORMAT_RGTC1_SNORM: case PIPE_FORMAT_LATC1_SNORM: + result |= sign_bit[0]; case PIPE_FORMAT_LATC1_UNORM: case PIPE_FORMAT_RGTC1_UNORM: return R500_TX_FORMAT_ATI1N | result; -- 2.30.2