2 * Copyright 2010 Christoph Bumiller
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:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
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.
23 #if NOUVEAU_DRIVER == 0xc0
24 # include "nvc0/nvc0_screen.h"
25 # include "nvc0/nvc0_3d.xml.h"
26 # include "nvc0/gm107_texture.xml.h"
28 # include "nv50/nv50_screen.h"
29 # include "nv50/nv50_3d.xml.h"
31 #include "nv50/g80_texture.xml.h"
32 #include "nv50/g80_defs.xml.h"
34 #include "pipe/p_defines.h"
36 /* Abbreviated usage masks:
39 * B: render target, blendable
40 * C: render target (color), blendable only on nvc0
41 * D: scanout/display target, blendable
43 * I: image / surface, implies T
45 #define U_T PIPE_BIND_SAMPLER_VIEW
46 #define U_I PIPE_BIND_SHADER_BUFFER | PIPE_BIND_SHADER_IMAGE | PIPE_BIND_COMPUTE_RESOURCE
47 #define U_TR PIPE_BIND_RENDER_TARGET | U_T
48 #define U_IR U_TR | U_I
49 #define U_TB PIPE_BIND_BLENDABLE | U_TR
50 #define U_IB PIPE_BIND_BLENDABLE | U_IR
51 #define U_TD PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET | U_TB
52 #define U_TZ PIPE_BIND_DEPTH_STENCIL | U_T
53 #define U_ID U_TD | U_I
54 #if NOUVEAU_DRIVER == 0xc0
64 #define G80_ZETA_FORMAT_NONE 0
65 #define G80_SURFACE_FORMAT_NONE 0
67 #define SF_A(sz) G80_TIC_0_COMPONENTS_SIZES_##sz
68 #define SF_B(sz) G200_TIC_0_COMPONENTS_SIZES_##sz
69 #define SF_C(sz) GF100_TIC_0_COMPONENTS_SIZES_##sz
70 #define SF_D(sz) GM107_TIC2_0_COMPONENTS_SIZES_##sz
71 #define SF(c, pf, sf, r, g, b, a, t0, t1, t2, t3, sz, u) \
72 [PIPE_FORMAT_##pf] = { \
86 #define C4(c, p, n, r, g, b, a, t, s, u) \
87 SF(c, p, G80_SURFACE_FORMAT_##n, r, g, b, a, t, t, t, t, s, u)
89 #define ZX(c, p, n, r, g, b, a, t, s, u) \
90 SF(c, p, G80_ZETA_FORMAT_##n, \
91 r, g, b, ONE_FLOAT, t, UINT, UINT, UINT, s, u)
92 #define ZS(c, p, n, r, g, b, a, t, s, u) \
93 SF(c, p, G80_ZETA_FORMAT_##n, \
94 r, g, b, ONE_FLOAT, t, UINT, UINT, UINT, s, u)
95 #define SZ(c, p, n, r, g, b, a, t, s, u) \
96 SF(c, p, G80_ZETA_FORMAT_##n, \
97 r, g, b, ONE_FLOAT, UINT, t, UINT, UINT, s, u)
98 #define SX(c, p, r, s, u) \
99 SF(c, p, G80_ZETA_FORMAT_NONE, \
100 r, r, r, r, UINT, UINT, UINT, UINT, s, u)
102 #define F3(c, p, n, r, g, b, a, t, s, u) \
103 C4(c, p, n, r, g, b, ONE_FLOAT, t, s, u)
104 #define I3(c, p, n, r, g, b, a, t, s, u) \
105 C4(c, p, n, r, g, b, ONE_INT, t, s, u)
107 #define F2(c, p, n, r, g, b, a, t, s, u) \
108 C4(c, p, n, r, g, ZERO, ONE_FLOAT, t, s, u)
109 #define I2(c, p, n, r, g, b, a, t, s, u) \
110 C4(c, p, n, r, g, ZERO, ONE_INT, t, s, u)
112 #define F1(c, p, n, r, g, b, a, t, s, u) \
113 C4(c, p, n, r, ZERO, ZERO, ONE_FLOAT, t, s, u)
114 #define I1(c, p, n, r, g, b, a, t, s, u) \
115 C4(c, p, n, r, ZERO, ZERO, ONE_INT, t, s, u)
117 #define A1(c, p, n, r, g, b, a, t, s, u) \
118 C4(c, p, n, ZERO, ZERO, ZERO, a, t, s, u)
120 #if NOUVEAU_DRIVER == 0xc0
121 const struct nvc0_format nvc0_format_table
[PIPE_FORMAT_COUNT
] =
123 const struct nv50_format nv50_format_table
[PIPE_FORMAT_COUNT
] =
126 C4(A
, B8G8R8A8_UNORM
, BGRA8_UNORM
, B
, G
, R
, A
, UNORM
, A8B8G8R8
, ID
),
127 F3(A
, B8G8R8X8_UNORM
, BGRX8_UNORM
, B
, G
, R
, xx
, UNORM
, A8B8G8R8
, TD
),
128 C4(A
, B8G8R8A8_SRGB
, BGRA8_SRGB
, B
, G
, R
, A
, UNORM
, A8B8G8R8
, TD
),
129 F3(A
, B8G8R8X8_SRGB
, BGRX8_SRGB
, B
, G
, R
, xx
, UNORM
, A8B8G8R8
, TD
),
130 C4(A
, R8G8B8A8_UNORM
, RGBA8_UNORM
, R
, G
, B
, A
, UNORM
, A8B8G8R8
, IB
),
131 F3(A
, R8G8B8X8_UNORM
, RGBX8_UNORM
, R
, G
, B
, xx
, UNORM
, A8B8G8R8
, TB
),
132 C4(A
, R8G8B8A8_SRGB
, RGBA8_SRGB
, R
, G
, B
, A
, UNORM
, A8B8G8R8
, TB
),
133 F3(A
, R8G8B8X8_SRGB
, RGBX8_SRGB
, R
, G
, B
, xx
, UNORM
, A8B8G8R8
, TB
),
135 ZX(B
, Z16_UNORM
, Z16_UNORM
, R
, R
, R
, xx
, UNORM
, Z16
, TZ
),
136 ZX(A
, Z32_FLOAT
, Z32_FLOAT
, R
, R
, R
, xx
, FLOAT
, ZF32
, TZ
),
137 ZX(A
, Z24X8_UNORM
, Z24_X8_UNORM
, R
, R
, R
, xx
, UNORM
, X8Z24
, TZ
),
138 SZ(A
, X8Z24_UNORM
, S8_Z24_UNORM
, G
, G
, G
, xx
, UNORM
, Z24S8
, TZ
),
139 ZS(A
, Z24_UNORM_S8_UINT
, Z24_S8_UNORM
, R
, R
, R
, xx
, UNORM
, S8Z24
, TZ
),
140 SZ(A
, S8_UINT_Z24_UNORM
, S8_Z24_UNORM
, G
, G
, G
, xx
, UNORM
, Z24S8
, TZ
),
141 ZS(A
, Z32_FLOAT_S8X24_UINT
, Z32_S8_X24_FLOAT
, R
, R
, R
, xx
, FLOAT
, ZF32_X24S8
, TZ
),
143 SX(A
, S8_UINT
, R
, R8
, T
),
144 SX(A
, X24S8_UINT
, G
, G8R24
, T
),
145 SX(A
, S8X24_UINT
, R
, G24R8
, T
),
146 SX(A
, X32_S8X24_UINT
, G
, R32_B24G8
, T
),
148 F3(A
, B5G6R5_UNORM
, B5G6R5_UNORM
, B
, G
, R
, xx
, UNORM
, B5G6R5
, TD
),
149 C4(A
, B5G5R5A1_UNORM
, BGR5_A1_UNORM
, B
, G
, R
, A
, UNORM
, A1B5G5R5
, TD
),
150 F3(A
, B5G5R5X1_UNORM
, BGR5_X1_UNORM
, B
, G
, R
, xx
, UNORM
, A1B5G5R5
, TD
),
151 C4(A
, B4G4R4A4_UNORM
, NONE
, B
, G
, R
, A
, UNORM
, A4B4G4R4
, T
),
152 F3(A
, B4G4R4X4_UNORM
, NONE
, B
, G
, R
, xx
, UNORM
, A4B4G4R4
, T
),
153 F3(A
, R9G9B9E5_FLOAT
, NONE
, R
, G
, B
, xx
, FLOAT
, E5B9G9R9_SHAREDEXP
, T
),
155 C4(A
, R10G10B10A2_UNORM
, RGB10_A2_UNORM
, R
, G
, B
, A
, UNORM
, A2B10G10R10
, ID
),
156 F3(A
, R10G10B10X2_UNORM
, RGB10_A2_UNORM
, R
, G
, B
, xx
, UNORM
, A2B10G10R10
, T
),
157 C4(A
, B10G10R10A2_UNORM
, BGR10_A2_UNORM
, B
, G
, R
, A
, UNORM
, A2B10G10R10
, TB
),
158 F3(A
, B10G10R10X2_UNORM
, BGR10_A2_UNORM
, B
, G
, R
, xx
, UNORM
, A2B10G10R10
, T
),
159 C4(A
, R10G10B10A2_SNORM
, NONE
, R
, G
, B
, A
, SNORM
, A2B10G10R10
, T
),
160 C4(A
, B10G10R10A2_SNORM
, NONE
, B
, G
, R
, A
, SNORM
, A2B10G10R10
, T
),
161 C4(A
, R10G10B10A2_UINT
, RGB10_A2_UINT
, R
, G
, B
, A
, UINT
, A2B10G10R10
, TR
),
162 C4(A
, B10G10R10A2_UINT
, RGB10_A2_UINT
, B
, G
, R
, A
, UINT
, A2B10G10R10
, T
),
164 F3(A
, R11G11B10_FLOAT
, R11G11B10_FLOAT
, R
, G
, B
, xx
, FLOAT
, BF10GF11RF11
, IB
),
166 F3(A
, L8_UNORM
, R8_UNORM
, R
, R
, R
, xx
, UNORM
, R8
, TB
),
167 F3(A
, L8_SRGB
, NONE
, R
, R
, R
, xx
, UNORM
, R8
, T
),
168 F3(A
, L8_SNORM
, R8_SNORM
, R
, R
, R
, xx
, SNORM
, R8
, TC
),
169 I3(A
, L8_SINT
, R8_SINT
, R
, R
, R
, xx
, SINT
, R8
, TR
),
170 I3(A
, L8_UINT
, R8_UINT
, R
, R
, R
, xx
, UINT
, R8
, TR
),
171 F3(A
, L16_UNORM
, R16_UNORM
, R
, R
, R
, xx
, UNORM
, R16
, TC
),
172 F3(A
, L16_SNORM
, R16_SNORM
, R
, R
, R
, xx
, SNORM
, R16
, TC
),
173 F3(A
, L16_FLOAT
, R16_FLOAT
, R
, R
, R
, xx
, FLOAT
, R16
, TB
),
174 I3(A
, L16_SINT
, R16_SINT
, R
, R
, R
, xx
, SINT
, R16
, TR
),
175 I3(A
, L16_UINT
, R16_UINT
, R
, R
, R
, xx
, UINT
, R16
, TR
),
176 F3(A
, L32_FLOAT
, R32_FLOAT
, R
, R
, R
, xx
, FLOAT
, R32
, TB
),
177 I3(A
, L32_SINT
, R32_SINT
, R
, R
, R
, xx
, SINT
, R32
, TR
),
178 I3(A
, L32_UINT
, R32_UINT
, R
, R
, R
, xx
, UINT
, R32
, TR
),
180 C4(A
, I8_UNORM
, R8_UNORM
, R
, R
, R
, R
, UNORM
, R8
, TR
),
181 C4(A
, I8_SNORM
, R8_SNORM
, R
, R
, R
, R
, SNORM
, R8
, TR
),
182 C4(A
, I8_SINT
, R8_SINT
, R
, R
, R
, R
, SINT
, R8
, TR
),
183 C4(A
, I8_UINT
, R8_UINT
, R
, R
, R
, R
, UINT
, R8
, TR
),
184 C4(A
, I16_UNORM
, R16_UNORM
, R
, R
, R
, R
, UNORM
, R16
, TR
),
185 C4(A
, I16_SNORM
, R16_SNORM
, R
, R
, R
, R
, SNORM
, R16
, TR
),
186 C4(A
, I16_FLOAT
, R16_FLOAT
, R
, R
, R
, R
, FLOAT
, R16
, TR
),
187 C4(A
, I16_SINT
, R16_SINT
, R
, R
, R
, R
, SINT
, R16
, TR
),
188 C4(A
, I16_UINT
, R16_UINT
, R
, R
, R
, R
, UINT
, R16
, TR
),
189 C4(A
, I32_FLOAT
, R32_FLOAT
, R
, R
, R
, R
, FLOAT
, R32
, TR
),
190 C4(A
, I32_SINT
, R32_SINT
, R
, R
, R
, R
, SINT
, R32
, TR
),
191 C4(A
, I32_UINT
, R32_UINT
, R
, R
, R
, R
, UINT
, R32
, TR
),
193 A1(A
, A8_UNORM
, A8_UNORM
, xx
, xx
, xx
, R
, UNORM
, R8
, TB
),
194 A1(A
, A8_SNORM
, R8_SNORM
, xx
, xx
, xx
, R
, SNORM
, R8
, T
),
195 A1(A
, A8_SINT
, R8_SINT
, xx
, xx
, xx
, R
, SINT
, R8
, T
),
196 A1(A
, A8_UINT
, R8_UINT
, xx
, xx
, xx
, R
, UINT
, R8
, T
),
197 A1(A
, A16_UNORM
, R16_UNORM
, xx
, xx
, xx
, R
, UNORM
, R16
, T
),
198 A1(A
, A16_SNORM
, R16_SNORM
, xx
, xx
, xx
, R
, SNORM
, R16
, T
),
199 A1(A
, A16_FLOAT
, R16_FLOAT
, xx
, xx
, xx
, R
, FLOAT
, R16
, T
),
200 A1(A
, A16_SINT
, R16_SINT
, xx
, xx
, xx
, R
, SINT
, R16
, T
),
201 A1(A
, A16_UINT
, R16_UINT
, xx
, xx
, xx
, R
, UINT
, R16
, T
),
202 A1(A
, A32_FLOAT
, R32_FLOAT
, xx
, xx
, xx
, R
, FLOAT
, R32
, T
),
203 A1(A
, A32_SINT
, R32_SINT
, xx
, xx
, xx
, R
, SINT
, R32
, T
),
204 A1(A
, A32_UINT
, R32_UINT
, xx
, xx
, xx
, R
, UINT
, R32
, T
),
206 C4(A
, L4A4_UNORM
, NONE
, R
, R
, R
, G
, UNORM
, G4R4
, T
),
207 C4(A
, L8A8_UNORM
, RG8_UNORM
, R
, R
, R
, G
, UNORM
, G8R8
, T
),
208 C4(A
, L8A8_SNORM
, RG8_SNORM
, R
, R
, R
, G
, SNORM
, G8R8
, T
),
209 C4(A
, L8A8_SRGB
, NONE
, R
, R
, R
, G
, UNORM
, G8R8
, T
),
210 C4(A
, L8A8_SINT
, RG8_SINT
, R
, R
, R
, G
, SINT
, G8R8
, T
),
211 C4(A
, L8A8_UINT
, RG8_UINT
, R
, R
, R
, G
, UINT
, G8R8
, T
),
212 C4(A
, L16A16_UNORM
, RG16_UNORM
, R
, R
, R
, G
, UNORM
, R16_G16
, T
),
213 C4(A
, L16A16_SNORM
, RG16_SNORM
, R
, R
, R
, G
, SNORM
, R16_G16
, T
),
214 C4(A
, L16A16_FLOAT
, RG16_FLOAT
, R
, R
, R
, G
, FLOAT
, R16_G16
, T
),
215 C4(A
, L16A16_SINT
, RG16_SINT
, R
, R
, R
, G
, SINT
, R16_G16
, T
),
216 C4(A
, L16A16_UINT
, RG16_UINT
, R
, R
, R
, G
, UINT
, R16_G16
, T
),
217 C4(A
, L32A32_FLOAT
, RG32_FLOAT
, R
, R
, R
, G
, FLOAT
, R32_G32
, T
),
218 C4(A
, L32A32_SINT
, RG32_SINT
, R
, R
, R
, G
, SINT
, R32_G32
, T
),
219 C4(A
, L32A32_UINT
, RG32_UINT
, R
, R
, R
, G
, UINT
, R32_G32
, T
),
221 F3(A
, DXT1_RGB
, NONE
, R
, G
, B
, xx
, UNORM
, DXT1
, T
),
222 F3(A
, DXT1_SRGB
, NONE
, R
, G
, B
, xx
, UNORM
, DXT1
, T
),
223 C4(A
, DXT1_RGBA
, NONE
, R
, G
, B
, A
, UNORM
, DXT1
, T
),
224 C4(A
, DXT1_SRGBA
, NONE
, R
, G
, B
, A
, UNORM
, DXT1
, T
),
225 C4(A
, DXT3_RGBA
, NONE
, R
, G
, B
, A
, UNORM
, DXT23
, T
),
226 C4(A
, DXT3_SRGBA
, NONE
, R
, G
, B
, A
, UNORM
, DXT23
, T
),
227 C4(A
, DXT5_RGBA
, NONE
, R
, G
, B
, A
, UNORM
, DXT45
, T
),
228 C4(A
, DXT5_SRGBA
, NONE
, R
, G
, B
, A
, UNORM
, DXT45
, T
),
230 F1(A
, RGTC1_UNORM
, NONE
, R
, xx
, xx
, xx
, UNORM
, DXN1
, T
),
231 F1(A
, RGTC1_SNORM
, NONE
, R
, xx
, xx
, xx
, SNORM
, DXN1
, T
),
232 F2(A
, RGTC2_UNORM
, NONE
, R
, G
, xx
, xx
, UNORM
, DXN2
, T
),
233 F2(A
, RGTC2_SNORM
, NONE
, R
, G
, xx
, xx
, SNORM
, DXN2
, T
),
234 F3(A
, LATC1_UNORM
, NONE
, R
, R
, R
, xx
, UNORM
, DXN1
, T
),
235 F3(A
, LATC1_SNORM
, NONE
, R
, R
, R
, xx
, SNORM
, DXN1
, T
),
236 C4(A
, LATC2_UNORM
, NONE
, R
, R
, R
, G
, UNORM
, DXN2
, T
),
237 C4(A
, LATC2_SNORM
, NONE
, R
, R
, R
, G
, SNORM
, DXN2
, T
),
239 C4(C
, BPTC_RGBA_UNORM
, NONE
, R
, G
, B
, A
, UNORM
, BC7U
, t
),
240 C4(C
, BPTC_SRGBA
, NONE
, R
, G
, B
, A
, UNORM
, BC7U
, t
),
241 F3(C
, BPTC_RGB_FLOAT
, NONE
, R
, G
, B
, xx
, FLOAT
, BC6H_SF16
, t
),
242 F3(C
, BPTC_RGB_UFLOAT
, NONE
, R
, G
, B
, xx
, FLOAT
, BC6H_UF16
, t
),
244 #if NOUVEAU_DRIVER == 0xc0
245 F3(D
, ETC1_RGB8
, NONE
, R
, G
, B
, xx
, UNORM
, ETC2_RGB
, t
),
246 F3(D
, ETC2_RGB8
, NONE
, R
, G
, B
, xx
, UNORM
, ETC2_RGB
, t
),
247 F3(D
, ETC2_SRGB8
, NONE
, R
, G
, B
, xx
, UNORM
, ETC2_RGB
, t
),
248 C4(D
, ETC2_RGB8A1
, NONE
, R
, G
, B
, A
, UNORM
, ETC2_RGB_PTA
, t
),
249 C4(D
, ETC2_SRGB8A1
, NONE
, R
, G
, B
, A
, UNORM
, ETC2_RGB_PTA
, t
),
250 C4(D
, ETC2_RGBA8
, NONE
, R
, G
, B
, A
, UNORM
, ETC2_RGBA
, t
),
251 C4(D
, ETC2_SRGBA8
, NONE
, R
, G
, B
, A
, UNORM
, ETC2_RGBA
, t
),
252 F1(D
, ETC2_R11_UNORM
, NONE
, R
, xx
, xx
, xx
, UNORM
, EAC
, t
),
253 F1(D
, ETC2_R11_SNORM
, NONE
, R
, xx
, xx
, xx
, SNORM
, EAC
, t
),
254 F2(D
, ETC2_RG11_UNORM
, NONE
, R
, G
, xx
, xx
, UNORM
, EACX2
, t
),
255 F2(D
, ETC2_RG11_SNORM
, NONE
, R
, G
, xx
, xx
, SNORM
, EACX2
, t
),
257 C4(D
, ASTC_4x4
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_4X4
, t
),
258 C4(D
, ASTC_5x4
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_5X4
, t
),
259 C4(D
, ASTC_5x5
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_5X5
, t
),
260 C4(D
, ASTC_6x5
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_6X5
, t
),
261 C4(D
, ASTC_6x6
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_6X6
, t
),
262 C4(D
, ASTC_8x5
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_8X5
, t
),
263 C4(D
, ASTC_8x6
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_8X6
, t
),
264 C4(D
, ASTC_8x8
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_8X8
, t
),
265 C4(D
, ASTC_10x5
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X5
, t
),
266 C4(D
, ASTC_10x6
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X6
, t
),
267 C4(D
, ASTC_10x8
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X8
, t
),
268 C4(D
, ASTC_10x10
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X10
, t
),
269 C4(D
, ASTC_12x10
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_12X10
, t
),
270 C4(D
, ASTC_12x12
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_12X12
, t
),
272 C4(D
, ASTC_4x4_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_4X4
, t
),
273 C4(D
, ASTC_5x4_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_5X4
, t
),
274 C4(D
, ASTC_5x5_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_5X5
, t
),
275 C4(D
, ASTC_6x5_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_6X5
, t
),
276 C4(D
, ASTC_6x6_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_6X6
, t
),
277 C4(D
, ASTC_8x5_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_8X5
, t
),
278 C4(D
, ASTC_8x6_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_8X6
, t
),
279 C4(D
, ASTC_8x8_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_8X8
, t
),
280 C4(D
, ASTC_10x5_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X5
, t
),
281 C4(D
, ASTC_10x6_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X6
, t
),
282 C4(D
, ASTC_10x8_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X8
, t
),
283 C4(D
, ASTC_10x10_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_10X10
, t
),
284 C4(D
, ASTC_12x10_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_12X10
, t
),
285 C4(D
, ASTC_12x12_SRGB
, NONE
, R
, G
, B
, A
, UNORM
, ASTC_2D_12X12
, t
),
288 C4(A
, R32G32B32A32_FLOAT
, RGBA32_FLOAT
, R
, G
, B
, A
, FLOAT
, R32_G32_B32_A32
, IB
),
289 C4(A
, R32G32B32A32_UNORM
, NONE
, R
, G
, B
, A
, UNORM
, R32_G32_B32_A32
, T
),
290 C4(A
, R32G32B32A32_SNORM
, NONE
, R
, G
, B
, A
, SNORM
, R32_G32_B32_A32
, T
),
291 C4(A
, R32G32B32A32_SINT
, RGBA32_SINT
, R
, G
, B
, A
, SINT
, R32_G32_B32_A32
, IR
),
292 C4(A
, R32G32B32A32_UINT
, RGBA32_UINT
, R
, G
, B
, A
, UINT
, R32_G32_B32_A32
, IR
),
293 F3(A
, R32G32B32X32_FLOAT
, RGBX32_FLOAT
, R
, G
, B
, xx
, FLOAT
, R32_G32_B32_A32
, TB
),
294 I3(A
, R32G32B32X32_SINT
, RGBX32_SINT
, R
, G
, B
, xx
, SINT
, R32_G32_B32_A32
, TR
),
295 I3(A
, R32G32B32X32_UINT
, RGBX32_UINT
, R
, G
, B
, xx
, UINT
, R32_G32_B32_A32
, TR
),
297 F3(C
, R32G32B32_FLOAT
, NONE
, R
, G
, B
, xx
, FLOAT
, R32_G32_B32
, t
),
298 I3(C
, R32G32B32_SINT
, NONE
, R
, G
, B
, xx
, SINT
, R32_G32_B32
, t
),
299 I3(C
, R32G32B32_UINT
, NONE
, R
, G
, B
, xx
, UINT
, R32_G32_B32
, t
),
301 F2(A
, R32G32_FLOAT
, RG32_FLOAT
, R
, G
, xx
, xx
, FLOAT
, R32_G32
, IB
),
302 F2(A
, R32G32_UNORM
, NONE
, R
, G
, xx
, xx
, UNORM
, R32_G32
, T
),
303 F2(A
, R32G32_SNORM
, NONE
, R
, G
, xx
, xx
, SNORM
, R32_G32
, T
),
304 I2(A
, R32G32_SINT
, RG32_SINT
, R
, G
, xx
, xx
, SINT
, R32_G32
, IR
),
305 I2(A
, R32G32_UINT
, RG32_UINT
, R
, G
, xx
, xx
, UINT
, R32_G32
, IR
),
307 F1(A
, R32_FLOAT
, R32_FLOAT
, R
, xx
, xx
, xx
, FLOAT
, R32
, IB
),
308 F1(A
, R32_UNORM
, NONE
, R
, xx
, xx
, xx
, UNORM
, R32
, T
),
309 F1(A
, R32_SNORM
, NONE
, R
, xx
, xx
, xx
, SNORM
, R32
, T
),
310 I1(A
, R32_SINT
, R32_SINT
, R
, xx
, xx
, xx
, SINT
, R32
, IR
),
311 I1(A
, R32_UINT
, R32_UINT
, R
, xx
, xx
, xx
, UINT
, R32
, IR
),
313 C4(A
, R16G16B16A16_FLOAT
, RGBA16_FLOAT
, R
, G
, B
, A
, FLOAT
, R16_G16_B16_A16
, IB
),
314 C4(A
, R16G16B16A16_UNORM
, RGBA16_UNORM
, R
, G
, B
, A
, UNORM
, R16_G16_B16_A16
, IC
),
315 C4(A
, R16G16B16A16_SNORM
, RGBA16_SNORM
, R
, G
, B
, A
, SNORM
, R16_G16_B16_A16
, IC
),
316 C4(A
, R16G16B16A16_SINT
, RGBA16_SINT
, R
, G
, B
, A
, SINT
, R16_G16_B16_A16
, IR
),
317 C4(A
, R16G16B16A16_UINT
, RGBA16_UINT
, R
, G
, B
, A
, UINT
, R16_G16_B16_A16
, IR
),
318 F3(A
, R16G16B16X16_FLOAT
, RGBX16_FLOAT
, R
, G
, B
, xx
, FLOAT
, R16_G16_B16_A16
, TB
),
319 F3(A
, R16G16B16X16_UNORM
, RGBA16_UNORM
, R
, G
, B
, xx
, UNORM
, R16_G16_B16_A16
, T
),
320 F3(A
, R16G16B16X16_SNORM
, RGBA16_SNORM
, R
, G
, B
, xx
, SNORM
, R16_G16_B16_A16
, T
),
321 I3(A
, R16G16B16X16_SINT
, RGBA16_SINT
, R
, G
, B
, xx
, SINT
, R16_G16_B16_A16
, TR
),
322 I3(A
, R16G16B16X16_UINT
, RGBA16_UINT
, R
, G
, B
, xx
, UINT
, R16_G16_B16_A16
, TR
),
324 F2(A
, R16G16_FLOAT
, RG16_FLOAT
, R
, G
, xx
, xx
, FLOAT
, R16_G16
, IB
),
325 F2(A
, R16G16_UNORM
, RG16_UNORM
, R
, G
, xx
, xx
, UNORM
, R16_G16
, IC
),
326 F2(A
, R16G16_SNORM
, RG16_SNORM
, R
, G
, xx
, xx
, SNORM
, R16_G16
, IC
),
327 I2(A
, R16G16_SINT
, RG16_SINT
, R
, G
, xx
, xx
, SINT
, R16_G16
, IR
),
328 I2(A
, R16G16_UINT
, RG16_UINT
, R
, G
, xx
, xx
, UINT
, R16_G16
, IR
),
330 F1(A
, R16_FLOAT
, R16_FLOAT
, R
, xx
, xx
, xx
, FLOAT
, R16
, IB
),
331 F1(A
, R16_UNORM
, R16_UNORM
, R
, xx
, xx
, xx
, UNORM
, R16
, IC
),
332 F1(A
, R16_SNORM
, R16_SNORM
, R
, xx
, xx
, xx
, SNORM
, R16
, IC
),
333 I1(A
, R16_SINT
, R16_SINT
, R
, xx
, xx
, xx
, SINT
, R16
, IR
),
334 I1(A
, R16_UINT
, R16_UINT
, R
, xx
, xx
, xx
, UINT
, R16
, IR
),
336 C4(A
, R8G8B8A8_SNORM
, RGBA8_SNORM
, R
, G
, B
, A
, SNORM
, A8B8G8R8
, IC
),
337 C4(A
, R8G8B8A8_SINT
, RGBA8_SINT
, R
, G
, B
, A
, SINT
, A8B8G8R8
, IR
),
338 C4(A
, R8G8B8A8_UINT
, RGBA8_UINT
, R
, G
, B
, A
, UINT
, A8B8G8R8
, IR
),
339 F3(A
, R8G8B8X8_SNORM
, RGBA8_SNORM
, R
, G
, B
, xx
, SNORM
, A8B8G8R8
, T
),
340 I3(A
, R8G8B8X8_SINT
, RGBA8_SINT
, R
, G
, B
, xx
, SINT
, A8B8G8R8
, TR
),
341 I3(A
, R8G8B8X8_UINT
, RGBA8_UINT
, R
, G
, B
, xx
, UINT
, A8B8G8R8
, TR
),
343 F2(A
, R8G8_UNORM
, RG8_UNORM
, R
, G
, xx
, xx
, UNORM
, G8R8
, IB
),
344 F2(A
, R8G8_SNORM
, RG8_SNORM
, R
, G
, xx
, xx
, SNORM
, G8R8
, IC
),
345 I2(A
, R8G8_SINT
, RG8_SINT
, R
, G
, xx
, xx
, SINT
, G8R8
, IR
),
346 I2(A
, R8G8_UINT
, RG8_UINT
, R
, G
, xx
, xx
, UINT
, G8R8
, IR
),
348 F1(A
, R8_UNORM
, R8_UNORM
, R
, xx
, xx
, xx
, UNORM
, R8
, IB
),
349 F1(A
, R8_SNORM
, R8_SNORM
, R
, xx
, xx
, xx
, SNORM
, R8
, IC
),
350 I1(A
, R8_SINT
, R8_SINT
, R
, xx
, xx
, xx
, SINT
, R8
, IR
),
351 I1(A
, R8_UINT
, R8_UINT
, R
, xx
, xx
, xx
, UINT
, R8
, IR
),
353 F3(A
, R8G8_B8G8_UNORM
, NONE
, R
, G
, B
, xx
, UNORM
, G8B8G8R8
, T
),
354 F3(A
, G8R8_B8R8_UNORM
, NONE
, G
, R
, B
, xx
, UNORM
, G8B8G8R8
, T
),
355 F3(A
, G8R8_G8B8_UNORM
, NONE
, R
, G
, B
, xx
, UNORM
, B8G8R8G8
, T
),
356 F3(A
, R8G8_R8B8_UNORM
, NONE
, G
, R
, B
, xx
, UNORM
, B8G8R8G8
, T
),
358 F1(A
, R1_UNORM
, BITMAP
, R
, xx
, xx
, xx
, UNORM
, R1
, T
),
360 C4(A
, R4A4_UNORM
, NONE
, R
, ZERO
, ZERO
, G
, UNORM
, G4R4
, T
),
361 C4(A
, R8A8_UNORM
, NONE
, R
, ZERO
, ZERO
, G
, UNORM
, G8R8
, T
),
362 C4(A
, A4R4_UNORM
, NONE
, G
, ZERO
, ZERO
, R
, UNORM
, G4R4
, T
),
363 C4(A
, A8R8_UNORM
, NONE
, G
, ZERO
, ZERO
, R
, UNORM
, G8R8
, T
),
365 SF(A
, R8SG8SB8UX8U_NORM
, 0, R
, G
, B
, ONE_FLOAT
, SNORM
, SNORM
, UNORM
, UNORM
, A8B8G8R8
, T
),
366 SF(A
, R5SG5SB6U_NORM
, 0, R
, G
, B
, ONE_FLOAT
, SNORM
, SNORM
, UNORM
, UNORM
, B6G5R5
, T
),
369 #if NOUVEAU_DRIVER == 0xc0
370 # define NVXX_3D_VAF_SIZE(s) NVC0_3D_VERTEX_ATTRIB_FORMAT_SIZE_##s
371 # define NVXX_3D_VAF_TYPE(t) NVC0_3D_VERTEX_ATTRIB_FORMAT_TYPE_##t
373 # define NVXX_3D_VAF_SIZE(s) NV50_3D_VERTEX_ARRAY_ATTRIB_FORMAT_##s
374 # define NVXX_3D_VAF_TYPE(t) NV50_3D_VERTEX_ARRAY_ATTRIB_TYPE_##t
377 #define VF_x(pf, type, size, bgra) 0
378 #define VF_A(pf, type, size, bgra) \
379 NVXX_3D_VAF_SIZE(size) | NVXX_3D_VAF_TYPE(type) | (bgra << 31)
380 #define VF(c, pf, type, size, bgra) \
381 [PIPE_FORMAT_##pf] = { \
382 VF_##c(pf, type, size, bgra), \
383 PIPE_BIND_VERTEX_BUFFER \
386 #if NOUVEAU_DRIVER == 0xc0
387 const struct nvc0_vertex_format nvc0_vertex_format
[PIPE_FORMAT_COUNT
] =
389 const struct nv50_vertex_format nv50_vertex_format
[PIPE_FORMAT_COUNT
] =
392 VF(A
, B8G8R8A8_UNORM
, UNORM
, 8_8_8_8
, 1),
393 VF(A
, R8G8B8A8_UNORM
, UNORM
, 8_8_8_8
, 0),
395 VF(A
, R10G10B10A2_UNORM
, UNORM
, 10_10_10_2
, 0),
396 VF(A
, B10G10R10A2_UNORM
, UNORM
, 10_10_10_2
, 1),
397 VF(A
, R10G10B10A2_SNORM
, SNORM
, 10_10_10_2
, 0),
398 VF(A
, B10G10R10A2_SNORM
, SNORM
, 10_10_10_2
, 1),
399 VF(A
, R10G10B10A2_UINT
, UINT
, 10_10_10_2
, 0),
400 VF(A
, B10G10R10A2_UINT
, UINT
, 10_10_10_2
, 1),
402 VF(A
, R11G11B10_FLOAT
, FLOAT
, 11_11_10
, 0),
404 VF(A
, R32G32B32A32_FLOAT
, FLOAT
, 32_32_32_32
, 0),
405 VF(A
, R32G32B32A32_UNORM
, UNORM
, 32_32_32_32
, 0),
406 VF(A
, R32G32B32A32_SNORM
, SNORM
, 32_32_32_32
, 0),
407 VF(A
, R32G32B32A32_SINT
, SINT
, 32_32_32_32
, 0),
408 VF(A
, R32G32B32A32_UINT
, UINT
, 32_32_32_32
, 0),
410 VF(A
, R32G32_FLOAT
, FLOAT
, 32_32
, 0),
411 VF(A
, R32G32_UNORM
, UNORM
, 32_32
, 0),
412 VF(A
, R32G32_SNORM
, SNORM
, 32_32
, 0),
413 VF(A
, R32G32_SINT
, SINT
, 32_32
, 0),
414 VF(A
, R32G32_UINT
, UINT
, 32_32
, 0),
416 VF(A
, R32_FLOAT
, FLOAT
, 32, 0),
417 VF(A
, R32_UNORM
, UNORM
, 32, 0),
418 VF(A
, R32_SNORM
, SNORM
, 32, 0),
419 VF(A
, R32_SINT
, SINT
, 32, 0),
420 VF(A
, R32_UINT
, UINT
, 32, 0),
422 VF(A
, R16G16B16A16_FLOAT
, FLOAT
, 16_16_16_16
, 0),
423 VF(A
, R16G16B16A16_UNORM
, UNORM
, 16_16_16_16
, 0),
424 VF(A
, R16G16B16A16_SNORM
, SNORM
, 16_16_16_16
, 0),
425 VF(A
, R16G16B16A16_SINT
, SINT
, 16_16_16_16
, 0),
426 VF(A
, R16G16B16A16_UINT
, UINT
, 16_16_16_16
, 0),
428 VF(A
, R16G16_FLOAT
, FLOAT
, 16_16
, 0),
429 VF(A
, R16G16_UNORM
, UNORM
, 16_16
, 0),
430 VF(A
, R16G16_SNORM
, SNORM
, 16_16
, 0),
431 VF(A
, R16G16_SINT
, SINT
, 16_16
, 0),
432 VF(A
, R16G16_UINT
, UINT
, 16_16
, 0),
434 VF(A
, R16_FLOAT
, FLOAT
, 16, 0),
435 VF(A
, R16_UNORM
, UNORM
, 16, 0),
436 VF(A
, R16_SNORM
, SNORM
, 16, 0),
437 VF(A
, R16_SINT
, SINT
, 16, 0),
438 VF(A
, R16_UINT
, UINT
, 16, 0),
440 VF(A
, R8G8B8A8_SNORM
, SNORM
, 8_8_8_8
, 0),
441 VF(A
, R8G8B8A8_SINT
, SINT
, 8_8_8_8
, 0),
442 VF(A
, R8G8B8A8_UINT
, UINT
, 8_8_8_8
, 0),
444 VF(A
, R8G8_UNORM
, UNORM
, 8_8
, 0),
445 VF(A
, R8G8_SNORM
, SNORM
, 8_8
, 0),
446 VF(A
, R8G8_SINT
, SINT
, 8_8
, 0),
447 VF(A
, R8G8_UINT
, UINT
, 8_8
, 0),
449 VF(A
, R8_UNORM
, UNORM
, 8, 0),
450 VF(A
, R8_SNORM
, SNORM
, 8, 0),
451 VF(A
, R8_SINT
, SINT
, 8, 0),
452 VF(A
, R8_UINT
, UINT
, 8, 0),
454 VF(A
, R32G32B32A32_SSCALED
, SSCALED
, 32_32_32_32
, 0),
455 VF(A
, R32G32B32A32_USCALED
, USCALED
, 32_32_32_32
, 0),
456 VF(A
, R32G32B32_FLOAT
, FLOAT
, 32_32_32
, 0),
457 VF(A
, R32G32B32_UNORM
, UNORM
, 32_32_32
, 0),
458 VF(A
, R32G32B32_SNORM
, SNORM
, 32_32_32
, 0),
459 VF(A
, R32G32B32_SINT
, SINT
, 32_32_32
, 0),
460 VF(A
, R32G32B32_UINT
, UINT
, 32_32_32
, 0),
461 VF(A
, R32G32B32_SSCALED
, SSCALED
, 32_32_32
, 0),
462 VF(A
, R32G32B32_USCALED
, USCALED
, 32_32_32
, 0),
463 VF(A
, R32G32_SSCALED
, SSCALED
, 32_32
, 0),
464 VF(A
, R32G32_USCALED
, USCALED
, 32_32
, 0),
465 VF(A
, R32_SSCALED
, SSCALED
, 32, 0),
466 VF(A
, R32_USCALED
, USCALED
, 32, 0),
468 VF(A
, R16G16B16A16_SSCALED
, SSCALED
, 16_16_16_16
, 0),
469 VF(A
, R16G16B16A16_USCALED
, USCALED
, 16_16_16_16
, 0),
470 VF(A
, R16G16B16_FLOAT
, FLOAT
, 16_16_16
, 0),
471 VF(A
, R16G16B16_UNORM
, UNORM
, 16_16_16
, 0),
472 VF(A
, R16G16B16_SNORM
, SNORM
, 16_16_16
, 0),
473 VF(A
, R16G16B16_SINT
, SINT
, 16_16_16
, 0),
474 VF(A
, R16G16B16_UINT
, UINT
, 16_16_16
, 0),
475 VF(A
, R16G16B16_SSCALED
, SSCALED
, 16_16_16
, 0),
476 VF(A
, R16G16B16_USCALED
, USCALED
, 16_16_16
, 0),
477 VF(A
, R16G16_SSCALED
, SSCALED
, 16_16
, 0),
478 VF(A
, R16G16_USCALED
, USCALED
, 16_16
, 0),
479 VF(A
, R16_SSCALED
, SSCALED
, 16, 0),
480 VF(A
, R16_USCALED
, USCALED
, 16, 0),
482 VF(A
, R10G10B10A2_USCALED
, USCALED
, 10_10_10_2
, 0),
483 VF(A
, R10G10B10A2_SSCALED
, SSCALED
, 10_10_10_2
, 0),
484 VF(A
, B10G10R10A2_USCALED
, USCALED
, 10_10_10_2
, 1),
485 VF(A
, B10G10R10A2_SSCALED
, SSCALED
, 10_10_10_2
, 1),
487 VF(A
, R8G8B8A8_SSCALED
, SSCALED
, 8_8_8_8
, 0),
488 VF(A
, R8G8B8A8_USCALED
, USCALED
, 8_8_8_8
, 0),
489 VF(A
, R8G8B8_UNORM
, UNORM
, 8_8_8
, 0),
490 VF(A
, R8G8B8_SNORM
, SNORM
, 8_8_8
, 0),
491 VF(A
, R8G8B8_SINT
, SINT
, 8_8_8
, 0),
492 VF(A
, R8G8B8_UINT
, UINT
, 8_8_8
, 0),
493 VF(A
, R8G8B8_SSCALED
, SSCALED
, 8_8_8
, 0),
494 VF(A
, R8G8B8_USCALED
, USCALED
, 8_8_8
, 0),
495 VF(A
, R8G8_SSCALED
, SSCALED
, 8_8
, 0),
496 VF(A
, R8G8_USCALED
, USCALED
, 8_8
, 0),
497 VF(A
, R8_SSCALED
, SSCALED
, 8, 0),
498 VF(A
, R8_USCALED
, USCALED
, 8, 0),
500 /* FIXED types: not supported natively, converted on VBO push */
502 VF(x
, R32G32B32A32_FIXED
, xx
, xx
, xx
),
503 VF(x
, R32G32B32_FIXED
, xx
, xx
, xx
),
504 VF(x
, R32G32_FIXED
, xx
, xx
, xx
),
505 VF(x
, R32_FIXED
, xx
, xx
, xx
),
507 VF(x
, R64G64B64A64_FLOAT
, xx
, xx
, xx
),
508 VF(x
, R64G64B64_FLOAT
, xx
, xx
, xx
),
509 VF(x
, R64G64_FLOAT
, xx
, xx
, xx
),
510 VF(x
, R64_FLOAT
, xx
, xx
, xx
),