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

Reply via email to