Path: blob/21.2-virgl/src/gallium/drivers/freedreno/a5xx/fd5_format.c
4574 views
/*1* Copyright (C) 2016 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 "fd5_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 fd5_format {36enum a5xx_vtx_fmt vtx;37enum a5xx_tex_fmt tex;38enum a5xx_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 = VFMT5_##fmt, \47.tex = TFMT5_##fmt, \48.rb = RB5_##rbfmt, \49.swap = swapfmt}5051/* texture-only */52#define _T(pipe, fmt, rbfmt, swapfmt) \53[PIPE_FORMAT_##pipe] = {.present = 1, \54.vtx = VFMT5_NONE, \55.tex = TFMT5_##fmt, \56.rb = RB5_##rbfmt, \57.swap = swapfmt}5859/* vertex-only */60#define V_(pipe, fmt, rbfmt, swapfmt) \61[PIPE_FORMAT_##pipe] = {.present = 1, \62.vtx = VFMT5_##fmt, \63.tex = TFMT5_NONE, \64.rb = RB5_##rbfmt, \65.swap = swapfmt}6667/* clang-format off */68static struct fd5_format formats[PIPE_FORMAT_COUNT] = {69/* for blitting, treat PIPE_FORMAT_NONE as 8bit R8: */70_T(R8_UINT, 8_UINT, R8_UINT, WZYX),7172/* 8-bit */73VT(R8_UNORM, 8_UNORM, R8_UNORM, WZYX),74VT(R8_SNORM, 8_SNORM, R8_SNORM, WZYX),75VT(R8_UINT, 8_UINT, R8_UINT, WZYX),76VT(R8_SINT, 8_SINT, R8_SINT, WZYX),77V_(R8_USCALED, 8_UINT, NONE, WZYX),78V_(R8_SSCALED, 8_SINT, NONE, WZYX),7980_T(A8_UNORM, 8_UNORM, A8_UNORM, WZYX),81_T(L8_UNORM, 8_UNORM, R8_UNORM, WZYX),82_T(I8_UNORM, 8_UNORM, NONE, WZYX),8384_T(A8_UINT, 8_UINT, NONE, WZYX),85_T(A8_SINT, 8_SINT, NONE, WZYX),86_T(L8_UINT, 8_UINT, NONE, WZYX),87_T(L8_SINT, 8_SINT, NONE, WZYX),88_T(I8_UINT, 8_UINT, NONE, WZYX),89_T(I8_SINT, 8_SINT, NONE, WZYX),9091_T(S8_UINT, 8_UINT, R8_UNORM, WZYX),9293/* 16-bit */94VT(R16_UNORM, 16_UNORM, R16_UNORM, WZYX),95VT(R16_SNORM, 16_SNORM, R16_SNORM, WZYX),96VT(R16_UINT, 16_UINT, R16_UINT, WZYX),97VT(R16_SINT, 16_SINT, R16_SINT, WZYX),98V_(R16_USCALED, 16_UINT, NONE, WZYX),99V_(R16_SSCALED, 16_SINT, NONE, WZYX),100VT(R16_FLOAT, 16_FLOAT, R16_FLOAT, WZYX),101_T(Z16_UNORM, 16_UNORM, R16_UNORM, WZYX),102103_T(A16_UNORM, 16_UNORM, NONE, WZYX),104_T(A16_SNORM, 16_SNORM, NONE, WZYX),105_T(A16_UINT, 16_UINT, NONE, WZYX),106_T(A16_SINT, 16_SINT, NONE, WZYX),107_T(L16_UNORM, 16_UNORM, NONE, WZYX),108_T(L16_SNORM, 16_SNORM, NONE, WZYX),109_T(L16_UINT, 16_UINT, NONE, WZYX),110_T(L16_SINT, 16_SINT, NONE, WZYX),111_T(I16_UNORM, 16_UNORM, NONE, WZYX),112_T(I16_SNORM, 16_SNORM, NONE, WZYX),113_T(I16_UINT, 16_UINT, NONE, WZYX),114_T(I16_SINT, 16_SINT, NONE, WZYX),115116VT(R8G8_UNORM, 8_8_UNORM, R8G8_UNORM, WZYX),117VT(R8G8_SNORM, 8_8_SNORM, R8G8_SNORM, WZYX),118VT(R8G8_UINT, 8_8_UINT, R8G8_UINT, WZYX),119VT(R8G8_SINT, 8_8_SINT, R8G8_SINT, WZYX),120V_(R8G8_USCALED, 8_8_UINT, NONE, WZYX),121V_(R8G8_SSCALED, 8_8_SINT, NONE, WZYX),122123_T(L8A8_UINT, 8_8_UINT, NONE, WZYX),124_T(L8A8_SINT, 8_8_SINT, NONE, WZYX),125126_T(B5G6R5_UNORM, 5_6_5_UNORM, R5G6B5_UNORM, WXYZ),127_T(B5G5R5A1_UNORM, 5_5_5_1_UNORM, R5G5B5A1_UNORM, WXYZ),128_T(B5G5R5X1_UNORM, 5_5_5_1_UNORM, R5G5B5A1_UNORM, WXYZ),129_T(B4G4R4A4_UNORM, 4_4_4_4_UNORM, R4G4B4A4_UNORM, WXYZ),130131/* 24-bit */132V_(R8G8B8_UNORM, 8_8_8_UNORM, NONE, WZYX),133V_(R8G8B8_SNORM, 8_8_8_SNORM, NONE, WZYX),134V_(R8G8B8_UINT, 8_8_8_UINT, NONE, WZYX),135V_(R8G8B8_SINT, 8_8_8_SINT, NONE, WZYX),136V_(R8G8B8_USCALED, 8_8_8_UINT, NONE, WZYX),137V_(R8G8B8_SSCALED, 8_8_8_SINT, NONE, WZYX),138139/* 32-bit */140VT(R32_UINT, 32_UINT, R32_UINT, WZYX),141VT(R32_SINT, 32_SINT, R32_SINT, WZYX),142V_(R32_USCALED, 32_UINT, NONE, WZYX),143V_(R32_SSCALED, 32_SINT, NONE, WZYX),144VT(R32_FLOAT, 32_FLOAT, R32_FLOAT,WZYX),145V_(R32_FIXED, 32_FIXED, NONE, WZYX),146147_T(A32_UINT, 32_UINT, NONE, WZYX),148_T(A32_SINT, 32_SINT, NONE, WZYX),149_T(L32_UINT, 32_UINT, NONE, WZYX),150_T(L32_SINT, 32_SINT, NONE, WZYX),151_T(I32_UINT, 32_UINT, NONE, WZYX),152_T(I32_SINT, 32_SINT, NONE, WZYX),153154VT(R16G16_UNORM, 16_16_UNORM, R16G16_UNORM, WZYX),155VT(R16G16_SNORM, 16_16_SNORM, R16G16_SNORM, WZYX),156VT(R16G16_UINT, 16_16_UINT, R16G16_UINT, WZYX),157VT(R16G16_SINT, 16_16_SINT, R16G16_SINT, WZYX),158VT(R16G16_USCALED, 16_16_UINT, NONE, WZYX),159VT(R16G16_SSCALED, 16_16_SINT, NONE, WZYX),160VT(R16G16_FLOAT, 16_16_FLOAT, R16G16_FLOAT, WZYX),161162_T(L16A16_UNORM, 16_16_UNORM, NONE, WZYX),163_T(L16A16_SNORM, 16_16_SNORM, NONE, WZYX),164_T(L16A16_UINT, 16_16_UINT, NONE, WZYX),165_T(L16A16_SINT, 16_16_SINT, NONE, WZYX),166167VT(R8G8B8A8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),168_T(R8G8B8X8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),169_T(R8G8B8A8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),170_T(R8G8B8X8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WZYX),171VT(R8G8B8A8_SNORM, 8_8_8_8_SNORM, R8G8B8A8_SNORM, WZYX),172VT(R8G8B8A8_UINT, 8_8_8_8_UINT, R8G8B8A8_UINT, WZYX),173VT(R8G8B8A8_SINT, 8_8_8_8_SINT, R8G8B8A8_SINT, WZYX),174V_(R8G8B8A8_USCALED, 8_8_8_8_UINT, NONE, WZYX),175V_(R8G8B8A8_SSCALED, 8_8_8_8_SINT, NONE, WZYX),176177VT(B8G8R8A8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),178_T(B8G8R8X8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),179VT(B8G8R8A8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),180_T(B8G8R8X8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, WXYZ),181182VT(A8B8G8R8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),183_T(X8B8G8R8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),184_T(A8B8G8R8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),185_T(X8B8G8R8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, XYZW),186187VT(A8R8G8B8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),188_T(X8R8G8B8_UNORM, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),189_T(A8R8G8B8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),190_T(X8R8G8B8_SRGB, 8_8_8_8_UNORM, R8G8B8A8_UNORM, ZYXW),191192VT(R10G10B10A2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WZYX),193VT(B10G10R10A2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WXYZ),194_T(B10G10R10X2_UNORM, 10_10_10_2_UNORM, R10G10B10A2_UNORM, WXYZ),195V_(R10G10B10A2_SNORM, 10_10_10_2_SNORM, NONE, WZYX),196V_(B10G10R10A2_SNORM, 10_10_10_2_SNORM, NONE, WXYZ),197VT(R10G10B10A2_UINT, 10_10_10_2_UINT, R10G10B10A2_UINT, WZYX),198VT(B10G10R10A2_UINT, 10_10_10_2_UINT, R10G10B10A2_UINT, WXYZ),199V_(R10G10B10A2_USCALED, 10_10_10_2_UINT, NONE, WZYX),200V_(B10G10R10A2_USCALED, 10_10_10_2_UINT, NONE, WXYZ),201V_(R10G10B10A2_SSCALED, 10_10_10_2_SINT, NONE, WZYX),202V_(B10G10R10A2_SSCALED, 10_10_10_2_SINT, NONE, WXYZ),203204VT(R11G11B10_FLOAT, 11_11_10_FLOAT, R11G11B10_FLOAT, WZYX),205_T(R9G9B9E5_FLOAT, 9_9_9_E5_FLOAT, NONE, WZYX),206207_T(Z24X8_UNORM, X8Z24_UNORM, R8G8B8A8_UNORM, WZYX),208_T(X24S8_UINT, 8_8_8_8_UINT, R8G8B8A8_UINT, XYZW),209_T(Z24_UNORM_S8_UINT, X8Z24_UNORM, R8G8B8A8_UNORM, WZYX),210_T(Z32_FLOAT, 32_FLOAT, R8G8B8A8_UNORM, WZYX),211_T(Z32_FLOAT_S8X24_UINT, 32_FLOAT, R8G8B8A8_UNORM, WZYX),212_T(X32_S8X24_UINT, 8_UINT, R8_UINT, WZYX),213214/* 48-bit */215V_(R16G16B16_UNORM, 16_16_16_UNORM, NONE, WZYX),216V_(R16G16B16_SNORM, 16_16_16_SNORM, NONE, WZYX),217V_(R16G16B16_UINT, 16_16_16_UINT, NONE, WZYX),218V_(R16G16B16_SINT, 16_16_16_SINT, NONE, WZYX),219V_(R16G16B16_USCALED, 16_16_16_UINT, NONE, WZYX),220V_(R16G16B16_SSCALED, 16_16_16_SINT, NONE, WZYX),221V_(R16G16B16_FLOAT, 16_16_16_FLOAT, NONE, WZYX),222223/* 64-bit */224VT(R16G16B16A16_UNORM, 16_16_16_16_UNORM, R16G16B16A16_UNORM, WZYX),225VT(R16G16B16X16_UNORM, 16_16_16_16_UNORM, R16G16B16A16_UNORM, WZYX),226VT(R16G16B16A16_SNORM, 16_16_16_16_SNORM, R16G16B16A16_SNORM, WZYX),227VT(R16G16B16X16_SNORM, 16_16_16_16_SNORM, R16G16B16A16_SNORM, WZYX),228VT(R16G16B16A16_UINT, 16_16_16_16_UINT, R16G16B16A16_UINT, WZYX),229VT(R16G16B16X16_UINT, 16_16_16_16_UINT, R16G16B16A16_UINT, WZYX),230VT(R16G16B16A16_SINT, 16_16_16_16_SINT, R16G16B16A16_SINT, WZYX),231VT(R16G16B16X16_SINT, 16_16_16_16_SINT, R16G16B16A16_SINT, WZYX),232VT(R16G16B16A16_USCALED, 16_16_16_16_UINT, NONE, WZYX),233VT(R16G16B16A16_SSCALED, 16_16_16_16_SINT, NONE, WZYX),234VT(R16G16B16A16_FLOAT, 16_16_16_16_FLOAT, R16G16B16A16_FLOAT, WZYX),235VT(R16G16B16X16_FLOAT, 16_16_16_16_FLOAT, R16G16B16A16_FLOAT, WZYX),236237VT(R32G32_UINT, 32_32_UINT, R32G32_UINT, WZYX),238VT(R32G32_SINT, 32_32_SINT, R32G32_SINT, WZYX),239V_(R32G32_USCALED, 32_32_UINT, NONE, WZYX),240V_(R32G32_SSCALED, 32_32_SINT, NONE, WZYX),241VT(R32G32_FLOAT, 32_32_FLOAT, R32G32_FLOAT,WZYX),242V_(R32G32_FIXED, 32_32_FIXED, NONE, WZYX),243244_T(L32A32_UINT, 32_32_UINT, NONE, WZYX),245_T(L32A32_SINT, 32_32_SINT, NONE, WZYX),246247/* 96-bit */248VT(R32G32B32_UINT, 32_32_32_UINT, NONE, WZYX),249VT(R32G32B32_SINT, 32_32_32_SINT, NONE, WZYX),250V_(R32G32B32_USCALED, 32_32_32_UINT, NONE, WZYX),251V_(R32G32B32_SSCALED, 32_32_32_SINT, NONE, WZYX),252VT(R32G32B32_FLOAT, 32_32_32_FLOAT, NONE, WZYX),253V_(R32G32B32_FIXED, 32_32_32_FIXED, NONE, WZYX),254255/* 128-bit */256VT(R32G32B32A32_UINT, 32_32_32_32_UINT, R32G32B32A32_UINT, WZYX),257_T(R32G32B32X32_UINT, 32_32_32_32_UINT, R32G32B32A32_UINT, WZYX),258VT(R32G32B32A32_SINT, 32_32_32_32_SINT, R32G32B32A32_SINT, WZYX),259_T(R32G32B32X32_SINT, 32_32_32_32_SINT, R32G32B32A32_SINT, WZYX),260V_(R32G32B32A32_USCALED, 32_32_32_32_UINT, NONE, WZYX),261V_(R32G32B32A32_SSCALED, 32_32_32_32_SINT, NONE, WZYX),262VT(R32G32B32A32_FLOAT, 32_32_32_32_FLOAT, R32G32B32A32_FLOAT, WZYX),263_T(R32G32B32X32_FLOAT, 32_32_32_32_FLOAT, R32G32B32A32_FLOAT, WZYX),264V_(R32G32B32A32_FIXED, 32_32_32_32_FIXED, NONE, WZYX),265266/* compressed */267_T(ETC1_RGB8, ETC1, NONE, WZYX),268_T(ETC2_RGB8, ETC2_RGB8, NONE, WZYX),269_T(ETC2_SRGB8, ETC2_RGB8, NONE, WZYX),270_T(ETC2_RGB8A1, ETC2_RGB8A1, NONE, WZYX),271_T(ETC2_SRGB8A1, ETC2_RGB8A1, NONE, WZYX),272_T(ETC2_RGBA8, ETC2_RGBA8, NONE, WZYX),273_T(ETC2_SRGBA8, ETC2_RGBA8, NONE, WZYX),274_T(ETC2_R11_UNORM, ETC2_R11_UNORM, NONE, WZYX),275_T(ETC2_R11_SNORM, ETC2_R11_SNORM, NONE, WZYX),276_T(ETC2_RG11_UNORM, ETC2_RG11_UNORM, NONE, WZYX),277_T(ETC2_RG11_SNORM, ETC2_RG11_SNORM, NONE, WZYX),278279_T(DXT1_RGB, DXT1, NONE, WZYX),280_T(DXT1_SRGB, DXT1, NONE, WZYX),281_T(DXT1_RGBA, DXT1, NONE, WZYX),282_T(DXT1_SRGBA, DXT1, NONE, WZYX),283_T(DXT3_RGBA, DXT3, NONE, WZYX),284_T(DXT3_SRGBA, DXT3, NONE, WZYX),285_T(DXT5_RGBA, DXT5, NONE, WZYX),286_T(DXT5_SRGBA, DXT5, NONE, WZYX),287288_T(BPTC_RGBA_UNORM, BPTC, NONE, WZYX),289_T(BPTC_SRGBA, BPTC, NONE, WZYX),290_T(BPTC_RGB_FLOAT, BPTC_FLOAT, NONE, WZYX),291_T(BPTC_RGB_UFLOAT, BPTC_UFLOAT, NONE, WZYX),292293_T(RGTC1_UNORM, RGTC1_UNORM, NONE, WZYX),294_T(RGTC1_SNORM, RGTC1_SNORM, NONE, WZYX),295_T(RGTC2_UNORM, RGTC2_UNORM, NONE, WZYX),296_T(RGTC2_SNORM, RGTC2_SNORM, NONE, WZYX),297_T(LATC1_UNORM, RGTC1_UNORM, NONE, WZYX),298_T(LATC1_SNORM, RGTC1_SNORM, NONE, WZYX),299_T(LATC2_UNORM, RGTC2_UNORM, NONE, WZYX),300_T(LATC2_SNORM, RGTC2_SNORM, NONE, WZYX),301302_T(ASTC_4x4, ASTC_4x4, NONE, WZYX),303_T(ASTC_5x4, ASTC_5x4, NONE, WZYX),304_T(ASTC_5x5, ASTC_5x5, NONE, WZYX),305_T(ASTC_6x5, ASTC_6x5, NONE, WZYX),306_T(ASTC_6x6, ASTC_6x6, NONE, WZYX),307_T(ASTC_8x5, ASTC_8x5, NONE, WZYX),308_T(ASTC_8x6, ASTC_8x6, NONE, WZYX),309_T(ASTC_8x8, ASTC_8x8, NONE, WZYX),310_T(ASTC_10x5, ASTC_10x5, NONE, WZYX),311_T(ASTC_10x6, ASTC_10x6, NONE, WZYX),312_T(ASTC_10x8, ASTC_10x8, NONE, WZYX),313_T(ASTC_10x10, ASTC_10x10, NONE, WZYX),314_T(ASTC_12x10, ASTC_12x10, NONE, WZYX),315_T(ASTC_12x12, ASTC_12x12, NONE, WZYX),316317_T(ASTC_4x4_SRGB, ASTC_4x4, NONE, WZYX),318_T(ASTC_5x4_SRGB, ASTC_5x4, NONE, WZYX),319_T(ASTC_5x5_SRGB, ASTC_5x5, NONE, WZYX),320_T(ASTC_6x5_SRGB, ASTC_6x5, NONE, WZYX),321_T(ASTC_6x6_SRGB, ASTC_6x6, NONE, WZYX),322_T(ASTC_8x5_SRGB, ASTC_8x5, NONE, WZYX),323_T(ASTC_8x6_SRGB, ASTC_8x6, NONE, WZYX),324_T(ASTC_8x8_SRGB, ASTC_8x8, NONE, WZYX),325_T(ASTC_10x5_SRGB, ASTC_10x5, NONE, WZYX),326_T(ASTC_10x6_SRGB, ASTC_10x6, NONE, WZYX),327_T(ASTC_10x8_SRGB, ASTC_10x8, NONE, WZYX),328_T(ASTC_10x10_SRGB, ASTC_10x10, NONE, WZYX),329_T(ASTC_12x10_SRGB, ASTC_12x10, NONE, WZYX),330_T(ASTC_12x12_SRGB, ASTC_12x12, NONE, WZYX),331};332/* clang-format on */333334/* convert pipe format to vertex buffer format: */335enum a5xx_vtx_fmt336fd5_pipe2vtx(enum pipe_format format)337{338if (!formats[format].present)339return VFMT5_NONE;340return formats[format].vtx;341}342343/* convert pipe format to texture sampler format: */344enum a5xx_tex_fmt345fd5_pipe2tex(enum pipe_format format)346{347if (!formats[format].present)348return TFMT5_NONE;349return formats[format].tex;350}351352/* convert pipe format to MRT / copydest format used for render-target: */353enum a5xx_color_fmt354fd5_pipe2color(enum pipe_format format)355{356if (!formats[format].present)357return RB5_NONE;358return formats[format].rb;359}360361enum a3xx_color_swap362fd5_pipe2swap(enum pipe_format format)363{364if (!formats[format].present)365return WZYX;366return formats[format].swap;367}368369enum a5xx_depth_format370fd5_pipe2depth(enum pipe_format format)371{372switch (format) {373case PIPE_FORMAT_Z16_UNORM:374return DEPTH5_16;375case PIPE_FORMAT_Z24X8_UNORM:376case PIPE_FORMAT_Z24_UNORM_S8_UINT:377case PIPE_FORMAT_X8Z24_UNORM:378case PIPE_FORMAT_S8_UINT_Z24_UNORM:379return DEPTH5_24_8;380case PIPE_FORMAT_Z32_FLOAT:381case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:382return DEPTH5_32;383default:384return ~0;385}386}387388static inline enum a5xx_tex_swiz389tex_swiz(unsigned swiz)390{391switch (swiz) {392default:393case PIPE_SWIZZLE_X:394return A5XX_TEX_X;395case PIPE_SWIZZLE_Y:396return A5XX_TEX_Y;397case PIPE_SWIZZLE_Z:398return A5XX_TEX_Z;399case PIPE_SWIZZLE_W:400return A5XX_TEX_W;401case PIPE_SWIZZLE_0:402return A5XX_TEX_ZERO;403case PIPE_SWIZZLE_1:404return A5XX_TEX_ONE;405}406}407408uint32_t409fd5_tex_swiz(enum pipe_format format, unsigned swizzle_r, unsigned swizzle_g,410unsigned swizzle_b, unsigned swizzle_a)411{412const struct util_format_description *desc = util_format_description(format);413unsigned char swiz[4] = {414swizzle_r,415swizzle_g,416swizzle_b,417swizzle_a,418}, rswiz[4];419420util_format_compose_swizzles(desc->swizzle, swiz, rswiz);421422return A5XX_TEX_CONST_0_SWIZ_X(tex_swiz(rswiz[0])) |423A5XX_TEX_CONST_0_SWIZ_Y(tex_swiz(rswiz[1])) |424A5XX_TEX_CONST_0_SWIZ_Z(tex_swiz(rswiz[2])) |425A5XX_TEX_CONST_0_SWIZ_W(tex_swiz(rswiz[3]));426}427428429