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