1bf215546Sopenharmony_ci/* 2bf215546Sopenharmony_ci * Copyright (C) 2021 Alyssa Rosenzweig 3bf215546Sopenharmony_ci * 4bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 5bf215546Sopenharmony_ci * copy of this software and associated documentation files (the "Software"), 6bf215546Sopenharmony_ci * to deal in the Software without restriction, including without limitation 7bf215546Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8bf215546Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 9bf215546Sopenharmony_ci * Software is furnished to do so, subject to the following conditions: 10bf215546Sopenharmony_ci * 11bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the next 12bf215546Sopenharmony_ci * paragraph) shall be included in all copies or substantial portions of the 13bf215546Sopenharmony_ci * Software. 14bf215546Sopenharmony_ci * 15bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16bf215546Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17bf215546Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18bf215546Sopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19bf215546Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20bf215546Sopenharmony_ci * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21bf215546Sopenharmony_ci * SOFTWARE. 22bf215546Sopenharmony_ci */ 23bf215546Sopenharmony_ci 24bf215546Sopenharmony_ci#include "agx_pack.h" 25bf215546Sopenharmony_ci#include "agx_formats.h" 26bf215546Sopenharmony_ci 27bf215546Sopenharmony_ci#define T true 28bf215546Sopenharmony_ci#define F false 29bf215546Sopenharmony_ci#define AGX_FORMAT__ 0 30bf215546Sopenharmony_ci 31bf215546Sopenharmony_ci#define AGX_FMT(pipe, channels, type, is_renderable, internal_fmt) \ 32bf215546Sopenharmony_ci [PIPE_FORMAT_ ## pipe] = { \ 33bf215546Sopenharmony_ci .hw = (AGX_CHANNELS_ ## channels) | ((AGX_TEXTURE_TYPE_ ## type) << 7), \ 34bf215546Sopenharmony_ci .renderable = is_renderable, \ 35bf215546Sopenharmony_ci .internal = AGX_FORMAT_ ## internal_fmt,\ 36bf215546Sopenharmony_ci } 37bf215546Sopenharmony_ci 38bf215546Sopenharmony_ciconst struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = { 39bf215546Sopenharmony_ci AGX_FMT(R8_UNORM, R8, UNORM, T, U8NORM), 40bf215546Sopenharmony_ci AGX_FMT(R8G8_UNORM, R8G8, UNORM, T, U8NORM), 41bf215546Sopenharmony_ci AGX_FMT(R8G8B8A8_UNORM, R8G8B8A8, UNORM, T, U8NORM), 42bf215546Sopenharmony_ci AGX_FMT(A8R8G8B8_UNORM, R8G8B8A8, UNORM, T, U8NORM), 43bf215546Sopenharmony_ci AGX_FMT(A8B8G8R8_UNORM, R8G8B8A8, UNORM, T, U8NORM), 44bf215546Sopenharmony_ci AGX_FMT(B8G8R8A8_UNORM, R8G8B8A8, UNORM, T, U8NORM), 45bf215546Sopenharmony_ci 46bf215546Sopenharmony_ci AGX_FMT(R16_UNORM, R16, UNORM, T, U16NORM), 47bf215546Sopenharmony_ci AGX_FMT(R16G16_UNORM, R16G16, UNORM, T, U16NORM), 48bf215546Sopenharmony_ci AGX_FMT(R16G16B16A16_UNORM, R16G16B16A16, UNORM, T, U16NORM), 49bf215546Sopenharmony_ci 50bf215546Sopenharmony_ci AGX_FMT(R8_SRGB, R8, UNORM, T, SRGBA8), 51bf215546Sopenharmony_ci AGX_FMT(R8G8_SRGB, R8G8, UNORM, T, SRGBA8), 52bf215546Sopenharmony_ci AGX_FMT(R8G8B8A8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), 53bf215546Sopenharmony_ci AGX_FMT(A8R8G8B8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), 54bf215546Sopenharmony_ci AGX_FMT(A8B8G8R8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), 55bf215546Sopenharmony_ci AGX_FMT(B8G8R8A8_SRGB, R8G8B8A8, UNORM, T, SRGBA8), 56bf215546Sopenharmony_ci 57bf215546Sopenharmony_ci AGX_FMT(R8_SNORM, R8, SNORM, T, S8NORM), 58bf215546Sopenharmony_ci AGX_FMT(R8G8_SNORM, R8G8, SNORM, T, S8NORM), 59bf215546Sopenharmony_ci AGX_FMT(R8G8B8A8_SNORM, R8G8B8A8, SNORM, T, S8NORM), 60bf215546Sopenharmony_ci AGX_FMT(A8R8G8B8_SNORM, R8G8B8A8, SNORM, T, S8NORM), 61bf215546Sopenharmony_ci AGX_FMT(A8B8G8R8_SNORM, R8G8B8A8, SNORM, T, S8NORM), 62bf215546Sopenharmony_ci AGX_FMT(B8G8R8A8_SNORM, R8G8B8A8, SNORM, T, S8NORM), 63bf215546Sopenharmony_ci 64bf215546Sopenharmony_ci AGX_FMT(R16_FLOAT, R16, FLOAT, T, F16), 65bf215546Sopenharmony_ci AGX_FMT(R16G16_FLOAT, R16G16, FLOAT, T, F16), 66bf215546Sopenharmony_ci AGX_FMT(R16G16B16A16_FLOAT, R16G16B16A16, FLOAT, T, F16), 67bf215546Sopenharmony_ci 68bf215546Sopenharmony_ci AGX_FMT(R32_FLOAT, R32, FLOAT, T, I32), 69bf215546Sopenharmony_ci AGX_FMT(R32G32_FLOAT, R32G32, FLOAT, T, I32), 70bf215546Sopenharmony_ci AGX_FMT(R32G32B32A32_FLOAT, R32G32B32A32, FLOAT, T, I32), 71bf215546Sopenharmony_ci 72bf215546Sopenharmony_ci AGX_FMT(R8_UINT, R8, UINT, T, I8), 73bf215546Sopenharmony_ci AGX_FMT(R8G8_UINT, R8G8, UINT, T, I8), 74bf215546Sopenharmony_ci AGX_FMT(R8G8B8A8_UINT, R8G8B8A8, UINT, T, I8), 75bf215546Sopenharmony_ci 76bf215546Sopenharmony_ci AGX_FMT(R16_UINT, R16, UINT, T, I16), 77bf215546Sopenharmony_ci AGX_FMT(R16G16_UINT, R16G16, UINT, T, I16), 78bf215546Sopenharmony_ci AGX_FMT(R16G16B16A16_UINT, R16G16B16A16, UINT, T, I16), 79bf215546Sopenharmony_ci 80bf215546Sopenharmony_ci AGX_FMT(R32_UINT, R32, UINT, T, I32), 81bf215546Sopenharmony_ci AGX_FMT(R32G32_UINT, R32G32, UINT, T, I32), 82bf215546Sopenharmony_ci AGX_FMT(R32G32B32A32_UINT, R32G32B32A32, UINT, T, I32), 83bf215546Sopenharmony_ci 84bf215546Sopenharmony_ci AGX_FMT(R8_SINT, R8, SINT, T, I8), 85bf215546Sopenharmony_ci AGX_FMT(R8G8_SINT, R8G8, SINT, T, I8), 86bf215546Sopenharmony_ci AGX_FMT(R8G8B8A8_SINT, R8G8B8A8, SINT, T, I8), 87bf215546Sopenharmony_ci 88bf215546Sopenharmony_ci AGX_FMT(R16_SINT, R16, SINT, T, I16), 89bf215546Sopenharmony_ci AGX_FMT(R16G16_SINT, R16G16, SINT, T, I16), 90bf215546Sopenharmony_ci AGX_FMT(R16G16B16A16_SINT, R16G16B16A16, SINT, T, I16), 91bf215546Sopenharmony_ci 92bf215546Sopenharmony_ci AGX_FMT(R32_SINT, R32, SINT, T, I32), 93bf215546Sopenharmony_ci AGX_FMT(R32G32_SINT, R32G32, SINT, T, I32), 94bf215546Sopenharmony_ci AGX_FMT(R32G32B32A32_SINT, R32G32B32A32, SINT, T, I32), 95bf215546Sopenharmony_ci 96bf215546Sopenharmony_ci AGX_FMT(Z16_UNORM, R16, UNORM, F, _), 97bf215546Sopenharmony_ci AGX_FMT(Z32_FLOAT, R32, FLOAT, F, _), 98bf215546Sopenharmony_ci AGX_FMT(Z32_FLOAT_S8X24_UINT, R32, FLOAT, F, _), 99bf215546Sopenharmony_ci 100bf215546Sopenharmony_ci /* These must be lowered by u_transfer_helper to Z32F */ 101bf215546Sopenharmony_ci AGX_FMT(Z24X8_UNORM, R32, FLOAT, F, _), 102bf215546Sopenharmony_ci AGX_FMT(Z24_UNORM_S8_UINT, R32, FLOAT, F, _), 103bf215546Sopenharmony_ci 104bf215546Sopenharmony_ci AGX_FMT(R10G10B10A2_UNORM, R10G10B10A2, UNORM, T, RGB10A2), 105bf215546Sopenharmony_ci AGX_FMT(B10G10R10A2_UNORM, R10G10B10A2, UNORM, T, RGB10A2), 106bf215546Sopenharmony_ci 107bf215546Sopenharmony_ci AGX_FMT(R10G10B10A2_UINT, R10G10B10A2, UINT, T, _), 108bf215546Sopenharmony_ci AGX_FMT(B10G10R10A2_UINT, R10G10B10A2, UINT, T, _), 109bf215546Sopenharmony_ci 110bf215546Sopenharmony_ci AGX_FMT(R10G10B10A2_SINT, R10G10B10A2, SINT, T, _), 111bf215546Sopenharmony_ci AGX_FMT(B10G10R10A2_SINT, R10G10B10A2, SINT, T, _), 112bf215546Sopenharmony_ci 113bf215546Sopenharmony_ci AGX_FMT(R11G11B10_FLOAT, R11G11B10, FLOAT, T, RG11B10F), 114bf215546Sopenharmony_ci AGX_FMT(R9G9B9E5_FLOAT, R9G9B9E5, FLOAT, F, RGB9E5), 115bf215546Sopenharmony_ci 116bf215546Sopenharmony_ci AGX_FMT(ETC2_RGB8, ETC2_RGB8, UNORM, F,_), 117bf215546Sopenharmony_ci AGX_FMT(ETC2_SRGB8, ETC2_RGB8, UNORM, F,_), 118bf215546Sopenharmony_ci AGX_FMT(ETC2_RGB8A1, ETC2_RGB8A1, UNORM, F,_), 119bf215546Sopenharmony_ci AGX_FMT(ETC2_SRGB8A1, ETC2_RGB8A1, UNORM, F,_), 120bf215546Sopenharmony_ci AGX_FMT(ETC2_RGBA8, ETC2_RGBA8, UNORM, F,_), 121bf215546Sopenharmony_ci AGX_FMT(ETC2_SRGBA8, ETC2_RGBA8, UNORM, F,_), 122bf215546Sopenharmony_ci AGX_FMT(ETC2_R11_UNORM, EAC_R11, UNORM, F,_), 123bf215546Sopenharmony_ci AGX_FMT(ETC2_R11_SNORM, EAC_R11, SNORM, F,_), 124bf215546Sopenharmony_ci AGX_FMT(ETC2_RG11_UNORM, EAC_RG11, UNORM, F,_), 125bf215546Sopenharmony_ci AGX_FMT(ETC2_RG11_SNORM, EAC_RG11, SNORM, F,_), 126bf215546Sopenharmony_ci}; 127bf215546Sopenharmony_ci 128bf215546Sopenharmony_ciconst enum agx_format 129bf215546Sopenharmony_ciagx_vertex_format[PIPE_FORMAT_COUNT] = { 130bf215546Sopenharmony_ci [PIPE_FORMAT_R32_FLOAT] = AGX_FORMAT_I32, 131bf215546Sopenharmony_ci [PIPE_FORMAT_R32_SINT] = AGX_FORMAT_I32, 132bf215546Sopenharmony_ci [PIPE_FORMAT_R32_UINT] = AGX_FORMAT_I32, 133bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32_FLOAT] = AGX_FORMAT_I32, 134bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32_SINT] = AGX_FORMAT_I32, 135bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32_UINT] = AGX_FORMAT_I32, 136bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32_FLOAT] = AGX_FORMAT_I32, 137bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32_UINT] = AGX_FORMAT_I32, 138bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32_SINT] = AGX_FORMAT_I32, 139bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32A32_FLOAT] = AGX_FORMAT_I32, 140bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32A32_UINT] = AGX_FORMAT_I32, 141bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32A32_SINT] = AGX_FORMAT_I32, 142bf215546Sopenharmony_ci 143bf215546Sopenharmony_ci [PIPE_FORMAT_R8_UNORM] = AGX_FORMAT_U8NORM, 144bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8_UNORM] = AGX_FORMAT_U8NORM, 145bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8_UNORM] = AGX_FORMAT_U8NORM, 146bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8A8_UNORM] = AGX_FORMAT_U8NORM, 147bf215546Sopenharmony_ci 148bf215546Sopenharmony_ci [PIPE_FORMAT_R8_SNORM] = AGX_FORMAT_S8NORM, 149bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8_SNORM] = AGX_FORMAT_S8NORM, 150bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8_SNORM] = AGX_FORMAT_S8NORM, 151bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8A8_SNORM] = AGX_FORMAT_S8NORM, 152bf215546Sopenharmony_ci 153bf215546Sopenharmony_ci [PIPE_FORMAT_R16_UNORM] = AGX_FORMAT_U16NORM, 154bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16_UNORM] = AGX_FORMAT_U16NORM, 155bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16_UNORM] = AGX_FORMAT_U16NORM, 156bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16A16_UNORM] = AGX_FORMAT_U16NORM, 157bf215546Sopenharmony_ci 158bf215546Sopenharmony_ci [PIPE_FORMAT_R16_SNORM] = AGX_FORMAT_S16NORM, 159bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16_SNORM] = AGX_FORMAT_S16NORM, 160bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16_SNORM] = AGX_FORMAT_S16NORM, 161bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16A16_SNORM] = AGX_FORMAT_S16NORM, 162bf215546Sopenharmony_ci 163bf215546Sopenharmony_ci [PIPE_FORMAT_R8_UINT] = AGX_FORMAT_I8, 164bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8_UINT] = AGX_FORMAT_I8, 165bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8_UINT] = AGX_FORMAT_I8, 166bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8A8_UINT] = AGX_FORMAT_I8, 167bf215546Sopenharmony_ci 168bf215546Sopenharmony_ci [PIPE_FORMAT_R8_SINT] = AGX_FORMAT_I8, 169bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8_SINT] = AGX_FORMAT_I8, 170bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8_SINT] = AGX_FORMAT_I8, 171bf215546Sopenharmony_ci [PIPE_FORMAT_R8G8B8A8_SINT] = AGX_FORMAT_I8, 172bf215546Sopenharmony_ci 173bf215546Sopenharmony_ci [PIPE_FORMAT_R16_UINT] = AGX_FORMAT_I16, 174bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16_UINT] = AGX_FORMAT_I16, 175bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16_UINT] = AGX_FORMAT_I16, 176bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16A16_UINT] = AGX_FORMAT_I16, 177bf215546Sopenharmony_ci 178bf215546Sopenharmony_ci [PIPE_FORMAT_R16_SINT] = AGX_FORMAT_I16, 179bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16_SINT] = AGX_FORMAT_I16, 180bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16_SINT] = AGX_FORMAT_I16, 181bf215546Sopenharmony_ci [PIPE_FORMAT_R16G16B16A16_SINT] = AGX_FORMAT_I16, 182bf215546Sopenharmony_ci 183bf215546Sopenharmony_ci [PIPE_FORMAT_R32_UINT] = AGX_FORMAT_I32, 184bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32_UINT] = AGX_FORMAT_I32, 185bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32_UINT] = AGX_FORMAT_I32, 186bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32A32_UINT] = AGX_FORMAT_I32, 187bf215546Sopenharmony_ci 188bf215546Sopenharmony_ci [PIPE_FORMAT_R32_SINT] = AGX_FORMAT_I32, 189bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32_SINT] = AGX_FORMAT_I32, 190bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32_SINT] = AGX_FORMAT_I32, 191bf215546Sopenharmony_ci [PIPE_FORMAT_R32G32B32A32_SINT] = AGX_FORMAT_I32, 192bf215546Sopenharmony_ci}; 193