Path: blob/21.2-virgl/src/gallium/drivers/nouveau/nv50/nv50_formats.c
4574 views
/*1* Copyright 2010 Christoph Bumiller2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice shall be included in11* all copies or substantial portions of the Software.12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL16* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR17* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,18* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR19* OTHER DEALINGS IN THE SOFTWARE.20*/2122#if NOUVEAU_DRIVER == 0xc023# include "nvc0/nvc0_screen.h"24# include "nvc0/nvc0_3d.xml.h"25# include "nvc0/gm107_texture.xml.h"26#else27# include "nv50/nv50_screen.h"28# include "nv50/nv50_3d.xml.h"29#endif30#include "nv50/g80_texture.xml.h"31#include "nv50/g80_defs.xml.h"3233#include "pipe/p_defines.h"3435/* Abbreviated usage masks:36* T: texturing37* R: render target38* B: render target, blendable39* C: render target (color), blendable only on nvc040* D: scanout/display target, blendable41* Z: depth/stencil42* I: image / surface, implies T43*/44#define U_T PIPE_BIND_SAMPLER_VIEW45#define U_I PIPE_BIND_SHADER_BUFFER | PIPE_BIND_SHADER_IMAGE | PIPE_BIND_COMPUTE_RESOURCE46#define U_TR PIPE_BIND_RENDER_TARGET | U_T47#define U_IR U_TR | U_I48#define U_TB PIPE_BIND_BLENDABLE | U_TR49#define U_IB PIPE_BIND_BLENDABLE | U_IR50#define U_TD PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET | U_TB51#define U_TZ PIPE_BIND_DEPTH_STENCIL | U_T52#define U_ID U_TD | U_I53#if NOUVEAU_DRIVER == 0xc054# define U_TC U_TB55# define U_IC U_IB56# define U_t U_T57#else58# define U_TC U_TR59# define U_IC U_IR60# define U_t 061#endif6263#define G80_ZETA_FORMAT_NONE 064#define G80_SURFACE_FORMAT_NONE 06566#define SF_A(sz) G80_TIC_0_COMPONENTS_SIZES_##sz67#define SF_B(sz) G200_TIC_0_COMPONENTS_SIZES_##sz68#define SF_C(sz) GF100_TIC_0_COMPONENTS_SIZES_##sz69#define SF_D(sz) GM107_TIC2_0_COMPONENTS_SIZES_##sz70#define SF(c, pf, sf, r, g, b, a, t0, t1, t2, t3, sz, u) \71[PIPE_FORMAT_##pf] = { \72sf, { \73SF_##c(sz), \74G80_TIC_TYPE_##t0, \75G80_TIC_TYPE_##t1, \76G80_TIC_TYPE_##t2, \77G80_TIC_TYPE_##t3, \78G80_TIC_SOURCE_##r, \79G80_TIC_SOURCE_##g, \80G80_TIC_SOURCE_##b, \81G80_TIC_SOURCE_##a, \82}, U_##u \83}8485#define C4(c, p, n, r, g, b, a, t, s, u) \86SF(c, p, G80_SURFACE_FORMAT_##n, r, g, b, a, t, t, t, t, s, u)8788#define ZX(c, p, n, r, g, b, a, t, s, u) \89SF(c, p, G80_ZETA_FORMAT_##n, \90r, g, b, ONE_FLOAT, t, UINT, UINT, UINT, s, u)91#define ZS(c, p, n, r, g, b, a, t, s, u) \92SF(c, p, G80_ZETA_FORMAT_##n, \93r, g, b, ONE_FLOAT, t, UINT, UINT, UINT, s, u)94#define SZ(c, p, n, r, g, b, a, t, s, u) \95SF(c, p, G80_ZETA_FORMAT_##n, \96r, g, b, ONE_FLOAT, UINT, t, UINT, UINT, s, u)97#define SX(c, p, r, s, u) \98SF(c, p, G80_ZETA_FORMAT_NONE, \99r, r, r, r, UINT, UINT, UINT, UINT, s, u)100101#define F3(c, p, n, r, g, b, a, t, s, u) \102C4(c, p, n, r, g, b, ONE_FLOAT, t, s, u)103#define I3(c, p, n, r, g, b, a, t, s, u) \104C4(c, p, n, r, g, b, ONE_INT, t, s, u)105106#define F2(c, p, n, r, g, b, a, t, s, u) \107C4(c, p, n, r, g, ZERO, ONE_FLOAT, t, s, u)108#define I2(c, p, n, r, g, b, a, t, s, u) \109C4(c, p, n, r, g, ZERO, ONE_INT, t, s, u)110111#define F1(c, p, n, r, g, b, a, t, s, u) \112C4(c, p, n, r, ZERO, ZERO, ONE_FLOAT, t, s, u)113#define I1(c, p, n, r, g, b, a, t, s, u) \114C4(c, p, n, r, ZERO, ZERO, ONE_INT, t, s, u)115116#define A1(c, p, n, r, g, b, a, t, s, u) \117C4(c, p, n, ZERO, ZERO, ZERO, a, t, s, u)118119#if NOUVEAU_DRIVER == 0xc0120const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =121#else122const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =123#endif124{125C4(A, B8G8R8A8_UNORM, BGRA8_UNORM, B, G, R, A, UNORM, A8B8G8R8, ID),126F3(A, B8G8R8X8_UNORM, BGRX8_UNORM, B, G, R, xx, UNORM, A8B8G8R8, TD),127C4(A, B8G8R8A8_SRGB, BGRA8_SRGB, B, G, R, A, UNORM, A8B8G8R8, TD),128F3(A, B8G8R8X8_SRGB, BGRX8_SRGB, B, G, R, xx, UNORM, A8B8G8R8, TD),129C4(A, R8G8B8A8_UNORM, RGBA8_UNORM, R, G, B, A, UNORM, A8B8G8R8, IB),130F3(A, R8G8B8X8_UNORM, RGBX8_UNORM, R, G, B, xx, UNORM, A8B8G8R8, TB),131C4(A, R8G8B8A8_SRGB, RGBA8_SRGB, R, G, B, A, UNORM, A8B8G8R8, TB),132F3(A, R8G8B8X8_SRGB, RGBX8_SRGB, R, G, B, xx, UNORM, A8B8G8R8, TB),133134ZX(B, Z16_UNORM, Z16_UNORM, R, R, R, xx, UNORM, Z16, TZ),135ZX(A, Z32_FLOAT, Z32_FLOAT, R, R, R, xx, FLOAT, ZF32, TZ),136ZX(A, Z24X8_UNORM, Z24_X8_UNORM, R, R, R, xx, UNORM, X8Z24, TZ),137SZ(A, X8Z24_UNORM, S8_Z24_UNORM, G, G, G, xx, UNORM, Z24S8, TZ),138ZS(A, Z24_UNORM_S8_UINT, Z24_S8_UNORM, R, R, R, xx, UNORM, S8Z24, TZ),139SZ(A, S8_UINT_Z24_UNORM, S8_Z24_UNORM, G, G, G, xx, UNORM, Z24S8, TZ),140ZS(A, Z32_FLOAT_S8X24_UINT, Z32_S8_X24_FLOAT, R, R, R, xx, FLOAT, ZF32_X24S8, TZ),141142SX(A, S8_UINT, R, R8, T),143SX(A, X24S8_UINT, G, G8R24, T),144SX(A, S8X24_UINT, R, G24R8, T),145SX(A, X32_S8X24_UINT, G, R32_B24G8, T),146147F3(A, B5G6R5_UNORM, B5G6R5_UNORM, B, G, R, xx, UNORM, B5G6R5, TD),148C4(A, B5G5R5A1_UNORM, BGR5_A1_UNORM, B, G, R, A, UNORM, A1B5G5R5, TD),149F3(A, B5G5R5X1_UNORM, BGR5_X1_UNORM, B, G, R, xx, UNORM, A1B5G5R5, TD),150C4(A, B4G4R4A4_UNORM, NONE, B, G, R, A, UNORM, A4B4G4R4, T),151F3(A, B4G4R4X4_UNORM, NONE, B, G, R, xx, UNORM, A4B4G4R4, T),152F3(A, R9G9B9E5_FLOAT, NONE, R, G, B, xx, FLOAT, E5B9G9R9_SHAREDEXP, T),153154C4(A, R10G10B10A2_UNORM, RGB10_A2_UNORM, R, G, B, A, UNORM, A2B10G10R10, ID),155F3(A, R10G10B10X2_UNORM, RGB10_A2_UNORM, R, G, B, xx, UNORM, A2B10G10R10, T),156C4(A, B10G10R10A2_UNORM, BGR10_A2_UNORM, B, G, R, A, UNORM, A2B10G10R10, TB),157F3(A, B10G10R10X2_UNORM, BGR10_A2_UNORM, B, G, R, xx, UNORM, A2B10G10R10, T),158C4(A, R10G10B10A2_SNORM, NONE, R, G, B, A, SNORM, A2B10G10R10, T),159C4(A, B10G10R10A2_SNORM, NONE, B, G, R, A, SNORM, A2B10G10R10, T),160C4(A, R10G10B10A2_UINT, RGB10_A2_UINT, R, G, B, A, UINT, A2B10G10R10, TR),161C4(A, B10G10R10A2_UINT, RGB10_A2_UINT, B, G, R, A, UINT, A2B10G10R10, T),162163F3(A, R11G11B10_FLOAT, R11G11B10_FLOAT, R, G, B, xx, FLOAT, BF10GF11RF11, IB),164165F3(A, L8_UNORM, R8_UNORM, R, R, R, xx, UNORM, R8, TB),166F3(A, L8_SRGB, NONE, R, R, R, xx, UNORM, R8, T),167F3(A, L8_SNORM, R8_SNORM, R, R, R, xx, SNORM, R8, TC),168I3(A, L8_SINT, R8_SINT, R, R, R, xx, SINT, R8, TR),169I3(A, L8_UINT, R8_UINT, R, R, R, xx, UINT, R8, TR),170F3(A, L16_UNORM, R16_UNORM, R, R, R, xx, UNORM, R16, TC),171F3(A, L16_SNORM, R16_SNORM, R, R, R, xx, SNORM, R16, TC),172F3(A, L16_FLOAT, R16_FLOAT, R, R, R, xx, FLOAT, R16, TB),173I3(A, L16_SINT, R16_SINT, R, R, R, xx, SINT, R16, TR),174I3(A, L16_UINT, R16_UINT, R, R, R, xx, UINT, R16, TR),175F3(A, L32_FLOAT, R32_FLOAT, R, R, R, xx, FLOAT, R32, TB),176I3(A, L32_SINT, R32_SINT, R, R, R, xx, SINT, R32, TR),177I3(A, L32_UINT, R32_UINT, R, R, R, xx, UINT, R32, TR),178179C4(A, I8_UNORM, R8_UNORM, R, R, R, R, UNORM, R8, TR),180C4(A, I8_SNORM, R8_SNORM, R, R, R, R, SNORM, R8, TR),181C4(A, I8_SINT, R8_SINT, R, R, R, R, SINT, R8, TR),182C4(A, I8_UINT, R8_UINT, R, R, R, R, UINT, R8, TR),183C4(A, I16_UNORM, R16_UNORM, R, R, R, R, UNORM, R16, TR),184C4(A, I16_SNORM, R16_SNORM, R, R, R, R, SNORM, R16, TR),185C4(A, I16_FLOAT, R16_FLOAT, R, R, R, R, FLOAT, R16, TR),186C4(A, I16_SINT, R16_SINT, R, R, R, R, SINT, R16, TR),187C4(A, I16_UINT, R16_UINT, R, R, R, R, UINT, R16, TR),188C4(A, I32_FLOAT, R32_FLOAT, R, R, R, R, FLOAT, R32, TR),189C4(A, I32_SINT, R32_SINT, R, R, R, R, SINT, R32, TR),190C4(A, I32_UINT, R32_UINT, R, R, R, R, UINT, R32, TR),191192A1(A, A8_UNORM, A8_UNORM, xx, xx, xx, R, UNORM, R8, TB),193A1(A, A8_SNORM, R8_SNORM, xx, xx, xx, R, SNORM, R8, T),194A1(A, A8_SINT, R8_SINT, xx, xx, xx, R, SINT, R8, T),195A1(A, A8_UINT, R8_UINT, xx, xx, xx, R, UINT, R8, T),196A1(A, A16_UNORM, R16_UNORM, xx, xx, xx, R, UNORM, R16, T),197A1(A, A16_SNORM, R16_SNORM, xx, xx, xx, R, SNORM, R16, T),198A1(A, A16_FLOAT, R16_FLOAT, xx, xx, xx, R, FLOAT, R16, T),199A1(A, A16_SINT, R16_SINT, xx, xx, xx, R, SINT, R16, T),200A1(A, A16_UINT, R16_UINT, xx, xx, xx, R, UINT, R16, T),201A1(A, A32_FLOAT, R32_FLOAT, xx, xx, xx, R, FLOAT, R32, T),202A1(A, A32_SINT, R32_SINT, xx, xx, xx, R, SINT, R32, T),203A1(A, A32_UINT, R32_UINT, xx, xx, xx, R, UINT, R32, T),204205C4(A, L4A4_UNORM, NONE, R, R, R, G, UNORM, G4R4, T),206C4(A, L8A8_UNORM, RG8_UNORM, R, R, R, G, UNORM, G8R8, T),207C4(A, L8A8_SNORM, RG8_SNORM, R, R, R, G, SNORM, G8R8, T),208C4(A, L8A8_SRGB, NONE, R, R, R, G, UNORM, G8R8, T),209C4(A, L8A8_SINT, RG8_SINT, R, R, R, G, SINT, G8R8, T),210C4(A, L8A8_UINT, RG8_UINT, R, R, R, G, UINT, G8R8, T),211C4(A, L16A16_UNORM, RG16_UNORM, R, R, R, G, UNORM, R16_G16, T),212C4(A, L16A16_SNORM, RG16_SNORM, R, R, R, G, SNORM, R16_G16, T),213C4(A, L16A16_FLOAT, RG16_FLOAT, R, R, R, G, FLOAT, R16_G16, T),214C4(A, L16A16_SINT, RG16_SINT, R, R, R, G, SINT, R16_G16, T),215C4(A, L16A16_UINT, RG16_UINT, R, R, R, G, UINT, R16_G16, T),216C4(A, L32A32_FLOAT, RG32_FLOAT, R, R, R, G, FLOAT, R32_G32, T),217C4(A, L32A32_SINT, RG32_SINT, R, R, R, G, SINT, R32_G32, T),218C4(A, L32A32_UINT, RG32_UINT, R, R, R, G, UINT, R32_G32, T),219220F3(A, DXT1_RGB, NONE, R, G, B, xx, UNORM, DXT1, T),221F3(A, DXT1_SRGB, NONE, R, G, B, xx, UNORM, DXT1, T),222C4(A, DXT1_RGBA, NONE, R, G, B, A, UNORM, DXT1, T),223C4(A, DXT1_SRGBA, NONE, R, G, B, A, UNORM, DXT1, T),224C4(A, DXT3_RGBA, NONE, R, G, B, A, UNORM, DXT23, T),225C4(A, DXT3_SRGBA, NONE, R, G, B, A, UNORM, DXT23, T),226C4(A, DXT5_RGBA, NONE, R, G, B, A, UNORM, DXT45, T),227C4(A, DXT5_SRGBA, NONE, R, G, B, A, UNORM, DXT45, T),228229F1(A, RGTC1_UNORM, NONE, R, xx, xx, xx, UNORM, DXN1, T),230F1(A, RGTC1_SNORM, NONE, R, xx, xx, xx, SNORM, DXN1, T),231F2(A, RGTC2_UNORM, NONE, R, G, xx, xx, UNORM, DXN2, T),232F2(A, RGTC2_SNORM, NONE, R, G, xx, xx, SNORM, DXN2, T),233F3(A, LATC1_UNORM, NONE, R, R, R, xx, UNORM, DXN1, T),234F3(A, LATC1_SNORM, NONE, R, R, R, xx, SNORM, DXN1, T),235C4(A, LATC2_UNORM, NONE, R, R, R, G, UNORM, DXN2, T),236C4(A, LATC2_SNORM, NONE, R, R, R, G, SNORM, DXN2, T),237238C4(C, BPTC_RGBA_UNORM, NONE, R, G, B, A, UNORM, BC7U, t),239C4(C, BPTC_SRGBA, NONE, R, G, B, A, UNORM, BC7U, t),240F3(C, BPTC_RGB_FLOAT, NONE, R, G, B, xx, FLOAT, BC6H_SF16, t),241F3(C, BPTC_RGB_UFLOAT, NONE, R, G, B, xx, FLOAT, BC6H_UF16, t),242243#if NOUVEAU_DRIVER == 0xc0244F3(D, ETC1_RGB8, NONE, R, G, B, xx, UNORM, ETC2_RGB, t),245F3(D, ETC2_RGB8, NONE, R, G, B, xx, UNORM, ETC2_RGB, t),246F3(D, ETC2_SRGB8, NONE, R, G, B, xx, UNORM, ETC2_RGB, t),247C4(D, ETC2_RGB8A1, NONE, R, G, B, A, UNORM, ETC2_RGB_PTA, t),248C4(D, ETC2_SRGB8A1, NONE, R, G, B, A, UNORM, ETC2_RGB_PTA, t),249C4(D, ETC2_RGBA8, NONE, R, G, B, A, UNORM, ETC2_RGBA, t),250C4(D, ETC2_SRGBA8, NONE, R, G, B, A, UNORM, ETC2_RGBA, t),251F1(D, ETC2_R11_UNORM, NONE, R, xx, xx, xx, UNORM, EAC, t),252F1(D, ETC2_R11_SNORM, NONE, R, xx, xx, xx, SNORM, EAC, t),253F2(D, ETC2_RG11_UNORM, NONE, R, G, xx, xx, UNORM, EACX2, t),254F2(D, ETC2_RG11_SNORM, NONE, R, G, xx, xx, SNORM, EACX2, t),255256C4(D, ASTC_4x4, NONE, R, G, B, A, UNORM, ASTC_2D_4X4, t),257C4(D, ASTC_5x4, NONE, R, G, B, A, UNORM, ASTC_2D_5X4, t),258C4(D, ASTC_5x5, NONE, R, G, B, A, UNORM, ASTC_2D_5X5, t),259C4(D, ASTC_6x5, NONE, R, G, B, A, UNORM, ASTC_2D_6X5, t),260C4(D, ASTC_6x6, NONE, R, G, B, A, UNORM, ASTC_2D_6X6, t),261C4(D, ASTC_8x5, NONE, R, G, B, A, UNORM, ASTC_2D_8X5, t),262C4(D, ASTC_8x6, NONE, R, G, B, A, UNORM, ASTC_2D_8X6, t),263C4(D, ASTC_8x8, NONE, R, G, B, A, UNORM, ASTC_2D_8X8, t),264C4(D, ASTC_10x5, NONE, R, G, B, A, UNORM, ASTC_2D_10X5, t),265C4(D, ASTC_10x6, NONE, R, G, B, A, UNORM, ASTC_2D_10X6, t),266C4(D, ASTC_10x8, NONE, R, G, B, A, UNORM, ASTC_2D_10X8, t),267C4(D, ASTC_10x10, NONE, R, G, B, A, UNORM, ASTC_2D_10X10, t),268C4(D, ASTC_12x10, NONE, R, G, B, A, UNORM, ASTC_2D_12X10, t),269C4(D, ASTC_12x12, NONE, R, G, B, A, UNORM, ASTC_2D_12X12, t),270271C4(D, ASTC_4x4_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_4X4, t),272C4(D, ASTC_5x4_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_5X4, t),273C4(D, ASTC_5x5_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_5X5, t),274C4(D, ASTC_6x5_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_6X5, t),275C4(D, ASTC_6x6_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_6X6, t),276C4(D, ASTC_8x5_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_8X5, t),277C4(D, ASTC_8x6_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_8X6, t),278C4(D, ASTC_8x8_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_8X8, t),279C4(D, ASTC_10x5_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_10X5, t),280C4(D, ASTC_10x6_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_10X6, t),281C4(D, ASTC_10x8_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_10X8, t),282C4(D, ASTC_10x10_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_10X10, t),283C4(D, ASTC_12x10_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_12X10, t),284C4(D, ASTC_12x12_SRGB, NONE, R, G, B, A, UNORM, ASTC_2D_12X12, t),285#endif286287C4(A, R32G32B32A32_FLOAT, RGBA32_FLOAT, R, G, B, A, FLOAT, R32_G32_B32_A32, IB),288C4(A, R32G32B32A32_UNORM, NONE, R, G, B, A, UNORM, R32_G32_B32_A32, T),289C4(A, R32G32B32A32_SNORM, NONE, R, G, B, A, SNORM, R32_G32_B32_A32, T),290C4(A, R32G32B32A32_SINT, RGBA32_SINT, R, G, B, A, SINT, R32_G32_B32_A32, IR),291C4(A, R32G32B32A32_UINT, RGBA32_UINT, R, G, B, A, UINT, R32_G32_B32_A32, IR),292F3(A, R32G32B32X32_FLOAT, RGBX32_FLOAT, R, G, B, xx, FLOAT, R32_G32_B32_A32, TB),293I3(A, R32G32B32X32_SINT, RGBX32_SINT, R, G, B, xx, SINT, R32_G32_B32_A32, TR),294I3(A, R32G32B32X32_UINT, RGBX32_UINT, R, G, B, xx, UINT, R32_G32_B32_A32, TR),295296F3(C, R32G32B32_FLOAT, NONE, R, G, B, xx, FLOAT, R32_G32_B32, t),297I3(C, R32G32B32_SINT, NONE, R, G, B, xx, SINT, R32_G32_B32, t),298I3(C, R32G32B32_UINT, NONE, R, G, B, xx, UINT, R32_G32_B32, t),299300F2(A, R32G32_FLOAT, RG32_FLOAT, R, G, xx, xx, FLOAT, R32_G32, IB),301F2(A, R32G32_UNORM, NONE, R, G, xx, xx, UNORM, R32_G32, T),302F2(A, R32G32_SNORM, NONE, R, G, xx, xx, SNORM, R32_G32, T),303I2(A, R32G32_SINT, RG32_SINT, R, G, xx, xx, SINT, R32_G32, IR),304I2(A, R32G32_UINT, RG32_UINT, R, G, xx, xx, UINT, R32_G32, IR),305306F1(A, R32_FLOAT, R32_FLOAT, R, xx, xx, xx, FLOAT, R32, IB),307F1(A, R32_UNORM, NONE, R, xx, xx, xx, UNORM, R32, T),308F1(A, R32_SNORM, NONE, R, xx, xx, xx, SNORM, R32, T),309I1(A, R32_SINT, R32_SINT, R, xx, xx, xx, SINT, R32, IR),310I1(A, R32_UINT, R32_UINT, R, xx, xx, xx, UINT, R32, IR),311312C4(A, R16G16B16A16_FLOAT, RGBA16_FLOAT, R, G, B, A, FLOAT, R16_G16_B16_A16, IB),313C4(A, R16G16B16A16_UNORM, RGBA16_UNORM, R, G, B, A, UNORM, R16_G16_B16_A16, IC),314C4(A, R16G16B16A16_SNORM, RGBA16_SNORM, R, G, B, A, SNORM, R16_G16_B16_A16, IC),315C4(A, R16G16B16A16_SINT, RGBA16_SINT, R, G, B, A, SINT, R16_G16_B16_A16, IR),316C4(A, R16G16B16A16_UINT, RGBA16_UINT, R, G, B, A, UINT, R16_G16_B16_A16, IR),317F3(A, R16G16B16X16_FLOAT, RGBX16_FLOAT, R, G, B, xx, FLOAT, R16_G16_B16_A16, TB),318F3(A, R16G16B16X16_UNORM, RGBA16_UNORM, R, G, B, xx, UNORM, R16_G16_B16_A16, T),319F3(A, R16G16B16X16_SNORM, RGBA16_SNORM, R, G, B, xx, SNORM, R16_G16_B16_A16, T),320I3(A, R16G16B16X16_SINT, RGBA16_SINT, R, G, B, xx, SINT, R16_G16_B16_A16, TR),321I3(A, R16G16B16X16_UINT, RGBA16_UINT, R, G, B, xx, UINT, R16_G16_B16_A16, TR),322323F2(A, R16G16_FLOAT, RG16_FLOAT, R, G, xx, xx, FLOAT, R16_G16, IB),324F2(A, R16G16_UNORM, RG16_UNORM, R, G, xx, xx, UNORM, R16_G16, IC),325F2(A, R16G16_SNORM, RG16_SNORM, R, G, xx, xx, SNORM, R16_G16, IC),326I2(A, R16G16_SINT, RG16_SINT, R, G, xx, xx, SINT, R16_G16, IR),327I2(A, R16G16_UINT, RG16_UINT, R, G, xx, xx, UINT, R16_G16, IR),328329F1(A, R16_FLOAT, R16_FLOAT, R, xx, xx, xx, FLOAT, R16, IB),330F1(A, R16_UNORM, R16_UNORM, R, xx, xx, xx, UNORM, R16, IC),331F1(A, R16_SNORM, R16_SNORM, R, xx, xx, xx, SNORM, R16, IC),332I1(A, R16_SINT, R16_SINT, R, xx, xx, xx, SINT, R16, IR),333I1(A, R16_UINT, R16_UINT, R, xx, xx, xx, UINT, R16, IR),334335C4(A, R8G8B8A8_SNORM, RGBA8_SNORM, R, G, B, A, SNORM, A8B8G8R8, IC),336C4(A, R8G8B8A8_SINT, RGBA8_SINT, R, G, B, A, SINT, A8B8G8R8, IR),337C4(A, R8G8B8A8_UINT, RGBA8_UINT, R, G, B, A, UINT, A8B8G8R8, IR),338F3(A, R8G8B8X8_SNORM, RGBA8_SNORM, R, G, B, xx, SNORM, A8B8G8R8, T),339I3(A, R8G8B8X8_SINT, RGBA8_SINT, R, G, B, xx, SINT, A8B8G8R8, TR),340I3(A, R8G8B8X8_UINT, RGBA8_UINT, R, G, B, xx, UINT, A8B8G8R8, TR),341342F2(A, R8G8_UNORM, RG8_UNORM, R, G, xx, xx, UNORM, G8R8, IB),343F2(A, R8G8_SNORM, RG8_SNORM, R, G, xx, xx, SNORM, G8R8, IC),344I2(A, R8G8_SINT, RG8_SINT, R, G, xx, xx, SINT, G8R8, IR),345I2(A, R8G8_UINT, RG8_UINT, R, G, xx, xx, UINT, G8R8, IR),346347F1(A, R8_UNORM, R8_UNORM, R, xx, xx, xx, UNORM, R8, IB),348F1(A, R8_SNORM, R8_SNORM, R, xx, xx, xx, SNORM, R8, IC),349I1(A, R8_SINT, R8_SINT, R, xx, xx, xx, SINT, R8, IR),350I1(A, R8_UINT, R8_UINT, R, xx, xx, xx, UINT, R8, IR),351352F3(A, R8G8_B8G8_UNORM, NONE, R, G, B, xx, UNORM, G8B8G8R8, T),353F3(A, G8R8_B8R8_UNORM, NONE, G, R, B, xx, UNORM, G8B8G8R8, T),354F3(A, G8R8_G8B8_UNORM, NONE, R, G, B, xx, UNORM, B8G8R8G8, T),355F3(A, R8G8_R8B8_UNORM, NONE, G, R, B, xx, UNORM, B8G8R8G8, T),356357F1(A, R1_UNORM, BITMAP, R, xx, xx, xx, UNORM, R1, T),358359C4(A, R4A4_UNORM, NONE, R, ZERO, ZERO, G, UNORM, G4R4, T),360C4(A, R8A8_UNORM, NONE, R, ZERO, ZERO, G, UNORM, G8R8, T),361C4(A, A4R4_UNORM, NONE, G, ZERO, ZERO, R, UNORM, G4R4, T),362C4(A, A8R8_UNORM, NONE, G, ZERO, ZERO, R, UNORM, G8R8, T),363364SF(A, R8SG8SB8UX8U_NORM, 0, R, G, B, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, A8B8G8R8, T),365SF(A, R5SG5SB6U_NORM, 0, R, G, B, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, B6G5R5, T),366};367368#if NOUVEAU_DRIVER == 0xc0369# define NVXX_3D_VAF_SIZE(s) NVC0_3D_VERTEX_ATTRIB_FORMAT_SIZE_##s370# define NVXX_3D_VAF_TYPE(t) NVC0_3D_VERTEX_ATTRIB_FORMAT_TYPE_##t371#else372# define NVXX_3D_VAF_SIZE(s) NV50_3D_VERTEX_ARRAY_ATTRIB_FORMAT_##s373# define NVXX_3D_VAF_TYPE(t) NV50_3D_VERTEX_ARRAY_ATTRIB_TYPE_##t374#endif375376#define VF_x(pf, type, size, bgra) 0377#define VF_A(pf, type, size, bgra) \378NVXX_3D_VAF_SIZE(size) | NVXX_3D_VAF_TYPE(type) | (bgra << 31)379#define VF(c, pf, type, size, bgra) \380[PIPE_FORMAT_##pf] = { \381VF_##c(pf, type, size, bgra), \382PIPE_BIND_VERTEX_BUFFER \383}384385#if NOUVEAU_DRIVER == 0xc0386const struct nvc0_vertex_format nvc0_vertex_format[PIPE_FORMAT_COUNT] =387#else388const struct nv50_vertex_format nv50_vertex_format[PIPE_FORMAT_COUNT] =389#endif390{391VF(A, B8G8R8A8_UNORM, UNORM, 8_8_8_8, 1),392VF(A, R8G8B8A8_UNORM, UNORM, 8_8_8_8, 0),393394VF(A, R10G10B10A2_UNORM, UNORM, 10_10_10_2, 0),395VF(A, B10G10R10A2_UNORM, UNORM, 10_10_10_2, 1),396VF(A, R10G10B10A2_SNORM, SNORM, 10_10_10_2, 0),397VF(A, B10G10R10A2_SNORM, SNORM, 10_10_10_2, 1),398VF(A, R10G10B10A2_UINT, UINT, 10_10_10_2, 0),399VF(A, B10G10R10A2_UINT, UINT, 10_10_10_2, 1),400401VF(A, R11G11B10_FLOAT, FLOAT, 11_11_10, 0),402403VF(A, R32G32B32A32_FLOAT, FLOAT, 32_32_32_32, 0),404VF(A, R32G32B32A32_UNORM, UNORM, 32_32_32_32, 0),405VF(A, R32G32B32A32_SNORM, SNORM, 32_32_32_32, 0),406VF(A, R32G32B32A32_SINT, SINT, 32_32_32_32, 0),407VF(A, R32G32B32A32_UINT, UINT, 32_32_32_32, 0),408409VF(A, R32G32_FLOAT, FLOAT, 32_32, 0),410VF(A, R32G32_UNORM, UNORM, 32_32, 0),411VF(A, R32G32_SNORM, SNORM, 32_32, 0),412VF(A, R32G32_SINT, SINT, 32_32, 0),413VF(A, R32G32_UINT, UINT, 32_32, 0),414415VF(A, R32_FLOAT, FLOAT, 32, 0),416VF(A, R32_UNORM, UNORM, 32, 0),417VF(A, R32_SNORM, SNORM, 32, 0),418VF(A, R32_SINT, SINT, 32, 0),419VF(A, R32_UINT, UINT, 32, 0),420421VF(A, R16G16B16A16_FLOAT, FLOAT, 16_16_16_16, 0),422VF(A, R16G16B16A16_UNORM, UNORM, 16_16_16_16, 0),423VF(A, R16G16B16A16_SNORM, SNORM, 16_16_16_16, 0),424VF(A, R16G16B16A16_SINT, SINT, 16_16_16_16, 0),425VF(A, R16G16B16A16_UINT, UINT, 16_16_16_16, 0),426427VF(A, R16G16_FLOAT, FLOAT, 16_16, 0),428VF(A, R16G16_UNORM, UNORM, 16_16, 0),429VF(A, R16G16_SNORM, SNORM, 16_16, 0),430VF(A, R16G16_SINT, SINT, 16_16, 0),431VF(A, R16G16_UINT, UINT, 16_16, 0),432433VF(A, R16_FLOAT, FLOAT, 16, 0),434VF(A, R16_UNORM, UNORM, 16, 0),435VF(A, R16_SNORM, SNORM, 16, 0),436VF(A, R16_SINT, SINT, 16, 0),437VF(A, R16_UINT, UINT, 16, 0),438439VF(A, R8G8B8A8_SNORM, SNORM, 8_8_8_8, 0),440VF(A, R8G8B8A8_SINT, SINT, 8_8_8_8, 0),441VF(A, R8G8B8A8_UINT, UINT, 8_8_8_8, 0),442443VF(A, R8G8_UNORM, UNORM, 8_8, 0),444VF(A, R8G8_SNORM, SNORM, 8_8, 0),445VF(A, R8G8_SINT, SINT, 8_8, 0),446VF(A, R8G8_UINT, UINT, 8_8, 0),447448VF(A, R8_UNORM, UNORM, 8, 0),449VF(A, R8_SNORM, SNORM, 8, 0),450VF(A, R8_SINT, SINT, 8, 0),451VF(A, R8_UINT, UINT, 8, 0),452453VF(A, R32G32B32A32_SSCALED, SSCALED, 32_32_32_32, 0),454VF(A, R32G32B32A32_USCALED, USCALED, 32_32_32_32, 0),455VF(A, R32G32B32_FLOAT, FLOAT, 32_32_32, 0),456VF(A, R32G32B32_UNORM, UNORM, 32_32_32, 0),457VF(A, R32G32B32_SNORM, SNORM, 32_32_32, 0),458VF(A, R32G32B32_SINT, SINT, 32_32_32, 0),459VF(A, R32G32B32_UINT, UINT, 32_32_32, 0),460VF(A, R32G32B32_SSCALED, SSCALED, 32_32_32, 0),461VF(A, R32G32B32_USCALED, USCALED, 32_32_32, 0),462VF(A, R32G32_SSCALED, SSCALED, 32_32, 0),463VF(A, R32G32_USCALED, USCALED, 32_32, 0),464VF(A, R32_SSCALED, SSCALED, 32, 0),465VF(A, R32_USCALED, USCALED, 32, 0),466467VF(A, R16G16B16A16_SSCALED, SSCALED, 16_16_16_16, 0),468VF(A, R16G16B16A16_USCALED, USCALED, 16_16_16_16, 0),469VF(A, R16G16B16_FLOAT, FLOAT, 16_16_16, 0),470VF(A, R16G16B16_UNORM, UNORM, 16_16_16, 0),471VF(A, R16G16B16_SNORM, SNORM, 16_16_16, 0),472VF(A, R16G16B16_SINT, SINT, 16_16_16, 0),473VF(A, R16G16B16_UINT, UINT, 16_16_16, 0),474VF(A, R16G16B16_SSCALED, SSCALED, 16_16_16, 0),475VF(A, R16G16B16_USCALED, USCALED, 16_16_16, 0),476VF(A, R16G16_SSCALED, SSCALED, 16_16, 0),477VF(A, R16G16_USCALED, USCALED, 16_16, 0),478VF(A, R16_SSCALED, SSCALED, 16, 0),479VF(A, R16_USCALED, USCALED, 16, 0),480481VF(A, R10G10B10A2_USCALED, USCALED, 10_10_10_2, 0),482VF(A, R10G10B10A2_SSCALED, SSCALED, 10_10_10_2, 0),483VF(A, B10G10R10A2_USCALED, USCALED, 10_10_10_2, 1),484VF(A, B10G10R10A2_SSCALED, SSCALED, 10_10_10_2, 1),485486VF(A, R8G8B8A8_SSCALED, SSCALED, 8_8_8_8, 0),487VF(A, R8G8B8A8_USCALED, USCALED, 8_8_8_8, 0),488VF(A, R8G8B8_UNORM, UNORM, 8_8_8, 0),489VF(A, R8G8B8_SNORM, SNORM, 8_8_8, 0),490VF(A, R8G8B8_SINT, SINT, 8_8_8, 0),491VF(A, R8G8B8_UINT, UINT, 8_8_8, 0),492VF(A, R8G8B8_SSCALED, SSCALED, 8_8_8, 0),493VF(A, R8G8B8_USCALED, USCALED, 8_8_8, 0),494VF(A, R8G8_SSCALED, SSCALED, 8_8, 0),495VF(A, R8G8_USCALED, USCALED, 8_8, 0),496VF(A, R8_SSCALED, SSCALED, 8, 0),497VF(A, R8_USCALED, USCALED, 8, 0),498499/* FIXED types: not supported natively, converted on VBO push */500501VF(x, R32G32B32A32_FIXED, xx, xx, xx),502VF(x, R32G32B32_FIXED, xx, xx, xx),503VF(x, R32G32_FIXED, xx, xx, xx),504VF(x, R32_FIXED, xx, xx, xx),505506VF(x, R64G64B64A64_FLOAT, xx, xx, xx),507VF(x, R64G64B64_FLOAT, xx, xx, xx),508VF(x, R64G64_FLOAT, xx, xx, xx),509VF(x, R64_FLOAT, xx, xx, xx),510};511512513