radeonsi: Make sure to use float number format for packed float colour formats.
authorMichel Dänzer <michel.daenzer@amd.com>
Tue, 22 Jan 2013 16:05:08 +0000 (17:05 +0100)
committerMichel Dänzer <michel@daenzer.net>
Thu, 24 Jan 2013 07:46:31 +0000 (08:46 +0100)
These aren't covered by UTIL_FORMAT_TYPE_FLOAT.

Fixes 15 piglit (sub)tests.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/si_state.c

index cd40e1ac7745686b8b6e12f4ce99c9a8d0928f08..a27dbdd775e8c8c12b73759db920c93b504d2643 100644 (file)
@@ -1613,7 +1613,7 @@ static void si_cb(struct r600_context *rctx, struct si_pm4_state *pm4,
                        break;
                }
        }
-       if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) {
+       if (i == 4 || desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) {
                ntype = V_028C70_NUMBER_FLOAT;
        } else {
                ntype = V_028C70_NUMBER_UNORM;
@@ -2087,7 +2087,9 @@ static struct pipe_sampler_view *si_create_sampler_view(struct pipe_context *ctx
        util_format_compose_swizzles(desc->swizzle, state_swizzle, swizzle);
 
        first_non_void = util_format_get_first_non_void_channel(pipe_format);
-       switch (desc->channel[first_non_void].type) {
+       if (first_non_void < 0) {
+               num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
+       } else switch (desc->channel[first_non_void].type) {
        case UTIL_FORMAT_TYPE_FLOAT:
                num_format = V_008F14_IMG_NUM_FORMAT_FLOAT;
                break;