Path: blob/21.2-virgl/src/gallium/drivers/freedreno/a4xx/fd4_format.c
4574 views
/*1* Copyright (C) 2014 Rob Clark <[email protected]>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 (including the next11* paragraph) shall be included in all copies or substantial portions of the12* Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,19* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE20* SOFTWARE.21*22* Authors:23* Rob Clark <[email protected]>24*/2526#include "pipe/p_defines.h"27#include "util/format/u_format.h"2829#include "fd4_format.h"3031/* Specifies the table of all the formats and their features. Also supplies32* the helpers that look up various data in those tables.33*/3435struct fd4_format {36enum a4xx_vtx_fmt vtx;37enum a4xx_tex_fmt tex;38enum a4xx_color_fmt rb;39enum a3xx_color_swap swap;40boolean present;41};4243/* vertex + texture */44#define VT(pipe, fmt, rbfmt, swapfmt) \45[PIPE_FORMAT_##pipe] = {.present = 1, \46.vtx = VFMT4_##fmt, \47.tex = TFMT4_##fmt, \48.rb = RB4_##rbfmt, \49.swap = swapfmt}5051/* texture-only */52#define _T(pipe, fmt, rbfmt, swapfmt) \53[PIPE_FORMAT_##pipe] = {.present = 1, \54.vtx = VFMT4_NONE, \55.tex = TFMT4_##fmt, \56.rb = RB4_##rbfmt, \57.swap = swapfmt}5859/* vertex-only */60#define V_(pipe, fmt, rbfmt, swapfmt) \61[PIPE_FORMAT_##pipe] = {.present = 1, \62.vtx = VFMT4_##fmt, \63.tex = TFMT4_NONE, \64.rb = RB4_##rbfmt, \65.swap = swapfmt}6667/* clang-format off */68static struct fd4_format formats[PIPE_FORMAT_COUNT] = {69/* 8-bit */70VT(R8_UNORM, 8_UNORM, R8_UNORM, WZYX),71VT(R8_SNORM, 8_SNORM, R8_SNORM, WZYX),72VT(R8_UINT, 8_UINT, R8_UINT, WZYX),73VT(R8_SINT, 8_SINT, R8_SINT, WZYX),74V_(R8_USCALED, 8_UINT, NONE, WZYX),75V_(R8_SSCALED, 8_SINT, NONE, WZYX),7677_T(A8_UNORM, 8_UNORM, A8_UNORM, WZYX),78_T(L8_UNORM, 8_UNORM, R8_UNORM, WZYX),79_T(I8_UNORM, 8_UNORM, NONE, WZYX),8081_T(A8_UINT, 8_UINT, NONE, WZYX),82_T(A8_SINT, 8_SINT, NONE, WZYX),83_T(L8_UINT, 8_UINT, NONE, WZYX),84_T(L8_SINT, 8_SINT, NONE, WZYX),85_T(I8_UINT, 8_UINT, NONE, WZYX),86_T(I8_SINT, 8_SINT, NONE, WZYX),8788_T(S8_UINT, 8_UINT, R8_UNORM, WZYX),8990/* 16-bit */91VT(R16_UNORM, 16_UNORM, R16_UNORM, WZYX),92VT(R16_SNORM, 16_SNORM, R16_SNORM, WZYX),93VT(R16_UINT, 16_UINT, R16_UINT, WZYX),94VT(R16_SINT, 16_SINT, R16_SINT, WZYX),95V_(R16_USCALED, 16_UINT, NONE, WZYX),96V_(R16_SSCALED, 16_SINT, NONE, WZYX),97VT(R16_FLOAT, 16_FLOAT, R16_FLOAT, WZYX),9899_T(A16_UNORM, 16_UNORM, NONE, WZYX),100_T(A16_SNORM, 16_SNORM, NONE, WZYX),101_T(A16_UINT, 16_UINT, NONE, WZYX),102_T(A16_SINT, 16_SINT, NONE, WZYX),103_T(L16_UNORM, 16_UNORM, NONE, WZYX),104_T(L16_SNORM, 16_SNORM, NONE, WZYX),105_T(L16_UINT, 16_UINT, NONE, WZYX),106_T(L16_SINT, 16_SINT, NONE, WZYX),107_T(I16_UNORM, 16_UNORM, NONE, WZYX),108_T(I16_SNORM, 16_SNORM, NONE, WZYX),109_T(I16_UINT, 16_UINT, NONE, WZYX),110_T(I16_SINT, 16_SINT, NONE, WZYX),111112VT(R8G8_UNORM, 8_8_UNORM, R8G8_UNORM, WZYX),113VT(R8G8_SNORM, 8_8_SNORM, R8G8_SNORM, WZYX),114VT(R8G8_UINT, 8_8_UINT, R8G8_UINT, WZYX),115VT(R8G8_SINT, 8_8_SINT, R8G8_SINT, WZYX),116V_(R8G8_USCALED, 8_8_UINT, NONE, WZYX),117V_(R8G8_SSCALED, 8_8_SINT, NONE, WZYX),118119_T(L8A8_UINT, 8_8_UINT, NONE, WZYX),120_T(L8A8_SINT, 8_8_SINT, NONE, WZYX),121122_T(B5G6R5_UNORM, 5_6_5_UNORM, R5G6B5_UNORM, WXYZ),123_T(B5G5R5A1_UNORM, 5_5_5_1_UNORM, R5G5B5A1_UNORM, WXYZ),124_T(B5G5R5X1_UNORM, 5_5_5_1_UNORM, R5G5B5A1_UNORM, WXYZ),125_T(B4G4R4A4_UNORM, 4_4_4_4_UNORM, R4G4B4A4_UNORM, WXYZ),126127/* 24-bit */128V_(R8G8B8_UNORM, 8_8_8_UNORM, NONE, WZYX),129V_(R8G8B8_SNORM, 8_8_8_SNORM, NONE, WZYX),130V_(R8G8B8_UINT, 8_8_8_UINT, NONE, WZYX),131V_(R8G8B8_SINT, 8_8_8_SINT, NONE, WZYX),132V_(R8G8B8_USCALED, 8_8_8_UINT, NONE, WZYX),133V_(R8G8B8_SSCALED, 8_8_8_SINT, NONE, WZYX),134135/* 32-bit */136VT(R32_UINT, 32_UINT, R32_UINT, WZYX),137VT(R32_SINT, 32_SINT, R32_SINT, WZYX),138V_(R32_USCALED, 32_UINT, NONE, WZYX),139V_(R32_SSCALED, 32_SINT, NONE, WZYX),140VT(R32_FLOAT, 32_FLOAT, R32_FLOAT,WZYX),141V_(R32_FIXED, 32_FIXED, NONE, WZYX),142143_T(A32_UINT, 32_UINT, NONE, WZYX),144_T(A32_SINT, 32_SINT, NONE, WZYX),145_T(L32_UINT, 32_UINT, NONE, WZYX),146_T(L32_SINT, 32_SINT, NONE, WZYX),147_T(I32_UINT, 32_UINT, NONE, WZYX),148_T(I32_SINT, 32_SINT, NONE, WZYX),149150VT(R16G16_UNORM, 16_16_UNORM, R16G16_UNORM, WZYX),151VT(R16G16_SNORM, 16_16_SNORM, R16G16_SNORM, WZYX),152VT(R16G16_UINT, 16_16_UINT, R16G16_UINT, WZYX),153VT(R16G16_SINT, 16_16_SINT, R16G16_SINT, WZYX),154V_(R16G16_USCALED, 16_16_UINT, NONE, WZYX),155V_(R16G16_SSCALED, 16_16_SINT, NONE, WZYX),156VT(R16G16_FLOAT, 16_16_FLOAT, R16G16_FLOAT, WZYX),157158_T(L16A16_UNORM, 16_16_UNORM, NONE, WZYX),159_T(L16A16_SNORM, 16_16_SNORM, NONE, WZYX),160_T(L16A16_UINT, 16_16_UINT, NONE, WZYX),161_T(L16A16_SINT, 16_16_SINT, NONE, WZYX),162163VT(R8G8B8A8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),164_T(R8G8B8X8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),165_T(R8G8B8A8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),166_T(R8G8B8X8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),167VT(R8G8B8A8_SNORM, 8_8_8_8_SNORM, R8G8B8A8_SNORM, WZYX),168VT(R8G8B8A8_UINT, 8_8_8_8_UINT, R8G8B8A8_UINT, WZYX),169VT(R8G8B8A8_SINT, 8_8_8_8_SINT, R8G8B8A8_SINT, WZYX),170V_(R8G8B8A8_USCALED, 8_8_8_8_UINT, NONE, WZYX),171V_(R8G8B8A8_SSCALED, 8_8_8_8_SINT, NONE, WZYX),172173VT(B8G8R8A8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),174_T(B8G8R8X8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),175VT(B8G8R8A8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),176_T(B8G8R8X8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),177178VT(A8B8G8R8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),179_T(X8B8G8R8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),180_T(A8B8G8R8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),181_T(X8B8G8R8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),182183VT(A8R8G8B8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),184_T(X8R8G8B8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),185_T(A8R8G8B8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),186_T(X8R8G8B8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),187188VT(R10G10B10A2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WZYX),189VT(B10G10R10A2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WXYZ),190_T(B10G10R10X2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WXYZ),191V_(R10G10B10A2_SNORM, 10_10_10_2_SNORM, NONE, WZYX),192V_(B10G10R10A2_SNORM, 10_10_10_2_SNORM, NONE, WXYZ),193VT(R10G10B10A2_UINT, 10_10_10_2_UINT, R10G10B10A2_UINT, WZYX),194VT(B10G10R10A2_UINT, 10_10_10_2_UINT, R10G10B10A2_UINT, WXYZ),195V_(R10G10B10A2_USCALED, 10_10_10_2_UINT, NONE, WZYX),196V_(B10G10R10A2_USCALED, 10_10_10_2_UINT, NONE, WXYZ),197V_(R10G10B10A2_SSCALED, 10_10_10_2_SINT, NONE, WZYX),198V_(B10G10R10A2_SSCALED, 10_10_10_2_SINT, NONE, WXYZ),199200VT(R11G11B10_FLOAT, 11_11_10_FLOAT, R11G11B10_FLOAT, WZYX),201_T(R9G9B9E5_FLOAT, 9_9_9_E5_FLOAT, NONE, WZYX),202203_T(Z16_UNORM, 16_UNORM, R8G8_UNORM, WZYX),204_T(Z24X8_UNORM, X8Z24_UNORM, R8G8B8A8_UNORM, WZYX),205_T(X24S8_UINT, 8_8_8_8_UINT, R8G8B8A8_UINT, XYZW),206_T(Z24_UNORM_S8_UINT, X8Z24_UNORM, R8G8B8A8_UNORM, WZYX),207_T(Z32_FLOAT, 32_FLOAT, R8G8B8A8_UNORM, WZYX),208_T(Z32_FLOAT_S8X24_UINT, 32_FLOAT, R8G8B8A8_UNORM, WZYX),209_T(X32_S8X24_UINT, 8_UINT, R8_UINT, WZYX),210211/* 48-bit */212V_(R16G16B16_UNORM, 16_16_16_UNORM, NONE, WZYX),213V_(R16G16B16_SNORM, 16_16_16_SNORM, NONE, WZYX),214V_(R16G16B16_UINT, 16_16_16_UINT, NONE, WZYX),215V_(R16G16B16_SINT, 16_16_16_SINT, NONE, WZYX),216V_(R16G16B16_USCALED, 16_16_16_UINT, NONE, WZYX),217V_(R16G16B16_SSCALED, 16_16_16_SINT, NONE, WZYX),218V_(R16G16B16_FLOAT, 16_16_16_FLOAT, NONE, WZYX),219220/* 64-bit */221VT(R16G16B16A16_UNORM, 16_16_16_16_UNORM, R16G16B16A16_UNORM, WZYX),222VT(R16G16B16X16_UNORM, 16_16_16_16_UNORM, R16G16B16A16_UNORM, WZYX),223VT(R16G16B16A16_SNORM, 16_16_16_16_SNORM, R16G16B16A16_SNORM, WZYX),224VT(R16G16B16X16_SNORM, 16_16_16_16_SNORM, R16G16B16A16_SNORM, WZYX),225VT(R16G16B16A16_UINT, 16_16_16_16_UINT, R16G16B16A16_UINT, WZYX),226_T(R16G16B16X16_UINT, 16_16_16_16_UINT, R16G16B16A16_UINT, WZYX),227VT(R16G16B16A16_SINT, 16_16_16_16_SINT, R16G16B16A16_SINT, WZYX),228_T(R16G16B16X16_SINT, 16_16_16_16_SINT, R16G16B16A16_SINT, WZYX),229V_(R16G16B16A16_USCALED, 16_16_16_16_UINT, NONE, WZYX),230V_(R16G16B16A16_SSCALED, 16_16_16_16_SINT, NONE, WZYX),231VT(R16G16B16A16_FLOAT, 16_16_16_16_FLOAT, R16G16B16A16_FLOAT, WZYX),232_T(R16G16B16X16_FLOAT, 16_16_16_16_FLOAT, R16G16B16A16_FLOAT, WZYX),233234VT(R32G32_UINT, 32_32_UINT, R32G32_UINT, WZYX),235VT(R32G32_SINT, 32_32_SINT, R32G32_SINT, WZYX),236V_(R32G32_USCALED, 32_32_UINT, NONE, WZYX),237V_(R32G32_SSCALED, 32_32_SINT, NONE, WZYX),238VT(R32G32_FLOAT, 32_32_FLOAT, R32G32_FLOAT,WZYX),239V_(R32G32_FIXED, 32_32_FIXED, NONE, WZYX),240241_T(L32A32_UINT, 32_32_UINT, NONE, WZYX),242_T(L32A32_SINT, 32_32_SINT, NONE, WZYX),243244/* 96-bit */245VT(R32G32B32_UINT, 32_32_32_UINT, NONE, WZYX),246VT(R32G32B32_SINT, 32_32_32_SINT, NONE, WZYX),247V_(R32G32B32_USCALED, 32_32_32_UINT, NONE, WZYX),248V_(R32G32B32_SSCALED, 32_32_32_SINT, NONE, WZYX),249VT(R32G32B32_FLOAT, 32_32_32_FLOAT, NONE, WZYX),250V_(R32G32B32_FIXED, 32_32_32_FIXED, NONE, WZYX),251252/* 128-bit */253VT(R32G32B32A32_UINT, 32_32_32_32_UINT, R32G32B32A32_UINT, WZYX),254_T(R32G32B32X32_UINT, 32_32_32_32_UINT, R32G32B32A32_UINT, WZYX),255VT(R32G32B32A32_SINT, 32_32_32_32_SINT, R32G32B32A32_SINT, WZYX),256_T(R32G32B32X32_SINT, 32_32_32_32_SINT, R32G32B32A32_SINT, WZYX),257V_(R32G32B32A32_USCALED, 32_32_32_32_UINT, NONE, WZYX),258V_(R32G32B32A32_SSCALED, 32_32_32_32_SINT, NONE, WZYX),259VT(R32G32B32A32_FLOAT, 32_32_32_32_FLOAT, R32G32B32A32_FLOAT, WZYX),260_T(R32G32B32X32_FLOAT, 32_32_32_32_FLOAT, R32G32B32A32_FLOAT, WZYX),261V_(R32G32B32A32_FIXED, 32_32_32_32_FIXED, NONE, WZYX),262263/* compressed */264_T(ETC1_RGB8, ETC1, NONE, WZYX),265_T(ETC2_RGB8, ETC2_RGB8, NONE, WZYX),266_T(ETC2_SRGB8, ETC2_RGB8, NONE, WZYX),267_T(ETC2_RGB8A1, ETC2_RGB8A1, NONE, WZYX),268_T(ETC2_SRGB8A1, ETC2_RGB8A1, NONE, WZYX),269_T(ETC2_RGBA8, ETC2_RGBA8, NONE, WZYX),270_T(ETC2_SRGBA8, ETC2_RGBA8, NONE, WZYX),271_T(ETC2_R11_UNORM, ETC2_R11_UNORM, NONE, WZYX),272_T(ETC2_R11_SNORM, ETC2_R11_SNORM, NONE, WZYX),273_T(ETC2_RG11_UNORM, ETC2_RG11_UNORM, NONE, WZYX),274_T(ETC2_RG11_SNORM, ETC2_RG11_SNORM, NONE, WZYX),275276_T(DXT1_RGB, DXT1, NONE, WZYX),277_T(DXT1_SRGB, DXT1, NONE, WZYX),278_T(DXT1_RGBA, DXT1, NONE, WZYX),279_T(DXT1_SRGBA, DXT1, NONE, WZYX),280_T(DXT3_RGBA, DXT3, NONE, WZYX),281_T(DXT3_SRGBA, DXT3, NONE, WZYX),282_T(DXT5_RGBA, DXT5, NONE, WZYX),283_T(DXT5_SRGBA, DXT5, NONE, WZYX),284285_T(BPTC_RGBA_UNORM, BPTC, NONE, WZYX),286_T(BPTC_SRGBA, BPTC, NONE, WZYX),287_T(BPTC_RGB_FLOAT, BPTC_FLOAT, NONE, WZYX),288_T(BPTC_RGB_UFLOAT, BPTC_UFLOAT, NONE, WZYX),289290_T(RGTC1_UNORM, RGTC1_UNORM, NONE, WZYX),291_T(RGTC1_SNORM, RGTC1_SNORM, NONE, WZYX),292_T(RGTC2_UNORM, RGTC2_UNORM, NONE, WZYX),293_T(RGTC2_SNORM, RGTC2_SNORM, NONE, WZYX),294_T(LATC1_UNORM, RGTC1_UNORM, NONE, WZYX),295_T(LATC1_SNORM, RGTC1_SNORM, NONE, WZYX),296_T(LATC2_UNORM, RGTC2_UNORM, NONE, WZYX),297_T(LATC2_SNORM, RGTC2_SNORM, NONE, WZYX),298299_T(ASTC_4x4, ASTC_4x4, NONE, WZYX),300_T(ASTC_5x4, ASTC_5x4, NONE, WZYX),301_T(ASTC_5x5, ASTC_5x5, NONE, WZYX),302_T(ASTC_6x5, ASTC_6x5, NONE, WZYX),303_T(ASTC_6x6, ASTC_6x6, NONE, WZYX),304_T(ASTC_8x5, ASTC_8x5, NONE, WZYX),305_T(ASTC_8x6, ASTC_8x6, NONE, WZYX),306_T(ASTC_8x8, ASTC_8x8, NONE, WZYX),307_T(ASTC_10x5, ASTC_10x5, NONE, WZYX),308_T(ASTC_10x6, ASTC_10x6, NONE, WZYX),309_T(ASTC_10x8, ASTC_10x8, NONE, WZYX),310_T(ASTC_10x10, ASTC_10x10, NONE, WZYX),311_T(ASTC_12x10, ASTC_12x10, NONE, WZYX),312_T(ASTC_12x12, ASTC_12x12, NONE, WZYX),313314_T(ASTC_4x4_SRGB, ASTC_4x4, NONE, WZYX),315_T(ASTC_5x4_SRGB, ASTC_5x4, NONE, WZYX),316_T(ASTC_5x5_SRGB, ASTC_5x5, NONE, WZYX),317_T(ASTC_6x5_SRGB, ASTC_6x5, NONE, WZYX),318_T(ASTC_6x6_SRGB, ASTC_6x6, NONE, WZYX),319_T(ASTC_8x5_SRGB, ASTC_8x5, NONE, WZYX),320_T(ASTC_8x6_SRGB, ASTC_8x6, NONE, WZYX),321_T(ASTC_8x8_SRGB, ASTC_8x8, NONE, WZYX),322_T(ASTC_10x5_SRGB, ASTC_10x5, NONE, WZYX),323_T(ASTC_10x6_SRGB, ASTC_10x6, NONE, WZYX),324_T(ASTC_10x8_SRGB, ASTC_10x8, NONE, WZYX),325_T(ASTC_10x10_SRGB, ASTC_10x10, NONE, WZYX),326_T(ASTC_12x10_SRGB, ASTC_12x10, NONE, WZYX),327_T(ASTC_12x12_SRGB, ASTC_12x12, NONE, WZYX),328};329/* clang-format on */330331/* convert pipe format to vertex buffer format: */332enum a4xx_vtx_fmt333fd4_pipe2vtx(enum pipe_format format)334{335if (!formats[format].present)336return VFMT4_NONE;337return formats[format].vtx;338}339340/* convert pipe format to texture sampler format: */341enum a4xx_tex_fmt342fd4_pipe2tex(enum pipe_format format)343{344if (!formats[format].present)345return TFMT4_NONE;346return formats[format].tex;347}348349/* convert pipe format to MRT / copydest format used for render-target: */350enum a4xx_color_fmt351fd4_pipe2color(enum pipe_format format)352{353if (!formats[format].present)354return RB4_NONE;355return formats[format].rb;356}357358enum a3xx_color_swap359fd4_pipe2swap(enum pipe_format format)360{361if (!formats[format].present)362return WZYX;363return formats[format].swap;364}365366enum a4xx_depth_format367fd4_pipe2depth(enum pipe_format format)368{369switch (format) {370case PIPE_FORMAT_Z16_UNORM:371return DEPTH4_16;372case PIPE_FORMAT_Z24X8_UNORM:373case PIPE_FORMAT_Z24_UNORM_S8_UINT:374case PIPE_FORMAT_X8Z24_UNORM:375case PIPE_FORMAT_S8_UINT_Z24_UNORM:376return DEPTH4_24_8;377case PIPE_FORMAT_Z32_FLOAT:378case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:379return DEPTH4_32;380default:381return ~0;382}383}384385static inline enum a4xx_tex_swiz386tex_swiz(unsigned swiz)387{388switch (swiz) {389default:390case PIPE_SWIZZLE_X:391return A4XX_TEX_X;392case PIPE_SWIZZLE_Y:393return A4XX_TEX_Y;394case PIPE_SWIZZLE_Z:395return A4XX_TEX_Z;396case PIPE_SWIZZLE_W:397return A4XX_TEX_W;398case PIPE_SWIZZLE_0:399return A4XX_TEX_ZERO;400case PIPE_SWIZZLE_1:401return A4XX_TEX_ONE;402}403}404405uint32_t406fd4_tex_swiz(enum pipe_format format, unsigned swizzle_r, unsigned swizzle_g,407unsigned swizzle_b, unsigned swizzle_a)408{409const struct util_format_description *desc = util_format_description(format);410unsigned char swiz[4] = {411swizzle_r,412swizzle_g,413swizzle_b,414swizzle_a,415}, rswiz[4];416417util_format_compose_swizzles(desc->swizzle, swiz, rswiz);418419return A4XX_TEX_CONST_0_SWIZ_X(tex_swiz(rswiz[0])) |420A4XX_TEX_CONST_0_SWIZ_Y(tex_swiz(rswiz[1])) |421A4XX_TEX_CONST_0_SWIZ_Z(tex_swiz(rswiz[2])) |422A4XX_TEX_CONST_0_SWIZ_W(tex_swiz(rswiz[3]));423}424425426