182114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#ifndef R600_FORMATS_H
282114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define R600_FORMATS_H
382114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie
4330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák#include "util/u_format.h"
5d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet#include "r600_pipe.h"
6d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet
782114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie/* list of formats from R700 ISA document - apply across GPUs in different registers */
882114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_INVALID                     0x00000000
982114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_8                           0x00000001
1082114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_4_4                         0x00000002
1182114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_3_3_2                       0x00000003
1282114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16                          0x00000005
1382114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16_FLOAT                    0x00000006
1482114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_8_8                         0x00000007
1582114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_5_6_5                       0x00000008
1682114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_6_5_5                       0x00000009
1782114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_1_5_5_5                     0x0000000A
1882114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_4_4_4_4                     0x0000000B
1982114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_5_5_5_1                     0x0000000C
2082114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32                          0x0000000D
2182114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_FLOAT                    0x0000000E
2282114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16_16                       0x0000000F
2382114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16_16_FLOAT                 0x00000010
2482114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_8_24                        0x00000011
2582114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_8_24_FLOAT                  0x00000012
2682114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_24_8                        0x00000013
2782114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_24_8_FLOAT                  0x00000014
2882114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_10_11_11                    0x00000015
2982114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_10_11_11_FLOAT              0x00000016
3082114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_11_11_10                    0x00000017
3182114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_11_11_10_FLOAT              0x00000018
3282114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_2_10_10_10                  0x00000019
3382114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_8_8_8_8                     0x0000001A
3482114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_10_10_10_2                  0x0000001B
3582114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_X24_8_32_FLOAT              0x0000001C
3682114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_32                       0x0000001D
3782114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_32_FLOAT                 0x0000001E
3882114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16_16_16_16                 0x0000001F
3982114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16_16_16_16_FLOAT           0x00000020
4082114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_32_32_32                 0x00000022
4182114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_32_32_32_FLOAT           0x00000023
4282114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_1                           0x00000025
4382114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_GB_GR                       0x00000027
4482114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_BG_RG                       0x00000028
4582114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_AS_8                     0x00000029
4682114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_AS_8_8                   0x0000002a
4782114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_5_9_9_9_SHAREDEXP           0x0000002b
4882114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_8_8_8                       0x0000002c
4982114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16_16_16                    0x0000002d
5082114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_16_16_16_FLOAT              0x0000002e
5182114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_32_32                    0x0000002f
5282114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_32_32_32_FLOAT              0x00000030
5382114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_BC1                         0x00000031
5482114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_BC2                         0x00000032
5582114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_BC3                         0x00000033
5682114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_BC4                         0x00000034
5782114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#define     FMT_BC5                         0x00000035
58ca6896ba1452687ee35791c7e48afae3b2b657fdMarek Olšák#define     FMT_BC6                         0x00000036
59ca6896ba1452687ee35791c7e48afae3b2b657fdMarek Olšák#define     FMT_BC7                         0x00000037
60ca6896ba1452687ee35791c7e48afae3b2b657fdMarek Olšák#define     FMT_32_AS_32_32_32_32           0x00000038
6182114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie
62d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet#define     ENDIAN_NONE                     0
63d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet#define     ENDIAN_8IN16                    1
64d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet#define     ENDIAN_8IN32                    2
65d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet#define     ENDIAN_8IN64                    3
66d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet
67d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeetstatic INLINE unsigned r600_endian_swap(unsigned size)
68d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet{
69d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet	if (R600_BIG_ENDIAN) {
70d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet		switch (size) {
71d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet		case 64:
72d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet			return ENDIAN_8IN64;
73d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet		case 32:
74d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet			return ENDIAN_8IN32;
75d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet		case 16:
76d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet			return ENDIAN_8IN16;
77d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet		default:
78d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet			return ENDIAN_NONE;
79d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet		}
80d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet	} else {
81d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet		return ENDIAN_NONE;
82d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet	}
83d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet}
84d7577ae3a6d6e174ab36d244f6bd4dedd63c3d1dHenri Verbeet
8518cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeetstatic INLINE bool r600_is_vertex_format_supported(enum pipe_format format)
8618cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet{
8718cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	const struct util_format_description *desc = util_format_description(format);
8818cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	unsigned i;
8918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet
9018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	if (!desc)
9118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet		return false;
9218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet
9318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	/* Find the first non-VOID channel. */
9418cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	for (i = 0; i < 4; i++) {
9518cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet		if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID)
9618cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet			break;
9718cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	}
9818cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	if (i == 4)
9918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet		return false;
10018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet
10118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	/* No fixed, no double. */
10218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN ||
10318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	    (desc->channel[i].size == 64 &&
104e0773da1e897164ed7597437070e32b867734ee5Marek Olšák	     desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) ||
105e0773da1e897164ed7597437070e32b867734ee5Marek Olšák	    desc->channel[i].type == UTIL_FORMAT_TYPE_FIXED)
10618cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet		return false;
10718cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet
10818cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	/* No scaled/norm formats with 32 bits per channel. */
10918cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	if (desc->channel[i].size == 32 &&
11018cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	    (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED ||
11118cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	     desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED))
11218cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet		return false;
11318cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet
11418cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet	return true;
11518cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet}
11618cdb9c8abfb5d9f009fcb36ab788f48792207e4Henri Verbeet
11782114ac02a2d5a764ce69711fc0a71f559ee9137Dave Airlie#endif
118