diff options
author | Dave Airlie <airlied@redhat.com> | 2010-09-30 08:56:37 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-09-30 09:04:50 +1000 |
commit | 534f7d5749e34003fc9a0a4c83e6cd6f86a1c2cb (patch) | |
tree | e599abef10548160773238395a4d99930d1de4c3 /src/gallium/drivers/r600 | |
parent | 0efea25c4b9c6b5505fdbba25b525efb27468de4 (diff) |
r600g: port r300g fix for X* formats in texformat code
Diffstat (limited to 'src/gallium/drivers/r600')
-rw-r--r-- | src/gallium/drivers/r600/r600_texture.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c index 7979f856032..f03d6fcfd60 100644 --- a/src/gallium/drivers/r600/r600_texture.c +++ b/src/gallium/drivers/r600/r600_texture.c @@ -586,16 +586,26 @@ uint32_t r600_translate_texformat(enum pipe_format format, goto out_unknown; } + /* Find the first non-VOID channel. */ + for (i = 0; i < 4; i++) { + if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) { + break; + } + } + + if (i == 4) + goto out_unknown; + /* uniform formats */ - switch (desc->channel[0].type) { + switch (desc->channel[i].type) { case UTIL_FORMAT_TYPE_UNSIGNED: case UTIL_FORMAT_TYPE_SIGNED: - if (!desc->channel[0].normalized && + if (!desc->channel[i].normalized && desc->colorspace != UTIL_FORMAT_COLORSPACE_SRGB) { goto out_unknown; } - switch (desc->channel[0].size) { + switch (desc->channel[i].size) { case 4: switch (desc->nr_channels) { case 2: @@ -635,7 +645,7 @@ uint32_t r600_translate_texformat(enum pipe_format format, goto out_unknown; case UTIL_FORMAT_TYPE_FLOAT: - switch (desc->channel[0].size) { + switch (desc->channel[i].size) { case 16: switch (desc->nr_channels) { case 1: |