summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2015-03-09 20:04:04 +0100
committerMarek Olšák <[email protected]>2015-03-09 20:58:32 +0100
commit74a757f92f7377f59c0feb7f84c7518f9a167631 (patch)
tree13eef7ec91e6898301619e91cc1d8c441fa322b2
parentf710b99071fe4e3c2ee88cdcb6bb5c10298e014e (diff)
r300g: fix RGTC1 and LATC1 SNORM formats
Cc: 10.5 10.4 <[email protected]>
-rw-r--r--src/gallium/drivers/r300/r300_fs.c18
-rw-r--r--src/gallium/drivers/r300/r300_texture.c30
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;