r600g: port r300g fix for X* formats in texformat code
authorDave Airlie <airlied@redhat.com>
Wed, 29 Sep 2010 22:56:37 +0000 (08:56 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 29 Sep 2010 23:04:50 +0000 (09:04 +1000)
src/gallium/drivers/r600/r600_texture.c

index 7979f856032fdbdf302df2bbf51bfce8cff637d9..f03d6fcfd60573c984dcf5aea1acef416dd0cab4 100644 (file)
@@ -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: