Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / gallium / drivers / r600 / eg_state_inlines.h
index c93b9d94c55dd954cfe2a197f5530b2f0b5779ea..be81c28b43f5963940aa5f6a71a9629fec8034e4 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "util/u_format.h"
 #include "evergreend.h"
+#include "r600_formats.h"
 
 static INLINE uint32_t r600_translate_blend_function(int blend_func)
 {
@@ -276,6 +277,14 @@ static inline uint32_t r600_translate_dbformat(enum pipe_format format)
        }
 }
 
+static inline uint32_t r600_translate_stencilformat(enum pipe_format format)
+{
+       if (format == PIPE_FORMAT_Z24_UNORM_S8_USCALED)
+               return 1;
+       else
+               return 0;
+}
+
 static inline uint32_t r600_translate_colorswap(enum pipe_format format)
 {
        switch (format) {
@@ -301,6 +310,12 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
 
        case PIPE_FORMAT_Z16_UNORM:
                return V_028C70_SWAP_STD;
+
+       case PIPE_FORMAT_R8G8_UNORM:
+               return V_028C70_SWAP_STD;
+
+       case PIPE_FORMAT_R16_UNORM:
+               return V_028C70_SWAP_STD;
                /* 32-bit buffers. */
 
        case PIPE_FORMAT_A8B8G8R8_SRGB:
@@ -338,6 +353,9 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
        case PIPE_FORMAT_R10SG10SB10SA2U_NORM:
                return V_028C70_SWAP_STD_REV;
 
+       case PIPE_FORMAT_R16G16_UNORM:
+               return V_028C70_SWAP_STD;
+
                /* 64-bit buffers. */
        case PIPE_FORMAT_R16G16B16A16_UNORM:
        case PIPE_FORMAT_R16G16B16A16_SNORM:
@@ -382,6 +400,12 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_Z16_UNORM:
                return V_028C70_COLOR_16;
 
+       case PIPE_FORMAT_R8G8_UNORM:
+               return V_028C70_COLOR_8_8;
+
+       case PIPE_FORMAT_R16_UNORM:
+               return V_028C70_COLOR_16;
+
                /* 32-bit buffers. */
        case PIPE_FORMAT_A8B8G8R8_SRGB:
        case PIPE_FORMAT_A8B8G8R8_UNORM:
@@ -419,6 +443,7 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
                return V_028C70_COLOR_16_16_FLOAT;
 
        case PIPE_FORMAT_R16G16_SSCALED:
+       case PIPE_FORMAT_R16G16_UNORM:
                return V_028C70_COLOR_16_16;
 
                /* 64-bit buffers. */
@@ -494,105 +519,105 @@ static INLINE uint32_t r600_translate_vertex_data_type(enum pipe_format format)
 
        switch (desc->channel[i].type) {
                /* Half-floats, floats, doubles */
-        case UTIL_FORMAT_TYPE_FLOAT:
+       case UTIL_FORMAT_TYPE_FLOAT:
                switch (desc->channel[i].size) {
-                case 16:
+               case 16:
                        switch (desc->nr_channels) {
                        case 1:
-                               result = V_030008_FMT_16_FLOAT;
+                               result = FMT_16_FLOAT;
                                break;
                        case 2:
-                               result = V_030008_FMT_16_16_FLOAT;
+                               result = FMT_16_16_FLOAT;
                                break;
                        case 3:
-                               result = V_030008_FMT_16_16_16_FLOAT;
+                               result = FMT_16_16_16_FLOAT;
                                break;
                        case 4:
-                               result = V_030008_FMT_16_16_16_16_FLOAT;
+                               result = FMT_16_16_16_16_FLOAT;
                                break;
                        }
                        break;
-                case 32:
+               case 32:
                        switch (desc->nr_channels) {
                        case 1:
-                               result = V_030008_FMT_32_FLOAT;
+                               result = FMT_32_FLOAT;
                                break;
                        case 2:
-                               result = V_030008_FMT_32_32_FLOAT;
+                               result = FMT_32_32_FLOAT;
                                break;
                        case 3:
-                               result = V_030008_FMT_32_32_32_FLOAT;
+                               result = FMT_32_32_32_FLOAT;
                                break;
                        case 4:
-                               result = V_030008_FMT_32_32_32_32_FLOAT;
+                               result = FMT_32_32_32_32_FLOAT;
                                break;
                        }
                        break;
-                default:
+               default:
                        goto out_unknown;
                }
                break;
-               /* Unsigned ints */
-        case UTIL_FORMAT_TYPE_UNSIGNED:
-               /* Signed ints */
-        case UTIL_FORMAT_TYPE_SIGNED:
+       /* Unsigned ints */
+       case UTIL_FORMAT_TYPE_UNSIGNED:
+       /* Signed ints */
+       case UTIL_FORMAT_TYPE_SIGNED:
                switch (desc->channel[i].size) {
-                case 8:
+               case 8:
                        switch (desc->nr_channels) {
                        case 1:
-                               result = V_030008_FMT_8;
+                               result = FMT_8;
                                break;
                        case 2:
-                               result = V_030008_FMT_8_8;
+                               result = FMT_8_8;
                                break;
                        case 3:
-                       //      result = V_038008_FMT_8_8_8; /* fails piglit draw-vertices test */
-                       //      break;
+//                             result = V_038008_FMT_8_8_8; /* fails piglit draw-vertices test */
+//                             break;
                        case 4:
-                               result = V_030008_FMT_8_8_8_8;
+                               result = FMT_8_8_8_8;
                                break;
                        }
                        break;
-                case 16:
+               case 16:
                        switch (desc->nr_channels) {
                        case 1:
-                               result = V_030008_FMT_16;
+                               result = FMT_16;
                                break;
                        case 2:
-                               result = V_030008_FMT_16_16;
+                               result = FMT_16_16;
                                break;
                        case 3:
-                       //      result = V_038008_FMT_16_16_16; /* fails piglit draw-vertices test */
-                       //      break;
+//                             result = V_038008_FMT_16_16_16; /* fails piglit draw-vertices test */
+//                             break;
                        case 4:
-                               result = V_030008_FMT_16_16_16_16;
+                               result = FMT_16_16_16_16;
                                break;
                        }
                        break;
-                case 32:
+               case 32:
                        switch (desc->nr_channels) {
                        case 1:
-                               result = V_030008_FMT_32;
+                               result = FMT_32;
                                break;
                        case 2:
-                               result = V_030008_FMT_32_32;
+                               result = FMT_32_32;
                                break;
                        case 3:
-                               result = V_030008_FMT_32_32_32;
+                               result = FMT_32_32_32;
                                break;
                        case 4:
-                               result = V_030008_FMT_32_32_32_32;
+                               result = FMT_32_32_32_32;
                                break;
                        }
                        break;
-                default:
+               default:
                        goto out_unknown;
                }
                break;
-        default:
+       default:
                goto out_unknown;
        }
-       
+
        result = S_030008_DATA_FORMAT(result);
 
        if (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED) {
@@ -611,36 +636,36 @@ out_unknown:
 
 static INLINE uint32_t r600_translate_vertex_data_swizzle(enum pipe_format format)
 {
-        const struct util_format_description *desc = util_format_description(format);
-        unsigned i;
-        uint32_t word3;
-
-        assert(format);
-
-        if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN) {
-                fprintf(stderr, "r600: Bad format %s in %s:%d\n",
-                        util_format_short_name(format), __FUNCTION__, __LINE__);
-                return 0;
-        }
-
-        word3 = 0;
-        for (i = 0; i < desc->nr_channels; i++) {
-                switch (i) {
-                case 0:
-                        word3 |= S_03000C_DST_SEL_X(desc->swizzle[0]);
-                        break;
-                case 1:
-                        word3 |= S_03000C_DST_SEL_Y(desc->swizzle[1]);
-                        break;
-                case 2:
-                        word3 |= S_03000C_DST_SEL_Z(desc->swizzle[2]);
-                        break;
-                case 3:
-                        word3 |= S_03000C_DST_SEL_W(desc->swizzle[3]);
-                        break;
-                }
-        }
-        return word3;
+       const struct util_format_description *desc = util_format_description(format);
+       unsigned i;
+       uint32_t word3;
+
+       assert(format);
+
+       if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN) {
+               fprintf(stderr, "r600: Bad format %s in %s:%d\n",
+                               util_format_short_name(format), __FUNCTION__, __LINE__);
+               return 0;
+       }
+
+       word3 = 0;
+       for (i = 0; i < desc->nr_channels; i++) {
+               switch (i) {
+               case 0:
+                       word3 |= S_03000C_DST_SEL_X(desc->swizzle[0]);
+                       break;
+               case 1:
+                       word3 |= S_03000C_DST_SEL_Y(desc->swizzle[1]);
+                       break;
+               case 2:
+                       word3 |= S_03000C_DST_SEL_Z(desc->swizzle[2]);
+                       break;
+               case 3:
+                       word3 |= S_03000C_DST_SEL_W(desc->swizzle[3]);
+                       break;
+               }
+       }
+       return word3;
 }
 
 #endif