+ case MESA_FORMAT_B10G10R10A2_UINT:
+ return PIPE_FORMAT_B10G10R10A2_UINT;
+ case MESA_FORMAT_R10G10B10A2_UINT:
+ return PIPE_FORMAT_R10G10B10A2_UINT;
+
+ case MESA_FORMAT_B4G4R4X4_UNORM:
+ return PIPE_FORMAT_B4G4R4X4_UNORM;
+ case MESA_FORMAT_B5G5R5X1_UNORM:
+ return PIPE_FORMAT_B5G5R5X1_UNORM;
+ case MESA_FORMAT_X1B5G5R5_UNORM:
+ return PIPE_FORMAT_X1B5G5R5_UNORM;
+ case MESA_FORMAT_R8G8B8X8_SNORM:
+ return PIPE_FORMAT_RGBX8888_SNORM;
+ case MESA_FORMAT_X8B8G8R8_SNORM:
+ return PIPE_FORMAT_XBGR8888_SNORM;
+ case MESA_FORMAT_R8G8B8X8_SRGB:
+ return PIPE_FORMAT_RGBX8888_SRGB;
+ case MESA_FORMAT_X8B8G8R8_SRGB:
+ return PIPE_FORMAT_XBGR8888_SRGB;
+ case MESA_FORMAT_RGBX_UINT8:
+ return PIPE_FORMAT_R8G8B8X8_UINT;
+ case MESA_FORMAT_RGBX_SINT8:
+ return PIPE_FORMAT_R8G8B8X8_SINT;
+ case MESA_FORMAT_B10G10R10X2_UNORM:
+ return PIPE_FORMAT_B10G10R10X2_UNORM;
+ case MESA_FORMAT_RGBX_UNORM16:
+ return PIPE_FORMAT_R16G16B16X16_UNORM;
+ case MESA_FORMAT_RGBX_SNORM16:
+ return PIPE_FORMAT_R16G16B16X16_SNORM;
+ case MESA_FORMAT_RGBX_FLOAT16:
+ return PIPE_FORMAT_R16G16B16X16_FLOAT;
+ case MESA_FORMAT_RGBX_UINT16:
+ return PIPE_FORMAT_R16G16B16X16_UINT;
+ case MESA_FORMAT_RGBX_SINT16:
+ return PIPE_FORMAT_R16G16B16X16_SINT;
+ case MESA_FORMAT_RGBX_FLOAT32:
+ return PIPE_FORMAT_R32G32B32X32_FLOAT;
+ case MESA_FORMAT_RGBX_UINT32:
+ return PIPE_FORMAT_R32G32B32X32_UINT;
+ case MESA_FORMAT_RGBX_SINT32:
+ return PIPE_FORMAT_R32G32B32X32_SINT;
+
+ case MESA_FORMAT_B8G8R8X8_SRGB:
+ return PIPE_FORMAT_BGRX8888_SRGB;
+ case MESA_FORMAT_X8R8G8B8_SRGB:
+ return PIPE_FORMAT_XRGB8888_SRGB;
+
+ /* ETC2 formats are emulated as uncompressed ones.
+ * The destination formats mustn't be changed, because they are also
+ * destination formats of the unpack/decompression function. */
+ case MESA_FORMAT_ETC2_RGB8:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_RGB8 : PIPE_FORMAT_R8G8B8A8_UNORM;
+ case MESA_FORMAT_ETC2_SRGB8:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_SRGB8 :
+ has_bgra_srgb ? PIPE_FORMAT_B8G8R8A8_SRGB : PIPE_FORMAT_R8G8B8A8_SRGB;
+ case MESA_FORMAT_ETC2_RGBA8_EAC:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_RGBA8 : PIPE_FORMAT_R8G8B8A8_UNORM;
+ case MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_SRGBA8 :
+ has_bgra_srgb ? PIPE_FORMAT_B8G8R8A8_SRGB : PIPE_FORMAT_R8G8B8A8_SRGB;
+ case MESA_FORMAT_ETC2_R11_EAC:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_R11_UNORM : PIPE_FORMAT_R16_UNORM;
+ case MESA_FORMAT_ETC2_RG11_EAC:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_RG11_UNORM : PIPE_FORMAT_R16G16_UNORM;
+ case MESA_FORMAT_ETC2_SIGNED_R11_EAC:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_R11_SNORM : PIPE_FORMAT_R16_SNORM;
+ case MESA_FORMAT_ETC2_SIGNED_RG11_EAC:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_RG11_SNORM : PIPE_FORMAT_R16G16_SNORM;
+ case MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_RGB8A1 : PIPE_FORMAT_R8G8B8A8_UNORM;
+ case MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1:
+ return st->has_etc2 ? PIPE_FORMAT_ETC2_SRGB8A1 :
+ has_bgra_srgb ? PIPE_FORMAT_B8G8R8A8_SRGB : PIPE_FORMAT_R8G8B8A8_SRGB;
+
+ case MESA_FORMAT_RGBA_ASTC_4x4:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_4x4;
+ case MESA_FORMAT_RGBA_ASTC_5x4:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_5x4;
+ case MESA_FORMAT_RGBA_ASTC_5x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_5x5;
+ case MESA_FORMAT_RGBA_ASTC_6x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_6x5;
+ case MESA_FORMAT_RGBA_ASTC_6x6:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_6x6;
+ case MESA_FORMAT_RGBA_ASTC_8x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_8x5;
+ case MESA_FORMAT_RGBA_ASTC_8x6:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_8x6;
+ case MESA_FORMAT_RGBA_ASTC_8x8:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_8x8;
+ case MESA_FORMAT_RGBA_ASTC_10x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_10x5;
+ case MESA_FORMAT_RGBA_ASTC_10x6:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_10x6;
+ case MESA_FORMAT_RGBA_ASTC_10x8:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_10x8;
+ case MESA_FORMAT_RGBA_ASTC_10x10:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_10x10;
+ case MESA_FORMAT_RGBA_ASTC_12x10:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_12x10;
+ case MESA_FORMAT_RGBA_ASTC_12x12:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_UNORM;
+ return PIPE_FORMAT_ASTC_12x12;
+
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_4x4_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_5x4_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_5x5_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_6x5_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_6x6_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_8x5_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_8x6_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_8x8_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_10x5_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_10x6_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_10x8_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_10x10_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_12x10_SRGB;
+ case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12:
+ if (!st->has_astc_2d_ldr)
+ return PIPE_FORMAT_R8G8B8A8_SRGB;
+ return PIPE_FORMAT_ASTC_12x12_SRGB;