1b8e80941Smrg/* 2b8e80941Smrg * Copyright 2017 Google 3b8e80941Smrg * 4b8e80941Smrg * Permission is hereby granted, free of charge, to any person obtaining a 5b8e80941Smrg * copy of this software and associated documentation files (the 6b8e80941Smrg * "Software"), to deal in the Software without restriction, including 7b8e80941Smrg * without limitation the rights to use, copy, modify, merge, publish, 8b8e80941Smrg * distribute, sub license, and/or sell copies of the Software, and to 9b8e80941Smrg * permit persons to whom the Software is furnished to do so, subject to 10b8e80941Smrg * the following conditions: 11b8e80941Smrg * 12b8e80941Smrg * The above copyright notice and this permission notice (including the 13b8e80941Smrg * next paragraph) shall be included in all copies or substantial portions 14b8e80941Smrg * of the Software. 15b8e80941Smrg * 16b8e80941Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17b8e80941Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18b8e80941Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19b8e80941Smrg * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 20b8e80941Smrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21b8e80941Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22b8e80941Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23b8e80941Smrg */ 24b8e80941Smrg 25b8e80941Smrg#include "formats.h" 26b8e80941Smrg#include "util/macros.h" 27b8e80941Smrg 28b8e80941Smrg/** 29b8e80941Smrg * For an sRGB format, return the corresponding linear color space format. 30b8e80941Smrg * For non-sRGB formats, return the format as-is. 31b8e80941Smrg */ 32b8e80941Smrgmesa_format 33b8e80941Smrg_mesa_get_srgb_format_linear(mesa_format format) 34b8e80941Smrg{ 35b8e80941Smrg switch (format) { 36b8e80941Smrg case MESA_FORMAT_A8B8G8R8_SRGB: 37b8e80941Smrg return MESA_FORMAT_A8B8G8R8_UNORM; 38b8e80941Smrg case MESA_FORMAT_B8G8R8A8_SRGB: 39b8e80941Smrg return MESA_FORMAT_B8G8R8A8_UNORM; 40b8e80941Smrg case MESA_FORMAT_A8R8G8B8_SRGB: 41b8e80941Smrg return MESA_FORMAT_A8R8G8B8_UNORM; 42b8e80941Smrg case MESA_FORMAT_B8G8R8X8_SRGB: 43b8e80941Smrg return MESA_FORMAT_B8G8R8X8_UNORM; 44b8e80941Smrg case MESA_FORMAT_X8R8G8B8_SRGB: 45b8e80941Smrg return MESA_FORMAT_X8R8G8B8_UNORM; 46b8e80941Smrg case MESA_FORMAT_R8G8B8A8_SRGB: 47b8e80941Smrg return MESA_FORMAT_R8G8B8A8_UNORM; 48b8e80941Smrg case MESA_FORMAT_R8G8B8X8_SRGB: 49b8e80941Smrg return MESA_FORMAT_R8G8B8X8_UNORM; 50b8e80941Smrg case MESA_FORMAT_X8B8G8R8_SRGB: 51b8e80941Smrg return MESA_FORMAT_X8B8G8R8_UNORM; 52b8e80941Smrg case MESA_FORMAT_L8A8_SRGB: 53b8e80941Smrg return MESA_FORMAT_L8A8_UNORM; 54b8e80941Smrg case MESA_FORMAT_A8L8_SRGB: 55b8e80941Smrg return MESA_FORMAT_A8L8_UNORM; 56b8e80941Smrg case MESA_FORMAT_R_SRGB8: 57b8e80941Smrg return MESA_FORMAT_R_UNORM8; 58b8e80941Smrg case MESA_FORMAT_L_SRGB8: 59b8e80941Smrg return MESA_FORMAT_L_UNORM8; 60b8e80941Smrg case MESA_FORMAT_BGR_SRGB8: 61b8e80941Smrg return MESA_FORMAT_BGR_UNORM8; 62b8e80941Smrg case MESA_FORMAT_SRGB_DXT1: 63b8e80941Smrg return MESA_FORMAT_RGB_DXT1; 64b8e80941Smrg case MESA_FORMAT_SRGBA_DXT1: 65b8e80941Smrg return MESA_FORMAT_RGBA_DXT1; 66b8e80941Smrg case MESA_FORMAT_SRGBA_DXT3: 67b8e80941Smrg return MESA_FORMAT_RGBA_DXT3; 68b8e80941Smrg case MESA_FORMAT_SRGBA_DXT5: 69b8e80941Smrg return MESA_FORMAT_RGBA_DXT5; 70b8e80941Smrg case MESA_FORMAT_ETC2_SRGB8: 71b8e80941Smrg return MESA_FORMAT_ETC2_RGB8; 72b8e80941Smrg case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC: 73b8e80941Smrg return MESA_FORMAT_ETC2_RGBA8_EAC; 74b8e80941Smrg case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1: 75b8e80941Smrg return MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1; 76b8e80941Smrg case MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM: 77b8e80941Smrg return MESA_FORMAT_BPTC_RGBA_UNORM; 78b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4: 79b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_4x4; 80b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4: 81b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_5x4; 82b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5: 83b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_5x5; 84b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5: 85b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_6x5; 86b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6: 87b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_6x6; 88b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5: 89b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_8x5; 90b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6: 91b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_8x6; 92b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8: 93b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_8x8; 94b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5: 95b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_10x5; 96b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6: 97b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_10x6; 98b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8: 99b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_10x8; 100b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10: 101b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_10x10; 102b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10: 103b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_12x10; 104b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12: 105b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_12x12; 106b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_3x3x3: 107b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_3x3x3; 108b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x3x3: 109b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_4x3x3; 110b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x3: 111b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_4x4x3; 112b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x4: 113b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_4x4x4; 114b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4x4: 115b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_5x4x4; 116b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x4: 117b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_5x5x4; 118b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x5: 119b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_5x5x5; 120b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5x5: 121b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_6x5x5; 122b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x5: 123b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_6x6x5; 124b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x6: 125b8e80941Smrg return MESA_FORMAT_RGBA_ASTC_6x6x6; 126b8e80941Smrg default: 127b8e80941Smrg return format; 128b8e80941Smrg } 129b8e80941Smrg} 130b8e80941Smrg 131b8e80941Smrg/** 132b8e80941Smrg * For a linear format, return the corresponding sRGB color space format. 133b8e80941Smrg * For an sRGB format, return the format as-is. 134b8e80941Smrg * Assert-fails if the format is not sRGB and does not have an sRGB equivalent. 135b8e80941Smrg */ 136b8e80941Smrgmesa_format 137b8e80941Smrg_mesa_get_linear_format_srgb(mesa_format format) 138b8e80941Smrg{ 139b8e80941Smrg switch (format) { 140b8e80941Smrg case MESA_FORMAT_A8B8G8R8_UNORM: 141b8e80941Smrg return MESA_FORMAT_A8B8G8R8_SRGB; 142b8e80941Smrg case MESA_FORMAT_B8G8R8A8_UNORM: 143b8e80941Smrg return MESA_FORMAT_B8G8R8A8_SRGB; 144b8e80941Smrg case MESA_FORMAT_A8R8G8B8_UNORM: 145b8e80941Smrg return MESA_FORMAT_A8R8G8B8_SRGB; 146b8e80941Smrg case MESA_FORMAT_B8G8R8X8_UNORM: 147b8e80941Smrg return MESA_FORMAT_B8G8R8X8_SRGB; 148b8e80941Smrg case MESA_FORMAT_X8R8G8B8_UNORM: 149b8e80941Smrg return MESA_FORMAT_X8R8G8B8_SRGB; 150b8e80941Smrg case MESA_FORMAT_R8G8B8A8_UNORM: 151b8e80941Smrg return MESA_FORMAT_R8G8B8A8_SRGB; 152b8e80941Smrg case MESA_FORMAT_R8G8B8X8_UNORM: 153b8e80941Smrg return MESA_FORMAT_R8G8B8X8_SRGB; 154b8e80941Smrg case MESA_FORMAT_X8B8G8R8_UNORM: 155b8e80941Smrg return MESA_FORMAT_X8B8G8R8_SRGB; 156b8e80941Smrg case MESA_FORMAT_L8A8_UNORM: 157b8e80941Smrg return MESA_FORMAT_L8A8_SRGB; 158b8e80941Smrg case MESA_FORMAT_A8L8_UNORM: 159b8e80941Smrg return MESA_FORMAT_A8L8_SRGB; 160b8e80941Smrg case MESA_FORMAT_R_UNORM8: 161b8e80941Smrg return MESA_FORMAT_R_SRGB8; 162b8e80941Smrg case MESA_FORMAT_L_UNORM8: 163b8e80941Smrg return MESA_FORMAT_L_SRGB8; 164b8e80941Smrg case MESA_FORMAT_BGR_UNORM8: 165b8e80941Smrg return MESA_FORMAT_BGR_SRGB8; 166b8e80941Smrg case MESA_FORMAT_RGB_DXT1: 167b8e80941Smrg return MESA_FORMAT_SRGB_DXT1; 168b8e80941Smrg case MESA_FORMAT_RGBA_DXT1: 169b8e80941Smrg return MESA_FORMAT_SRGBA_DXT1; 170b8e80941Smrg case MESA_FORMAT_RGBA_DXT3: 171b8e80941Smrg return MESA_FORMAT_SRGBA_DXT3; 172b8e80941Smrg case MESA_FORMAT_RGBA_DXT5: 173b8e80941Smrg return MESA_FORMAT_SRGBA_DXT5; 174b8e80941Smrg case MESA_FORMAT_ETC2_RGB8: 175b8e80941Smrg return MESA_FORMAT_ETC2_SRGB8; 176b8e80941Smrg case MESA_FORMAT_ETC2_RGBA8_EAC: 177b8e80941Smrg return MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC; 178b8e80941Smrg case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1: 179b8e80941Smrg return MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1; 180b8e80941Smrg case MESA_FORMAT_BPTC_RGBA_UNORM: 181b8e80941Smrg return MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM; 182b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_4x4: 183b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4; 184b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_5x4: 185b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4; 186b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_5x5: 187b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5; 188b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_6x5: 189b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5; 190b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_6x6: 191b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6; 192b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_8x5: 193b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5; 194b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_8x6: 195b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6; 196b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_8x8: 197b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8; 198b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_10x5: 199b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5; 200b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_10x6: 201b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6; 202b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_10x8: 203b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8; 204b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_10x10: 205b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10; 206b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_12x10: 207b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10; 208b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_12x12: 209b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12; 210b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_3x3x3: 211b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_3x3x3; 212b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_4x3x3: 213b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x3x3; 214b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_4x4x3: 215b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x3; 216b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_4x4x4: 217b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x4; 218b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_5x4x4: 219b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4x4; 220b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_5x5x4: 221b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x4; 222b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_5x5x5: 223b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x5; 224b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_6x5x5: 225b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5x5; 226b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_6x6x5: 227b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x5; 228b8e80941Smrg case MESA_FORMAT_RGBA_ASTC_6x6x6: 229b8e80941Smrg return MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x6; 230b8e80941Smrg case MESA_FORMAT_A8B8G8R8_SRGB: 231b8e80941Smrg case MESA_FORMAT_B8G8R8A8_SRGB: 232b8e80941Smrg case MESA_FORMAT_A8R8G8B8_SRGB: 233b8e80941Smrg case MESA_FORMAT_B8G8R8X8_SRGB: 234b8e80941Smrg case MESA_FORMAT_X8R8G8B8_SRGB: 235b8e80941Smrg case MESA_FORMAT_R8G8B8A8_SRGB: 236b8e80941Smrg case MESA_FORMAT_R8G8B8X8_SRGB: 237b8e80941Smrg case MESA_FORMAT_X8B8G8R8_SRGB: 238b8e80941Smrg case MESA_FORMAT_L8A8_SRGB: 239b8e80941Smrg case MESA_FORMAT_A8L8_SRGB: 240b8e80941Smrg case MESA_FORMAT_R_SRGB8: 241b8e80941Smrg case MESA_FORMAT_L_SRGB8: 242b8e80941Smrg case MESA_FORMAT_BGR_SRGB8: 243b8e80941Smrg case MESA_FORMAT_SRGB_DXT1: 244b8e80941Smrg case MESA_FORMAT_SRGBA_DXT1: 245b8e80941Smrg case MESA_FORMAT_SRGBA_DXT3: 246b8e80941Smrg case MESA_FORMAT_SRGBA_DXT5: 247b8e80941Smrg case MESA_FORMAT_ETC2_SRGB8: 248b8e80941Smrg case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC: 249b8e80941Smrg case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1: 250b8e80941Smrg case MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM: 251b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4: 252b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4: 253b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5: 254b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5: 255b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6: 256b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5: 257b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6: 258b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8: 259b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5: 260b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6: 261b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8: 262b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10: 263b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10: 264b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12: 265b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_3x3x3: 266b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x3x3: 267b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x3: 268b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x4: 269b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4x4: 270b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x4: 271b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x5: 272b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5x5: 273b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x5: 274b8e80941Smrg case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x6: 275b8e80941Smrg return format; 276b8e80941Smrg default: 277b8e80941Smrg unreachable("Given format does not have an sRGB equivalent"); 278b8e80941Smrg } 279b8e80941Smrg} 280b8e80941Smrg 281b8e80941Smrg/** 282b8e80941Smrg * If the format has an alpha channel, and there exists a non-alpha 283b8e80941Smrg * variant of the format with an identical bit layout, then return 284b8e80941Smrg * the non-alpha format. Otherwise return the original format. 285b8e80941Smrg * 286b8e80941Smrg * Examples: 287b8e80941Smrg * Fallback exists: 288b8e80941Smrg * MESA_FORMAT_R8G8B8X8_UNORM -> MESA_FORMAT_R8G8B8A8_UNORM 289b8e80941Smrg * MESA_FORMAT_RGBX_UNORM16 -> MESA_FORMAT_RGBA_UNORM16 290b8e80941Smrg * 291b8e80941Smrg * No fallback: 292b8e80941Smrg * MESA_FORMAT_R8G8B8A8_UNORM -> MESA_FORMAT_R8G8B8A8_UNORM 293b8e80941Smrg * MESA_FORMAT_Z_FLOAT32 -> MESA_FORMAT_Z_FLOAT32 294b8e80941Smrg */ 295b8e80941Smrgmesa_format 296b8e80941Smrg_mesa_format_fallback_rgbx_to_rgba(mesa_format format) 297b8e80941Smrg{ 298b8e80941Smrg switch (format) { 299b8e80941Smrg case MESA_FORMAT_X8B8G8R8_UNORM: 300b8e80941Smrg return MESA_FORMAT_A8B8G8R8_UNORM; 301b8e80941Smrg case MESA_FORMAT_R8G8B8X8_UNORM: 302b8e80941Smrg return MESA_FORMAT_R8G8B8A8_UNORM; 303b8e80941Smrg case MESA_FORMAT_B8G8R8X8_UNORM: 304b8e80941Smrg return MESA_FORMAT_B8G8R8A8_UNORM; 305b8e80941Smrg case MESA_FORMAT_X8R8G8B8_UNORM: 306b8e80941Smrg return MESA_FORMAT_A8R8G8B8_UNORM; 307b8e80941Smrg case MESA_FORMAT_B4G4R4X4_UNORM: 308b8e80941Smrg return MESA_FORMAT_B4G4R4A4_UNORM; 309b8e80941Smrg case MESA_FORMAT_X1B5G5R5_UNORM: 310b8e80941Smrg return MESA_FORMAT_A1B5G5R5_UNORM; 311b8e80941Smrg case MESA_FORMAT_B5G5R5X1_UNORM: 312b8e80941Smrg return MESA_FORMAT_B5G5R5A1_UNORM; 313b8e80941Smrg case MESA_FORMAT_B10G10R10X2_UNORM: 314b8e80941Smrg return MESA_FORMAT_B10G10R10A2_UNORM; 315b8e80941Smrg case MESA_FORMAT_R10G10B10X2_UNORM: 316b8e80941Smrg return MESA_FORMAT_R10G10B10A2_UNORM; 317b8e80941Smrg case MESA_FORMAT_RGBX_UNORM16: 318b8e80941Smrg return MESA_FORMAT_RGBA_UNORM16; 319b8e80941Smrg case MESA_FORMAT_X8B8G8R8_SNORM: 320b8e80941Smrg return MESA_FORMAT_A8B8G8R8_SNORM; 321b8e80941Smrg case MESA_FORMAT_R8G8B8X8_SNORM: 322b8e80941Smrg return MESA_FORMAT_R8G8B8A8_SNORM; 323b8e80941Smrg case MESA_FORMAT_RGBX_SNORM16: 324b8e80941Smrg return MESA_FORMAT_RGBA_SNORM16; 325b8e80941Smrg case MESA_FORMAT_B8G8R8X8_SRGB: 326b8e80941Smrg return MESA_FORMAT_B8G8R8A8_SRGB; 327b8e80941Smrg case MESA_FORMAT_X8R8G8B8_SRGB: 328b8e80941Smrg return MESA_FORMAT_A8R8G8B8_SRGB; 329b8e80941Smrg case MESA_FORMAT_R8G8B8X8_SRGB: 330b8e80941Smrg return MESA_FORMAT_R8G8B8A8_SRGB; 331b8e80941Smrg case MESA_FORMAT_X8B8G8R8_SRGB: 332b8e80941Smrg return MESA_FORMAT_A8B8G8R8_SRGB; 333b8e80941Smrg case MESA_FORMAT_RGBX_FLOAT16: 334b8e80941Smrg return MESA_FORMAT_RGBA_FLOAT16; 335b8e80941Smrg case MESA_FORMAT_RGBX_FLOAT32: 336b8e80941Smrg return MESA_FORMAT_RGBA_FLOAT32; 337b8e80941Smrg case MESA_FORMAT_RGBX_UINT8: 338b8e80941Smrg return MESA_FORMAT_RGBA_UINT8; 339b8e80941Smrg case MESA_FORMAT_RGBX_UINT16: 340b8e80941Smrg return MESA_FORMAT_RGBA_UINT16; 341b8e80941Smrg case MESA_FORMAT_RGBX_UINT32: 342b8e80941Smrg return MESA_FORMAT_RGBA_UINT32; 343b8e80941Smrg case MESA_FORMAT_RGBX_SINT8: 344b8e80941Smrg return MESA_FORMAT_RGBA_SINT8; 345b8e80941Smrg case MESA_FORMAT_RGBX_SINT16: 346b8e80941Smrg return MESA_FORMAT_RGBA_SINT16; 347b8e80941Smrg case MESA_FORMAT_RGBX_SINT32: 348b8e80941Smrg return MESA_FORMAT_RGBA_SINT32; 349b8e80941Smrg default: 350b8e80941Smrg return format; 351b8e80941Smrg } 352b8e80941Smrg} 353