r600g: disable ARB_draw_instanced
[mesa.git] / src / gallium / drivers / r600 / eg_state_inlines.h
index be81c28b43f5963940aa5f6a71a9629fec8034e4..cae3888051bc6ecf6aef070901c83221bb84af1f 100644 (file)
@@ -253,9 +253,13 @@ static inline unsigned r600_tex_dim(unsigned dim)
        default:
        case PIPE_TEXTURE_1D:
                return V_030000_SQ_TEX_DIM_1D;
+       case PIPE_TEXTURE_1D_ARRAY:
+               return V_030000_SQ_TEX_DIM_1D_ARRAY;
        case PIPE_TEXTURE_2D:
        case PIPE_TEXTURE_RECT:
                return V_030000_SQ_TEX_DIM_2D;
+       case PIPE_TEXTURE_2D_ARRAY:
+               return V_030000_SQ_TEX_DIM_2D_ARRAY;
        case PIPE_TEXTURE_3D:
                return V_030000_SQ_TEX_DIM_3D;
        case PIPE_TEXTURE_CUBE:
@@ -289,9 +293,14 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
 {
        switch (format) {
                /* 8-bit buffers. */
+       case PIPE_FORMAT_L4A4_UNORM:
+               return V_028C70_SWAP_ALT;
+
        case PIPE_FORMAT_A8_UNORM:
+               return V_028C70_SWAP_ALT_REV;
        case PIPE_FORMAT_I8_UNORM:
        case PIPE_FORMAT_L8_UNORM:
+       case PIPE_FORMAT_L8_SRGB:
        case PIPE_FORMAT_R8_UNORM:
        case PIPE_FORMAT_R8_SNORM:
                return V_028C70_SWAP_STD;
@@ -311,6 +320,9 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
        case PIPE_FORMAT_Z16_UNORM:
                return V_028C70_SWAP_STD;
 
+       case PIPE_FORMAT_L8A8_UNORM:
+       case PIPE_FORMAT_L8A8_SRGB:
+               return V_028C70_SWAP_ALT;
        case PIPE_FORMAT_R8G8_UNORM:
                return V_028C70_SWAP_STD;
 
@@ -349,9 +361,11 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
 
        case PIPE_FORMAT_R10G10B10A2_UNORM:
        case PIPE_FORMAT_R10G10B10X2_SNORM:
-       case PIPE_FORMAT_B10G10R10A2_UNORM:
        case PIPE_FORMAT_R10SG10SB10SA2U_NORM:
-               return V_028C70_SWAP_STD_REV;
+               return V_028C70_SWAP_STD;
+
+       case PIPE_FORMAT_B10G10R10A2_UNORM:
+               return V_028C70_SWAP_ALT;
 
        case PIPE_FORMAT_R16G16_UNORM:
                return V_028C70_SWAP_STD;
@@ -359,14 +373,13 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
                /* 64-bit buffers. */
        case PIPE_FORMAT_R16G16B16A16_UNORM:
        case PIPE_FORMAT_R16G16B16A16_SNORM:
-               //              return V_028C70_COLOR_16_16_16_16;
        case PIPE_FORMAT_R16G16B16A16_FLOAT:
-               //              return V_028C70_COLOR_16_16_16_16_FLOAT;
 
                /* 128-bit buffers. */
        case PIPE_FORMAT_R32G32B32A32_FLOAT:
-               //              return V_028C70_COLOR_32_32_32_32_FLOAT;
-               return 0;
+       case PIPE_FORMAT_R32G32B32A32_SNORM:
+       case PIPE_FORMAT_R32G32B32A32_UNORM:
+               return V_028C70_SWAP_STD;
        default:
                R600_ERR("unsupported colorswap format %d\n", format);
                return ~0;
@@ -378,9 +391,13 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
 {
        switch (format) {
                /* 8-bit buffers. */
+       case PIPE_FORMAT_L4A4_UNORM:
+               return V_028C70_COLOR_4_4;
+
        case PIPE_FORMAT_A8_UNORM:
        case PIPE_FORMAT_I8_UNORM:
        case PIPE_FORMAT_L8_UNORM:
+       case PIPE_FORMAT_L8_SRGB:
        case PIPE_FORMAT_R8_UNORM:
        case PIPE_FORMAT_R8_SNORM:
                return V_028C70_COLOR_8;
@@ -400,6 +417,8 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_Z16_UNORM:
                return V_028C70_COLOR_16;
 
+       case PIPE_FORMAT_L8A8_UNORM:
+       case PIPE_FORMAT_L8A8_SRGB:
        case PIPE_FORMAT_R8G8_UNORM:
                return V_028C70_COLOR_8_8;
 
@@ -426,7 +445,7 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_R10G10B10X2_SNORM:
        case PIPE_FORMAT_B10G10R10A2_UNORM:
        case PIPE_FORMAT_R10SG10SB10SA2U_NORM:
-               return V_028C70_COLOR_10_10_10_2;
+               return V_028C70_COLOR_2_10_10_10;
 
        case PIPE_FORMAT_Z24X8_UNORM:
        case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
@@ -447,8 +466,10 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
                return V_028C70_COLOR_16_16;
 
                /* 64-bit buffers. */
-       case PIPE_FORMAT_R16G16B16A16_SSCALED:
+       case PIPE_FORMAT_R16G16B16_USCALED:
+       case PIPE_FORMAT_R16G16B16A16_USCALED:
        case PIPE_FORMAT_R16G16B16_SSCALED:
+       case PIPE_FORMAT_R16G16B16A16_SSCALED:
        case PIPE_FORMAT_R16G16B16A16_UNORM:
        case PIPE_FORMAT_R16G16B16A16_SNORM:
                return V_028C70_COLOR_16_16_16_16;
@@ -460,10 +481,14 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_R32G32_FLOAT:
                return V_028C70_COLOR_32_32_FLOAT;
 
+       case PIPE_FORMAT_R32G32_USCALED:
        case PIPE_FORMAT_R32G32_SSCALED:
                return V_028C70_COLOR_32_32;
 
                /* 128-bit buffers. */
+       case PIPE_FORMAT_R32G32B32A32_SNORM:
+       case PIPE_FORMAT_R32G32B32A32_UNORM:
+               return V_028C70_COLOR_32_32_32_32;
        case PIPE_FORMAT_R32G32B32_FLOAT:
                return V_028C70_COLOR_32_32_32_FLOAT;
        case PIPE_FORMAT_R32G32B32A32_FLOAT:
@@ -473,14 +498,14 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        case PIPE_FORMAT_UYVY:
        case PIPE_FORMAT_YUYV:
        default:
-               R600_ERR("unsupported color format %d\n", format);
+               //R600_ERR("unsupported color format %d\n", format);
                return ~0; /* Unsupported. */
        }
 }
 
-static INLINE boolean r600_is_sampler_format_supported(enum pipe_format format)
+static INLINE boolean r600_is_sampler_format_supported(struct pipe_screen *screen, enum pipe_format format)
 {
-       return r600_translate_texformat(format, NULL, NULL, NULL) != ~0;
+       return r600_translate_texformat(screen, format, NULL, NULL, NULL) != ~0;
 }
 
 static INLINE boolean r600_is_colorbuffer_format_supported(enum pipe_format format)
@@ -494,178 +519,4 @@ static INLINE boolean r600_is_zs_format_supported(enum pipe_format format)
        return r600_translate_dbformat(format) != ~0;
 }
 
-static INLINE boolean r600_is_vertex_format_supported(enum pipe_format format)
-{
-       return r600_translate_colorformat(format) != ~0;
-}
-
-static INLINE uint32_t r600_translate_vertex_data_type(enum pipe_format format)
-{
-       uint32_t result = 0;
-       const struct util_format_description *desc;
-       unsigned i;
-
-       desc = util_format_description(format);
-       if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN) {
-               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;
-               }
-       }
-
-       switch (desc->channel[i].type) {
-               /* Half-floats, floats, doubles */
-       case UTIL_FORMAT_TYPE_FLOAT:
-               switch (desc->channel[i].size) {
-               case 16:
-                       switch (desc->nr_channels) {
-                       case 1:
-                               result = FMT_16_FLOAT;
-                               break;
-                       case 2:
-                               result = FMT_16_16_FLOAT;
-                               break;
-                       case 3:
-                               result = FMT_16_16_16_FLOAT;
-                               break;
-                       case 4:
-                               result = FMT_16_16_16_16_FLOAT;
-                               break;
-                       }
-                       break;
-               case 32:
-                       switch (desc->nr_channels) {
-                       case 1:
-                               result = FMT_32_FLOAT;
-                               break;
-                       case 2:
-                               result = FMT_32_32_FLOAT;
-                               break;
-                       case 3:
-                               result = FMT_32_32_32_FLOAT;
-                               break;
-                       case 4:
-                               result = FMT_32_32_32_32_FLOAT;
-                               break;
-                       }
-                       break;
-               default:
-                       goto out_unknown;
-               }
-               break;
-       /* Unsigned ints */
-       case UTIL_FORMAT_TYPE_UNSIGNED:
-       /* Signed ints */
-       case UTIL_FORMAT_TYPE_SIGNED:
-               switch (desc->channel[i].size) {
-               case 8:
-                       switch (desc->nr_channels) {
-                       case 1:
-                               result = FMT_8;
-                               break;
-                       case 2:
-                               result = FMT_8_8;
-                               break;
-                       case 3:
-//                             result = V_038008_FMT_8_8_8; /* fails piglit draw-vertices test */
-//                             break;
-                       case 4:
-                               result = FMT_8_8_8_8;
-                               break;
-                       }
-                       break;
-               case 16:
-                       switch (desc->nr_channels) {
-                       case 1:
-                               result = FMT_16;
-                               break;
-                       case 2:
-                               result = FMT_16_16;
-                               break;
-                       case 3:
-//                             result = V_038008_FMT_16_16_16; /* fails piglit draw-vertices test */
-//                             break;
-                       case 4:
-                               result = FMT_16_16_16_16;
-                               break;
-                       }
-                       break;
-               case 32:
-                       switch (desc->nr_channels) {
-                       case 1:
-                               result = FMT_32;
-                               break;
-                       case 2:
-                               result = FMT_32_32;
-                               break;
-                       case 3:
-                               result = FMT_32_32_32;
-                               break;
-                       case 4:
-                               result = FMT_32_32_32_32;
-                               break;
-                       }
-                       break;
-               default:
-                       goto out_unknown;
-               }
-               break;
-       default:
-               goto out_unknown;
-       }
-
-       result = S_030008_DATA_FORMAT(result);
-
-       if (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED) {
-               result |= S_030008_FORMAT_COMP_ALL(1);
-       }
-       if (desc->channel[i].normalized) {
-               result |= S_030008_NUM_FORMAT_ALL(0);
-       } else {
-               result |= S_030008_NUM_FORMAT_ALL(2);
-       }
-       return result;
-out_unknown:
-       R600_ERR("unsupported vertex format %s\n", util_format_name(format));
-       return ~0;
-}
-
-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;
-}
-
 #endif