Home | History | Annotate | Download | only in svga
      1 /**********************************************************
      2  * Copyright 2011 VMware, Inc.  All rights reserved.
      3  *
      4  * Permission is hereby granted, free of charge, to any person
      5  * obtaining a copy of this software and associated documentation
      6  * files (the "Software"), to deal in the Software without
      7  * restriction, including without limitation the rights to use, copy,
      8  * modify, merge, publish, distribute, sublicense, and/or sell copies
      9  * of the Software, and to permit persons to whom the Software is
     10  * furnished to do so, subject to the following conditions:
     11  *
     12  * The above copyright notice and this permission notice shall be
     13  * included in all copies or substantial portions of the Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     22  * SOFTWARE.
     23  *
     24  **********************************************************/
     25 
     26 
     27 #include "pipe/p_format.h"
     28 #include "util/u_debug.h"
     29 #include "util/u_format.h"
     30 #include "util/u_memory.h"
     31 
     32 #include "svga_winsys.h"
     33 #include "svga_screen.h"
     34 #include "svga_format.h"
     35 
     36 
     37 /** Describes mapping from gallium formats to SVGA vertex/pixel formats */
     38 struct vgpu10_format_entry
     39 {
     40    enum pipe_format pformat;
     41    SVGA3dSurfaceFormat vertex_format;
     42    SVGA3dSurfaceFormat pixel_format;
     43    unsigned flags;
     44 };
     45 
     46 
     47 static const struct vgpu10_format_entry format_conversion_table[] =
     48 {
     49    /* Gallium format                    SVGA3D vertex format        SVGA3D pixel format          Flags */
     50    { PIPE_FORMAT_NONE,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     51    { PIPE_FORMAT_B8G8R8A8_UNORM,        SVGA3D_B8G8R8A8_UNORM,      SVGA3D_B8G8R8A8_UNORM,       TF_GEN_MIPS },
     52    { PIPE_FORMAT_B8G8R8X8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_B8G8R8X8_UNORM,       TF_GEN_MIPS },
     53    { PIPE_FORMAT_A8R8G8B8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     54    { PIPE_FORMAT_X8R8G8B8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     55    { PIPE_FORMAT_B5G5R5A1_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_B5G5R5A1_UNORM,       TF_GEN_MIPS },
     56    { PIPE_FORMAT_B4G4R4A4_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     57    { PIPE_FORMAT_B5G6R5_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_B5G6R5_UNORM,         TF_GEN_MIPS },
     58    { PIPE_FORMAT_R10G10B10A2_UNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_R10G10B10A2_UNORM,    TF_GEN_MIPS },
     59    { PIPE_FORMAT_L8_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     60    { PIPE_FORMAT_A8_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_A8_UNORM,             TF_GEN_MIPS },
     61    { PIPE_FORMAT_I8_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     62    { PIPE_FORMAT_L8A8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     63    { PIPE_FORMAT_L16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     64    { PIPE_FORMAT_UYVY,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     65    { PIPE_FORMAT_YUYV,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     66    { PIPE_FORMAT_Z16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_D16_UNORM,            0 },
     67    { PIPE_FORMAT_Z32_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     68    { PIPE_FORMAT_Z32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_D32_FLOAT,            0 },
     69    { PIPE_FORMAT_Z24_UNORM_S8_UINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_D24_UNORM_S8_UINT,    0 },
     70    { PIPE_FORMAT_S8_UINT_Z24_UNORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     71    { PIPE_FORMAT_Z24X8_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_D24_UNORM_S8_UINT,    0 },
     72    { PIPE_FORMAT_X8Z24_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     73    { PIPE_FORMAT_S8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     74    { PIPE_FORMAT_R64_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     75    { PIPE_FORMAT_R64G64_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     76    { PIPE_FORMAT_R64G64B64_FLOAT,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     77    { PIPE_FORMAT_R64G64B64A64_FLOAT,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     78    { PIPE_FORMAT_R32_FLOAT,             SVGA3D_R32_FLOAT,           SVGA3D_R32_FLOAT,            TF_GEN_MIPS },
     79    { PIPE_FORMAT_R32G32_FLOAT,          SVGA3D_R32G32_FLOAT,        SVGA3D_R32G32_FLOAT,         TF_GEN_MIPS },
     80    { PIPE_FORMAT_R32G32B32_FLOAT,       SVGA3D_R32G32B32_FLOAT,     SVGA3D_R32G32B32_FLOAT,      TF_GEN_MIPS },
     81    { PIPE_FORMAT_R32G32B32A32_FLOAT,    SVGA3D_R32G32B32A32_FLOAT,  SVGA3D_R32G32B32A32_FLOAT,   TF_GEN_MIPS },
     82    { PIPE_FORMAT_R32_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     83    { PIPE_FORMAT_R32G32_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     84    { PIPE_FORMAT_R32G32B32_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     85    { PIPE_FORMAT_R32G32B32A32_UNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     86    { PIPE_FORMAT_R32_USCALED,           SVGA3D_R32_UINT,            SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
     87    { PIPE_FORMAT_R32G32_USCALED,        SVGA3D_R32G32_UINT,         SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
     88    { PIPE_FORMAT_R32G32B32_USCALED,     SVGA3D_R32G32B32_UINT,      SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
     89    { PIPE_FORMAT_R32G32B32A32_USCALED,  SVGA3D_R32G32B32A32_UINT,   SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
     90    { PIPE_FORMAT_R32_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     91    { PIPE_FORMAT_R32G32_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     92    { PIPE_FORMAT_R32G32B32_SNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     93    { PIPE_FORMAT_R32G32B32A32_SNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
     94    { PIPE_FORMAT_R32_SSCALED,           SVGA3D_R32_SINT,            SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
     95    { PIPE_FORMAT_R32G32_SSCALED,        SVGA3D_R32G32_SINT,         SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
     96    { PIPE_FORMAT_R32G32B32_SSCALED,     SVGA3D_R32G32B32_SINT,      SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
     97    { PIPE_FORMAT_R32G32B32A32_SSCALED,  SVGA3D_R32G32B32A32_SINT,   SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
     98    { PIPE_FORMAT_R16_UNORM,             SVGA3D_R16_UNORM,           SVGA3D_R16_UNORM,            TF_GEN_MIPS },
     99    { PIPE_FORMAT_R16G16_UNORM,          SVGA3D_R16G16_UNORM,        SVGA3D_R16G16_UNORM,         TF_GEN_MIPS },
    100    { PIPE_FORMAT_R16G16B16_UNORM,       SVGA3D_R16G16B16A16_UNORM,  SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    101    { PIPE_FORMAT_R16G16B16A16_UNORM,    SVGA3D_R16G16B16A16_UNORM,  SVGA3D_R16G16B16A16_UNORM,   TF_GEN_MIPS },
    102    { PIPE_FORMAT_R16_USCALED,           SVGA3D_R16_UINT,            SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
    103    { PIPE_FORMAT_R16G16_USCALED,        SVGA3D_R16G16_UINT,         SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
    104    { PIPE_FORMAT_R16G16B16_USCALED,     SVGA3D_R16G16B16A16_UINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_U_TO_F_CAST },
    105    { PIPE_FORMAT_R16G16B16A16_USCALED,  SVGA3D_R16G16B16A16_UINT,   SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
    106    { PIPE_FORMAT_R16_SNORM,             SVGA3D_R16_SNORM,           SVGA3D_R16_SNORM,            0 },
    107    { PIPE_FORMAT_R16G16_SNORM,          SVGA3D_R16G16_SNORM,        SVGA3D_R16G16_SNORM,         0 },
    108    { PIPE_FORMAT_R16G16B16_SNORM,       SVGA3D_R16G16B16A16_SNORM,  SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    109    { PIPE_FORMAT_R16G16B16A16_SNORM,    SVGA3D_R16G16B16A16_SNORM,  SVGA3D_R16G16B16A16_SNORM,   0 },
    110    { PIPE_FORMAT_R16_SSCALED,           SVGA3D_R16_SINT,            SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
    111    { PIPE_FORMAT_R16G16_SSCALED,        SVGA3D_R16G16_SINT,         SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
    112    { PIPE_FORMAT_R16G16B16_SSCALED,     SVGA3D_R16G16B16A16_SINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_I_TO_F_CAST },
    113    { PIPE_FORMAT_R16G16B16A16_SSCALED,  SVGA3D_R16G16B16A16_SINT,   SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
    114    { PIPE_FORMAT_R8_UNORM,              SVGA3D_R8_UNORM,            SVGA3D_R8_UNORM,             TF_GEN_MIPS },
    115    { PIPE_FORMAT_R8G8_UNORM,            SVGA3D_R8G8_UNORM,          SVGA3D_R8G8_UNORM,           TF_GEN_MIPS },
    116    { PIPE_FORMAT_R8G8B8_UNORM,          SVGA3D_R8G8B8A8_UNORM,      SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    117    { PIPE_FORMAT_R8G8B8A8_UNORM,        SVGA3D_R8G8B8A8_UNORM,      SVGA3D_R8G8B8A8_UNORM,       TF_GEN_MIPS },
    118    { PIPE_FORMAT_X8B8G8R8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    119    { PIPE_FORMAT_R8_USCALED,            SVGA3D_R8_UINT,             SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
    120    { PIPE_FORMAT_R8G8_USCALED,          SVGA3D_R8G8_UINT,           SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
    121    { PIPE_FORMAT_R8G8B8_USCALED,        SVGA3D_R8G8B8A8_UINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_U_TO_F_CAST },
    122    { PIPE_FORMAT_R8G8B8A8_USCALED,      SVGA3D_R8G8B8A8_UINT,       SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
    123    { 73,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    124    { PIPE_FORMAT_R8_SNORM,              SVGA3D_R8_SNORM,            SVGA3D_R8_SNORM,             0 },
    125    { PIPE_FORMAT_R8G8_SNORM,            SVGA3D_R8G8_SNORM,          SVGA3D_R8G8_SNORM,           0 },
    126    { PIPE_FORMAT_R8G8B8_SNORM,          SVGA3D_R8G8B8A8_SNORM,      SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    127    { PIPE_FORMAT_R8G8B8A8_SNORM,        SVGA3D_R8G8B8A8_SNORM,      SVGA3D_R8G8B8A8_SNORM,       0 },
    128    { 78,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    129    { 79,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    130    { 80,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    131    { 81,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    132    { PIPE_FORMAT_R8_SSCALED,            SVGA3D_R8_SINT,             SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
    133    { PIPE_FORMAT_R8G8_SSCALED,          SVGA3D_R8G8_SINT,           SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
    134    { PIPE_FORMAT_R8G8B8_SSCALED,        SVGA3D_R8G8B8A8_SINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_I_TO_F_CAST },
    135    { PIPE_FORMAT_R8G8B8A8_SSCALED,      SVGA3D_R8G8B8A8_SINT,       SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
    136    { 86,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    137    { PIPE_FORMAT_R32_FIXED,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    138    { PIPE_FORMAT_R32G32_FIXED,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    139    { PIPE_FORMAT_R32G32B32_FIXED,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    140    { PIPE_FORMAT_R32G32B32A32_FIXED,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    141    { PIPE_FORMAT_R16_FLOAT,             SVGA3D_R16_FLOAT,           SVGA3D_R16_FLOAT,            TF_GEN_MIPS },
    142    { PIPE_FORMAT_R16G16_FLOAT,          SVGA3D_R16G16_FLOAT,        SVGA3D_R16G16_FLOAT,         TF_GEN_MIPS },
    143    { PIPE_FORMAT_R16G16B16_FLOAT,       SVGA3D_R16G16B16A16_FLOAT,  SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    144    { PIPE_FORMAT_R16G16B16A16_FLOAT,    SVGA3D_R16G16B16A16_FLOAT,  SVGA3D_R16G16B16A16_FLOAT,   TF_GEN_MIPS },
    145    { PIPE_FORMAT_L8_SRGB,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    146    { PIPE_FORMAT_L8A8_SRGB,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    147    { PIPE_FORMAT_R8G8B8_SRGB,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    148    { PIPE_FORMAT_A8B8G8R8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    149    { PIPE_FORMAT_X8B8G8R8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    150    { PIPE_FORMAT_B8G8R8A8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_B8G8R8A8_UNORM_SRGB,  TF_GEN_MIPS },
    151    { PIPE_FORMAT_B8G8R8X8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_B8G8R8X8_UNORM_SRGB,  TF_GEN_MIPS },
    152    { PIPE_FORMAT_A8R8G8B8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    153    { PIPE_FORMAT_X8R8G8B8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    154    { PIPE_FORMAT_R8G8B8A8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_R8G8B8A8_UNORM_SRGB,  TF_GEN_MIPS },
    155    { PIPE_FORMAT_DXT1_RGB,              SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM,            0 },
    156    { PIPE_FORMAT_DXT1_RGBA,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM,            0 },
    157    { PIPE_FORMAT_DXT3_RGBA,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC2_UNORM,            0 },
    158    { PIPE_FORMAT_DXT5_RGBA,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC3_UNORM,            0 },
    159    { PIPE_FORMAT_DXT1_SRGB,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM_SRGB,       0 },
    160    { PIPE_FORMAT_DXT1_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM_SRGB,       0 },
    161    { PIPE_FORMAT_DXT3_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_BC2_UNORM_SRGB,       0 },
    162    { PIPE_FORMAT_DXT5_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_BC3_UNORM_SRGB,       0 },
    163    { PIPE_FORMAT_RGTC1_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC4_UNORM,            0 },
    164    { PIPE_FORMAT_RGTC1_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC4_SNORM,            0 },
    165    { PIPE_FORMAT_RGTC2_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC5_UNORM,            0 },
    166    { PIPE_FORMAT_RGTC2_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC5_SNORM,            0 },
    167    { PIPE_FORMAT_R8G8_B8G8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    168    { PIPE_FORMAT_G8R8_G8B8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    169    { PIPE_FORMAT_R8SG8SB8UX8U_NORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    170    { PIPE_FORMAT_R5SG5SB6U_NORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    171    { PIPE_FORMAT_A8B8G8R8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    172    { PIPE_FORMAT_B5G5R5X1_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    173    { PIPE_FORMAT_R10G10B10A2_USCALED,   SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_PUINT_TO_USCALED },
    174    { PIPE_FORMAT_R11G11B10_FLOAT,       SVGA3D_FORMAT_INVALID,      SVGA3D_R11G11B10_FLOAT,      TF_GEN_MIPS },
    175    { PIPE_FORMAT_R9G9B9E5_FLOAT,        SVGA3D_FORMAT_INVALID,      SVGA3D_R9G9B9E5_SHAREDEXP,   0 },
    176    { PIPE_FORMAT_Z32_FLOAT_S8X24_UINT,  SVGA3D_FORMAT_INVALID,      SVGA3D_D32_FLOAT_S8X24_UINT, 0 },
    177    { PIPE_FORMAT_R1_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    178    { PIPE_FORMAT_R10G10B10X2_USCALED,   SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    179    { PIPE_FORMAT_R10G10B10X2_SNORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    180    { PIPE_FORMAT_L4A4_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    181    { PIPE_FORMAT_B10G10R10A2_UNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_BGRA },
    182    { PIPE_FORMAT_R10SG10SB10SA2U_NORM,  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    183    { PIPE_FORMAT_R8G8Bx_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    184    { PIPE_FORMAT_R8G8B8X8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    185    { PIPE_FORMAT_B4G4R4X4_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    186    { PIPE_FORMAT_X24S8_UINT,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    187    { PIPE_FORMAT_S8X24_UINT,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    188    { PIPE_FORMAT_X32_S8X24_UINT,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    189    { PIPE_FORMAT_B2G3R3_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    190    { PIPE_FORMAT_L16A16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    191    { PIPE_FORMAT_A16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    192    { PIPE_FORMAT_I16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    193    { PIPE_FORMAT_LATC1_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    194    { PIPE_FORMAT_LATC1_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    195    { PIPE_FORMAT_LATC2_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    196    { PIPE_FORMAT_LATC2_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    197    { PIPE_FORMAT_A8_SNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    198    { PIPE_FORMAT_L8_SNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    199    { PIPE_FORMAT_L8A8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    200    { PIPE_FORMAT_I8_SNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    201    { PIPE_FORMAT_A16_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    202    { PIPE_FORMAT_L16_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    203    { PIPE_FORMAT_L16A16_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    204    { PIPE_FORMAT_I16_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    205    { PIPE_FORMAT_A16_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    206    { PIPE_FORMAT_L16_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    207    { PIPE_FORMAT_L16A16_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    208    { PIPE_FORMAT_I16_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    209    { PIPE_FORMAT_A32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    210    { PIPE_FORMAT_L32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    211    { PIPE_FORMAT_L32A32_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    212    { PIPE_FORMAT_I32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    213    { PIPE_FORMAT_YV12,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    214    { PIPE_FORMAT_YV16,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    215    { PIPE_FORMAT_IYUV,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    216    { PIPE_FORMAT_NV12,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    217    { PIPE_FORMAT_NV21,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    218    { PIPE_FORMAT_A4R4_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    219    { PIPE_FORMAT_R4A4_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    220    { PIPE_FORMAT_R8A8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    221    { PIPE_FORMAT_A8R8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    222    { PIPE_FORMAT_R10G10B10A2_SSCALED,   SVGA3D_R32_UINT,            SVGA3D_FORMAT_INVALID,       VF_PUINT_TO_SSCALED },
    223    { PIPE_FORMAT_R10G10B10A2_SNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_PUINT_TO_SNORM },
    224    { PIPE_FORMAT_B10G10R10A2_USCALED,   SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_BGRA | VF_PUINT_TO_USCALED },
    225    { PIPE_FORMAT_B10G10R10A2_SSCALED,   SVGA3D_R32_UINT,            SVGA3D_FORMAT_INVALID,       VF_BGRA | VF_PUINT_TO_SSCALED },
    226    { PIPE_FORMAT_B10G10R10A2_SNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_BGRA | VF_PUINT_TO_SNORM },
    227    { PIPE_FORMAT_R8_UINT,               SVGA3D_R8_UINT,             SVGA3D_R8_UINT,              0 },
    228    { PIPE_FORMAT_R8G8_UINT,             SVGA3D_R8G8_UINT,           SVGA3D_R8G8_UINT,            0 },
    229    { PIPE_FORMAT_R8G8B8_UINT,           SVGA3D_R8G8B8A8_UINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    230    { PIPE_FORMAT_R8G8B8A8_UINT,         SVGA3D_R8G8B8A8_UINT,       SVGA3D_R8G8B8A8_UINT,        0 },
    231    { PIPE_FORMAT_R8_SINT,               SVGA3D_R8_SINT,             SVGA3D_R8_SINT,              0 },
    232    { PIPE_FORMAT_R8G8_SINT,             SVGA3D_R8G8_SINT,           SVGA3D_R8G8_SINT,            0 },
    233    { PIPE_FORMAT_R8G8B8_SINT,           SVGA3D_R8G8B8A8_SINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    234    { PIPE_FORMAT_R8G8B8A8_SINT,         SVGA3D_R8G8B8A8_SINT,       SVGA3D_R8G8B8A8_SINT,        0 },
    235    { PIPE_FORMAT_R16_UINT,              SVGA3D_R16_UINT,            SVGA3D_R16_UINT,             0 },
    236    { PIPE_FORMAT_R16G16_UINT,           SVGA3D_R16G16_UINT,         SVGA3D_R16G16_UINT,          0 },
    237    { PIPE_FORMAT_R16G16B16_UINT,        SVGA3D_R16G16B16A16_UINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    238    { PIPE_FORMAT_R16G16B16A16_UINT,     SVGA3D_R16G16B16A16_UINT,   SVGA3D_R16G16B16A16_UINT,    0 },
    239    { PIPE_FORMAT_R16_SINT,              SVGA3D_R16_SINT,            SVGA3D_R16_SINT,             0 },
    240    { PIPE_FORMAT_R16G16_SINT,           SVGA3D_R16G16_SINT,         SVGA3D_R16G16_SINT,          0 },
    241    { PIPE_FORMAT_R16G16B16_SINT,        SVGA3D_R16G16B16A16_SINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
    242    { PIPE_FORMAT_R16G16B16A16_SINT,     SVGA3D_R16G16B16A16_SINT,   SVGA3D_R16G16B16A16_SINT,    0 },
    243    { PIPE_FORMAT_R32_UINT,              SVGA3D_R32_UINT,            SVGA3D_R32_UINT,             0 },
    244    { PIPE_FORMAT_R32G32_UINT,           SVGA3D_R32G32_UINT,         SVGA3D_R32G32_UINT,          0 },
    245    { PIPE_FORMAT_R32G32B32_UINT,        SVGA3D_R32G32B32_UINT,      SVGA3D_FORMAT_INVALID,       0 },
    246    { PIPE_FORMAT_R32G32B32A32_UINT,     SVGA3D_R32G32B32A32_UINT,   SVGA3D_R32G32B32A32_UINT,    0 },
    247    { PIPE_FORMAT_R32_SINT,              SVGA3D_R32_SINT,            SVGA3D_R32_SINT,             0 },
    248    { PIPE_FORMAT_R32G32_SINT,           SVGA3D_R32G32_SINT,         SVGA3D_R32G32_SINT,          0 },
    249    { PIPE_FORMAT_R32G32B32_SINT,        SVGA3D_R32G32B32_SINT,      SVGA3D_FORMAT_INVALID,       0 },
    250    { PIPE_FORMAT_R32G32B32A32_SINT,     SVGA3D_R32G32B32A32_SINT,   SVGA3D_R32G32B32A32_SINT,    0 },
    251    { PIPE_FORMAT_A8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    252    { PIPE_FORMAT_I8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    253    { PIPE_FORMAT_L8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    254    { PIPE_FORMAT_L8A8_UINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    255    { PIPE_FORMAT_A8_SINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    256    { PIPE_FORMAT_I8_SINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    257    { PIPE_FORMAT_L8_SINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    258    { PIPE_FORMAT_L8A8_SINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    259    { PIPE_FORMAT_A16_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    260    { PIPE_FORMAT_I16_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    261    { PIPE_FORMAT_L16_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    262    { PIPE_FORMAT_L16A16_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    263    { PIPE_FORMAT_A16_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    264    { PIPE_FORMAT_I16_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    265    { PIPE_FORMAT_L16_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    266    { PIPE_FORMAT_L16A16_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    267    { PIPE_FORMAT_A32_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    268    { PIPE_FORMAT_I32_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    269    { PIPE_FORMAT_L32_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    270    { PIPE_FORMAT_L32A32_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    271    { PIPE_FORMAT_A32_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    272    { PIPE_FORMAT_I32_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    273    { PIPE_FORMAT_L32_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    274    { PIPE_FORMAT_L32A32_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    275    { PIPE_FORMAT_B10G10R10A2_UINT,      SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    276    { PIPE_FORMAT_ETC1_RGB8,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    277    { PIPE_FORMAT_R8G8_R8B8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    278    { PIPE_FORMAT_G8R8_B8R8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    279    { PIPE_FORMAT_R8G8B8X8_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    280    { PIPE_FORMAT_R8G8B8X8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    281    { PIPE_FORMAT_R8G8B8X8_UINT,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    282    { PIPE_FORMAT_R8G8B8X8_SINT,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    283    { PIPE_FORMAT_B10G10R10X2_UNORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    284    { PIPE_FORMAT_R16G16B16X16_UNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    285    { PIPE_FORMAT_R16G16B16X16_SNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    286    { PIPE_FORMAT_R16G16B16X16_FLOAT,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    287    { PIPE_FORMAT_R16G16B16X16_UINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    288    { PIPE_FORMAT_R16G16B16X16_SINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    289    { PIPE_FORMAT_R32G32B32X32_FLOAT,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    290    { PIPE_FORMAT_R32G32B32X32_UINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    291    { PIPE_FORMAT_R32G32B32X32_SINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    292    { PIPE_FORMAT_R8A8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    293    { PIPE_FORMAT_R16A16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    294    { PIPE_FORMAT_R16A16_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    295    { PIPE_FORMAT_R16A16_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    296    { PIPE_FORMAT_R32A32_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    297    { PIPE_FORMAT_R8A8_UINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    298    { PIPE_FORMAT_R8A8_SINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    299    { PIPE_FORMAT_R16A16_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    300    { PIPE_FORMAT_R16A16_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    301    { PIPE_FORMAT_R32A32_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    302    { PIPE_FORMAT_R32A32_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    303    { PIPE_FORMAT_R10G10B10A2_UINT,      SVGA3D_R10G10B10A2_UINT,    SVGA3D_R10G10B10A2_UINT,     0 },
    304    { PIPE_FORMAT_B5G6R5_SRGB,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    305    { PIPE_FORMAT_BPTC_RGBA_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    306    { PIPE_FORMAT_BPTC_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    307    { PIPE_FORMAT_BPTC_RGB_FLOAT,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    308    { PIPE_FORMAT_BPTC_RGB_UFLOAT,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    309    { PIPE_FORMAT_A8L8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    310    { PIPE_FORMAT_A8L8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    311    { PIPE_FORMAT_A8L8_SRGB,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    312    { PIPE_FORMAT_A16L16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    313    { PIPE_FORMAT_G8R8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    314    { PIPE_FORMAT_G8R8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    315    { PIPE_FORMAT_G16R16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    316    { PIPE_FORMAT_G16R16_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    317    { PIPE_FORMAT_A8B8G8R8_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    318    { PIPE_FORMAT_X8B8G8R8_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    319    { PIPE_FORMAT_ETC2_RGB8,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    320    { PIPE_FORMAT_ETC2_SRGB8,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    321    { PIPE_FORMAT_ETC2_RGB8A1,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    322    { PIPE_FORMAT_ETC2_SRGB8A1,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    323    { PIPE_FORMAT_ETC2_RGBA8,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    324    { PIPE_FORMAT_ETC2_SRGBA8,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    325    { PIPE_FORMAT_ETC2_R11_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    326    { PIPE_FORMAT_ETC2_R11_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    327    { PIPE_FORMAT_ETC2_RG11_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    328    { PIPE_FORMAT_ETC2_RG11_SNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    329    { PIPE_FORMAT_ASTC_4x4,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    330    { PIPE_FORMAT_ASTC_5x4,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    331    { PIPE_FORMAT_ASTC_5x5,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    332    { PIPE_FORMAT_ASTC_6x5,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    333    { PIPE_FORMAT_ASTC_6x6,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    334    { PIPE_FORMAT_ASTC_8x5,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    335    { PIPE_FORMAT_ASTC_8x6,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    336    { PIPE_FORMAT_ASTC_8x8,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    337    { PIPE_FORMAT_ASTC_10x5,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    338    { PIPE_FORMAT_ASTC_10x6,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    339    { PIPE_FORMAT_ASTC_10x8,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    340    { PIPE_FORMAT_ASTC_10x10,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    341    { PIPE_FORMAT_ASTC_12x10,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    342    { PIPE_FORMAT_ASTC_12x12,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    343    { PIPE_FORMAT_ASTC_4x4_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    344    { PIPE_FORMAT_ASTC_5x4_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    345    { PIPE_FORMAT_ASTC_5x5_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    346    { PIPE_FORMAT_ASTC_6x5_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    347    { PIPE_FORMAT_ASTC_6x6_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    348    { PIPE_FORMAT_ASTC_8x5_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    349    { PIPE_FORMAT_ASTC_8x6_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    350    { PIPE_FORMAT_ASTC_8x8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    351    { PIPE_FORMAT_ASTC_10x5_SRGB,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    352    { PIPE_FORMAT_ASTC_10x6_SRGB,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    353    { PIPE_FORMAT_ASTC_10x8_SRGB,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    354    { PIPE_FORMAT_ASTC_10x10_SRGB,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    355    { PIPE_FORMAT_ASTC_12x10_SRGB,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    356    { PIPE_FORMAT_ASTC_12x12_SRGB,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
    357 };
    358 
    359 
    360 /**
    361  * Translate a gallium vertex format to a vgpu10 vertex format.
    362  * Also, return any special vertex format flags.
    363  */
    364 void
    365 svga_translate_vertex_format_vgpu10(enum pipe_format format,
    366                                     SVGA3dSurfaceFormat *svga_format,
    367                                     unsigned *vf_flags)
    368 {
    369    assert(format < ARRAY_SIZE(format_conversion_table));
    370    if (format >= ARRAY_SIZE(format_conversion_table)) {
    371       format = PIPE_FORMAT_NONE;
    372    }
    373    *svga_format = format_conversion_table[format].vertex_format;
    374    *vf_flags = format_conversion_table[format].flags;
    375 }
    376 
    377 
    378 /*
    379  * Translate from gallium format to SVGA3D format.
    380  */
    381 SVGA3dSurfaceFormat
    382 svga_translate_format(const struct svga_screen *ss,
    383                       enum pipe_format format,
    384                       unsigned bind)
    385 {
    386    if (ss->sws->have_vgpu10) {
    387       if (bind & (PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER)) {
    388          return format_conversion_table[format].vertex_format;
    389       }
    390       else {
    391          return format_conversion_table[format].pixel_format;
    392       }
    393    }
    394 
    395    switch(format) {
    396    case PIPE_FORMAT_B8G8R8A8_UNORM:
    397       return SVGA3D_A8R8G8B8;
    398    case PIPE_FORMAT_B8G8R8X8_UNORM:
    399       return SVGA3D_X8R8G8B8;
    400 
    401    /* sRGB required for GL2.1 */
    402    case PIPE_FORMAT_B8G8R8A8_SRGB:
    403       return SVGA3D_A8R8G8B8;
    404    case PIPE_FORMAT_DXT1_SRGB:
    405    case PIPE_FORMAT_DXT1_SRGBA:
    406       return SVGA3D_DXT1;
    407    case PIPE_FORMAT_DXT3_SRGBA:
    408       return SVGA3D_DXT3;
    409    case PIPE_FORMAT_DXT5_SRGBA:
    410       return SVGA3D_DXT5;
    411 
    412    case PIPE_FORMAT_B5G6R5_UNORM:
    413       return SVGA3D_R5G6B5;
    414    case PIPE_FORMAT_B5G5R5A1_UNORM:
    415       return SVGA3D_A1R5G5B5;
    416    case PIPE_FORMAT_B4G4R4A4_UNORM:
    417       return SVGA3D_A4R4G4B4;
    418 
    419    case PIPE_FORMAT_R16G16B16A16_UNORM:
    420       return SVGA3D_A16B16G16R16;
    421 
    422    case PIPE_FORMAT_Z16_UNORM:
    423       assert(!ss->sws->have_vgpu10);
    424       return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.z16 : SVGA3D_Z_D16;
    425    case PIPE_FORMAT_S8_UINT_Z24_UNORM:
    426       assert(!ss->sws->have_vgpu10);
    427       return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.s8z24 : SVGA3D_Z_D24S8;
    428    case PIPE_FORMAT_X8Z24_UNORM:
    429       assert(!ss->sws->have_vgpu10);
    430       return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.x8z24 : SVGA3D_Z_D24X8;
    431 
    432    case PIPE_FORMAT_A8_UNORM:
    433       return SVGA3D_ALPHA8;
    434    case PIPE_FORMAT_L8_UNORM:
    435       return SVGA3D_LUMINANCE8;
    436 
    437    case PIPE_FORMAT_DXT1_RGB:
    438    case PIPE_FORMAT_DXT1_RGBA:
    439       return SVGA3D_DXT1;
    440    case PIPE_FORMAT_DXT3_RGBA:
    441       return SVGA3D_DXT3;
    442    case PIPE_FORMAT_DXT5_RGBA:
    443       return SVGA3D_DXT5;
    444 
    445    /* Float formats (only 1, 2 and 4-component formats supported) */
    446    case PIPE_FORMAT_R32_FLOAT:
    447       return SVGA3D_R_S23E8;
    448    case PIPE_FORMAT_R32G32_FLOAT:
    449       return SVGA3D_RG_S23E8;
    450    case PIPE_FORMAT_R32G32B32A32_FLOAT:
    451       return SVGA3D_ARGB_S23E8;
    452    case PIPE_FORMAT_R16_FLOAT:
    453       return SVGA3D_R_S10E5;
    454    case PIPE_FORMAT_R16G16_FLOAT:
    455       return SVGA3D_RG_S10E5;
    456    case PIPE_FORMAT_R16G16B16A16_FLOAT:
    457       return SVGA3D_ARGB_S10E5;
    458 
    459    case PIPE_FORMAT_Z32_UNORM:
    460       /* SVGA3D_Z_D32 is not yet unsupported */
    461       /* fall-through */
    462    default:
    463       return SVGA3D_FORMAT_INVALID;
    464    }
    465 }
    466 
    467 
    468 /*
    469  * Format capability description entry.
    470  */
    471 struct format_cap {
    472    const char *name;
    473 
    474    SVGA3dSurfaceFormat format;
    475 
    476    /*
    477     * Capability index corresponding to the format.
    478     */
    479    SVGA3dDevCapIndex devcap;
    480 
    481    /* size of each pixel/block */
    482    unsigned block_width, block_height, block_bytes;
    483 
    484    /*
    485     * Mask of supported SVGA3dFormatOp operations, to be inferred when the
    486     * capability is not explicitly present.
    487     */
    488    uint32 defaultOperations;
    489 };
    490 
    491 
    492 /*
    493  * Format capability description table.
    494  *
    495  * Ordered by increasing SVGA3dSurfaceFormat value, but with gaps.
    496  *
    497  * Note: there are some special cases below where we set devcap=0 and
    498  * avoid querying the host.  In particular, depth/stencil formats which
    499  * can be rendered to and sampled from.  For example, the gallium format
    500  * PIPE_FORMAT_Z24_UNORM_S8_UINT is converted to SVGA3D_D24_UNORM_S8_UINT
    501  * for rendering but converted to SVGA3D_R24_UNORM_X8_TYPELESS for sampling.
    502  * If we want to query if a format supports both rendering and sampling the
    503  * host will tell us no for SVGA3D_D24_UNORM_S8_UINT, SVGA3D_D16_UNORM and
    504  * SVGA3D_R24_UNORM_X8_TYPELESS.  So we override the host query for those
    505  * formats and report that both can do rendering and sampling.
    506  */
    507 static const struct format_cap format_cap_table[] = {
    508    {
    509       "SVGA3D_FORMAT_INVALID",
    510       SVGA3D_FORMAT_INVALID, 0, 0, 0, 0, 0
    511    },
    512    {
    513       "SVGA3D_X8R8G8B8",
    514       SVGA3D_X8R8G8B8,
    515       SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8,
    516       1, 1, 4,
    517       SVGA3DFORMAT_OP_TEXTURE |
    518       SVGA3DFORMAT_OP_CUBETEXTURE |
    519       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    520       SVGA3DFORMAT_OP_DISPLAYMODE |
    521       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    522    },
    523    {
    524       "SVGA3D_A8R8G8B8",
    525       SVGA3D_A8R8G8B8,
    526       SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8,
    527       1, 1, 4,
    528       SVGA3DFORMAT_OP_TEXTURE |
    529       SVGA3DFORMAT_OP_CUBETEXTURE |
    530       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    531       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    532    },
    533    {
    534       "SVGA3D_R5G6B5",
    535       SVGA3D_R5G6B5,
    536       SVGA3D_DEVCAP_SURFACEFMT_R5G6B5,
    537       1, 1, 2,
    538       SVGA3DFORMAT_OP_TEXTURE |
    539       SVGA3DFORMAT_OP_CUBETEXTURE |
    540       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    541       SVGA3DFORMAT_OP_DISPLAYMODE |
    542       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    543    },
    544    {
    545       "SVGA3D_X1R5G5B5",
    546       SVGA3D_X1R5G5B5,
    547       SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5,
    548       1, 1, 2,
    549       SVGA3DFORMAT_OP_TEXTURE |
    550       SVGA3DFORMAT_OP_CUBETEXTURE |
    551       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    552       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    553    },
    554    {
    555       "SVGA3D_A1R5G5B5",
    556       SVGA3D_A1R5G5B5,
    557       SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5,
    558       1, 1, 2,
    559       SVGA3DFORMAT_OP_TEXTURE |
    560       SVGA3DFORMAT_OP_CUBETEXTURE |
    561       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    562       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    563    },
    564    {
    565       "SVGA3D_A4R4G4B4",
    566       SVGA3D_A4R4G4B4,
    567       SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4,
    568       1, 1, 2,
    569       SVGA3DFORMAT_OP_TEXTURE |
    570       SVGA3DFORMAT_OP_CUBETEXTURE |
    571       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    572       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    573    },
    574    {
    575       /*
    576        * SVGA3D_Z_D32 is not yet supported, and has no corresponding
    577        * SVGA3D_DEVCAP_xxx.
    578        */
    579       "SVGA3D_Z_D32",
    580       SVGA3D_Z_D32, 0, 0, 0, 0, 0
    581    },
    582    {
    583       "SVGA3D_Z_D16",
    584       SVGA3D_Z_D16,
    585       SVGA3D_DEVCAP_SURFACEFMT_Z_D16,
    586       1, 1, 2,
    587       SVGA3DFORMAT_OP_ZSTENCIL
    588    },
    589    {
    590       "SVGA3D_Z_D24S8",
    591       SVGA3D_Z_D24S8,
    592       SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8,
    593       1, 1, 4,
    594       SVGA3DFORMAT_OP_ZSTENCIL
    595    },
    596    {
    597       "SVGA3D_Z_D15S1",
    598       SVGA3D_Z_D15S1,
    599       SVGA3D_DEVCAP_MAX,
    600       1, 1, 2,
    601       SVGA3DFORMAT_OP_ZSTENCIL
    602    },
    603    {
    604       "SVGA3D_LUMINANCE8",
    605       SVGA3D_LUMINANCE8,
    606       SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8,
    607       1, 1, 1,
    608       SVGA3DFORMAT_OP_TEXTURE |
    609       SVGA3DFORMAT_OP_CUBETEXTURE |
    610       SVGA3DFORMAT_OP_VOLUMETEXTURE
    611    },
    612    {
    613       /*
    614        * SVGA3D_LUMINANCE4_ALPHA4 is not supported, and has no corresponding
    615        * SVGA3D_DEVCAP_xxx.
    616        */
    617       "SVGA3D_LUMINANCE4_ALPHA4",
    618       SVGA3D_LUMINANCE4_ALPHA4, 0, 0, 0, 0, 0
    619    },
    620    {
    621       "SVGA3D_LUMINANCE16",
    622       SVGA3D_LUMINANCE16,
    623       SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16,
    624       1, 1, 2,
    625       SVGA3DFORMAT_OP_TEXTURE |
    626       SVGA3DFORMAT_OP_CUBETEXTURE |
    627       SVGA3DFORMAT_OP_VOLUMETEXTURE
    628    },
    629    {
    630       "SVGA3D_LUMINANCE8_ALPHA8",
    631       SVGA3D_LUMINANCE8_ALPHA8,
    632       SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8,
    633       1, 1, 2,
    634       SVGA3DFORMAT_OP_TEXTURE |
    635       SVGA3DFORMAT_OP_CUBETEXTURE |
    636       SVGA3DFORMAT_OP_VOLUMETEXTURE
    637    },
    638    {
    639       "SVGA3D_DXT1",
    640       SVGA3D_DXT1,
    641       SVGA3D_DEVCAP_SURFACEFMT_DXT1,
    642       4, 4, 8,
    643       SVGA3DFORMAT_OP_TEXTURE |
    644       SVGA3DFORMAT_OP_CUBETEXTURE
    645    },
    646    {
    647       "SVGA3D_DXT2",
    648       SVGA3D_DXT2,
    649       SVGA3D_DEVCAP_SURFACEFMT_DXT2,
    650       4, 4, 8,
    651       SVGA3DFORMAT_OP_TEXTURE |
    652       SVGA3DFORMAT_OP_CUBETEXTURE
    653    },
    654    {
    655       "SVGA3D_DXT3",
    656       SVGA3D_DXT3,
    657       SVGA3D_DEVCAP_SURFACEFMT_DXT3,
    658       4, 4, 16,
    659       SVGA3DFORMAT_OP_TEXTURE |
    660       SVGA3DFORMAT_OP_CUBETEXTURE
    661    },
    662    {
    663       "SVGA3D_DXT4",
    664       SVGA3D_DXT4,
    665       SVGA3D_DEVCAP_SURFACEFMT_DXT4,
    666       4, 4, 16,
    667       SVGA3DFORMAT_OP_TEXTURE |
    668       SVGA3DFORMAT_OP_CUBETEXTURE
    669    },
    670    {
    671       "SVGA3D_DXT5",
    672       SVGA3D_DXT5,
    673       SVGA3D_DEVCAP_SURFACEFMT_DXT5,
    674       4, 4, 8,
    675       SVGA3DFORMAT_OP_TEXTURE |
    676       SVGA3DFORMAT_OP_CUBETEXTURE
    677    },
    678    {
    679       "SVGA3D_BUMPU8V8",
    680       SVGA3D_BUMPU8V8,
    681       SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8,
    682       1, 1, 2,
    683       SVGA3DFORMAT_OP_TEXTURE |
    684       SVGA3DFORMAT_OP_CUBETEXTURE |
    685       SVGA3DFORMAT_OP_VOLUMETEXTURE
    686    },
    687    {
    688       /*
    689        * SVGA3D_BUMPL6V5U5 is unsupported; it has no corresponding
    690        * SVGA3D_DEVCAP_xxx.
    691        */
    692       "SVGA3D_BUMPL6V5U5",
    693       SVGA3D_BUMPL6V5U5, 0, 0, 0, 0, 0
    694    },
    695    {
    696       "SVGA3D_BUMPX8L8V8U8",
    697       SVGA3D_BUMPX8L8V8U8,
    698       SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8,
    699       1, 1, 4,
    700       SVGA3DFORMAT_OP_TEXTURE |
    701       SVGA3DFORMAT_OP_CUBETEXTURE
    702    },
    703    {
    704       "SVGA3D_FORMAT_DEAD1",
    705       SVGA3D_FORMAT_DEAD1, 0, 0, 0, 0, 0
    706    },
    707    {
    708       "SVGA3D_ARGB_S10E5",
    709       SVGA3D_ARGB_S10E5,
    710       SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5,
    711       1, 1, 2,
    712       SVGA3DFORMAT_OP_TEXTURE |
    713       SVGA3DFORMAT_OP_CUBETEXTURE |
    714       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    715       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    716    },
    717    {
    718       "SVGA3D_ARGB_S23E8",
    719       SVGA3D_ARGB_S23E8,
    720       SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8,
    721       1, 1, 4,
    722       SVGA3DFORMAT_OP_TEXTURE |
    723       SVGA3DFORMAT_OP_CUBETEXTURE |
    724       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    725       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    726    },
    727    {
    728       "SVGA3D_A2R10G10B10",
    729       SVGA3D_A2R10G10B10,
    730       SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10,
    731       1, 1, 4,
    732       SVGA3DFORMAT_OP_TEXTURE |
    733       SVGA3DFORMAT_OP_CUBETEXTURE |
    734       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    735       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    736    },
    737    {
    738       /*
    739        * SVGA3D_V8U8 is unsupported; it has no corresponding
    740        * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPU8V8 should be used instead.
    741        */
    742       "SVGA3D_V8U8",
    743       SVGA3D_V8U8, 0, 0, 0, 0, 0
    744    },
    745    {
    746       "SVGA3D_Q8W8V8U8",
    747       SVGA3D_Q8W8V8U8,
    748       SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8,
    749       1, 1, 4,
    750       SVGA3DFORMAT_OP_TEXTURE |
    751       SVGA3DFORMAT_OP_CUBETEXTURE
    752    },
    753    {
    754       "SVGA3D_CxV8U8",
    755       SVGA3D_CxV8U8,
    756       SVGA3D_DEVCAP_SURFACEFMT_CxV8U8,
    757       1, 1, 2,
    758       SVGA3DFORMAT_OP_TEXTURE
    759    },
    760    {
    761       /*
    762        * SVGA3D_X8L8V8U8 is unsupported; it has no corresponding
    763        * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
    764        */
    765       "SVGA3D_X8L8V8U8",
    766       SVGA3D_X8L8V8U8, 0, 0, 0, 0, 0
    767    },
    768    {
    769       "SVGA3D_A2W10V10U10",
    770       SVGA3D_A2W10V10U10,
    771       SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10,
    772       1, 1, 4,
    773       SVGA3DFORMAT_OP_TEXTURE
    774    },
    775    {
    776       "SVGA3D_ALPHA8",
    777       SVGA3D_ALPHA8,
    778       SVGA3D_DEVCAP_SURFACEFMT_ALPHA8,
    779       1, 1, 1,
    780       SVGA3DFORMAT_OP_TEXTURE |
    781       SVGA3DFORMAT_OP_CUBETEXTURE |
    782       SVGA3DFORMAT_OP_VOLUMETEXTURE
    783    },
    784    {
    785       "SVGA3D_R_S10E5",
    786       SVGA3D_R_S10E5,
    787       SVGA3D_DEVCAP_SURFACEFMT_R_S10E5,
    788       1, 1, 2,
    789       SVGA3DFORMAT_OP_TEXTURE |
    790       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    791       SVGA3DFORMAT_OP_CUBETEXTURE |
    792       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    793    },
    794    {
    795       "SVGA3D_R_S23E8",
    796       SVGA3D_R_S23E8,
    797       SVGA3D_DEVCAP_SURFACEFMT_R_S23E8,
    798       1, 1, 4,
    799       SVGA3DFORMAT_OP_TEXTURE |
    800       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    801       SVGA3DFORMAT_OP_CUBETEXTURE |
    802       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    803    },
    804    {
    805       "SVGA3D_RG_S10E5",
    806       SVGA3D_RG_S10E5,
    807       SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5,
    808       1, 1, 2,
    809       SVGA3DFORMAT_OP_TEXTURE |
    810       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    811       SVGA3DFORMAT_OP_CUBETEXTURE |
    812       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    813    },
    814    {
    815       "SVGA3D_RG_S23E8",
    816       SVGA3D_RG_S23E8,
    817       SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8,
    818       1, 1, 4,
    819       SVGA3DFORMAT_OP_TEXTURE |
    820       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    821       SVGA3DFORMAT_OP_CUBETEXTURE |
    822       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    823    },
    824    {
    825       /*
    826        * SVGA3D_BUFFER is a placeholder format for index/vertex buffers.
    827        */
    828       "SVGA3D_BUFFER",
    829       SVGA3D_BUFFER, 0, 1, 1, 1, 0
    830    },
    831    {
    832       "SVGA3D_Z_D24X8",
    833       SVGA3D_Z_D24X8,
    834       SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8,
    835       1, 1, 4,
    836       SVGA3DFORMAT_OP_ZSTENCIL
    837    },
    838    {
    839       "SVGA3D_V16U16",
    840       SVGA3D_V16U16,
    841       SVGA3D_DEVCAP_SURFACEFMT_V16U16,
    842       1, 1, 4,
    843       SVGA3DFORMAT_OP_TEXTURE |
    844       SVGA3DFORMAT_OP_CUBETEXTURE |
    845       SVGA3DFORMAT_OP_VOLUMETEXTURE
    846    },
    847    {
    848       "SVGA3D_G16R16",
    849       SVGA3D_G16R16,
    850       SVGA3D_DEVCAP_SURFACEFMT_G16R16,
    851       1, 1, 4,
    852       SVGA3DFORMAT_OP_TEXTURE |
    853       SVGA3DFORMAT_OP_CUBETEXTURE |
    854       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    855       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    856    },
    857    {
    858       "SVGA3D_A16B16G16R16",
    859       SVGA3D_A16B16G16R16,
    860       SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16,
    861       1, 1, 8,
    862       SVGA3DFORMAT_OP_TEXTURE |
    863       SVGA3DFORMAT_OP_CUBETEXTURE |
    864       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    865       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    866    },
    867    {
    868       "SVGA3D_UYVY",
    869       SVGA3D_UYVY,
    870       SVGA3D_DEVCAP_SURFACEFMT_UYVY,
    871       0, 0, 0,
    872       0
    873    },
    874    {
    875       "SVGA3D_YUY2",
    876       SVGA3D_YUY2,
    877       SVGA3D_DEVCAP_SURFACEFMT_YUY2,
    878       0, 0, 0,
    879       0
    880    },
    881    {
    882       "SVGA3D_NV12",
    883       SVGA3D_NV12,
    884       SVGA3D_DEVCAP_SURFACEFMT_NV12,
    885       0, 0, 0,
    886       0
    887    },
    888    {
    889       "SVGA3D_AYUV",
    890       SVGA3D_AYUV,
    891       SVGA3D_DEVCAP_SURFACEFMT_AYUV,
    892       0, 0, 0,
    893       0
    894    },
    895    {
    896       "SVGA3D_R32G32B32A32_TYPELESS",
    897       SVGA3D_R32G32B32A32_TYPELESS,
    898       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS,
    899       1, 1, 16,
    900       SVGA3DFORMAT_OP_TEXTURE |
    901       SVGA3DFORMAT_OP_CUBETEXTURE |
    902       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    903       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    904    },
    905    {
    906       "SVGA3D_R32G32B32A32_UINT",
    907       SVGA3D_R32G32B32A32_UINT,
    908       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT,
    909       1, 1, 16,
    910       SVGA3DFORMAT_OP_TEXTURE |
    911       SVGA3DFORMAT_OP_CUBETEXTURE |
    912       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    913       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    914    },
    915    {
    916       "SVGA3D_R32G32B32A32_SINT",
    917       SVGA3D_R32G32B32A32_SINT,
    918       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT,
    919       1, 1, 16,
    920       SVGA3DFORMAT_OP_TEXTURE |
    921       SVGA3DFORMAT_OP_CUBETEXTURE |
    922       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    923       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    924    },
    925    {
    926       "SVGA3D_R32G32B32_TYPELESS",
    927       SVGA3D_R32G32B32_TYPELESS,
    928       SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS,
    929       1, 1, 12,
    930       SVGA3DFORMAT_OP_TEXTURE |
    931       SVGA3DFORMAT_OP_CUBETEXTURE |
    932       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    933       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    934    },
    935    {
    936       "SVGA3D_R32G32B32_FLOAT",
    937       SVGA3D_R32G32B32_FLOAT,
    938       SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT,
    939       1, 1, 12,
    940       SVGA3DFORMAT_OP_TEXTURE |
    941       SVGA3DFORMAT_OP_CUBETEXTURE |
    942       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    943       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    944    },
    945    {
    946       "SVGA3D_R32G32B32_UINT",
    947       SVGA3D_R32G32B32_UINT,
    948       SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT,
    949       1, 1, 12,
    950       SVGA3DFORMAT_OP_TEXTURE |
    951       SVGA3DFORMAT_OP_CUBETEXTURE |
    952       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    953       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    954    },
    955    {
    956       "SVGA3D_R32G32B32_SINT",
    957       SVGA3D_R32G32B32_SINT,
    958       SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT,
    959       1, 1, 12,
    960       SVGA3DFORMAT_OP_TEXTURE |
    961       SVGA3DFORMAT_OP_CUBETEXTURE |
    962       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    963       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    964    },
    965    {
    966       "SVGA3D_R16G16B16A16_TYPELESS",
    967       SVGA3D_R16G16B16A16_TYPELESS,
    968       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS,
    969       1, 1, 8,
    970       SVGA3DFORMAT_OP_TEXTURE |
    971       SVGA3DFORMAT_OP_CUBETEXTURE |
    972       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    973       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    974    },
    975    {
    976       "SVGA3D_R16G16B16A16_UINT",
    977       SVGA3D_R16G16B16A16_UINT,
    978       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT,
    979       1, 1, 8,
    980       SVGA3DFORMAT_OP_TEXTURE |
    981       SVGA3DFORMAT_OP_CUBETEXTURE |
    982       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    983       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    984    },
    985    {
    986       "SVGA3D_R16G16B16A16_SNORM",
    987       SVGA3D_R16G16B16A16_SNORM,
    988       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM,
    989       1, 1, 8,
    990       SVGA3DFORMAT_OP_TEXTURE |
    991       SVGA3DFORMAT_OP_CUBETEXTURE |
    992       SVGA3DFORMAT_OP_VOLUMETEXTURE |
    993       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
    994    },
    995    {
    996       "SVGA3D_R16G16B16A16_SINT",
    997       SVGA3D_R16G16B16A16_SINT,
    998       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT,
    999       1, 1, 8,
   1000       SVGA3DFORMAT_OP_TEXTURE |
   1001       SVGA3DFORMAT_OP_CUBETEXTURE |
   1002       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1003       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1004    },
   1005    {
   1006       "SVGA3D_R32G32_TYPELESS",
   1007       SVGA3D_R32G32_TYPELESS,
   1008       SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS,
   1009       1, 1, 8,
   1010       SVGA3DFORMAT_OP_TEXTURE |
   1011       SVGA3DFORMAT_OP_CUBETEXTURE |
   1012       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1013       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1014    },
   1015    {
   1016       "SVGA3D_R32G32_UINT",
   1017       SVGA3D_R32G32_UINT,
   1018       SVGA3D_DEVCAP_DXFMT_R32G32_UINT,
   1019       1, 1, 8,
   1020       SVGA3DFORMAT_OP_TEXTURE |
   1021       SVGA3DFORMAT_OP_CUBETEXTURE |
   1022       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1023       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1024    },
   1025    {
   1026       "SVGA3D_R32G32_SINT",
   1027       SVGA3D_R32G32_SINT,
   1028       SVGA3D_DEVCAP_DXFMT_R32G32_SINT,
   1029       1, 1, 8,
   1030       SVGA3DFORMAT_OP_TEXTURE |
   1031       SVGA3DFORMAT_OP_CUBETEXTURE |
   1032       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1033       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1034    },
   1035    {
   1036       "SVGA3D_R32G8X24_TYPELESS",
   1037       SVGA3D_R32G8X24_TYPELESS,
   1038       SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS,
   1039       1, 1, 8,
   1040       SVGA3DFORMAT_OP_TEXTURE |
   1041       SVGA3DFORMAT_OP_CUBETEXTURE |
   1042       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1043       SVGA3DFORMAT_OP_ZSTENCIL
   1044    },
   1045    {
   1046       /* Special case: no devcap / report sampler and depth/stencil ability
   1047        */
   1048       "SVGA3D_D32_FLOAT_S8X24_UINT",
   1049       SVGA3D_D32_FLOAT_S8X24_UINT,
   1050       0, /*SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT*/
   1051       1, 1, 8,
   1052       SVGA3DFORMAT_OP_TEXTURE |
   1053       SVGA3DFORMAT_OP_CUBETEXTURE |
   1054       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1055       SVGA3DFORMAT_OP_ZSTENCIL
   1056    },
   1057    {
   1058       /* Special case: no devcap / report sampler and depth/stencil ability
   1059        */
   1060       "SVGA3D_R32_FLOAT_X8X24_TYPELESS",
   1061       SVGA3D_R32_FLOAT_X8X24_TYPELESS,
   1062       0, /*SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24_TYPELESS*/
   1063       1, 1, 8,
   1064       SVGA3DFORMAT_OP_TEXTURE |
   1065       SVGA3DFORMAT_OP_CUBETEXTURE |
   1066       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1067       SVGA3DFORMAT_OP_ZSTENCIL
   1068    },
   1069    {
   1070       "SVGA3D_X32_TYPELESS_G8X24_UINT",
   1071       SVGA3D_X32_TYPELESS_G8X24_UINT,
   1072       SVGA3D_DEVCAP_DXFMT_X32_TYPELESS_G8X24_UINT,
   1073       1, 1, 4,
   1074       SVGA3DFORMAT_OP_TEXTURE |
   1075       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1076       SVGA3DFORMAT_OP_CUBETEXTURE |
   1077       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1078    },
   1079    {
   1080       "SVGA3D_R10G10B10A2_TYPELESS",
   1081       SVGA3D_R10G10B10A2_TYPELESS,
   1082       SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS,
   1083       1, 1, 4,
   1084       SVGA3DFORMAT_OP_TEXTURE |
   1085       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1086       SVGA3DFORMAT_OP_CUBETEXTURE |
   1087       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1088    },
   1089    {
   1090       "SVGA3D_R10G10B10A2_UINT",
   1091       SVGA3D_R10G10B10A2_UINT,
   1092       SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT,
   1093       1, 1, 4,
   1094       SVGA3DFORMAT_OP_TEXTURE |
   1095       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1096       SVGA3DFORMAT_OP_CUBETEXTURE |
   1097       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1098    },
   1099    {
   1100       "SVGA3D_R11G11B10_FLOAT",
   1101       SVGA3D_R11G11B10_FLOAT,
   1102       SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT,
   1103       1, 1, 4,
   1104       SVGA3DFORMAT_OP_TEXTURE |
   1105       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1106       SVGA3DFORMAT_OP_CUBETEXTURE |
   1107       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1108    },
   1109    {
   1110       "SVGA3D_R8G8B8A8_TYPELESS",
   1111       SVGA3D_R8G8B8A8_TYPELESS,
   1112       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS,
   1113       1, 1, 4,
   1114       SVGA3DFORMAT_OP_TEXTURE |
   1115       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1116       SVGA3DFORMAT_OP_CUBETEXTURE |
   1117       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1118    },
   1119    {
   1120       "SVGA3D_R8G8B8A8_UNORM",
   1121       SVGA3D_R8G8B8A8_UNORM,
   1122       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM,
   1123       1, 1, 4,
   1124       SVGA3DFORMAT_OP_TEXTURE |
   1125       SVGA3DFORMAT_OP_CUBETEXTURE |
   1126       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1127       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1128    },
   1129    {
   1130       "SVGA3D_R8G8B8A8_UNORM_SRGB",
   1131       SVGA3D_R8G8B8A8_UNORM_SRGB,
   1132       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB,
   1133       1, 1, 4,
   1134       SVGA3DFORMAT_OP_TEXTURE |
   1135       SVGA3DFORMAT_OP_CUBETEXTURE |
   1136       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1137       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1138    },
   1139    {
   1140       "SVGA3D_R8G8B8A8_UINT",
   1141       SVGA3D_R8G8B8A8_UINT,
   1142       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT,
   1143       1, 1, 4,
   1144       SVGA3DFORMAT_OP_TEXTURE |
   1145       SVGA3DFORMAT_OP_CUBETEXTURE |
   1146       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1147       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1148       },
   1149    {
   1150       "SVGA3D_R8G8B8A8_SINT",
   1151       SVGA3D_R8G8B8A8_SINT,
   1152       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT,
   1153       1, 1, 4,
   1154       SVGA3DFORMAT_OP_TEXTURE |
   1155       SVGA3DFORMAT_OP_CUBETEXTURE |
   1156       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1157       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1158    },
   1159    {
   1160       "SVGA3D_R16G16_TYPELESS",
   1161       SVGA3D_R16G16_TYPELESS,
   1162       SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS,
   1163       1, 1, 4,
   1164       SVGA3DFORMAT_OP_TEXTURE |
   1165       SVGA3DFORMAT_OP_CUBETEXTURE |
   1166       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1167       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1168    },
   1169    {
   1170       "SVGA3D_R16G16_UINT",
   1171       SVGA3D_R16G16_UINT,
   1172       SVGA3D_DEVCAP_DXFMT_R16G16_UINT,
   1173       1, 1, 4,
   1174       SVGA3DFORMAT_OP_TEXTURE |
   1175       SVGA3DFORMAT_OP_CUBETEXTURE |
   1176       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1177       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1178    },
   1179    {
   1180       "SVGA3D_R16G16_SINT",
   1181       SVGA3D_R16G16_SINT,
   1182       SVGA3D_DEVCAP_DXFMT_R16G16_SINT,
   1183       1, 1, 4,
   1184       SVGA3DFORMAT_OP_TEXTURE |
   1185       SVGA3DFORMAT_OP_CUBETEXTURE |
   1186       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1187       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1188    },
   1189    {
   1190       "SVGA3D_R32_TYPELESS",
   1191       SVGA3D_R32_TYPELESS,
   1192       SVGA3D_DEVCAP_DXFMT_R32_TYPELESS,
   1193       1, 1, 4,
   1194       SVGA3DFORMAT_OP_TEXTURE |
   1195       SVGA3DFORMAT_OP_CUBETEXTURE |
   1196       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1197       SVGA3DFORMAT_OP_ZSTENCIL |
   1198       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1199    },
   1200    {
   1201       /* Special case: no devcap / report sampler and depth/stencil ability
   1202        */
   1203       "SVGA3D_D32_FLOAT",
   1204       SVGA3D_D32_FLOAT,
   1205       0, /*SVGA3D_DEVCAP_DXFMT_D32_FLOAT*/
   1206       1, 1, 4,
   1207       SVGA3DFORMAT_OP_TEXTURE |
   1208       SVGA3DFORMAT_OP_CUBETEXTURE |
   1209       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1210       SVGA3DFORMAT_OP_ZSTENCIL
   1211    },
   1212    {
   1213       "SVGA3D_R32_UINT",
   1214       SVGA3D_R32_UINT,
   1215       SVGA3D_DEVCAP_DXFMT_R32_UINT,
   1216       1, 1, 4,
   1217       SVGA3DFORMAT_OP_TEXTURE |
   1218       SVGA3DFORMAT_OP_CUBETEXTURE |
   1219       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1220       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1221    },
   1222    {
   1223       "SVGA3D_R32_SINT",
   1224       SVGA3D_R32_SINT,
   1225       SVGA3D_DEVCAP_DXFMT_R32_SINT,
   1226       1, 1, 4,
   1227       SVGA3DFORMAT_OP_TEXTURE |
   1228       SVGA3DFORMAT_OP_CUBETEXTURE |
   1229       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1230       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1231    },
   1232    {
   1233       "SVGA3D_R24G8_TYPELESS",
   1234       SVGA3D_R24G8_TYPELESS,
   1235       SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS,
   1236       1, 1, 4,
   1237       SVGA3DFORMAT_OP_TEXTURE |
   1238       SVGA3DFORMAT_OP_CUBETEXTURE |
   1239       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1240       SVGA3DFORMAT_OP_ZSTENCIL
   1241    },
   1242    {
   1243       /* Special case: no devcap / report sampler and depth/stencil ability
   1244        */
   1245       "SVGA3D_D24_UNORM_S8_UINT",
   1246       SVGA3D_D24_UNORM_S8_UINT,
   1247       0, /*SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT*/
   1248       1, 1, 4,
   1249       SVGA3DFORMAT_OP_TEXTURE |
   1250       SVGA3DFORMAT_OP_CUBETEXTURE |
   1251       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1252       SVGA3DFORMAT_OP_ZSTENCIL
   1253    },
   1254    {
   1255       /* Special case: no devcap / report sampler and depth/stencil ability
   1256        */
   1257       "SVGA3D_R24_UNORM_X8_TYPELESS",
   1258       SVGA3D_R24_UNORM_X8_TYPELESS,
   1259       0, /*SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8_TYPELESS*/
   1260       1, 1, 4,
   1261       SVGA3DFORMAT_OP_TEXTURE |
   1262       SVGA3DFORMAT_OP_CUBETEXTURE |
   1263       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1264       SVGA3DFORMAT_OP_ZSTENCIL
   1265    },
   1266    {
   1267       "SVGA3D_X24_TYPELESS_G8_UINT",
   1268       SVGA3D_X24_TYPELESS_G8_UINT,
   1269       SVGA3D_DEVCAP_DXFMT_X24_TYPELESS_G8_UINT,
   1270       1, 1, 4,
   1271       SVGA3DFORMAT_OP_TEXTURE |
   1272       SVGA3DFORMAT_OP_CUBETEXTURE |
   1273       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1274       SVGA3DFORMAT_OP_ZSTENCIL
   1275    },
   1276    {
   1277       "SVGA3D_R8G8_TYPELESS",
   1278       SVGA3D_R8G8_TYPELESS,
   1279       SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS,
   1280       1, 1, 2,
   1281       SVGA3DFORMAT_OP_TEXTURE |
   1282       SVGA3DFORMAT_OP_CUBETEXTURE |
   1283       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1284       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1285    },
   1286    {
   1287       "SVGA3D_R8G8_UNORM",
   1288       SVGA3D_R8G8_UNORM,
   1289       SVGA3D_DEVCAP_DXFMT_R8G8_UNORM,
   1290       1, 1, 2,
   1291       SVGA3DFORMAT_OP_TEXTURE |
   1292       SVGA3DFORMAT_OP_CUBETEXTURE |
   1293       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1294       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1295    },
   1296    {
   1297       "SVGA3D_R8G8_UINT",
   1298       SVGA3D_R8G8_UINT,
   1299       SVGA3D_DEVCAP_DXFMT_R8G8_UINT,
   1300       1, 1, 2,
   1301       SVGA3DFORMAT_OP_TEXTURE |
   1302       SVGA3DFORMAT_OP_CUBETEXTURE |
   1303       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1304       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1305    },
   1306    {
   1307       "SVGA3D_R8G8_SINT",
   1308       SVGA3D_R8G8_SINT,
   1309       SVGA3D_DEVCAP_DXFMT_R8G8_SINT,
   1310       1, 1, 2,
   1311       SVGA3DFORMAT_OP_TEXTURE |
   1312       SVGA3DFORMAT_OP_CUBETEXTURE |
   1313       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1314       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1315    },
   1316    {
   1317       "SVGA3D_R16_TYPELESS",
   1318       SVGA3D_R16_TYPELESS,
   1319       SVGA3D_DEVCAP_DXFMT_R16_TYPELESS,
   1320       1, 1, 2,
   1321       SVGA3DFORMAT_OP_ZSTENCIL |
   1322       SVGA3DFORMAT_OP_TEXTURE |
   1323       SVGA3DFORMAT_OP_CUBETEXTURE |
   1324       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1325       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1326    },
   1327    {
   1328       "SVGA3D_R16_UNORM",
   1329       SVGA3D_R16_UNORM,
   1330       SVGA3D_DEVCAP_DXFMT_R16_UNORM,
   1331       1, 1, 2,
   1332       SVGA3DFORMAT_OP_TEXTURE |
   1333       SVGA3DFORMAT_OP_CUBETEXTURE |
   1334       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1335       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1336    },
   1337    {
   1338       "SVGA3D_R16_UINT",
   1339       SVGA3D_R16_UINT,
   1340       SVGA3D_DEVCAP_DXFMT_R16_UINT,
   1341       1, 1, 2,
   1342       SVGA3DFORMAT_OP_TEXTURE |
   1343       SVGA3DFORMAT_OP_CUBETEXTURE |
   1344       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1345       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1346    },
   1347    {
   1348       "SVGA3D_R16_SNORM",
   1349       SVGA3D_R16_SNORM,
   1350       SVGA3D_DEVCAP_DXFMT_R16_SNORM,
   1351       1, 1, 2,
   1352       SVGA3DFORMAT_OP_TEXTURE |
   1353       SVGA3DFORMAT_OP_CUBETEXTURE |
   1354       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1355       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1356    },
   1357    {
   1358       "SVGA3D_R16_SINT",
   1359       SVGA3D_R16_SINT,
   1360       SVGA3D_DEVCAP_DXFMT_R16_SINT,
   1361       1, 1, 2,
   1362       SVGA3DFORMAT_OP_TEXTURE |
   1363       SVGA3DFORMAT_OP_CUBETEXTURE |
   1364       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1365       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1366    },
   1367    {
   1368       "SVGA3D_R8_TYPELESS",
   1369       SVGA3D_R8_TYPELESS,
   1370       SVGA3D_DEVCAP_DXFMT_R8_TYPELESS,
   1371       1, 1, 1,
   1372       SVGA3DFORMAT_OP_TEXTURE |
   1373       SVGA3DFORMAT_OP_CUBETEXTURE |
   1374       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1375       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1376    },
   1377    {
   1378       "SVGA3D_R8_UNORM",
   1379       SVGA3D_R8_UNORM,
   1380       SVGA3D_DEVCAP_DXFMT_R8_UNORM,
   1381       1, 1, 1,
   1382       SVGA3DFORMAT_OP_TEXTURE |
   1383       SVGA3DFORMAT_OP_CUBETEXTURE |
   1384       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1385       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1386    },
   1387    {
   1388       "SVGA3D_R8_UINT",
   1389       SVGA3D_R8_UINT,
   1390       SVGA3D_DEVCAP_DXFMT_R8_UINT,
   1391       1, 1, 1,
   1392       SVGA3DFORMAT_OP_TEXTURE |
   1393       SVGA3DFORMAT_OP_CUBETEXTURE |
   1394       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1395       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1396    },
   1397    {
   1398       "SVGA3D_R8_SNORM",
   1399       SVGA3D_R8_SNORM,
   1400       SVGA3D_DEVCAP_DXFMT_R8_SNORM,
   1401       1, 1, 1,
   1402       SVGA3DFORMAT_OP_TEXTURE |
   1403       SVGA3DFORMAT_OP_CUBETEXTURE |
   1404       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1405       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1406    },
   1407    {
   1408       "SVGA3D_R8_SINT",
   1409       SVGA3D_R8_SINT,
   1410       SVGA3D_DEVCAP_DXFMT_R8_SINT,
   1411       1, 1, 1,
   1412       SVGA3DFORMAT_OP_TEXTURE |
   1413       SVGA3DFORMAT_OP_CUBETEXTURE |
   1414       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1415       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1416    },
   1417    {
   1418       "SVGA3D_P8",
   1419       SVGA3D_P8, 0, 0, 0, 0, 0
   1420    },
   1421    {
   1422       "SVGA3D_R9G9B9E5_SHAREDEXP",
   1423       SVGA3D_R9G9B9E5_SHAREDEXP,
   1424       SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP,
   1425       1, 1, 4,
   1426       SVGA3DFORMAT_OP_TEXTURE |
   1427       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1428       SVGA3DFORMAT_OP_CUBETEXTURE |
   1429       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1430    },
   1431    {
   1432       "SVGA3D_R8G8_B8G8_UNORM",
   1433       SVGA3D_R8G8_B8G8_UNORM, 0, 0, 0, 0, 0
   1434    },
   1435    {
   1436       "SVGA3D_G8R8_G8B8_UNORM",
   1437       SVGA3D_G8R8_G8B8_UNORM, 0, 0, 0, 0, 0
   1438    },
   1439    {
   1440       "SVGA3D_BC1_TYPELESS",
   1441       SVGA3D_BC1_TYPELESS,
   1442       SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS,
   1443       4, 4, 8,
   1444       SVGA3DFORMAT_OP_TEXTURE |
   1445       SVGA3DFORMAT_OP_CUBETEXTURE
   1446    },
   1447    {
   1448       "SVGA3D_BC1_UNORM_SRGB",
   1449       SVGA3D_BC1_UNORM_SRGB,
   1450       SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB,
   1451       4, 4, 8,
   1452       SVGA3DFORMAT_OP_TEXTURE |
   1453       SVGA3DFORMAT_OP_CUBETEXTURE
   1454    },
   1455    {
   1456       "SVGA3D_BC2_TYPELESS",
   1457       SVGA3D_BC2_TYPELESS,
   1458       SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS,
   1459       4, 4, 16,
   1460       SVGA3DFORMAT_OP_TEXTURE |
   1461       SVGA3DFORMAT_OP_CUBETEXTURE
   1462    },
   1463    {
   1464       "SVGA3D_BC2_UNORM_SRGB",
   1465       SVGA3D_BC2_UNORM_SRGB,
   1466       SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB,
   1467       4, 4, 16,
   1468       SVGA3DFORMAT_OP_TEXTURE |
   1469       SVGA3DFORMAT_OP_CUBETEXTURE
   1470    },
   1471    {
   1472       "SVGA3D_BC3_TYPELESS",
   1473       SVGA3D_BC3_TYPELESS,
   1474       SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS,
   1475       4, 4, 16,
   1476       SVGA3DFORMAT_OP_TEXTURE |
   1477       SVGA3DFORMAT_OP_CUBETEXTURE
   1478    },
   1479    {
   1480       "SVGA3D_BC3_UNORM_SRGB",
   1481       SVGA3D_BC3_UNORM_SRGB,
   1482       4, 4, 16,
   1483       SVGA3DFORMAT_OP_TEXTURE |
   1484       SVGA3DFORMAT_OP_CUBETEXTURE
   1485    },
   1486    {
   1487       "SVGA3D_BC4_TYPELESS",
   1488       SVGA3D_BC4_TYPELESS,
   1489       SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS,
   1490       4, 4, 8,
   1491       SVGA3DFORMAT_OP_TEXTURE |
   1492       SVGA3DFORMAT_OP_CUBETEXTURE
   1493    },
   1494    {
   1495       "SVGA3D_ATI1",
   1496       SVGA3D_ATI1, 0, 0, 0, 0, 0
   1497    },
   1498    {
   1499       "SVGA3D_BC4_SNORM",
   1500       SVGA3D_BC4_SNORM,
   1501       SVGA3D_DEVCAP_DXFMT_BC4_SNORM,
   1502       4, 4, 8,
   1503       SVGA3DFORMAT_OP_TEXTURE |
   1504       SVGA3DFORMAT_OP_CUBETEXTURE
   1505    },
   1506    {
   1507       "SVGA3D_BC5_TYPELESS",
   1508       SVGA3D_BC5_TYPELESS,
   1509       SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS,
   1510       4, 4, 16,
   1511       SVGA3DFORMAT_OP_TEXTURE |
   1512       SVGA3DFORMAT_OP_CUBETEXTURE
   1513    },
   1514    {
   1515       "SVGA3D_ATI2",
   1516       SVGA3D_ATI2, 0, 0, 0, 0, 0
   1517    },
   1518    {
   1519       "SVGA3D_BC5_SNORM",
   1520       SVGA3D_BC5_SNORM,
   1521       SVGA3D_DEVCAP_DXFMT_BC5_SNORM,
   1522       4, 4, 16,
   1523       SVGA3DFORMAT_OP_TEXTURE |
   1524       SVGA3DFORMAT_OP_CUBETEXTURE
   1525    },
   1526    {
   1527       "SVGA3D_R10G10B10_XR_BIAS_A2_UNORM",
   1528       SVGA3D_R10G10B10_XR_BIAS_A2_UNORM, 0, 0, 0, 0, 0
   1529    },
   1530    {
   1531       "SVGA3D_B8G8R8A8_TYPELESS",
   1532       SVGA3D_B8G8R8A8_TYPELESS,
   1533       SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS,
   1534       1, 1, 4,
   1535       SVGA3DFORMAT_OP_TEXTURE |
   1536       SVGA3DFORMAT_OP_CUBETEXTURE |
   1537       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1538       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1539    },
   1540    {
   1541       "SVGA3D_B8G8R8A8_UNORM_SRGB",
   1542       SVGA3D_B8G8R8A8_UNORM_SRGB,
   1543       SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB,
   1544       1, 1, 4,
   1545       SVGA3DFORMAT_OP_TEXTURE |
   1546       SVGA3DFORMAT_OP_CUBETEXTURE |
   1547       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1548       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1549    },
   1550    {
   1551       "SVGA3D_B8G8R8X8_TYPELESS",
   1552       SVGA3D_B8G8R8X8_TYPELESS,
   1553       SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS,
   1554       1, 1, 4,
   1555       SVGA3DFORMAT_OP_TEXTURE |
   1556       SVGA3DFORMAT_OP_CUBETEXTURE |
   1557       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1558       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1559    },
   1560    {
   1561       "SVGA3D_B8G8R8X8_UNORM_SRGB",
   1562       SVGA3D_B8G8R8X8_UNORM_SRGB,
   1563       SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB,
   1564       1, 1, 4,
   1565       SVGA3DFORMAT_OP_TEXTURE |
   1566       SVGA3DFORMAT_OP_CUBETEXTURE |
   1567       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1568       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1569    },
   1570    {
   1571       "SVGA3D_Z_DF16",
   1572       SVGA3D_Z_DF16,
   1573       SVGA3D_DEVCAP_SURFACEFMT_Z_DF16,
   1574       1, 1, 2,
   1575       0
   1576    },
   1577    {
   1578       "SVGA3D_Z_DF24",
   1579       SVGA3D_Z_DF24,
   1580       SVGA3D_DEVCAP_SURFACEFMT_Z_DF24,
   1581       1, 1, 4,
   1582       0
   1583    },
   1584    {
   1585       "SVGA3D_Z_D24S8_INT",
   1586       SVGA3D_Z_D24S8_INT,
   1587       SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT,
   1588       1, 1, 4,
   1589       SVGA3DFORMAT_OP_TEXTURE |
   1590       SVGA3DFORMAT_OP_CUBETEXTURE |
   1591       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1592       SVGA3DFORMAT_OP_ZSTENCIL
   1593    },
   1594    {
   1595       "SVGA3D_YV12",
   1596       SVGA3D_YV12, 0, 0, 0, 0, 0
   1597    },
   1598    {
   1599       "SVGA3D_R32G32B32A32_FLOAT",
   1600       SVGA3D_R32G32B32A32_FLOAT,
   1601       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT,
   1602       1, 1, 16,
   1603       SVGA3DFORMAT_OP_TEXTURE |
   1604       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1605       SVGA3DFORMAT_OP_CUBETEXTURE |
   1606       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1607    },
   1608    {
   1609       "SVGA3D_R16G16B16A16_FLOAT",
   1610       SVGA3D_R16G16B16A16_FLOAT,
   1611       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT,
   1612       1, 1, 8,
   1613       SVGA3DFORMAT_OP_TEXTURE |
   1614       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1615       SVGA3DFORMAT_OP_CUBETEXTURE |
   1616       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1617    },
   1618    {
   1619       "SVGA3D_R16G16B16A16_UNORM",
   1620       SVGA3D_R16G16B16A16_UNORM,
   1621       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM,
   1622       1, 1, 8,
   1623       SVGA3DFORMAT_OP_TEXTURE |
   1624       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1625       SVGA3DFORMAT_OP_CUBETEXTURE |
   1626       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1627    },
   1628    {
   1629       "SVGA3D_R32G32_FLOAT",
   1630       SVGA3D_R32G32_FLOAT,
   1631       SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT,
   1632       1, 1, 8,
   1633       SVGA3DFORMAT_OP_TEXTURE |
   1634       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1635       SVGA3DFORMAT_OP_CUBETEXTURE |
   1636       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1637    },
   1638    {
   1639       "SVGA3D_R10G10B10A2_UNORM",
   1640       SVGA3D_R10G10B10A2_UNORM,
   1641       SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM,
   1642       1, 1, 4,
   1643       SVGA3DFORMAT_OP_TEXTURE |
   1644       SVGA3DFORMAT_OP_CUBETEXTURE |
   1645       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1646       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1647    },
   1648    {
   1649       "SVGA3D_R8G8B8A8_SNORM",
   1650       SVGA3D_R8G8B8A8_SNORM,
   1651       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM,
   1652       1, 1, 4,
   1653       SVGA3DFORMAT_OP_TEXTURE |
   1654       SVGA3DFORMAT_OP_CUBETEXTURE |
   1655       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1656       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1657    },
   1658    {
   1659       "SVGA3D_R16G16_FLOAT",
   1660       SVGA3D_R16G16_FLOAT,
   1661       SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT,
   1662       1, 1, 4,
   1663       SVGA3DFORMAT_OP_TEXTURE |
   1664       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1665       SVGA3DFORMAT_OP_CUBETEXTURE |
   1666       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1667    },
   1668    {
   1669       "SVGA3D_R16G16_UNORM",
   1670       SVGA3D_R16G16_UNORM,
   1671       SVGA3D_DEVCAP_DXFMT_R16G16_UNORM,
   1672       1, 1, 4,
   1673       SVGA3DFORMAT_OP_TEXTURE |
   1674       SVGA3DFORMAT_OP_CUBETEXTURE |
   1675       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1676       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1677    },
   1678    {
   1679       "SVGA3D_R16G16_SNORM",
   1680       SVGA3D_R16G16_SNORM,
   1681       SVGA3D_DEVCAP_DXFMT_R16G16_SNORM,
   1682       1, 1, 4,
   1683       SVGA3DFORMAT_OP_TEXTURE |
   1684       SVGA3DFORMAT_OP_CUBETEXTURE |
   1685       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1686       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1687    },
   1688    {
   1689       "SVGA3D_R32_FLOAT",
   1690       SVGA3D_R32_FLOAT,
   1691       SVGA3D_DEVCAP_DXFMT_R32_FLOAT,
   1692       1, 1, 4,
   1693       SVGA3DFORMAT_OP_TEXTURE |
   1694       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1695       SVGA3DFORMAT_OP_CUBETEXTURE |
   1696       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1697    },
   1698    {
   1699       "SVGA3D_R8G8_SNORM",
   1700       SVGA3D_R8G8_SNORM,
   1701       SVGA3D_DEVCAP_DXFMT_R8G8_SNORM,
   1702       1, 1, 2,
   1703       SVGA3DFORMAT_OP_TEXTURE |
   1704       SVGA3DFORMAT_OP_CUBETEXTURE |
   1705       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1706       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1707    },
   1708    {
   1709       "SVGA3D_R16_FLOAT",
   1710       SVGA3D_R16_FLOAT,
   1711       SVGA3D_DEVCAP_DXFMT_R16_FLOAT,
   1712       1, 1, 2,
   1713       SVGA3DFORMAT_OP_TEXTURE |
   1714       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1715       SVGA3DFORMAT_OP_CUBETEXTURE |
   1716       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1717    },
   1718    {
   1719       "SVGA3D_D16_UNORM",
   1720       SVGA3D_D16_UNORM,
   1721       0, /*SVGA3D_DEVCAP_DXFMT_D16_UNORM*/
   1722       1, 1, 2,
   1723       SVGA3DFORMAT_OP_TEXTURE |
   1724       SVGA3DFORMAT_OP_CUBETEXTURE |
   1725       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1726       SVGA3DFORMAT_OP_ZSTENCIL
   1727    },
   1728    {
   1729       "SVGA3D_A8_UNORM",
   1730       SVGA3D_A8_UNORM,
   1731       SVGA3D_DEVCAP_DXFMT_A8_UNORM,
   1732       1, 1, 1,
   1733       SVGA3DFORMAT_OP_TEXTURE |
   1734       SVGA3DFORMAT_OP_CUBETEXTURE |
   1735       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1736       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1737    },
   1738    {
   1739       "SVGA3D_BC1_UNORM",
   1740       SVGA3D_BC1_UNORM,
   1741       SVGA3D_DEVCAP_DXFMT_BC1_UNORM,
   1742       4, 4, 8,
   1743       SVGA3DFORMAT_OP_TEXTURE |
   1744       SVGA3DFORMAT_OP_CUBETEXTURE
   1745    },
   1746    {
   1747       "SVGA3D_BC2_UNORM",
   1748       SVGA3D_BC2_UNORM,
   1749       SVGA3D_DEVCAP_DXFMT_BC2_UNORM,
   1750       4, 4, 16,
   1751       SVGA3DFORMAT_OP_TEXTURE |
   1752       SVGA3DFORMAT_OP_CUBETEXTURE
   1753    },
   1754    {
   1755       "SVGA3D_BC3_UNORM",
   1756       SVGA3D_BC3_UNORM,
   1757       SVGA3D_DEVCAP_DXFMT_BC3_UNORM,
   1758       4, 4, 16,
   1759       SVGA3DFORMAT_OP_TEXTURE |
   1760       SVGA3DFORMAT_OP_CUBETEXTURE
   1761    },
   1762    {
   1763       "SVGA3D_B5G6R5_UNORM",
   1764       SVGA3D_B5G6R5_UNORM,
   1765       SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM,
   1766       1, 1, 2,
   1767       SVGA3DFORMAT_OP_TEXTURE |
   1768       SVGA3DFORMAT_OP_CUBETEXTURE |
   1769       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1770       SVGA3DFORMAT_OP_DISPLAYMODE |
   1771       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1772    },
   1773    {
   1774       "SVGA3D_B5G5R5A1_UNORM",
   1775       SVGA3D_B5G5R5A1_UNORM,
   1776       SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM,
   1777       1, 1, 2,
   1778       SVGA3DFORMAT_OP_TEXTURE |
   1779       SVGA3DFORMAT_OP_CUBETEXTURE |
   1780       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1781       SVGA3DFORMAT_OP_DISPLAYMODE |
   1782       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1783    },
   1784    {
   1785       "SVGA3D_B8G8R8A8_UNORM",
   1786       SVGA3D_B8G8R8A8_UNORM,
   1787       SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM,
   1788       1, 1, 4,
   1789       SVGA3DFORMAT_OP_TEXTURE |
   1790       SVGA3DFORMAT_OP_CUBETEXTURE |
   1791       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1792       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1793    },
   1794    {
   1795       "SVGA3D_B8G8R8X8_UNORM",
   1796       SVGA3D_B8G8R8X8_UNORM,
   1797       SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM,
   1798       1, 1, 4,
   1799       SVGA3DFORMAT_OP_TEXTURE |
   1800       SVGA3DFORMAT_OP_CUBETEXTURE |
   1801       SVGA3DFORMAT_OP_VOLUMETEXTURE |
   1802       SVGA3DFORMAT_OP_DISPLAYMODE |
   1803       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
   1804    },
   1805    {
   1806       "SVGA3D_BC4_UNORM",
   1807      SVGA3D_BC4_UNORM,
   1808      SVGA3D_DEVCAP_DXFMT_BC4_UNORM,
   1809      4, 4, 8,
   1810      SVGA3DFORMAT_OP_TEXTURE |
   1811      SVGA3DFORMAT_OP_CUBETEXTURE
   1812    },
   1813    {
   1814       "SVGA3D_BC5_UNORM",
   1815      SVGA3D_BC5_UNORM,
   1816      SVGA3D_DEVCAP_DXFMT_BC5_UNORM,
   1817      4, 4, 16,
   1818      SVGA3DFORMAT_OP_TEXTURE |
   1819      SVGA3DFORMAT_OP_CUBETEXTURE
   1820    }
   1821 };
   1822 
   1823 
   1824 /**
   1825  * Debug only:
   1826  * 1. check that format_cap_table[i] matches the i-th SVGA3D format.
   1827  * 2. check that format_conversion_table[i].pformat == i.
   1828  */
   1829 static void
   1830 check_format_tables(void)
   1831 {
   1832    static boolean first_call = TRUE;
   1833 
   1834    if (first_call) {
   1835       unsigned i;
   1836 
   1837       STATIC_ASSERT(ARRAY_SIZE(format_cap_table) == SVGA3D_FORMAT_MAX);
   1838       for (i = 0; i < ARRAY_SIZE(format_cap_table); i++) {
   1839          assert(format_cap_table[i].format == i);
   1840       }
   1841 
   1842       STATIC_ASSERT(ARRAY_SIZE(format_conversion_table) == PIPE_FORMAT_COUNT);
   1843       for (i = 0; i < ARRAY_SIZE(format_conversion_table); i++) {
   1844          assert(format_conversion_table[i].pformat == i);
   1845       }
   1846 
   1847       first_call = FALSE;
   1848    }
   1849 }
   1850 
   1851 
   1852 /*
   1853  * Get format capabilities from the host.  It takes in consideration
   1854  * deprecated/unsupported formats, and formats which are implicitely assumed to
   1855  * be supported when the host does not provide an explicit capability entry.
   1856  */
   1857 void
   1858 svga_get_format_cap(struct svga_screen *ss,
   1859                     SVGA3dSurfaceFormat format,
   1860                     SVGA3dSurfaceFormatCaps *caps)
   1861 {
   1862    struct svga_winsys_screen *sws = ss->sws;
   1863    SVGA3dDevCapResult result;
   1864    const struct format_cap *entry;
   1865 
   1866 #ifdef DEBUG
   1867    check_format_tables();
   1868 #else
   1869    (void) check_format_tables;
   1870 #endif
   1871 
   1872    assert(format < ARRAY_SIZE(format_cap_table));
   1873    entry = &format_cap_table[format];
   1874    assert(entry->format == format);
   1875 
   1876    if (entry->devcap && sws->get_cap(sws, entry->devcap, &result)) {
   1877       /* Explicitly advertised format */
   1878       if (entry->devcap > SVGA3D_DEVCAP_DX) {
   1879          /* Translate DX/VGPU10 format cap to VGPU9 cap */
   1880          caps->value = 0;
   1881          if (result.u & SVGA3D_DXFMT_COLOR_RENDERTARGET)
   1882             caps->value |= SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET;
   1883          if (!(result.u & SVGA3D_DXFMT_BLENDABLE))
   1884             caps->value |= SVGA3DFORMAT_OP_NOALPHABLEND;
   1885          if (result.u & SVGA3D_DXFMT_DEPTH_RENDERTARGET)
   1886             caps->value |= SVGA3DFORMAT_OP_ZSTENCIL;
   1887          if (result.u & SVGA3D_DXFMT_SHADER_SAMPLE)
   1888             caps->value |= (SVGA3DFORMAT_OP_TEXTURE |
   1889                             SVGA3DFORMAT_OP_CUBETEXTURE);
   1890          if (result.u & SVGA3D_DXFMT_VOLUME)
   1891             caps->value |= SVGA3DFORMAT_OP_VOLUMETEXTURE;
   1892       }
   1893       else {
   1894          /* Return VGPU9 format cap as-is */
   1895          caps->value = result.u;
   1896       }
   1897 
   1898    } else {
   1899       /* Implicitly advertised format -- use default caps */
   1900       caps->value = entry->defaultOperations;
   1901    }
   1902 }
   1903 
   1904 
   1905 void
   1906 svga_format_size(SVGA3dSurfaceFormat format,
   1907                  unsigned *block_width,
   1908                  unsigned *block_height,
   1909                  unsigned *bytes_per_block)
   1910 {
   1911    assert(format < ARRAY_SIZE(format_cap_table));
   1912    *block_width = format_cap_table[format].block_width;
   1913    *block_height = format_cap_table[format].block_height;
   1914    *bytes_per_block = format_cap_table[format].block_bytes;
   1915    /* Make sure the table entry was valid */
   1916    if (*block_width == 0)
   1917       debug_printf("Bad table entry for %s\n", svga_format_name(format));
   1918    assert(*block_width);
   1919    assert(*block_height);
   1920    assert(*bytes_per_block);
   1921 }
   1922 
   1923 
   1924 const char *
   1925 svga_format_name(SVGA3dSurfaceFormat format)
   1926 {
   1927    assert(format < ARRAY_SIZE(format_cap_table));
   1928    return format_cap_table[format].name;
   1929 }
   1930 
   1931 
   1932 /**
   1933  * Is the given SVGA3dSurfaceFormat a signed or unsigned integer color format?
   1934  */
   1935 boolean
   1936 svga_format_is_integer(SVGA3dSurfaceFormat format)
   1937 {
   1938    switch (format) {
   1939    case SVGA3D_R32G32B32A32_SINT:
   1940    case SVGA3D_R32G32B32_SINT:
   1941    case SVGA3D_R32G32_SINT:
   1942    case SVGA3D_R32_SINT:
   1943    case SVGA3D_R16G16B16A16_SINT:
   1944    case SVGA3D_R16G16_SINT:
   1945    case SVGA3D_R16_SINT:
   1946    case SVGA3D_R8G8B8A8_SINT:
   1947    case SVGA3D_R8G8_SINT:
   1948    case SVGA3D_R8_SINT:
   1949    case SVGA3D_R32G32B32A32_UINT:
   1950    case SVGA3D_R32G32B32_UINT:
   1951    case SVGA3D_R32G32_UINT:
   1952    case SVGA3D_R32_UINT:
   1953    case SVGA3D_R16G16B16A16_UINT:
   1954    case SVGA3D_R16G16_UINT:
   1955    case SVGA3D_R16_UINT:
   1956    case SVGA3D_R8G8B8A8_UINT:
   1957    case SVGA3D_R8G8_UINT:
   1958    case SVGA3D_R8_UINT:
   1959    case SVGA3D_R10G10B10A2_UINT:
   1960       return TRUE;
   1961    default:
   1962       return FALSE;
   1963    }
   1964 }
   1965 
   1966 boolean
   1967 svga_format_support_gen_mips(enum pipe_format format)
   1968 {
   1969    assert(format < ARRAY_SIZE(format_conversion_table));
   1970    return ((format_conversion_table[format].flags & TF_GEN_MIPS) > 0);
   1971 }
   1972 
   1973 
   1974 /**
   1975  * Given a texture format, return the expected data type returned from
   1976  * the texture sampler.  For example, UNORM8 formats return floating point
   1977  * values while SINT formats returned signed integer values.
   1978  * Note: this function could be moved into the gallum u_format.[ch] code
   1979  * if it's useful to anyone else.
   1980  */
   1981 enum tgsi_return_type
   1982 svga_get_texture_datatype(enum pipe_format format)
   1983 {
   1984    const struct util_format_description *desc = util_format_description(format);
   1985    enum tgsi_return_type t;
   1986 
   1987    if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN ) {
   1988       if (util_format_is_depth_or_stencil(format)) {
   1989          t = TGSI_RETURN_TYPE_FLOAT; /* XXX revisit this */
   1990       }
   1991       else if (desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT) {
   1992          t = TGSI_RETURN_TYPE_FLOAT;
   1993       }
   1994       else if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
   1995          t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_UNORM : TGSI_RETURN_TYPE_UINT;
   1996       }
   1997       else if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
   1998          t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_SNORM : TGSI_RETURN_TYPE_SINT;
   1999       }
   2000       else {
   2001          assert(!"Unexpected channel type in svga_get_texture_datatype()");
   2002          t = TGSI_RETURN_TYPE_FLOAT;
   2003       }
   2004    }
   2005    else {
   2006       /* compressed format, shared exponent format, etc. */
   2007       switch (format) {
   2008       case PIPE_FORMAT_DXT1_RGB:
   2009       case PIPE_FORMAT_DXT1_RGBA:
   2010       case PIPE_FORMAT_DXT3_RGBA:
   2011       case PIPE_FORMAT_DXT5_RGBA:
   2012       case PIPE_FORMAT_DXT1_SRGB:
   2013       case PIPE_FORMAT_DXT1_SRGBA:
   2014       case PIPE_FORMAT_DXT3_SRGBA:
   2015       case PIPE_FORMAT_DXT5_SRGBA:
   2016       case PIPE_FORMAT_RGTC1_UNORM:
   2017       case PIPE_FORMAT_RGTC2_UNORM:
   2018       case PIPE_FORMAT_LATC1_UNORM:
   2019       case PIPE_FORMAT_LATC2_UNORM:
   2020       case PIPE_FORMAT_ETC1_RGB8:
   2021          t = TGSI_RETURN_TYPE_UNORM;
   2022          break;
   2023       case PIPE_FORMAT_RGTC1_SNORM:
   2024       case PIPE_FORMAT_RGTC2_SNORM:
   2025       case PIPE_FORMAT_LATC1_SNORM:
   2026       case PIPE_FORMAT_LATC2_SNORM:
   2027       case PIPE_FORMAT_R10G10B10X2_SNORM:
   2028          t = TGSI_RETURN_TYPE_SNORM;
   2029          break;
   2030       case PIPE_FORMAT_R11G11B10_FLOAT:
   2031       case PIPE_FORMAT_R9G9B9E5_FLOAT:
   2032          t = TGSI_RETURN_TYPE_FLOAT;
   2033          break;
   2034       default:
   2035          assert(!"Unexpected channel type in svga_get_texture_datatype()");
   2036          t = TGSI_RETURN_TYPE_FLOAT;
   2037       }
   2038    }
   2039 
   2040    return t;
   2041 }
   2042 
   2043 
   2044 /**
   2045  * Given an svga context, return true iff there are currently any integer color
   2046  * buffers attached to the framebuffer.
   2047  */
   2048 boolean
   2049 svga_has_any_integer_cbufs(const struct svga_context *svga)
   2050 {
   2051    unsigned i;
   2052    for (i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) {
   2053       struct pipe_surface *cbuf = svga->curr.framebuffer.cbufs[i];
   2054 
   2055       if (cbuf && util_format_is_pure_integer(cbuf->format)) {
   2056          return TRUE;
   2057       }
   2058    }
   2059    return FALSE;
   2060 }
   2061 
   2062 
   2063 /**
   2064  * Given an SVGA format, return the corresponding typeless format.
   2065  * If there is no typeless format, return the format unchanged.
   2066  */
   2067 SVGA3dSurfaceFormat
   2068 svga_typeless_format(SVGA3dSurfaceFormat format)
   2069 {
   2070    switch (format) {
   2071    case SVGA3D_R32G32B32A32_UINT:
   2072    case SVGA3D_R32G32B32A32_SINT:
   2073    case SVGA3D_R32G32B32A32_FLOAT:
   2074       return SVGA3D_R32G32B32A32_TYPELESS;
   2075    case SVGA3D_R32G32B32_FLOAT:
   2076    case SVGA3D_R32G32B32_UINT:
   2077    case SVGA3D_R32G32B32_SINT:
   2078       return SVGA3D_R32G32B32_TYPELESS;
   2079    case SVGA3D_R16G16B16A16_UINT:
   2080    case SVGA3D_R16G16B16A16_UNORM:
   2081    case SVGA3D_R16G16B16A16_SNORM:
   2082    case SVGA3D_R16G16B16A16_SINT:
   2083    case SVGA3D_R16G16B16A16_FLOAT:
   2084       return SVGA3D_R16G16B16A16_TYPELESS;
   2085    case SVGA3D_R32G32_UINT:
   2086    case SVGA3D_R32G32_SINT:
   2087    case SVGA3D_R32G32_FLOAT:
   2088       return SVGA3D_R32G32_TYPELESS;
   2089    case SVGA3D_D32_FLOAT_S8X24_UINT:
   2090       return SVGA3D_R32G8X24_TYPELESS;
   2091    case SVGA3D_X32_TYPELESS_G8X24_UINT:
   2092       return SVGA3D_R32_FLOAT_X8X24_TYPELESS;
   2093    case SVGA3D_R10G10B10A2_UINT:
   2094    case SVGA3D_R10G10B10A2_UNORM:
   2095       return SVGA3D_R10G10B10A2_TYPELESS;
   2096    case SVGA3D_R8G8B8A8_UNORM:
   2097    case SVGA3D_R8G8B8A8_SNORM:
   2098    case SVGA3D_R8G8B8A8_UNORM_SRGB:
   2099    case SVGA3D_R8G8B8A8_UINT:
   2100    case SVGA3D_R8G8B8A8_SINT:
   2101       return SVGA3D_R8G8B8A8_TYPELESS;
   2102    case SVGA3D_R16G16_UINT:
   2103    case SVGA3D_R16G16_SINT:
   2104    case SVGA3D_R16G16_UNORM:
   2105    case SVGA3D_R16G16_SNORM:
   2106    case SVGA3D_R16G16_FLOAT:
   2107       return SVGA3D_R16G16_TYPELESS;
   2108    case SVGA3D_D32_FLOAT:
   2109    case SVGA3D_R32_FLOAT:
   2110    case SVGA3D_R32_UINT:
   2111    case SVGA3D_R32_SINT:
   2112       return SVGA3D_R32_TYPELESS;
   2113    case SVGA3D_D24_UNORM_S8_UINT:
   2114       return SVGA3D_R24G8_TYPELESS;
   2115    case SVGA3D_X24_TYPELESS_G8_UINT:
   2116       return SVGA3D_R24_UNORM_X8_TYPELESS;
   2117    case SVGA3D_R8G8_UNORM:
   2118    case SVGA3D_R8G8_SNORM:
   2119    case SVGA3D_R8G8_UINT:
   2120    case SVGA3D_R8G8_SINT:
   2121       return SVGA3D_R8G8_TYPELESS;
   2122    case SVGA3D_D16_UNORM:
   2123    case SVGA3D_R16_UNORM:
   2124    case SVGA3D_R16_UINT:
   2125    case SVGA3D_R16_SNORM:
   2126    case SVGA3D_R16_SINT:
   2127    case SVGA3D_R16_FLOAT:
   2128       return SVGA3D_R16_TYPELESS;
   2129    case SVGA3D_R8_UNORM:
   2130    case SVGA3D_R8_UINT:
   2131    case SVGA3D_R8_SNORM:
   2132    case SVGA3D_R8_SINT:
   2133       return SVGA3D_R8_TYPELESS;
   2134    case SVGA3D_B8G8R8A8_UNORM_SRGB:
   2135    case SVGA3D_B8G8R8A8_UNORM:
   2136       return SVGA3D_B8G8R8A8_TYPELESS;
   2137    case SVGA3D_B8G8R8X8_UNORM_SRGB:
   2138    case SVGA3D_B8G8R8X8_UNORM:
   2139       return SVGA3D_B8G8R8X8_TYPELESS;
   2140    case SVGA3D_BC1_UNORM:
   2141    case SVGA3D_BC1_UNORM_SRGB:
   2142       return SVGA3D_BC1_TYPELESS;
   2143    case SVGA3D_BC2_UNORM:
   2144    case SVGA3D_BC2_UNORM_SRGB:
   2145       return SVGA3D_BC2_TYPELESS;
   2146    case SVGA3D_BC3_UNORM:
   2147    case SVGA3D_BC3_UNORM_SRGB:
   2148       return SVGA3D_BC3_TYPELESS;
   2149    case SVGA3D_BC4_UNORM:
   2150    case SVGA3D_BC4_SNORM:
   2151       return SVGA3D_BC4_TYPELESS;
   2152    case SVGA3D_BC5_UNORM:
   2153    case SVGA3D_BC5_SNORM:
   2154       return SVGA3D_BC5_TYPELESS;
   2155 
   2156    /* Special cases (no corresponding _TYPELESS formats) */
   2157    case SVGA3D_A8_UNORM:
   2158    case SVGA3D_B5G5R5A1_UNORM:
   2159    case SVGA3D_B5G6R5_UNORM:
   2160    case SVGA3D_R11G11B10_FLOAT:
   2161    case SVGA3D_R9G9B9E5_SHAREDEXP:
   2162       return format;
   2163    default:
   2164       debug_printf("Unexpected format %s in %s\n",
   2165                    svga_format_name(format), __FUNCTION__);
   2166       return format;
   2167    }
   2168 }
   2169 
   2170 
   2171 /**
   2172  * Given a surface format, return the corresponding format to use for
   2173  * a texture sampler.  In most cases, it's the format unchanged, but there
   2174  * are some special cases.
   2175  */
   2176 SVGA3dSurfaceFormat
   2177 svga_sampler_format(SVGA3dSurfaceFormat format)
   2178 {
   2179    switch (format) {
   2180    case SVGA3D_D16_UNORM:
   2181       return SVGA3D_R16_UNORM;
   2182    case SVGA3D_D24_UNORM_S8_UINT:
   2183       return SVGA3D_R24_UNORM_X8_TYPELESS;
   2184    case SVGA3D_D32_FLOAT:
   2185       return SVGA3D_R32_FLOAT;
   2186    case SVGA3D_D32_FLOAT_S8X24_UINT:
   2187       return SVGA3D_R32_FLOAT_X8X24_TYPELESS;
   2188    default:
   2189       return format;
   2190    }
   2191 }
   2192 
   2193 
   2194 /**
   2195  * Is the given format an uncompressed snorm format?
   2196  */
   2197 bool
   2198 svga_format_is_uncompressed_snorm(SVGA3dSurfaceFormat format)
   2199 {
   2200    switch (format) {
   2201    case SVGA3D_R8G8B8A8_SNORM:
   2202    case SVGA3D_R8G8_SNORM:
   2203    case SVGA3D_R8_SNORM:
   2204    case SVGA3D_R16G16B16A16_SNORM:
   2205    case SVGA3D_R16G16_SNORM:
   2206    case SVGA3D_R16_SNORM:
   2207       return true;
   2208    default:
   2209       return false;
   2210    }
   2211 }
   2212 
   2213 
   2214 bool
   2215 svga_format_is_typeless(SVGA3dSurfaceFormat format)
   2216 {
   2217    switch (format) {
   2218    case SVGA3D_R32G32B32A32_TYPELESS:
   2219    case SVGA3D_R32G32B32_TYPELESS:
   2220    case SVGA3D_R16G16B16A16_TYPELESS:
   2221    case SVGA3D_R32G32_TYPELESS:
   2222    case SVGA3D_R32G8X24_TYPELESS:
   2223    case SVGA3D_R10G10B10A2_TYPELESS:
   2224    case SVGA3D_R8G8B8A8_TYPELESS:
   2225    case SVGA3D_R16G16_TYPELESS:
   2226    case SVGA3D_R32_TYPELESS:
   2227    case SVGA3D_R24G8_TYPELESS:
   2228    case SVGA3D_R8G8_TYPELESS:
   2229    case SVGA3D_R16_TYPELESS:
   2230    case SVGA3D_R8_TYPELESS:
   2231    case SVGA3D_BC1_TYPELESS:
   2232    case SVGA3D_BC2_TYPELESS:
   2233    case SVGA3D_BC3_TYPELESS:
   2234    case SVGA3D_BC4_TYPELESS:
   2235    case SVGA3D_BC5_TYPELESS:
   2236    case SVGA3D_B8G8R8A8_TYPELESS:
   2237    case SVGA3D_B8G8R8X8_TYPELESS:
   2238       return true;
   2239    default:
   2240       return false;
   2241    }
   2242 }
   2243