Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright 2010 Christoph Bumiller
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice shall be included in
  12.  * all copies or substantial portions of the Software.
  13.  *
  14.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20.  * OTHER DEALINGS IN THE SOFTWARE.
  21.  */
  22.  
  23. #if NOUVEAU_DRIVER == 0xc0
  24. # include "nvc0_screen.h"
  25. # include "nvc0_3d.xml.h"
  26. #else
  27. # include "nv50_screen.h"
  28. # include "nv50_3d.xml.h"
  29. #endif
  30. #include "nv50_texture.xml.h"
  31. #include "nv50_defs.xml.h"
  32.  
  33. #include "pipe/p_defines.h"
  34.  
  35. /* Abbreviated usage masks:
  36.  * T: texturing
  37.  * R: render target
  38.  * B: render target, blendable
  39.  * C: render target (color), blendable only on nvc0
  40.  * D: scanout/display target, blendable
  41.  * Z: depth/stencil
  42.  * V: vertex fetch
  43.  * I: image / surface, implies T
  44.  */
  45. #define U_V   PIPE_BIND_VERTEX_BUFFER
  46. #define U_T   PIPE_BIND_SAMPLER_VIEW
  47. #define U_I   PIPE_BIND_SHADER_RESOURCE | PIPE_BIND_COMPUTE_RESOURCE
  48. #define U_TR  PIPE_BIND_RENDER_TARGET | U_T
  49. #define U_IR  U_TR | U_I
  50. #define U_TB  PIPE_BIND_BLENDABLE | U_TR
  51. #define U_IB  PIPE_BIND_BLENDABLE | U_IR
  52. #define U_TD  PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET | U_TB
  53. #define U_TZ  PIPE_BIND_DEPTH_STENCIL | U_T
  54. #define U_TV  U_V | U_T
  55. #define U_TRV U_V | U_TR
  56. #define U_IRV U_V | U_IR
  57. #define U_TBV U_V | U_TB
  58. #define U_IBV U_V | U_IB
  59. #define U_TDV U_V | U_TD
  60. #if NOUVEAU_DRIVER == 0xc0
  61. # define U_TC  U_TB
  62. # define U_IC  U_IB
  63. # define U_TCV U_TBV
  64. # define U_ICV U_IBV
  65. # define U_tV  U_TV
  66. #else
  67. # define U_TC  U_TR
  68. # define U_IC  U_IR
  69. # define U_TCV U_TRV
  70. # define U_ICV U_IRV
  71. # define U_tV  U_V
  72. #endif
  73.  
  74. #define NV50_SURFACE_FORMAT_NONE 0
  75. #define NV50_ZETA_FORMAT_NONE 0
  76.  
  77. /* for vertex buffers: */
  78. #define NV50_TIC_0_FMT_8_8_8    NV50_TIC_0_FMT_8_8_8_8
  79. #define NV50_TIC_0_FMT_16_16_16 NV50_TIC_0_FMT_16_16_16_16
  80. #define NV50_TIC_0_FMT_32_32_32 NVC0_TIC_0_FMT_32_32_32
  81.  
  82. #if NOUVEAU_DRIVER == 0xc0
  83. # define NVXX_3D_VAF_SIZE(s) NVC0_3D_VERTEX_ATTRIB_FORMAT_SIZE_##s
  84. # define NVXX_3D_VAF_TYPE(t) NVC0_3D_VERTEX_ATTRIB_FORMAT_TYPE_##t
  85. #else
  86. # define NVXX_3D_VAF_SIZE(s) NV50_3D_VERTEX_ARRAY_ATTRIB_FORMAT_##s
  87. # define NVXX_3D_VAF_TYPE(t) NV50_3D_VERTEX_ARRAY_ATTRIB_TYPE_##t
  88. #endif
  89.  
  90. #define TBLENT_A_(pf, sf, r, g, b, a, t0, t1, t2, t3, sz, u, br)        \
  91.    [PIPE_FORMAT_##pf] = {                                               \
  92.       sf,                                                               \
  93.       (NV50_TIC_MAP_##r << NV50_TIC_0_MAPR__SHIFT) |                    \
  94.       (NV50_TIC_MAP_##g << NV50_TIC_0_MAPG__SHIFT) |                    \
  95.       (NV50_TIC_MAP_##b << NV50_TIC_0_MAPB__SHIFT) |                    \
  96.       (NV50_TIC_MAP_##a << NV50_TIC_0_MAPA__SHIFT) |                    \
  97.       (NV50_TIC_TYPE_##t0 << NV50_TIC_0_TYPE0__SHIFT) |                 \
  98.       (NV50_TIC_TYPE_##t1 << NV50_TIC_0_TYPE1__SHIFT) |                 \
  99.       (NV50_TIC_TYPE_##t2 << NV50_TIC_0_TYPE2__SHIFT) |                 \
  100.       (NV50_TIC_TYPE_##t3 << NV50_TIC_0_TYPE3__SHIFT) |                 \
  101.       NV50_TIC_0_FMT_##sz,                                              \
  102.       NVXX_3D_VAF_SIZE(sz) |                                            \
  103.       NVXX_3D_VAF_TYPE(t0) | (br << 31),                                \
  104.       U_##u                                                             \
  105.    }
  106.  
  107. #define TBLENT_B_(pf, sf, r, g, b, a, t0, t1, t2, t3, sz, u)            \
  108.    [PIPE_FORMAT_##pf] = {                                               \
  109.       sf,                                                               \
  110.       (NV50_TIC_MAP_##r << NV50_TIC_0_MAPR__SHIFT) |                    \
  111.       (NV50_TIC_MAP_##g << NV50_TIC_0_MAPG__SHIFT) |                    \
  112.       (NV50_TIC_MAP_##b << NV50_TIC_0_MAPB__SHIFT) |                    \
  113.       (NV50_TIC_MAP_##a << NV50_TIC_0_MAPA__SHIFT) |                    \
  114.       (NV50_TIC_TYPE_##t0 << NV50_TIC_0_TYPE0__SHIFT) |                 \
  115.       (NV50_TIC_TYPE_##t1 << NV50_TIC_0_TYPE1__SHIFT) |                 \
  116.       (NV50_TIC_TYPE_##t2 << NV50_TIC_0_TYPE2__SHIFT) |                 \
  117.       (NV50_TIC_TYPE_##t3 << NV50_TIC_0_TYPE3__SHIFT) |                 \
  118.       NV50_TIC_0_FMT_##sz, 0, U_##u                                     \
  119.    }
  120.  
  121. #define C4A(p, n, r, g, b, a, t, s, u, br)                              \
  122.    TBLENT_A_(p, NV50_SURFACE_FORMAT_##n, r, g, b, a, t, t, t, t, s, u, br)
  123. #define C4B(p, n, r, g, b, a, t, s, u)                                  \
  124.    TBLENT_B_(p, NV50_SURFACE_FORMAT_##n, r, g, b, a, t, t, t, t, s, u)
  125.  
  126. #define ZXB(p, n, r, g, b, a, t, s, u)                                  \
  127.    TBLENT_B_(p, NV50_ZETA_FORMAT_##n,                                   \
  128.              r, g, b, ONE_FLOAT, t, UINT, UINT, UINT, s, u)
  129. #define ZSB(p, n, r, g, b, a, t, s, u)                                  \
  130.    TBLENT_B_(p, NV50_ZETA_FORMAT_##n,                                   \
  131.              r, g, b, ONE_FLOAT, t, UINT, UINT, UINT, s, u)
  132. #define SZB(p, n, r, g, b, a, t, s, u)                                  \
  133.    TBLENT_B_(p, NV50_ZETA_FORMAT_##n,                                   \
  134.              r, g, b, ONE_FLOAT, UINT, t, UINT, UINT, s, u)
  135.  
  136. #define F3A(p, n, r, g, b, a, t, s, u)          \
  137.    C4A(p, n, r, g, b, ONE_FLOAT, t, s, u, 0)
  138. #define I3A(p, n, r, g, b, a, t, s, u)          \
  139.    C4A(p, n, r, g, b, ONE_INT, t, s, u, 0)
  140. #define F3B(p, n, r, g, b, a, t, s, u)          \
  141.    C4B(p, n, r, g, b, ONE_FLOAT, t, s, u)
  142. #define I3B(p, n, r, g, b, a, t, s, u)          \
  143.    C4B(p, n, r, g, b, ONE_INT, t, s, u)
  144.  
  145. #define F2A(p, n, r, g, b, a, t, s, u)          \
  146.    C4A(p, n, r, g, ZERO, ONE_FLOAT, t, s, u, 0)
  147. #define I2A(p, n, r, g, b, a, t, s, u)          \
  148.    C4A(p, n, r, g, ZERO, ONE_INT, t, s, u, 0)
  149. #define F2B(p, n, r, g, b, a, t, s, u)          \
  150.    C4B(p, n, r, g, ZERO, ONE_FLOAT, t, s, u)
  151. #define I2B(p, n, r, g, b, a, t, s, u)          \
  152.    C4B(p, n, r, g, ZERO, ONE_INT, t, s, u)
  153.  
  154. #define F1A(p, n, r, g, b, a, t, s, u)             \
  155.    C4A(p, n, r, ZERO, ZERO, ONE_FLOAT, t, s, u, 0)
  156. #define I1A(p, n, r, g, b, a, t, s, u)             \
  157.    C4A(p, n, r, ZERO, ZERO, ONE_INT, t, s, u, 0)
  158. #define F1B(p, n, r, g, b, a, t, s, u)          \
  159.    C4B(p, n, r, ZERO, ZERO, ONE_FLOAT, t, s, u)
  160. #define I1B(p, n, r, g, b, a, t, s, u)          \
  161.    C4B(p, n, r, ZERO, ZERO, ONE_INT, t, s, u)
  162.  
  163. #define A1B(p, n, r, g, b, a, t, s, u)          \
  164.    C4B(p, n, ZERO, ZERO, ZERO, a, t, s, u)
  165.  
  166. #if NOUVEAU_DRIVER == 0xc0
  167. const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =
  168. #else
  169. const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
  170. #endif
  171. {
  172.    C4A(B8G8R8A8_UNORM, BGRA8_UNORM, C2, C1, C0, C3, UNORM, 8_8_8_8, TDV, 1),
  173.    F3A(B8G8R8X8_UNORM, BGRX8_UNORM, C2, C1, C0, xx, UNORM, 8_8_8_8, TD),
  174.    C4A(B8G8R8A8_SRGB, BGRA8_SRGB, C2, C1, C0, C3, UNORM, 8_8_8_8, TD, 1),
  175.    F3A(B8G8R8X8_SRGB, BGRX8_SRGB, C2, C1, C0, xx, UNORM, 8_8_8_8, TD),
  176.    C4A(R8G8B8A8_UNORM, RGBA8_UNORM, C0, C1, C2, C3, UNORM, 8_8_8_8, IBV, 0),
  177.    F3A(R8G8B8X8_UNORM, RGBX8_UNORM, C0, C1, C2, xx, UNORM, 8_8_8_8, TB),
  178.    C4A(R8G8B8A8_SRGB, RGBA8_SRGB, C0, C1, C2, C3, UNORM, 8_8_8_8, TB, 0),
  179.    F3B(R8G8B8X8_SRGB, RGBX8_SRGB, C0, C1, C2, xx, UNORM, 8_8_8_8, TB),
  180.  
  181.    ZXB(Z16_UNORM, Z16_UNORM, C0, C0, C0, xx, UNORM, Z16, TZ),
  182.    ZXB(Z32_FLOAT, Z32_FLOAT, C0, C0, C0, xx, FLOAT, Z32, TZ),
  183.    ZXB(Z24X8_UNORM, Z24_X8_UNORM, C0, C0, C0, xx, UNORM, Z24_X8, TZ),
  184.    ZSB(Z24_UNORM_S8_UINT, Z24_S8_UNORM, C0, C0, C0, xx, UNORM, Z24_S8, TZ),
  185.    ZSB(X24S8_UINT, NONE, C1, C1, C1, xx, UNORM, Z24_S8, T),
  186.    SZB(S8_UINT_Z24_UNORM, S8_Z24_UNORM, C1, C1, C1, xx, UNORM, S8_Z24, TZ),
  187.    SZB(S8X24_UINT, NONE, C0, C0, C0, xx, UNORM, S8_Z24, T),
  188.    ZSB(Z32_FLOAT_S8X24_UINT, Z32_S8_X24_FLOAT, C0, C0, C0, xx, FLOAT,
  189.        Z32_S8_X24, TZ),
  190.    ZSB(X32_S8X24_UINT, NONE, C1, C1, C1, xx, FLOAT, Z32_S8_X24, T),
  191.  
  192.    F3B(B5G6R5_UNORM, B5G6R5_UNORM, C2, C1, C0, xx, UNORM, 5_6_5, T),
  193.    C4B(B5G5R5A1_UNORM, BGR5_A1_UNORM, C2, C1, C0, C3, UNORM, 5_5_5_1, TB),
  194.    F3B(B5G5R5X1_UNORM, BGR5_X1_UNORM, C2, C1, C0, xx, UNORM, 5_5_5_1, TB),
  195.    C4B(B4G4R4A4_UNORM, NONE, C2, C1, C0, C3, UNORM, 4_4_4_4, T),
  196.    F3B(B4G4R4X4_UNORM, NONE, C2, C1, C0, xx, UNORM, 4_4_4_4, T),
  197.    F3B(R9G9B9E5_FLOAT, NONE, C0, C1, C2, xx, FLOAT, 9_9_9_E5, T),
  198.  
  199.    C4A(R10G10B10A2_UNORM, RGB10_A2_UNORM, C0, C1, C2, C3, UNORM, 10_10_10_2,
  200.        IBV, 0),
  201.    C4A(B10G10R10A2_UNORM, BGR10_A2_UNORM, C2, C1, C0, C3, UNORM, 10_10_10_2,
  202.        TBV, 1),
  203.    C4A(R10G10B10A2_SNORM, NONE, C0, C1, C2, C3, SNORM, 10_10_10_2, TV, 0),
  204.    C4A(B10G10R10A2_SNORM, NONE, C2, C1, C0, C3, SNORM, 10_10_10_2, TV, 1),
  205.  
  206.    F3B(R11G11B10_FLOAT, R11G11B10_FLOAT, C0, C1, C2, xx, FLOAT, 11_11_10, IB),
  207.  
  208.    F3B(L8_UNORM, R8_UNORM, C0, C0, C0, xx, UNORM, 8, TB),
  209.    F3B(L8_SRGB, R8_UNORM, C0, C0, C0, xx, UNORM, 8, TB),
  210.    F3B(L8_SNORM, R8_SNORM, C0, C0, C0, xx, SNORM, 8, TC),
  211.    I3B(L8_SINT, R8_SINT, C0, C0, C0, xx, SINT, 8, TR),
  212.    I3B(L8_UINT, R8_UINT, C0, C0, C0, xx, UINT, 8, TR),
  213.    F3B(L16_UNORM, R16_UNORM, C0, C0, C0, xx, UNORM, 16, TC),
  214.    F3B(L16_SNORM, R16_SNORM, C0, C0, C0, xx, SNORM, 16, TC),
  215.    F3B(L16_FLOAT, R16_FLOAT, C0, C0, C0, xx, FLOAT, 16, TB),
  216.    I3B(L16_SINT, R16_SINT, C0, C0, C0, xx, SINT, 16, TR),
  217.    I3B(L16_UINT, R16_UINT, C0, C0, C0, xx, UINT, 16, TR),
  218.    F3B(L32_FLOAT, R32_FLOAT, C0, C0, C0, xx, FLOAT, 32, TB),
  219.    I3B(L32_SINT, R32_SINT, C0, C0, C0, xx, SINT, 32, TR),
  220.    I3B(L32_UINT, R32_UINT, C0, C0, C0, xx, UINT, 32, TR),
  221.  
  222.    C4B(I8_UNORM, R8_UNORM, C0, C0, C0, C0, UNORM, 8, TR),
  223.    C4B(I8_SNORM, R8_SNORM, C0, C0, C0, C0, SNORM, 8, TR),
  224.    C4B(I8_SINT, R8_SINT, C0, C0, C0, C0, SINT, 8, TR),
  225.    C4B(I8_UINT, R8_UINT, C0, C0, C0, C0, UINT, 8, TR),
  226.    C4B(I16_UNORM, R16_UNORM, C0, C0, C0, C0, UNORM, 16, TR),
  227.    C4B(I16_SNORM, R16_SNORM, C0, C0, C0, C0, SNORM, 16, TR),
  228.    C4B(I16_FLOAT, R16_FLOAT, C0, C0, C0, C0, FLOAT, 16, TR),
  229.    C4B(I16_SINT, R16_SINT, C0, C0, C0, C0, SINT, 16, TR),
  230.    C4B(I16_UINT, R16_UINT, C0, C0, C0, C0, UINT, 16, TR),
  231.    C4B(I32_FLOAT, R32_FLOAT, C0, C0, C0, C0, FLOAT, 32, TR),
  232.    C4B(I32_SINT, R32_SINT, C0, C0, C0, C0, SINT, 32, TR),
  233.    C4B(I32_UINT, R32_UINT, C0, C0, C0, C0, UINT, 32, TR),
  234.  
  235.    A1B(A8_UNORM, A8_UNORM, xx, xx, xx, C0, UNORM, 8, TB),
  236.    A1B(A8_SNORM, R8_SNORM, xx, xx, xx, C0, SNORM, 8, T),
  237.    A1B(A8_SINT, R8_SINT, xx, xx, xx, C0, SINT, 8, T),
  238.    A1B(A8_UINT, R8_UINT, xx, xx, xx, C0, UINT, 8, T),
  239.    A1B(A16_UNORM, R16_UNORM, xx, xx, xx, C0, UNORM, 16, T),
  240.    A1B(A16_SNORM, R16_SNORM, xx, xx, xx, C0, SNORM, 16, T),
  241.    A1B(A16_FLOAT, R16_FLOAT, xx, xx, xx, C0, FLOAT, 16, T),
  242.    A1B(A16_SINT, R16_SINT, xx, xx, xx, C0, SINT, 16, T),
  243.    A1B(A16_UINT, R16_UINT, xx, xx, xx, C0, UINT, 16, T),
  244.    A1B(A32_FLOAT, R32_FLOAT, xx, xx, xx, C0, FLOAT, 32, T),
  245.    A1B(A32_SINT, R32_SINT, xx, xx, xx, C0, SINT, 32, T),
  246.    A1B(A32_UINT, R32_UINT, xx, xx, xx, C0, UINT, 32, T),
  247.  
  248.    C4B(L4A4_UNORM, NONE, C0, C0, C0, C1, UNORM, 4_4, T),
  249.    C4B(L8A8_UNORM, RG8_UNORM, C0, C0, C0, C1, UNORM, 8_8, T),
  250.    C4B(L8A8_SNORM, RG8_SNORM, C0, C0, C0, C1, SNORM, 8_8, T),
  251.    C4B(L8A8_SRGB, RG8_UNORM, C0, C0, C0, C1, UNORM, 8_8, T),
  252.    C4B(L8A8_SINT, RG8_SINT, C0, C0, C0, C1, SINT, 8_8, T),
  253.    C4B(L8A8_UINT, RG8_UINT, C0, C0, C0, C1, UINT, 8_8, T),
  254.    C4B(L16A16_UNORM, RG16_UNORM, C0, C0, C0, C1, UNORM, 16_16, T),
  255.    C4B(L16A16_SNORM, RG16_SNORM, C0, C0, C0, C1, SNORM, 16_16, T),
  256.    C4B(L16A16_FLOAT, RG16_FLOAT, C0, C0, C0, C1, FLOAT, 16_16, T),
  257.    C4B(L16A16_SINT, RG16_SINT, C0, C0, C0, C1, SINT, 16_16, T),
  258.    C4B(L16A16_UINT, RG16_UINT, C0, C0, C0, C1, UINT, 16_16, T),
  259.    C4B(L32A32_FLOAT, RG32_FLOAT, C0, C0, C0, C1, FLOAT, 32_32, T),
  260.    C4B(L32A32_SINT, RG32_SINT, C0, C0, C0, C1, SINT, 32_32, T),
  261.    C4B(L32A32_UINT, RG32_UINT, C0, C0, C0, C1, UINT, 32_32, T),
  262.  
  263.    F3B(DXT1_RGB,   NONE, C0, C1, C2, xx, UNORM, DXT1, T),
  264.    F3B(DXT1_SRGB,  NONE, C0, C1, C2, xx, UNORM, DXT1, T),
  265.    C4B(DXT1_RGBA,  NONE, C0, C1, C2, C3, UNORM, DXT1, T),
  266.    C4B(DXT1_SRGBA, NONE, C0, C1, C2, C3, UNORM, DXT1, T),
  267.    C4B(DXT3_RGBA,  NONE, C0, C1, C2, C3, UNORM, DXT3, T),
  268.    C4B(DXT3_SRGBA, NONE, C0, C1, C2, C3, UNORM, DXT3, T),
  269.    C4B(DXT5_RGBA,  NONE, C0, C1, C2, C3, UNORM, DXT5, T),
  270.    C4B(DXT5_SRGBA, NONE, C0, C1, C2, C3, UNORM, DXT5, T),
  271.  
  272.    F1B(RGTC1_UNORM, NONE, C0, xx, xx, xx, UNORM, RGTC1, T),
  273.    F1B(RGTC1_SNORM, NONE, C0, xx, xx, xx, SNORM, RGTC1, T),
  274.    F2B(RGTC2_UNORM, NONE, C0, C1, xx, xx, UNORM, RGTC2, T),
  275.    F2B(RGTC2_SNORM, NONE, C0, C1, xx, xx, SNORM, RGTC2, T),
  276.    F3B(LATC1_UNORM, NONE, C0, C0, C0, xx, UNORM, RGTC1, T),
  277.    F3B(LATC1_SNORM, NONE, C0, C0, C0, xx, SNORM, RGTC1, T),
  278.    C4B(LATC2_UNORM, NONE, C0, C0, C0, C1, UNORM, RGTC2, T),
  279.    C4B(LATC2_SNORM, NONE, C0, C0, C0, C1, SNORM, RGTC2, T),
  280.  
  281.    C4A(R32G32B32A32_FLOAT, RGBA32_FLOAT, C0, C1, C2, C3, FLOAT, 32_32_32_32,
  282.        IBV, 0),
  283.    C4A(R32G32B32A32_UNORM, NONE, C0, C1, C2, C3, UNORM, 32_32_32_32, TV, 0),
  284.    C4A(R32G32B32A32_SNORM, NONE, C0, C1, C2, C3, SNORM, 32_32_32_32, TV, 0),
  285.    C4A(R32G32B32A32_SINT, RGBA32_SINT, C0, C1, C2, C3, SINT, 32_32_32_32,
  286.        IRV, 0),
  287.    C4A(R32G32B32A32_UINT, RGBA32_UINT, C0, C1, C2, C3, UINT, 32_32_32_32,
  288.        IRV, 0),
  289.    F3B(R32G32B32X32_FLOAT, RGBX32_FLOAT, C0, C1, C2, xx, FLOAT, 32_32_32_32, TB),
  290.    I3B(R32G32B32X32_SINT, RGBX32_SINT, C0, C1, C2, xx, SINT, 32_32_32_32, TR),
  291.    I3B(R32G32B32X32_UINT, RGBX32_UINT, C0, C1, C2, xx, UINT, 32_32_32_32, TR),
  292.  
  293.    F2A(R32G32_FLOAT, RG32_FLOAT, C0, C1, xx, xx, FLOAT, 32_32, IBV),
  294.    F2A(R32G32_UNORM, NONE, C0, C1, xx, xx, UNORM, 32_32, TV),
  295.    F2A(R32G32_SNORM, NONE, C0, C1, xx, xx, SNORM, 32_32, TV),
  296.    I2A(R32G32_SINT, RG32_SINT, C0, C1, xx, xx, SINT, 32_32, IRV),
  297.    I2A(R32G32_UINT, RG32_UINT, C0, C1, xx, xx, UINT, 32_32, IRV),
  298.  
  299.    F1A(R32_FLOAT, R32_FLOAT, C0, xx, xx, xx, FLOAT, 32, IBV),
  300.    F1A(R32_UNORM, NONE, C0, xx, xx, xx, UNORM, 32, TV),
  301.    F1A(R32_SNORM, NONE, C0, xx, xx, xx, SNORM, 32, TV),
  302.    I1A(R32_SINT, R32_SINT, C0, xx, xx, xx, SINT, 32, IRV),
  303.    I1A(R32_UINT, R32_UINT, C0, xx, xx, xx, UINT, 32, IRV),
  304.  
  305.    C4A(R16G16B16A16_FLOAT, RGBA16_FLOAT, C0, C1, C2, C3, FLOAT, 16_16_16_16,
  306.        IBV, 0),
  307.    C4A(R16G16B16A16_UNORM, RGBA16_UNORM, C0, C1, C2, C3, UNORM, 16_16_16_16,
  308.        ICV, 0),
  309.    C4A(R16G16B16A16_SNORM, RGBA16_SNORM, C0, C1, C2, C3, SNORM, 16_16_16_16,
  310.        ICV, 0),
  311.    C4A(R16G16B16A16_SINT, RGBA16_SINT, C0, C1, C2, C3, SINT, 16_16_16_16,
  312.        IRV, 0),
  313.    C4A(R16G16B16A16_UINT, RGBA16_UINT, C0, C1, C2, C3, UINT, 16_16_16_16,
  314.        IRV, 0),
  315.    F3B(R16G16B16X16_FLOAT, RGBX16_FLOAT, C0, C1, C2, xx, FLOAT, 16_16_16_16, TB),
  316.    F3B(R16G16B16X16_UNORM, RGBA16_UNORM, C0, C1, C2, xx, UNORM, 16_16_16_16, T),
  317.    F3B(R16G16B16X16_SNORM, RGBA16_SNORM, C0, C1, C2, xx, SNORM, 16_16_16_16, T),
  318.    I3B(R16G16B16X16_SINT, RGBA16_SINT, C0, C1, C2, xx, SINT, 16_16_16_16, T),
  319.    I3B(R16G16B16X16_UINT, RGBA16_UINT, C0, C1, C2, xx, UINT, 16_16_16_16, T),
  320.  
  321.    F2A(R16G16_FLOAT, RG16_FLOAT, C0, C1, xx, xx, FLOAT, 16_16, IBV),
  322.    F2A(R16G16_UNORM, RG16_UNORM, C0, C1, xx, xx, UNORM, 16_16, ICV),
  323.    F2A(R16G16_SNORM, RG16_SNORM, C0, C1, xx, xx, SNORM, 16_16, ICV),
  324.    I2A(R16G16_SINT, RG16_SINT, C0, C1, xx, xx, SINT, 16_16, IRV),
  325.    I2A(R16G16_UINT, RG16_UINT, C0, C1, xx, xx, UINT, 16_16, IRV),
  326.  
  327.    F1A(R16_FLOAT, R16_FLOAT, C0, xx, xx, xx, FLOAT, 16, IBV),
  328.    F1A(R16_UNORM, R16_UNORM, C0, xx, xx, xx, UNORM, 16, ICV),
  329.    F1A(R16_SNORM, R16_SNORM, C0, xx, xx, xx, SNORM, 16, ICV),
  330.    I1A(R16_SINT, R16_SINT, C0, xx, xx, xx, SINT, 16, IRV),
  331.    I1A(R16_UINT, R16_UINT, C0, xx, xx, xx, UINT, 16, IRV),
  332.  
  333.    C4A(R8G8B8A8_SNORM, RGBA8_SNORM, C0, C1, C2, C3, SNORM, 8_8_8_8, ICV, 0),
  334.    C4A(R8G8B8A8_SINT, RGBA8_SINT, C0, C1, C2, C3, SINT, 8_8_8_8, IRV, 0),
  335.    C4A(R8G8B8A8_UINT, RGBA8_UINT, C0, C1, C2, C3, UINT, 8_8_8_8, IRV, 0),
  336.    F3B(R8G8B8X8_SNORM, RGBA8_SNORM, C0, C1, C2, xx, SNORM, 8_8_8_8, T),
  337.    I3B(R8G8B8X8_SINT, RGBA8_SINT, C0, C1, C2, xx, SINT, 8_8_8_8, T),
  338.    I3B(R8G8B8X8_UINT, RGBA8_UINT, C0, C1, C2, xx, UINT, 8_8_8_8, T),
  339.  
  340.    F2A(R8G8_UNORM, RG8_UNORM, C0, C1, xx, xx, UNORM, 8_8, IBV),
  341.    F2A(R8G8_SNORM, RG8_SNORM, C0, C1, xx, xx, SNORM, 8_8, ICV),
  342.    I2A(R8G8_SINT, RG8_SINT, C0, C1, xx, xx, SINT, 8_8, IRV),
  343.    I2A(R8G8_UINT, RG8_UINT, C0, C1, xx, xx, UINT, 8_8, IRV),
  344.  
  345.    F1A(R8_UNORM, R8_UNORM, C0, xx, xx, xx, UNORM, 8, IBV),
  346.    F1A(R8_SNORM, R8_SNORM, C0, xx, xx, xx, SNORM, 8, ICV),
  347.    I1A(R8_SINT, R8_SINT, C0, xx, xx, xx, SINT, 8, IRV),
  348.    I1A(R8_UINT, R8_UINT, C0, xx, xx, xx, UINT, 8, IRV),
  349.  
  350.    F3B(R8G8_B8G8_UNORM, NONE, C0, C1, C2, xx, UNORM, U8_YA8_V8_YB8, T),
  351.    F3B(G8R8_B8R8_UNORM, NONE, C1, C0, C2, xx, UNORM, U8_YA8_V8_YB8, T),
  352.    F3B(G8R8_G8B8_UNORM, NONE, C0, C1, C2, xx, UNORM, YA8_U8_YB8_V8, T),
  353.    F3B(R8G8_R8B8_UNORM, NONE, C1, C0, C2, xx, UNORM, YA8_U8_YB8_V8, T),
  354.  
  355.    F1B(R1_UNORM, BITMAP, C0, xx, xx, xx, UNORM, BITMAP, T),
  356.  
  357.    C4B(R4A4_UNORM, NONE, C0, ZERO, ZERO, C1, UNORM, 4_4, T),
  358.    C4B(R8A8_UNORM, NONE, C0, ZERO, ZERO, C1, UNORM, 8_8, T),
  359.    C4B(A4R4_UNORM, NONE, C1, ZERO, ZERO, C0, UNORM, 4_4, T),
  360.    C4B(A8R8_UNORM, NONE, C1, ZERO, ZERO, C0, UNORM, 8_8, T),
  361.  
  362.    TBLENT_B_(R8SG8SB8UX8U_NORM, 0,
  363.              C0, C1, C2, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, 8_8_8_8, T),
  364.    TBLENT_B_(R5SG5SB6U_NORM, 0,
  365.              C0, C1, C2, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, 5_5_6, T),
  366.  
  367.    /* vertex-only formats: */
  368.  
  369.    C4A(R32G32B32A32_SSCALED, NONE, C0, C1, C2, C3, SSCALED, 32_32_32_32, V, 0),
  370.    C4A(R32G32B32A32_USCALED, NONE, C0, C1, C2, C3, USCALED, 32_32_32_32, V, 0),
  371.    F3A(R32G32B32_FLOAT, NONE, C0, C1, C2, xx, FLOAT, 32_32_32, tV),
  372.    F3A(R32G32B32_UNORM, NONE, C0, C1, C2, xx, UNORM, 32_32_32, V),
  373.    F3A(R32G32B32_SNORM, NONE, C0, C1, C2, xx, SNORM, 32_32_32, V),
  374.    I3A(R32G32B32_SINT, NONE, C0, C1, C2, xx, SINT, 32_32_32, tV),
  375.    I3A(R32G32B32_UINT, NONE, C0, C1, C2, xx, UINT, 32_32_32, tV),
  376.    F3A(R32G32B32_SSCALED, NONE, C0, C1, C2, xx, SSCALED, 32_32_32, V),
  377.    F3A(R32G32B32_USCALED, NONE, C0, C1, C2, xx, USCALED, 32_32_32, V),
  378.    F2A(R32G32_SSCALED, NONE, C0, C1, xx, xx, SSCALED, 32_32, V),
  379.    F2A(R32G32_USCALED, NONE, C0, C1, xx, xx, USCALED, 32_32, V),
  380.    F1A(R32_SSCALED, NONE, C0, xx, xx, xx, SSCALED, 32, V),
  381.    F1A(R32_USCALED, NONE, C0, xx, xx, xx, USCALED, 32, V),
  382.  
  383.    C4A(R16G16B16A16_SSCALED, NONE, C0, C1, C2, C3, SSCALED, 16_16_16_16, V, 0),
  384.    C4A(R16G16B16A16_USCALED, NONE, C0, C1, C2, C3, USCALED, 16_16_16_16, V, 0),
  385.    F3A(R16G16B16_FLOAT, NONE, C0, C1, C2, xx, FLOAT, 16_16_16, V),
  386.    F3A(R16G16B16_UNORM, NONE, C0, C1, C2, xx, UNORM, 16_16_16, V),
  387.    F3A(R16G16B16_SNORM, NONE, C0, C1, C2, xx, SNORM, 16_16_16, V),
  388.    I3A(R16G16B16_SINT, NONE, C0, C1, C2, xx, SINT, 16_16_16, V),
  389.    I3A(R16G16B16_UINT, NONE, C0, C1, C2, xx, UINT, 16_16_16, V),
  390.    F3A(R16G16B16_SSCALED, NONE, C0, C1, C2, xx, SSCALED, 16_16_16, V),
  391.    F3A(R16G16B16_USCALED, NONE, C0, C1, C2, xx, USCALED, 16_16_16, V),
  392.    F2A(R16G16_SSCALED, NONE, C0, C1, xx, xx, SSCALED, 16_16, V),
  393.    F2A(R16G16_USCALED, NONE, C0, C1, xx, xx, USCALED, 16_16, V),
  394.    F1A(R16_SSCALED, NONE, C0, xx, xx, xx, SSCALED, 16, V),
  395.    F1A(R16_USCALED, NONE, C0, xx, xx, xx, USCALED, 16, V),
  396.  
  397.    C4A(R8G8B8A8_SSCALED, NONE, C0, C1, C2, C3, SSCALED, 8_8_8_8, V, 0),
  398.    C4A(R8G8B8A8_USCALED, NONE, C0, C1, C2, C3, USCALED, 8_8_8_8, V, 0),
  399.    F3A(R8G8B8_UNORM, NONE, C0, C1, C2, xx, UNORM, 8_8_8, V),
  400.    F3A(R8G8B8_SNORM, NONE, C0, C1, C2, xx, SNORM, 8_8_8, V),
  401.    I2A(R8G8B8_SINT, NONE, C0, C1, C2, xx, SINT, 8_8_8, V),
  402.    I2A(R8G8B8_UINT, NONE, C0, C1, C2, xx, UINT, 8_8_8, V),
  403.    F3A(R8G8B8_SSCALED, NONE, C0, C1, C2, xx, SSCALED, 8_8_8, V),
  404.    F3A(R8G8B8_USCALED, NONE, C0, C1, C2, xx, USCALED, 8_8_8, V),
  405.    F2A(R8G8_SSCALED, NONE, C0, C1, xx, xx, SSCALED, 8_8, V),
  406.    F2A(R8G8_USCALED, NONE, C0, C1, xx, xx, USCALED, 8_8, V),
  407.    F1A(R8_SSCALED, NONE, C0, xx, xx, xx, SSCALED, 8, V),
  408.    F1A(R8_USCALED, NONE, C0, xx, xx, xx, USCALED, 8, V),
  409.  
  410.    /* FIXED types: not supported natively, converted on VBO push */
  411.  
  412.    C4B(R32G32B32A32_FIXED, NONE, C0, C1, C2, C3, FLOAT, 32_32_32_32, V),
  413.    F3B(R32G32B32_FIXED, NONE, C0, C1, C2, xx, FLOAT, 32_32_32, V),
  414.    F2B(R32G32_FIXED, NONE, C0, C1, xx, xx, FLOAT, 32_32, V),
  415.    F1B(R32_FIXED, NONE, C0, xx, xx, xx, FLOAT, 32, V),
  416.  
  417.    C4B(R64G64B64A64_FLOAT, NONE, C0, C1, C2, C3, FLOAT, 32_32_32_32, V),
  418.    F3B(R64G64B64_FLOAT, NONE, C0, C1, C2, xx, FLOAT, 32_32_32, V),
  419.    F2B(R64G64_FLOAT, NONE, C0, C1, xx, xx, FLOAT, 32_32, V),
  420.    F1B(R64_FLOAT, NONE, C0, xx, xx, xx, FLOAT, 32, V),
  421. };
  422.  
  423. #if 0
  424. const uint8_t nv50_rt_format_map[PIPE_FORMAT_COUNT] =
  425. {
  426.    [PIPE_FORMAT_Z16_UNORM]            = NV50_ZETA_FORMAT_Z16_UNORM,
  427.    [PIPE_FORMAT_Z24X8_UNORM]          = NV50_ZETA_FORMAT_Z24_X8_UNORM,
  428.    [PIPE_FORMAT_Z24_UNORM_S8_UINT]    = NV50_ZETA_FORMAT_Z24_S8_UNORM,
  429.    [PIPE_FORMAT_S8_UINT_Z24_UNORM]    = NV50_ZETA_FORMAT_S8_Z24_UNORM,
  430.    [PIPE_FORMAT_Z32_FLOAT]            = NV50_ZETA_FORMAT_Z32_FLOAT,
  431.    [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT] = NV50_ZETA_FORMAT_Z32_S8_X24_FLOAT,
  432.  
  433.    [PIPE_FORMAT_R1_UNORM] = NV50_SURFACE_FORMAT_BITMAP,
  434.  
  435.    [PIPE_FORMAT_R32G32B32A32_FLOAT] = NV50_SURFACE_FORMAT_RGBA32_FLOAT,
  436.    [PIPE_FORMAT_R32G32B32X32_FLOAT] = NV50_SURFACE_FORMAT_RGBX32_FLOAT,
  437.    [PIPE_FORMAT_R32G32B32A32_SINT]  = NV50_SURFACE_FORMAT_RGBA32_SINT,
  438.    [PIPE_FORMAT_R32G32B32X32_SINT]  = NV50_SURFACE_FORMAT_RGBX32_SINT,
  439.    [PIPE_FORMAT_R32G32B32A32_UINT]  = NV50_SURFACE_FORMAT_RGBA32_UINT,
  440.    [PIPE_FORMAT_R32G32B32X32_UINT]  = NV50_SURFACE_FORMAT_RGBX32_UINT,
  441.  
  442.    [PIPE_FORMAT_R16G16B16A16_FLOAT] = NV50_SURFACE_FORMAT_RGBA16_FLOAT,
  443.    [PIPE_FORMAT_R16G16B16X16_FLOAT] = NV50_SURFACE_FORMAT_RGBX16_FLOAT,
  444.    [PIPE_FORMAT_R16G16B16A16_UNORM] = NV50_SURFACE_FORMAT_RGBA16_UNORM,
  445.    [PIPE_FORMAT_R16G16B16A16_SNORM] = NV50_SURFACE_FORMAT_RGBA16_SNORM,
  446.    [PIPE_FORMAT_R16G16B16A16_SINT]  = NV50_SURFACE_FORMAT_RGBA16_SINT,
  447.    [PIPE_FORMAT_R16G16B16A16_UINT]  = NV50_SURFACE_FORMAT_RGBA16_UINT,
  448.  
  449.    [PIPE_FORMAT_B8G8R8A8_UNORM] = NV50_SURFACE_FORMAT_BGRA8_UNORM,
  450.    [PIPE_FORMAT_R8G8B8A8_UNORM] = NV50_SURFACE_FORMAT_RGBA8_UNORM,
  451.    [PIPE_FORMAT_B8G8R8X8_UNORM] = NV50_SURFACE_FORMAT_BGRX8_UNORM,
  452.    [PIPE_FORMAT_R8G8B8X8_UNORM] = NV50_SURFACE_FORMAT_RGBX8_UNORM,
  453.    [PIPE_FORMAT_B8G8R8A8_SRGB]  = NV50_SURFACE_FORMAT_BGRA8_SRGB,
  454.    [PIPE_FORMAT_R8G8B8A8_SRGB]  = NV50_SURFACE_FORMAT_RGBA8_SRGB,
  455.    [PIPE_FORMAT_B8G8R8X8_SRGB]  = NV50_SURFACE_FORMAT_BGRX8_SRGB,
  456.    [PIPE_FORMAT_R8G8B8X8_SRGB]  = NV50_SURFACE_FORMAT_RGBX8_SRGB,
  457.    [PIPE_FORMAT_R8G8B8A8_SNORM] = NV50_SURFACE_FORMAT_RGBA8_SNORM,
  458.    [PIPE_FORMAT_R8G8B8A8_SINT]  = NV50_SURFACE_FORMAT_RGBA8_SINT,
  459.    [PIPE_FORMAT_R8G8B8A8_UINT]  = NV50_SURFACE_FORMAT_RGBA8_UINT,
  460.  
  461.    [PIPE_FORMAT_R11G11B10_FLOAT] = NV50_SURFACE_FORMAT_R11G11B10_FLOAT,
  462.  
  463.    [PIPE_FORMAT_B10G10R10A2_UNORM] = NV50_SURFACE_FORMAT_BGR10_A2_UNORM,
  464.    [PIPE_FORMAT_R10G10B10A2_UNORM] = NV50_SURFACE_FORMAT_RGB10_A2_UNORM,
  465.    [PIPE_FORMAT_R10G10B10A2_UINT]  = NV50_SURFACE_FORMAT_RGB10_A2_UINT,
  466.  
  467.    [PIPE_FORMAT_B5G6R5_UNORM] = NV50_SURFACE_FORMAT_B5G6R5_UNORM,
  468.  
  469.    [PIPE_FORMAT_B5G5R5A1_UNORM] = NV50_SURFACE_FORMAT_BGR5_A1_UNORM,
  470.    [PIPE_FORMAT_B5G5R5X1_UNORM] = NV50_SURFACE_FORMAT_BGR5_X1_UNORM,
  471.  
  472.    [PIPE_FORMAT_R32G32_FLOAT] = NV50_SURFACE_FORMAT_RG32_FLOAT,
  473.    [PIPE_FORMAT_R32G32_SINT]  = NV50_SURFACE_FORMAT_RG32_SINT,
  474.    [PIPE_FORMAT_R32G32_UINT]  = NV50_SURFACE_FORMAT_RG32_UINT,
  475.  
  476.    [PIPE_FORMAT_R16G16_FLOAT] = NV50_SURFACE_FORMAT_RG16_FLOAT,
  477.    [PIPE_FORMAT_R16G16_UNORM] = NV50_SURFACE_FORMAT_RG16_UNORM,
  478.    [PIPE_FORMAT_R16G16_SNORM] = NV50_SURFACE_FORMAT_RG16_SNORM,
  479.    [PIPE_FORMAT_R16G16_SINT]  = NV50_SURFACE_FORMAT_RG16_SINT,
  480.    [PIPE_FORMAT_R16G16_UINT]  = NV50_SURFACE_FORMAT_RG16_UINT,
  481.  
  482.    [PIPE_FORMAT_R8G8_UNORM] = NV50_SURFACE_FORMAT_RG8_UNORM,
  483.    [PIPE_FORMAT_R8G8_SNORM] = NV50_SURFACE_FORMAT_RG8_SNORM,
  484.    [PIPE_FORMAT_R8G8_SINT]  = NV50_SURFACE_FORMAT_RG8_SINT,
  485.    [PIPE_FORMAT_R8G8_UINT]  = NV50_SURFACE_FORMAT_RG8_UINT,
  486.  
  487.    [PIPE_FORMAT_R32_FLOAT] = NV50_SURFACE_FORMAT_R32_FLOAT,
  488.    [PIPE_FORMAT_R32_SINT]  = NV50_SURFACE_FORMAT_R32_SINT,
  489.    [PIPE_FORMAT_R32_UINT]  = NV50_SURFACE_FORMAT_R32_UINT,
  490.  
  491.    [PIPE_FORMAT_R16_FLOAT] = NV50_SURFACE_FORMAT_R16_FLOAT,
  492.    [PIPE_FORMAT_R16_UNORM] = NV50_SURFACE_FORMAT_R16_UNORM,
  493.    [PIPE_FORMAT_R16_SNORM] = NV50_SURFACE_FORMAT_R16_SNORM,
  494.    [PIPE_FORMAT_R16_SINT]  = NV50_SURFACE_FORMAT_R16_SINT,
  495.    [PIPE_FORMAT_R16_UINT]  = NV50_SURFACE_FORMAT_R16_UINT,
  496.  
  497.    [PIPE_FORMAT_R8_UNORM] = NV50_SURFACE_FORMAT_R8_UNORM,
  498.    [PIPE_FORMAT_R8_SNORM] = NV50_SURFACE_FORMAT_R8_SNORM,
  499.    [PIPE_FORMAT_R8_SINT]  = NV50_SURFACE_FORMAT_R8_SINT,
  500.    [PIPE_FORMAT_R8_UINT]  = NV50_SURFACE_FORMAT_R8_UINT,
  501.  
  502.    [PIPE_FORMAT_A8_UNORM] = NV50_SURFACE_FORMAT_A8_UNORM
  503. };
  504. #endif
  505.