Path: blob/21.2-virgl/src/asahi/lib/agx_formats.c
4560 views
/*1* Copyright (C) 2021 Alyssa Rosenzweig2*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*/2223#include "agx_pack.h"24#include "agx_formats.h"2526#define T true27#define F false28#define AGX_FORMAT__ 02930#define AGX_FMT(pipe, channels, type, is_renderable, internal_fmt) \31[PIPE_FORMAT_ ## pipe] = { \32.hw = (AGX_CHANNELS_ ## channels) | ((AGX_TEXTURE_TYPE_ ## type) << 7), \33.renderable = is_renderable, \34.internal = AGX_FORMAT_ ## internal_fmt,\35}3637const struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = {38AGX_FMT(R8_UNORM, R8, UNORM, T, U8NORM),39AGX_FMT(R8G8_UNORM, R8G8, UNORM, T, U8NORM),40AGX_FMT(R8G8B8A8_UNORM, R8G8B8A8, UNORM, T, U8NORM),41AGX_FMT(A8R8G8B8_UNORM, R8G8B8A8, UNORM, T, U8NORM),42AGX_FMT(A8B8G8R8_UNORM, R8G8B8A8, UNORM, T, U8NORM),43AGX_FMT(B8G8R8A8_UNORM, R8G8B8A8, UNORM, T, U8NORM),4445AGX_FMT(R16_UNORM, R16, UNORM, T, U16NORM),46AGX_FMT(R16G16_UNORM, R16G16, UNORM, T, U16NORM),47AGX_FMT(R16G16B16A16_UNORM, R16G16B16A16, UNORM, T, U16NORM),4849AGX_FMT(R8_SRGB, R8, UNORM, T, SRGBA8),50AGX_FMT(R8G8_SRGB, R8G8, UNORM, T, SRGBA8),51AGX_FMT(R8G8B8A8_SRGB, R8G8B8A8, UNORM, T, SRGBA8),52AGX_FMT(A8R8G8B8_SRGB, R8G8B8A8, UNORM, T, SRGBA8),53AGX_FMT(A8B8G8R8_SRGB, R8G8B8A8, UNORM, T, SRGBA8),54AGX_FMT(B8G8R8A8_SRGB, R8G8B8A8, UNORM, T, SRGBA8),5556AGX_FMT(R8_SNORM, R8, SNORM, T, S8NORM),57AGX_FMT(R8G8_SNORM, R8G8, SNORM, T, S8NORM),58AGX_FMT(R8G8B8A8_SNORM, R8G8B8A8, SNORM, T, S8NORM),59AGX_FMT(A8R8G8B8_SNORM, R8G8B8A8, SNORM, T, S8NORM),60AGX_FMT(A8B8G8R8_SNORM, R8G8B8A8, SNORM, T, S8NORM),61AGX_FMT(B8G8R8A8_SNORM, R8G8B8A8, SNORM, T, S8NORM),6263AGX_FMT(R16_FLOAT, R16, FLOAT, T, F16),64AGX_FMT(R16G16_FLOAT, R16G16, FLOAT, T, F16),65AGX_FMT(R16G16B16A16_FLOAT, R16G16B16A16, FLOAT, T, F16),6667AGX_FMT(R32_FLOAT, R32, FLOAT, T, I32),68AGX_FMT(R32G32_FLOAT, R32G32, FLOAT, T, I32),69AGX_FMT(R32G32B32A32_FLOAT, R32G32B32A32, FLOAT, T, I32),7071AGX_FMT(Z16_UNORM, R16, UNORM, F, _),72AGX_FMT(Z32_FLOAT, R32, FLOAT, F, _),73AGX_FMT(Z32_FLOAT_S8X24_UINT, R32, FLOAT, F, _),7475AGX_FMT(R10G10B10A2_UNORM, R10G10B10A2, UNORM, T, RGB10A2),76AGX_FMT(B10G10R10A2_UNORM, R10G10B10A2, UNORM, T, RGB10A2),77AGX_FMT(R11G11B10_FLOAT, R11G11B10, FLOAT, T, RG11B10F),78AGX_FMT(R9G9B9E5_FLOAT, R9G9B9E5, FLOAT, F, RGB9E5),7980AGX_FMT(ETC2_RGB8, ETC2_RGB8, UNORM, F,_),81AGX_FMT(ETC2_SRGB8, ETC2_RGB8, UNORM, F,_),82AGX_FMT(ETC2_RGB8A1, ETC2_RGB8A1, UNORM, F,_),83AGX_FMT(ETC2_SRGB8A1, ETC2_RGB8A1, UNORM, F,_),84AGX_FMT(ETC2_RGBA8, ETC2_RGBA8, UNORM, F,_),85AGX_FMT(ETC2_SRGBA8, ETC2_RGBA8, UNORM, F,_),86AGX_FMT(ETC2_R11_UNORM, EAC_R11, UNORM, F,_),87AGX_FMT(ETC2_R11_SNORM, EAC_R11, SNORM, F,_),88AGX_FMT(ETC2_RG11_UNORM, EAC_RG11, UNORM, F,_),89AGX_FMT(ETC2_RG11_SNORM, EAC_RG11, SNORM, F,_),90};9192const enum agx_format93agx_vertex_format[PIPE_FORMAT_COUNT] = {94[PIPE_FORMAT_R32_FLOAT] = AGX_FORMAT_I32,95[PIPE_FORMAT_R32_SINT] = AGX_FORMAT_I32,96[PIPE_FORMAT_R32_UINT] = AGX_FORMAT_I32,97[PIPE_FORMAT_R32G32_FLOAT] = AGX_FORMAT_I32,98[PIPE_FORMAT_R32G32_SINT] = AGX_FORMAT_I32,99[PIPE_FORMAT_R32G32_UINT] = AGX_FORMAT_I32,100[PIPE_FORMAT_R32G32B32_FLOAT] = AGX_FORMAT_I32,101[PIPE_FORMAT_R32G32B32_UINT] = AGX_FORMAT_I32,102[PIPE_FORMAT_R32G32B32_SINT] = AGX_FORMAT_I32,103[PIPE_FORMAT_R32G32B32A32_FLOAT] = AGX_FORMAT_I32,104[PIPE_FORMAT_R32G32B32A32_UINT] = AGX_FORMAT_I32,105[PIPE_FORMAT_R32G32B32A32_SINT] = AGX_FORMAT_I32,106107[PIPE_FORMAT_R8_UNORM] = AGX_FORMAT_U8NORM,108[PIPE_FORMAT_R8G8_UNORM] = AGX_FORMAT_U8NORM,109[PIPE_FORMAT_R8G8B8_UNORM] = AGX_FORMAT_U8NORM,110[PIPE_FORMAT_R8G8B8A8_UNORM] = AGX_FORMAT_U8NORM,111112[PIPE_FORMAT_R8_SNORM] = AGX_FORMAT_S8NORM,113[PIPE_FORMAT_R8G8_SNORM] = AGX_FORMAT_S8NORM,114[PIPE_FORMAT_R8G8B8_SNORM] = AGX_FORMAT_S8NORM,115[PIPE_FORMAT_R8G8B8A8_SNORM] = AGX_FORMAT_S8NORM,116117[PIPE_FORMAT_R16_UNORM] = AGX_FORMAT_U16NORM,118[PIPE_FORMAT_R16G16_UNORM] = AGX_FORMAT_U16NORM,119[PIPE_FORMAT_R16G16B16_UNORM] = AGX_FORMAT_U16NORM,120[PIPE_FORMAT_R16G16B16A16_UNORM] = AGX_FORMAT_U16NORM,121122[PIPE_FORMAT_R16_SNORM] = AGX_FORMAT_S16NORM,123[PIPE_FORMAT_R16G16_SNORM] = AGX_FORMAT_S16NORM,124[PIPE_FORMAT_R16G16B16_SNORM] = AGX_FORMAT_S16NORM,125[PIPE_FORMAT_R16G16B16A16_SNORM] = AGX_FORMAT_S16NORM,126};127128129