Path: blob/21.2-virgl/src/gallium/drivers/nouveau/nv30/nv30_format.c
4574 views
/*1* Copyright 2012 Red Hat Inc.2*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*21* Authors: Ben Skeggs22*23*/2425#include "nv30/nv30-40_3d.xml.h"26#include "nv30/nv30_context.h"27#include "nv30/nv30_format.h"2829#define NV30_3D_RT_FORMAT_COLOR_X1R5G5B5 23031#define NV30_3D_TEX_FORMAT_FORMAT_A16L16 NV30_3D_TEX_FORMAT_FORMAT_HILO1632#define NV30_3D_TEX_FORMAT_FORMAT_A16L16_RECT NV30_3D_TEX_FORMAT_FORMAT_HILO16_RECT33#define NV30_3D_TEX_FORMAT_FORMAT_RGBA16F 0x00004a0034#define NV30_3D_TEX_FORMAT_FORMAT_RGBA16F_RECT NV30_3D_TEX_FORMAT_FORMAT_RGBA16F35#define NV30_3D_TEX_FORMAT_FORMAT_RGBA32F 0x00004b0036#define NV30_3D_TEX_FORMAT_FORMAT_RGBA32F_RECT NV30_3D_TEX_FORMAT_FORMAT_RGBA32F37#define NV30_3D_TEX_FORMAT_FORMAT_R32F 0x00004c0038#define NV30_3D_TEX_FORMAT_FORMAT_R32F_RECT NV30_3D_TEX_FORMAT_FORMAT_R32F39#define NV30_3D_TEX_FORMAT_FORMAT_DXT1_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT140#define NV30_3D_TEX_FORMAT_FORMAT_DXT3_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT341#define NV30_3D_TEX_FORMAT_FORMAT_DXT5_RECT NV30_3D_TEX_FORMAT_FORMAT_DXT542#define NV30_3D_TEX_FORMAT_FORMAT_RG16F 0xdeadcafe43#define NV30_3D_TEX_FORMAT_FORMAT_RG16F_RECT 0xdeadcafe4445#define NV40_3D_TEX_FORMAT_FORMAT_R32F 0x00001c0046#define NV40_3D_TEX_FORMAT_FORMAT_RG16F 0x00001f004748#define ____ 049#define S___ PIPE_BIND_SAMPLER_VIEW50#define _R__ PIPE_BIND_RENDER_TARGET51#define _B__ PIPE_BIND_RENDER_TARGET | PIPE_BIND_BLENDABLE52#define _D__ PIPE_BIND_SCANOUT | PIPE_BIND_DISPLAY_TARGET | _B__53#define _Z__ PIPE_BIND_DEPTH_STENCIL54#define __V_ PIPE_BIND_VERTEX_BUFFER55#define SR__ (S___ | _R__)56#define SB__ (S___ | _B__)57#define SD__ (S___ | _D__)58#define SZ__ (S___ | _Z__)59#define S_V_ (S___ | __V_)60#define SRV_ (SR__ | __V_)61#define SBV_ (SB__ | __V_)6263#define _(a,b) [PIPE_FORMAT_##a] = { \64.bindings = (b), \65}66const struct nv30_format_info67nv30_format_info_table[PIPE_FORMAT_COUNT] = {68_(L8_UNORM , S___),69_(L8_SNORM , S___),70_(L8_SRGB , S___),71_(I8_UNORM , S___),72_(I8_SNORM , S___),73_(A8_UNORM , S___),74_(A8_SNORM , S___),75_(R8_UNORM , S_V_),76_(R8_SNORM , S___),77_(B5G5R5X1_UNORM , SD__),78_(B5G5R5A1_UNORM , S___),79_(B4G4R4X4_UNORM , S___),80_(B4G4R4A4_UNORM , S___),81_(B5G6R5_UNORM , SD__),82_(BGRX8888_UNORM , SD__),83_(BGRX8888_SRGB , S___),84_(BGRA8888_UNORM , SD__),85_(BGRA8888_SRGB , S___),86_(R8G8B8A8_UNORM , __V_),87_(RGBA8888_SNORM , S___),88_(DXT1_RGB , S___),89_(DXT1_SRGB , S___),90_(DXT1_RGBA , S___),91_(DXT1_SRGBA , S___),92_(DXT3_RGBA , S___),93_(DXT3_SRGBA , S___),94_(DXT5_RGBA , S___),95_(DXT5_SRGBA , S___),96_(L8A8_UNORM , S___),97_(L8A8_SRGB , S___),98_(R8G8_UNORM , S_V_),99_(R8G8_SNORM , S___),100_(R8G8B8_UNORM , __V_),101_(Z16_UNORM , SZ__),102_(X8Z24_UNORM , SZ__),103_(S8_UINT_Z24_UNORM , SZ__),104_(L16_UNORM , S___),105_(L16_SNORM , S___),106_(I16_UNORM , S___),107_(I16_SNORM , S___),108_(A16_UNORM , S___),109_(A16_SNORM , S___),110_(R16_UNORM , S___),111_(R16_SNORM , S_V_),112_(R16G16_SNORM , __V_),113_(R16G16B16_SNORM , __V_),114_(R16G16B16A16_SNORM , __V_),115_(R8G8B8A8_USCALED , __V_),116_(R16_FLOAT , __V_),117_(R16G16_FLOAT , __V_), //S_V_),118_(R16G16B16_FLOAT , __V_),119_(R16G16B16A16_FLOAT , __V_), //SBV_),120_(R16_SSCALED , __V_),121_(R16G16_SSCALED , __V_),122_(R16G16B16_SSCALED , __V_),123_(R16G16B16A16_SSCALED, __V_),124_(R32_FLOAT , __V_), //SRV_),125_(R32G32_FLOAT , __V_),126_(R32G32B32_FLOAT , __V_),127_(R32G32B32A32_FLOAT , __V_), //SRV_),128};129#undef _130#undef ____131132#define R_(a,b) [PIPE_FORMAT_##a] = { \133.hw = NV30_3D_RT_FORMAT_COLOR_##b, \134}135#define Z_(a,b) [PIPE_FORMAT_##a] = { \136.hw = NV30_3D_RT_FORMAT_ZETA_##b, \137}138const struct nv30_format139nv30_format_table[PIPE_FORMAT_COUNT] = {140R_(B5G5R5X1_UNORM , X1R5G5B5 ),141R_(B5G6R5_UNORM , R5G6B5 ),142R_(BGRX8888_UNORM , X8R8G8B8 ),143R_(BGRA8888_UNORM , A8R8G8B8 ),144Z_(Z16_UNORM , Z16 ),145Z_(X8Z24_UNORM , Z24S8 ),146Z_(S8_UINT_Z24_UNORM , Z24S8 ),147R_(R16G16B16A16_FLOAT, A16B16G16R16_FLOAT),148R_(R32G32B32A32_FLOAT, A32B32G32R32_FLOAT),149R_(R32_FLOAT , R32_FLOAT ),150};151152#define _(a,b,c) [PIPE_FORMAT_##a] = { \153.hw = NV30_3D_VTXFMT_TYPE_##b | ((c) << NV30_3D_VTXFMT_SIZE__SHIFT) \154}155const struct nv30_vtxfmt156nv30_vtxfmt_table[PIPE_FORMAT_COUNT] = {157_(R8_UNORM , U8_UNORM , 1),158_(R8G8_UNORM , U8_UNORM , 2),159_(R8G8B8_UNORM , U8_UNORM , 3),160_(R8G8B8A8_UNORM , U8_UNORM , 4),161_(R8G8B8A8_USCALED , U8_USCALED , 4),162_(R16_SNORM , V16_SNORM , 1),163_(R16G16_SNORM , V16_SNORM , 2),164_(R16G16B16_SNORM , V16_SNORM , 3),165_(R16G16B16A16_SNORM , V16_SNORM , 4),166_(R16_SSCALED , V16_SSCALED, 1),167_(R16G16_SSCALED , V16_SSCALED, 2),168_(R16G16B16_SSCALED , V16_SSCALED, 3),169_(R16G16B16A16_SSCALED, V16_SSCALED, 4),170_(R16_FLOAT , V16_FLOAT , 1),171_(R16G16_FLOAT , V16_FLOAT , 2),172_(R16G16B16_FLOAT , V16_FLOAT , 3),173_(R16G16B16A16_FLOAT , V16_FLOAT , 4),174_(R32_FLOAT , V32_FLOAT , 1),175_(R32G32_FLOAT , V32_FLOAT , 2),176_(R32G32B32_FLOAT , V32_FLOAT , 3),177_(R32G32B32A32_FLOAT , V32_FLOAT , 4),178};179#undef _180181#define SWZ_OUT_0 0182#define SWZ_OUT_1 1183#define SWZ_OUT_C 2184185#define SWZ_SRC_0 3186#define SWZ_SRC_1 2187#define SWZ_SRC_2 1188#define SWZ_SRC_3 0189#define SWZ_SRC_x 0190191#define NONE 0x00000000192#define SRGB 0x00700000193194#define ____ 0x00000000195#define SSSS 0xf0000000196197#define _(a,b,c,d,e,f,g,h,i,j,k,l,m) [PIPE_FORMAT_##a] = { \198.nv30 = NV30_3D_TEX_FORMAT_FORMAT_##b, \199.nv30_rect = NV30_3D_TEX_FORMAT_FORMAT_##b##_RECT, \200.nv40 = NV40_3D_TEX_FORMAT_FORMAT_##b, \201.swz[0] = { SWZ_OUT_##d, SWZ_SRC_##h }, \202.swz[1] = { SWZ_OUT_##e, SWZ_SRC_##i }, \203.swz[2] = { SWZ_OUT_##f, SWZ_SRC_##j }, \204.swz[3] = { SWZ_OUT_##g, SWZ_SRC_##k }, \205.swz[4] = { SWZ_OUT_0, SWZ_SRC_x }, \206.swz[5] = { SWZ_OUT_1, SWZ_SRC_x }, \207.swizzle = (c) * 0x00010000, \208.wrap = (l), \209.filter = (m), \210}211const struct nv30_texfmt212nv30_texfmt_table[PIPE_FORMAT_COUNT] = {213_(L8_UNORM , L8 , 0, C, C, C, 1, 0, 0, 0, x, NONE, ____),214_(L8_SNORM , L8 , 0, C, C, C, 1, 0, 0, 0, x, NONE, SSSS),215_(L8_SRGB , L8 , 0, C, C, C, 1, 0, 0, 0, x, SRGB, ____),216_(I8_UNORM , L8 , 0, C, C, C, C, 0, 0, 0, 0, NONE, ____),217_(I8_SNORM , L8 , 0, C, C, C, C, 0, 0, 0, 0, NONE, SSSS),218_(A8_UNORM , L8 , 0, 0, 0, 0, C, x, x, x, 0, NONE, ____),219_(A8_SNORM , L8 , 0, 0, 0, 0, C, x, x, x, 0, NONE, SSSS),220_(R8_UNORM , L8 , 0, C, 0, 0, 1, 0, x, x, x, NONE, ____),221_(R8_SNORM , L8 , 0, C, 0, 0, 1, 0, x, x, x, NONE, SSSS),222_(B5G5R5X1_UNORM , A1R5G5B5, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),223_(B5G5R5A1_UNORM , A1R5G5B5, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),224_(B4G4R4X4_UNORM , A4R4G4B4, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),225_(B4G4R4A4_UNORM , A4R4G4B4, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),226_(B5G6R5_UNORM , R5G6B5 , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),227_(BGRX8888_UNORM , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),228_(BGRX8888_SRGB , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____),229_(BGRA8888_UNORM , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),230_(BGRA8888_SRGB , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),231_(RGBA8888_SNORM , A8R8G8B8, 0, C, C, C, C, 0, 1, 2, 3, NONE, SSSS),232_(DXT1_RGB , DXT1 , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),233_(DXT1_SRGB , DXT1 , 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____),234_(DXT1_RGBA , DXT1 , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),235_(DXT1_SRGBA , DXT1 , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),236_(DXT3_RGBA , DXT3 , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),237_(DXT3_SRGBA , DXT3 , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),238_(DXT5_RGBA , DXT5 , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),239_(DXT5_SRGBA , DXT5 , 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),240_(L8A8_UNORM , A8L8 , 0, C, C, C, C, 0, 0, 0, 3, NONE, ____),241_(L8A8_SRGB , A8L8 , 0, C, C, C, C, 0, 0, 0, 3, SRGB, ____),242_(R8G8_UNORM , A8L8 , 0, C, C, 0, 1, 0, 3, x, x, NONE, ____),243_(R8G8_SNORM , A8L8 , 0, C, C, 0, 1, 0, 3, x, x, NONE, SSSS),244_(Z16_UNORM , Z16 , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____),245_(X8Z24_UNORM , Z24 , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____),246_(S8_UINT_Z24_UNORM , Z24 , 0, C, C, C, 1, 3, 3, 3, x, NONE, ____),247_(L16_UNORM , A16 , 0, C, C, C, 1, 1, 1, 1, 1, NONE, ____),248_(L16_SNORM , A16 , 0, C, C, C, 1, 1, 1, 1, 1, NONE, SSSS),249_(I16_UNORM , A16 , 0, C, C, C, C, 1, 1, 1, 1, NONE, ____),250_(I16_SNORM , A16 , 0, C, C, C, C, 1, 1, 1, 1, NONE, SSSS),251_(A16_UNORM , A16 , 0, 0, 0, 0, C, 1, 1, 1, 1, NONE, ____),252_(A16_SNORM , A16 , 0, 0, 0, 0, C, 1, 1, 1, 1, NONE, SSSS),253_(R16_UNORM , A16 , 0, C, 0, 0, 1, 1, 1, 1, 1, NONE, ____),254_(R16_SNORM , A16 , 0, C, 0, 0, 1, 1, 1, 1, 1, NONE, SSSS),255_(R16G16_FLOAT , RG16F , 0, C, C, 0, 1, 2, 1, 0, 3, NONE, ____),256_(R16G16B16A16_FLOAT, RGBA16F , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),257_(R32_FLOAT , R32F , 0, C, 0, 0, 1, 2, 1, 0, 3, NONE, ____),258_(R32G32B32A32_FLOAT, RGBA32F , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),259};260#undef _261262263