Module: Mesa Branch: 9.1 Commit: ad62f424b3bb59199e63c294b25bd80e2314d403 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ad62f424b3bb59199e63c294b25bd80e2314d403
Author: Michel Dänzer <[email protected]> Date: Tue Feb 5 17:24:51 2013 +0100 radeonsi: Handle scaled and integer formats for samplers and vertex elements. Also, add assertions to stress that render targets don't support scaled formats. 20 more little piglits. (cherry picked from commit 46dd16bca8b4526e46badc9cb1d7c058a8e6173e) --- src/gallium/drivers/radeonsi/si_state.c | 63 ++++++++++++++++++++++-------- 1 files changed, 46 insertions(+), 17 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index a58a347..5214858 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -1621,15 +1621,19 @@ static void si_cb(struct r600_context *rctx, struct si_pm4_state *pm4, if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) ntype = V_028C70_NUMBER_SRGB; else if (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED) { - if (desc->channel[i].normalized) - ntype = V_028C70_NUMBER_SNORM; - else if (desc->channel[i].pure_integer) + if (desc->channel[i].pure_integer) { ntype = V_028C70_NUMBER_SINT; + } else { + assert(desc->channel[i].normalized); + ntype = V_028C70_NUMBER_SNORM; + } } else if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED) { - if (desc->channel[i].normalized) - ntype = V_028C70_NUMBER_UNORM; - else if (desc->channel[i].pure_integer) + if (desc->channel[i].pure_integer) { ntype = V_028C70_NUMBER_UINT; + } else { + assert(desc->channel[i].normalized); + ntype = V_028C70_NUMBER_UNORM; + } } } @@ -2090,16 +2094,31 @@ static struct pipe_sampler_view *si_create_sampler_view(struct pipe_context *ctx first_non_void = util_format_get_first_non_void_channel(pipe_format); 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; - case UTIL_FORMAT_TYPE_SIGNED: - num_format = V_008F14_IMG_NUM_FORMAT_SNORM; - break; - case UTIL_FORMAT_TYPE_UNSIGNED: - default: + } else if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) { + num_format = V_008F14_IMG_NUM_FORMAT_SRGB; + } else { num_format = V_008F14_IMG_NUM_FORMAT_UNORM; + + switch (desc->channel[first_non_void].type) { + case UTIL_FORMAT_TYPE_FLOAT: + num_format = V_008F14_IMG_NUM_FORMAT_FLOAT; + break; + case UTIL_FORMAT_TYPE_SIGNED: + if (desc->channel[first_non_void].normalized) + num_format = V_008F14_IMG_NUM_FORMAT_SNORM; + else if (desc->channel[first_non_void].pure_integer) + num_format = V_008F14_IMG_NUM_FORMAT_SINT; + else + num_format = V_008F14_IMG_NUM_FORMAT_SSCALED; + break; + case UTIL_FORMAT_TYPE_UNSIGNED: + if (desc->channel[first_non_void].normalized) + num_format = V_008F14_IMG_NUM_FORMAT_UNORM; + else if (desc->channel[first_non_void].pure_integer) + num_format = V_008F14_IMG_NUM_FORMAT_UINT; + else + num_format = V_008F14_IMG_NUM_FORMAT_USCALED; + } } format = si_translate_texformat(ctx->screen, pipe_format, desc, first_non_void); @@ -2473,10 +2492,20 @@ static void *si_create_vertex_elements(struct pipe_context *ctx, num_format = V_008F0C_BUF_NUM_FORMAT_USCALED; /* XXX */ break; case UTIL_FORMAT_TYPE_SIGNED: - num_format = V_008F0C_BUF_NUM_FORMAT_SNORM; + if (desc->channel[first_non_void].normalized) + num_format = V_008F0C_BUF_NUM_FORMAT_SNORM; + else if (desc->channel[i].pure_integer) + num_format = V_008F0C_BUF_NUM_FORMAT_SINT; + else + num_format = V_008F0C_BUF_NUM_FORMAT_SSCALED; break; case UTIL_FORMAT_TYPE_UNSIGNED: - num_format = V_008F0C_BUF_NUM_FORMAT_UNORM; + if (desc->channel[first_non_void].normalized) + num_format = V_008F0C_BUF_NUM_FORMAT_UNORM; + else if (desc->channel[i].pure_integer) + num_format = V_008F0C_BUF_NUM_FORMAT_UINT; + else + num_format = V_008F0C_BUF_NUM_FORMAT_USCALED; break; case UTIL_FORMAT_TYPE_FLOAT: default: _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
