Path: blob/21.2-virgl/src/gallium/drivers/svga/svga_format.c
4570 views
/**********************************************************1* Copyright 2011 VMware, Inc. All rights reserved.2*3* Permission is hereby granted, free of charge, to any person4* obtaining a copy of this software and associated documentation5* files (the "Software"), to deal in the Software without6* restriction, including without limitation the rights to use, copy,7* modify, merge, publish, distribute, sublicense, and/or sell copies8* of the Software, and to permit persons to whom the Software is9* furnished to do so, subject to the following conditions:10*11* The above copyright notice and this permission notice shall be12* included in all copies or substantial portions of the Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,15* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF16* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND17* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS18* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN19* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN20* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE21* SOFTWARE.22*23**********************************************************/242526#include "pipe/p_format.h"27#include "util/u_debug.h"28#include "util/format/u_format.h"29#include "util/u_memory.h"3031#include "svga_winsys.h"32#include "svga_screen.h"33#include "svga_format.h"343536/** Describes mapping from gallium formats to SVGA vertex/pixel formats */37struct vgpu10_format_entry38{39SVGA3dSurfaceFormat vertex_format;40SVGA3dSurfaceFormat pixel_format;41SVGA3dSurfaceFormat view_format; /* view format for texture buffer */42unsigned flags;43};4445struct format_compat_entry46{47enum pipe_format pformat;48const SVGA3dSurfaceFormat *compat_format;49};505152/**53* Table mapping Gallium formats to SVGA3d vertex/pixel formats.54* Note: the table is ordered according to PIPE_FORMAT_x order.55*/56static const struct vgpu10_format_entry format_conversion_table[] =57{58/* Gallium format SVGA3D vertex format SVGA3D pixel format SVGA3D texbuf view format Flags */59[ PIPE_FORMAT_B8G8R8A8_UNORM ] = { SVGA3D_B8G8R8A8_UNORM, SVGA3D_B8G8R8A8_UNORM, SVGA3D_B8G8R8A8_UNORM, TF_GEN_MIPS },60[ PIPE_FORMAT_B8G8R8X8_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_B8G8R8X8_UNORM, SVGA3D_B8G8R8X8_UNORM, TF_GEN_MIPS },61[ PIPE_FORMAT_B5G5R5A1_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_B5G5R5A1_UNORM, SVGA3D_B5G5R5A1_UNORM, TF_GEN_MIPS },62[ PIPE_FORMAT_B5G6R5_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_B5G6R5_UNORM, SVGA3D_B5G6R5_UNORM, TF_GEN_MIPS },63[ PIPE_FORMAT_R10G10B10A2_UNORM ] = { SVGA3D_R10G10B10A2_UNORM, SVGA3D_R10G10B10A2_UNORM, SVGA3D_R10G10B10A2_UNORM, TF_GEN_MIPS },64[ PIPE_FORMAT_L8_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_UNORM, TF_XXX1 },65[ PIPE_FORMAT_A8_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_A8_UNORM, SVGA3D_R8_UNORM, TF_GEN_MIPS | TF_000X},66[ PIPE_FORMAT_I8_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_UNORM, TF_XXXX },67[ PIPE_FORMAT_L8A8_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8G8_UNORM, TF_XXXY },68[ PIPE_FORMAT_L16_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_UNORM, TF_XXX1 },69[ PIPE_FORMAT_Z16_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_D16_UNORM, SVGA3D_D16_UNORM, 0 },70[ PIPE_FORMAT_Z32_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_D32_FLOAT, SVGA3D_D32_FLOAT, 0 },71[ PIPE_FORMAT_Z24_UNORM_S8_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_D24_UNORM_S8_UINT, SVGA3D_D24_UNORM_S8_UINT, 0 },72[ PIPE_FORMAT_Z24X8_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_D24_UNORM_S8_UINT, SVGA3D_D24_UNORM_S8_UINT, 0 },73[ PIPE_FORMAT_R32_FLOAT ] = { SVGA3D_R32_FLOAT, SVGA3D_R32_FLOAT, SVGA3D_R32_FLOAT, TF_GEN_MIPS },74[ PIPE_FORMAT_R32G32_FLOAT ] = { SVGA3D_R32G32_FLOAT, SVGA3D_R32G32_FLOAT, SVGA3D_R32G32_FLOAT, TF_GEN_MIPS },75[ PIPE_FORMAT_R32G32B32_FLOAT ] = { SVGA3D_R32G32B32_FLOAT, SVGA3D_R32G32B32_FLOAT, SVGA3D_R32G32B32_FLOAT, TF_GEN_MIPS },76[ PIPE_FORMAT_R32G32B32A32_FLOAT ] = { SVGA3D_R32G32B32A32_FLOAT, SVGA3D_R32G32B32A32_FLOAT, SVGA3D_R32G32B32A32_FLOAT, TF_GEN_MIPS },77[ PIPE_FORMAT_R32_USCALED ] = { SVGA3D_R32_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },78[ PIPE_FORMAT_R32G32_USCALED ] = { SVGA3D_R32G32_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },79[ PIPE_FORMAT_R32G32B32_USCALED ] = { SVGA3D_R32G32B32_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },80[ PIPE_FORMAT_R32G32B32A32_USCALED ] = { SVGA3D_R32G32B32A32_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },81[ PIPE_FORMAT_R32_SSCALED ] = { SVGA3D_R32_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },82[ PIPE_FORMAT_R32G32_SSCALED ] = { SVGA3D_R32G32_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },83[ PIPE_FORMAT_R32G32B32_SSCALED ] = { SVGA3D_R32G32B32_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },84[ PIPE_FORMAT_R32G32B32A32_SSCALED ] = { SVGA3D_R32G32B32A32_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },85[ PIPE_FORMAT_R16_UNORM ] = { SVGA3D_R16_UNORM, SVGA3D_R16_UNORM, SVGA3D_R16_UNORM, TF_GEN_MIPS },86[ PIPE_FORMAT_R16G16_UNORM ] = { SVGA3D_R16G16_UNORM, SVGA3D_R16G16_UNORM, SVGA3D_R16G16_UNORM, TF_GEN_MIPS },87[ PIPE_FORMAT_R16G16B16_UNORM ] = { SVGA3D_R16G16B16A16_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },88[ PIPE_FORMAT_R16G16B16A16_UNORM ] = { SVGA3D_R16G16B16A16_UNORM, SVGA3D_R16G16B16A16_UNORM, SVGA3D_R16G16B16A16_UNORM, TF_GEN_MIPS },89[ PIPE_FORMAT_R16_USCALED ] = { SVGA3D_R16_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },90[ PIPE_FORMAT_R16G16_USCALED ] = { SVGA3D_R16G16_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },91[ PIPE_FORMAT_R16G16B16_USCALED ] = { SVGA3D_R16G16B16A16_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 | VF_U_TO_F_CAST },92[ PIPE_FORMAT_R16G16B16A16_USCALED ] = { SVGA3D_R16G16B16A16_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },93[ PIPE_FORMAT_R16_SNORM ] = { SVGA3D_R16_SNORM, SVGA3D_R16_SNORM, SVGA3D_R16_SNORM, 0 },94[ PIPE_FORMAT_R16G16_SNORM ] = { SVGA3D_R16G16_SNORM, SVGA3D_R16G16_SNORM, SVGA3D_R16G16_SNORM, 0 },95[ PIPE_FORMAT_R16G16B16_SNORM ] = { SVGA3D_R16G16B16A16_SNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },96[ PIPE_FORMAT_R16G16B16A16_SNORM ] = { SVGA3D_R16G16B16A16_SNORM, SVGA3D_R16G16B16A16_SNORM, SVGA3D_R16G16B16A16_SNORM, 0 },97[ PIPE_FORMAT_R16_SSCALED ] = { SVGA3D_R16_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },98[ PIPE_FORMAT_R16G16_SSCALED ] = { SVGA3D_R16G16_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },99[ PIPE_FORMAT_R16G16B16_SSCALED ] = { SVGA3D_R16G16B16A16_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 | VF_I_TO_F_CAST },100[ PIPE_FORMAT_R16G16B16A16_SSCALED ] = { SVGA3D_R16G16B16A16_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },101[ PIPE_FORMAT_R8_UNORM ] = { SVGA3D_R8_UNORM, SVGA3D_R8_UNORM, SVGA3D_R8_UNORM, TF_GEN_MIPS },102[ PIPE_FORMAT_R8G8_UNORM ] = { SVGA3D_R8G8_UNORM, SVGA3D_R8G8_UNORM, SVGA3D_R8G8_UNORM, TF_GEN_MIPS },103[ PIPE_FORMAT_R8G8B8_UNORM ] = { SVGA3D_R8G8B8A8_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },104[ PIPE_FORMAT_R8G8B8A8_UNORM ] = { SVGA3D_R8G8B8A8_UNORM, SVGA3D_R8G8B8A8_UNORM, SVGA3D_R8G8B8A8_UNORM, TF_GEN_MIPS },105[ PIPE_FORMAT_R8_USCALED ] = { SVGA3D_R8_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },106[ PIPE_FORMAT_R8G8_USCALED ] = { SVGA3D_R8G8_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },107[ PIPE_FORMAT_R8G8B8_USCALED ] = { SVGA3D_R8G8B8A8_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 | VF_U_TO_F_CAST },108[ PIPE_FORMAT_R8G8B8A8_USCALED ] = { SVGA3D_R8G8B8A8_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_U_TO_F_CAST },109110[ PIPE_FORMAT_R8_SNORM ] = { SVGA3D_R8_SNORM, SVGA3D_R8_SNORM, SVGA3D_R8_SNORM, 0 },111[ PIPE_FORMAT_R8G8_SNORM ] = { SVGA3D_R8G8_SNORM, SVGA3D_R8G8_SNORM, SVGA3D_R8G8_SNORM, 0 },112[ PIPE_FORMAT_R8G8B8_SNORM ] = { SVGA3D_R8G8B8A8_SNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },113[ PIPE_FORMAT_R8G8B8A8_SNORM ] = { SVGA3D_R8G8B8A8_SNORM, SVGA3D_R8G8B8A8_SNORM, SVGA3D_R8G8B8A8_SNORM, 0 },114115[ PIPE_FORMAT_R8_SSCALED ] = { SVGA3D_R8_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },116[ PIPE_FORMAT_R8G8_SSCALED ] = { SVGA3D_R8G8_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },117[ PIPE_FORMAT_R8G8B8_SSCALED ] = { SVGA3D_R8G8B8A8_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 | VF_I_TO_F_CAST },118[ PIPE_FORMAT_R8G8B8A8_SSCALED ] = { SVGA3D_R8G8B8A8_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_I_TO_F_CAST },119120[ PIPE_FORMAT_R16_FLOAT ] = { SVGA3D_R16_FLOAT, SVGA3D_R16_FLOAT, SVGA3D_R16_FLOAT, TF_GEN_MIPS },121[ PIPE_FORMAT_R16G16_FLOAT ] = { SVGA3D_R16G16_FLOAT, SVGA3D_R16G16_FLOAT, SVGA3D_R16G16_FLOAT, TF_GEN_MIPS },122[ PIPE_FORMAT_R16G16B16_FLOAT ] = { SVGA3D_R16G16B16A16_FLOAT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },123[ PIPE_FORMAT_R16G16B16A16_FLOAT ] = { SVGA3D_R16G16B16A16_FLOAT, SVGA3D_R16G16B16A16_FLOAT, SVGA3D_R16G16B16A16_FLOAT, TF_GEN_MIPS },124[ PIPE_FORMAT_B8G8R8A8_SRGB ] = { SVGA3D_FORMAT_INVALID, SVGA3D_B8G8R8A8_UNORM_SRGB, SVGA3D_FORMAT_INVALID, TF_GEN_MIPS },125[ PIPE_FORMAT_B8G8R8X8_SRGB ] = { SVGA3D_FORMAT_INVALID, SVGA3D_B8G8R8X8_UNORM_SRGB, SVGA3D_FORMAT_INVALID, TF_GEN_MIPS },126[ PIPE_FORMAT_R8G8B8A8_SRGB ] = { SVGA3D_FORMAT_INVALID, SVGA3D_R8G8B8A8_UNORM_SRGB, SVGA3D_FORMAT_INVALID, TF_GEN_MIPS },127[ PIPE_FORMAT_DXT1_RGB ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC1_UNORM, SVGA3D_FORMAT_INVALID, 0 },128[ PIPE_FORMAT_DXT1_RGBA ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC1_UNORM, SVGA3D_FORMAT_INVALID, 0 },129[ PIPE_FORMAT_DXT3_RGBA ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC2_UNORM, SVGA3D_FORMAT_INVALID, 0 },130[ PIPE_FORMAT_DXT5_RGBA ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC3_UNORM, SVGA3D_FORMAT_INVALID, 0 },131[ PIPE_FORMAT_DXT1_SRGB ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC1_UNORM_SRGB, SVGA3D_FORMAT_INVALID, 0 },132[ PIPE_FORMAT_DXT1_SRGBA ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC1_UNORM_SRGB, SVGA3D_FORMAT_INVALID, 0 },133[ PIPE_FORMAT_DXT3_SRGBA ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC2_UNORM_SRGB, SVGA3D_FORMAT_INVALID, 0 },134[ PIPE_FORMAT_DXT5_SRGBA ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC3_UNORM_SRGB, SVGA3D_FORMAT_INVALID, 0 },135[ PIPE_FORMAT_RGTC1_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC4_UNORM, SVGA3D_FORMAT_INVALID, 0 },136[ PIPE_FORMAT_RGTC1_SNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC4_SNORM, SVGA3D_FORMAT_INVALID, 0 },137[ PIPE_FORMAT_RGTC2_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC5_UNORM, SVGA3D_FORMAT_INVALID, 0 },138[ PIPE_FORMAT_RGTC2_SNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_BC5_SNORM, SVGA3D_FORMAT_INVALID, 0 },139[ PIPE_FORMAT_R10G10B10A2_USCALED ] = { SVGA3D_R10G10B10A2_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_PUINT_TO_USCALED },140[ PIPE_FORMAT_R11G11B10_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_R11G11B10_FLOAT, SVGA3D_R11G11B10_FLOAT, TF_GEN_MIPS },141[ PIPE_FORMAT_R9G9B9E5_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_R9G9B9E5_SHAREDEXP, SVGA3D_FORMAT_INVALID, 0 },142[ PIPE_FORMAT_Z32_FLOAT_S8X24_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_D32_FLOAT_S8X24_UINT, SVGA3D_FORMAT_INVALID, 0 },143[ PIPE_FORMAT_B10G10R10A2_UNORM ] = { SVGA3D_R10G10B10A2_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_BGRA },144[ PIPE_FORMAT_L16A16_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16G16_UNORM, TF_XXXY },145[ PIPE_FORMAT_A16_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_UNORM, TF_000X },146[ PIPE_FORMAT_I16_UNORM ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_UNORM, TF_XXXX },147[ PIPE_FORMAT_A16_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_FLOAT, TF_000X },148[ PIPE_FORMAT_L16_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_FLOAT, TF_XXX1 },149[ PIPE_FORMAT_L16A16_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16G16_FLOAT, TF_XXXY },150[ PIPE_FORMAT_I16_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_FLOAT, TF_XXXX },151[ PIPE_FORMAT_A32_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_FLOAT, TF_000X },152[ PIPE_FORMAT_L32_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_FLOAT, TF_XXX1 },153[ PIPE_FORMAT_L32A32_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32G32_FLOAT, TF_XXXY },154[ PIPE_FORMAT_I32_FLOAT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_FLOAT, TF_XXXX },155[ PIPE_FORMAT_R10G10B10A2_SSCALED ] = { SVGA3D_R32_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_PUINT_TO_SSCALED },156[ PIPE_FORMAT_R10G10B10A2_SNORM ] = { SVGA3D_R10G10B10A2_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_PUINT_TO_SNORM },157[ PIPE_FORMAT_B10G10R10A2_USCALED ] = { SVGA3D_R10G10B10A2_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_BGRA | VF_PUINT_TO_USCALED },158[ PIPE_FORMAT_B10G10R10A2_SSCALED ] = { SVGA3D_R32_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_BGRA | VF_PUINT_TO_SSCALED },159[ PIPE_FORMAT_B10G10R10A2_SNORM ] = { SVGA3D_R10G10B10A2_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_BGRA | VF_PUINT_TO_SNORM },160[ PIPE_FORMAT_R8_UINT ] = { SVGA3D_R8_UINT, SVGA3D_R8_UINT, SVGA3D_R8_UINT, 0 },161[ PIPE_FORMAT_R8G8_UINT ] = { SVGA3D_R8G8_UINT, SVGA3D_R8G8_UINT, SVGA3D_R8G8_UINT, 0 },162[ PIPE_FORMAT_R8G8B8_UINT ] = { SVGA3D_R8G8B8A8_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },163[ PIPE_FORMAT_R8G8B8A8_UINT ] = { SVGA3D_R8G8B8A8_UINT, SVGA3D_R8G8B8A8_UINT, SVGA3D_R8G8B8A8_UINT, 0 },164[ PIPE_FORMAT_R8_SINT ] = { SVGA3D_R8_SINT, SVGA3D_R8_SINT, SVGA3D_R8_SINT, 0 },165[ PIPE_FORMAT_R8G8_SINT ] = { SVGA3D_R8G8_SINT, SVGA3D_R8G8_SINT, SVGA3D_R8G8_SINT, 0 },166[ PIPE_FORMAT_R8G8B8_SINT ] = { SVGA3D_R8G8B8A8_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },167[ PIPE_FORMAT_R8G8B8A8_SINT ] = { SVGA3D_R8G8B8A8_SINT, SVGA3D_R8G8B8A8_SINT, SVGA3D_R8G8B8A8_SINT, 0 },168[ PIPE_FORMAT_R16_UINT ] = { SVGA3D_R16_UINT, SVGA3D_R16_UINT, SVGA3D_R16_UINT, 0 },169[ PIPE_FORMAT_R16G16_UINT ] = { SVGA3D_R16G16_UINT, SVGA3D_R16G16_UINT, SVGA3D_R16G16_UINT, 0 },170[ PIPE_FORMAT_R16G16B16_UINT ] = { SVGA3D_R16G16B16A16_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },171[ PIPE_FORMAT_R16G16B16A16_UINT ] = { SVGA3D_R16G16B16A16_UINT, SVGA3D_R16G16B16A16_UINT, SVGA3D_R16G16B16A16_UINT, 0 },172[ PIPE_FORMAT_R16_SINT ] = { SVGA3D_R16_SINT, SVGA3D_R16_SINT, SVGA3D_R16_SINT, 0 },173[ PIPE_FORMAT_R16G16_SINT ] = { SVGA3D_R16G16_SINT, SVGA3D_R16G16_SINT, SVGA3D_R16G16_SINT, 0 },174[ PIPE_FORMAT_R16G16B16_SINT ] = { SVGA3D_R16G16B16A16_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, VF_W_TO_1 },175[ PIPE_FORMAT_R16G16B16A16_SINT ] = { SVGA3D_R16G16B16A16_SINT, SVGA3D_R16G16B16A16_SINT, SVGA3D_R16G16B16A16_SINT, 0 },176[ PIPE_FORMAT_R32_UINT ] = { SVGA3D_R32_UINT, SVGA3D_R32_UINT, SVGA3D_R32_UINT, 0 },177[ PIPE_FORMAT_R32G32_UINT ] = { SVGA3D_R32G32_UINT, SVGA3D_R32G32_UINT, SVGA3D_R32G32_UINT, 0 },178[ PIPE_FORMAT_R32G32B32_UINT ] = { SVGA3D_R32G32B32_UINT, SVGA3D_R32G32B32_UINT, SVGA3D_R32G32B32_UINT, 0 },179[ PIPE_FORMAT_R32G32B32A32_UINT ] = { SVGA3D_R32G32B32A32_UINT, SVGA3D_R32G32B32A32_UINT, SVGA3D_R32G32B32A32_UINT, 0 },180[ PIPE_FORMAT_R32_SINT ] = { SVGA3D_R32_SINT, SVGA3D_R32_SINT, SVGA3D_R32_SINT, 0 },181[ PIPE_FORMAT_R32G32_SINT ] = { SVGA3D_R32G32_SINT, SVGA3D_R32G32_SINT, SVGA3D_R32G32_SINT, 0 },182[ PIPE_FORMAT_R32G32B32_SINT ] = { SVGA3D_R32G32B32_SINT, SVGA3D_R32G32B32_SINT, SVGA3D_R32G32B32_SINT, 0 },183[ PIPE_FORMAT_R32G32B32A32_SINT ] = { SVGA3D_R32G32B32A32_SINT, SVGA3D_R32G32B32A32_SINT, SVGA3D_R32G32B32A32_SINT, 0 },184[ PIPE_FORMAT_A8_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_UINT, TF_000X },185[ PIPE_FORMAT_I8_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_UINT, TF_XXXX },186[ PIPE_FORMAT_L8_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_UINT, TF_XXX1 },187[ PIPE_FORMAT_L8A8_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8G8_UINT, TF_XXXY },188[ PIPE_FORMAT_A8_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_SINT, TF_000X },189[ PIPE_FORMAT_I8_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_SINT, TF_XXXX },190[ PIPE_FORMAT_L8_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8_SINT, TF_XXX1 },191[ PIPE_FORMAT_L8A8_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R8G8_SINT, TF_XXXY },192[ PIPE_FORMAT_A16_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_UINT, TF_000X },193[ PIPE_FORMAT_I16_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_UINT, TF_XXXX },194[ PIPE_FORMAT_L16_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_UINT, TF_XXX1 },195[ PIPE_FORMAT_L16A16_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16G16_UINT, TF_XXXY },196[ PIPE_FORMAT_A16_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_SINT, TF_000X },197[ PIPE_FORMAT_I16_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_SINT, TF_XXXX },198[ PIPE_FORMAT_L16_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16_SINT, TF_XXX1 },199[ PIPE_FORMAT_L16A16_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R16G16_SINT, TF_XXXY },200[ PIPE_FORMAT_A32_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_UINT, TF_000X },201[ PIPE_FORMAT_I32_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_UINT, TF_XXXX },202[ PIPE_FORMAT_L32_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_UINT, TF_XXX1 },203[ PIPE_FORMAT_L32A32_UINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32G32_UINT, TF_XXXY },204[ PIPE_FORMAT_A32_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_SINT, TF_000X },205[ PIPE_FORMAT_I32_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_SINT, TF_XXXX },206[ PIPE_FORMAT_L32_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32_SINT, TF_XXX1 },207[ PIPE_FORMAT_L32A32_SINT ] = { SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_R32G32_SINT, TF_XXXY },208[ PIPE_FORMAT_R10G10B10A2_UINT ] = { SVGA3D_R10G10B10A2_UINT, SVGA3D_R10G10B10A2_UINT, SVGA3D_R10G10B10A2_UINT, 0 },209/* Must specify following entry to give the sense of size of format_conversion_table[] */210[ PIPE_FORMAT_COUNT ] = {SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 },211};212213214static const struct vgpu10_format_entry *215svga_format_entry(enum pipe_format format)216{217/* Sparse filling of the table requires this. */218STATIC_ASSERT(SVGA3D_FORMAT_INVALID == 0);219assert(format < ARRAY_SIZE(format_conversion_table));220if (format >= ARRAY_SIZE(format_conversion_table))221return &format_conversion_table[PIPE_FORMAT_NONE];222else223return &format_conversion_table[format];224}225226/**227* Translate a gallium vertex format to a vgpu10 vertex format.228* Also, return any special vertex format flags.229*/230void231svga_translate_vertex_format_vgpu10(enum pipe_format format,232SVGA3dSurfaceFormat *svga_format,233unsigned *vf_flags)234{235const struct vgpu10_format_entry *entry = svga_format_entry(format);236237*svga_format = entry->vertex_format;238*vf_flags = entry->flags;239}240241242/**243* Translate a gallium pixel format to a vgpu10 format244* to be used in a shader resource view for a texture buffer.245* Also return any special texture format flags such as246* any special swizzle mask.247*/248void249svga_translate_texture_buffer_view_format(enum pipe_format format,250SVGA3dSurfaceFormat *svga_format,251unsigned *tf_flags)252{253const struct vgpu10_format_entry *entry = svga_format_entry(format);254255*svga_format = entry->view_format;256*tf_flags = entry->flags;257}258259260/**261* Translate a gallium scanout format to a svga format valid262* for screen target surface.263*/264static SVGA3dSurfaceFormat265svga_translate_screen_target_format_vgpu10(enum pipe_format format)266{267switch (format) {268case PIPE_FORMAT_B8G8R8A8_UNORM:269return SVGA3D_B8G8R8A8_UNORM;270case PIPE_FORMAT_B8G8R8X8_UNORM:271return SVGA3D_B8G8R8X8_UNORM;272case PIPE_FORMAT_B5G6R5_UNORM:273return SVGA3D_R5G6B5;274case PIPE_FORMAT_B5G5R5A1_UNORM:275return SVGA3D_A1R5G5B5;276default:277debug_printf("Invalid format %s specified for screen target\n",278svga_format_name(format));279return SVGA3D_FORMAT_INVALID;280}281}282283/*284* Translate from gallium format to SVGA3D format.285*/286SVGA3dSurfaceFormat287svga_translate_format(const struct svga_screen *ss,288enum pipe_format format,289unsigned bind)290{291const struct vgpu10_format_entry *entry = svga_format_entry(format);292293if (ss->sws->have_vgpu10) {294if (bind & (PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER)) {295return entry->vertex_format;296}297else if (bind & PIPE_BIND_SCANOUT) {298return svga_translate_screen_target_format_vgpu10(format);299}300else {301return entry->pixel_format;302}303}304305switch(format) {306case PIPE_FORMAT_B8G8R8A8_UNORM:307return SVGA3D_A8R8G8B8;308case PIPE_FORMAT_B8G8R8X8_UNORM:309return SVGA3D_X8R8G8B8;310311/* sRGB required for GL2.1 */312case PIPE_FORMAT_B8G8R8A8_SRGB:313return SVGA3D_A8R8G8B8;314case PIPE_FORMAT_DXT1_SRGB:315case PIPE_FORMAT_DXT1_SRGBA:316return SVGA3D_DXT1;317case PIPE_FORMAT_DXT3_SRGBA:318return SVGA3D_DXT3;319case PIPE_FORMAT_DXT5_SRGBA:320return SVGA3D_DXT5;321322case PIPE_FORMAT_B5G6R5_UNORM:323return SVGA3D_R5G6B5;324case PIPE_FORMAT_B5G5R5A1_UNORM:325return SVGA3D_A1R5G5B5;326case PIPE_FORMAT_B4G4R4A4_UNORM:327return SVGA3D_A4R4G4B4;328329case PIPE_FORMAT_R16G16B16A16_UNORM:330return SVGA3D_A16B16G16R16;331332case PIPE_FORMAT_Z16_UNORM:333assert(!ss->sws->have_vgpu10);334return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.z16 : SVGA3D_Z_D16;335case PIPE_FORMAT_S8_UINT_Z24_UNORM:336assert(!ss->sws->have_vgpu10);337return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.s8z24 : SVGA3D_Z_D24S8;338case PIPE_FORMAT_X8Z24_UNORM:339assert(!ss->sws->have_vgpu10);340return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.x8z24 : SVGA3D_Z_D24X8;341342case PIPE_FORMAT_A8_UNORM:343return SVGA3D_ALPHA8;344case PIPE_FORMAT_L8_UNORM:345return SVGA3D_LUMINANCE8;346347case PIPE_FORMAT_DXT1_RGB:348case PIPE_FORMAT_DXT1_RGBA:349return SVGA3D_DXT1;350case PIPE_FORMAT_DXT3_RGBA:351return SVGA3D_DXT3;352case PIPE_FORMAT_DXT5_RGBA:353return SVGA3D_DXT5;354355/* Float formats (only 1, 2 and 4-component formats supported) */356case PIPE_FORMAT_R32_FLOAT:357return SVGA3D_R_S23E8;358case PIPE_FORMAT_R32G32_FLOAT:359return SVGA3D_RG_S23E8;360case PIPE_FORMAT_R32G32B32A32_FLOAT:361return SVGA3D_ARGB_S23E8;362case PIPE_FORMAT_R16_FLOAT:363return SVGA3D_R_S10E5;364case PIPE_FORMAT_R16G16_FLOAT:365return SVGA3D_RG_S10E5;366case PIPE_FORMAT_R16G16B16A16_FLOAT:367return SVGA3D_ARGB_S10E5;368369case PIPE_FORMAT_Z32_UNORM:370/* SVGA3D_Z_D32 is not yet unsupported */371FALLTHROUGH;372default:373return SVGA3D_FORMAT_INVALID;374}375}376377378/*379* Format capability description entry.380*/381struct format_cap {382const char *name;383384SVGA3dSurfaceFormat format;385386/*387* Capability index corresponding to the format.388*/389SVGA3dDevCapIndex devcap;390391/* size of each pixel/block */392unsigned block_width, block_height, block_bytes;393394/*395* Mask of supported SVGA3dFormatOp operations, to be inferred when the396* capability is not explicitly present.397*/398uint32 defaultOperations;399};400401402/*403* Format capability description table.404*405* Ordered by increasing SVGA3dSurfaceFormat value, but with gaps.406*/407static const struct format_cap format_cap_table[] = {408{409"SVGA3D_FORMAT_INVALID",410SVGA3D_FORMAT_INVALID, 0, 0, 0, 0, 0411},412{413"SVGA3D_X8R8G8B8",414SVGA3D_X8R8G8B8,415SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8,4161, 1, 4,417SVGA3DFORMAT_OP_TEXTURE |418SVGA3DFORMAT_OP_CUBETEXTURE |419SVGA3DFORMAT_OP_VOLUMETEXTURE |420SVGA3DFORMAT_OP_DISPLAYMODE |421SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET422},423{424"SVGA3D_A8R8G8B8",425SVGA3D_A8R8G8B8,426SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8,4271, 1, 4,428SVGA3DFORMAT_OP_TEXTURE |429SVGA3DFORMAT_OP_CUBETEXTURE |430SVGA3DFORMAT_OP_VOLUMETEXTURE |431SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET432},433{434"SVGA3D_R5G6B5",435SVGA3D_R5G6B5,436SVGA3D_DEVCAP_SURFACEFMT_R5G6B5,4371, 1, 2,438SVGA3DFORMAT_OP_TEXTURE |439SVGA3DFORMAT_OP_CUBETEXTURE |440SVGA3DFORMAT_OP_VOLUMETEXTURE |441SVGA3DFORMAT_OP_DISPLAYMODE |442SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET443},444{445"SVGA3D_X1R5G5B5",446SVGA3D_X1R5G5B5,447SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5,4481, 1, 2,449SVGA3DFORMAT_OP_TEXTURE |450SVGA3DFORMAT_OP_CUBETEXTURE |451SVGA3DFORMAT_OP_VOLUMETEXTURE |452SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET453},454{455"SVGA3D_A1R5G5B5",456SVGA3D_A1R5G5B5,457SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5,4581, 1, 2,459SVGA3DFORMAT_OP_TEXTURE |460SVGA3DFORMAT_OP_CUBETEXTURE |461SVGA3DFORMAT_OP_VOLUMETEXTURE |462SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET463},464{465"SVGA3D_A4R4G4B4",466SVGA3D_A4R4G4B4,467SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4,4681, 1, 2,469SVGA3DFORMAT_OP_TEXTURE |470SVGA3DFORMAT_OP_CUBETEXTURE |471SVGA3DFORMAT_OP_VOLUMETEXTURE |472SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET473},474{475/*476* SVGA3D_Z_D32 is not yet supported, and has no corresponding477* SVGA3D_DEVCAP_xxx.478*/479"SVGA3D_Z_D32",480SVGA3D_Z_D32, 0, 0, 0, 0, 0481},482{483"SVGA3D_Z_D16",484SVGA3D_Z_D16,485SVGA3D_DEVCAP_SURFACEFMT_Z_D16,4861, 1, 2,487SVGA3DFORMAT_OP_ZSTENCIL488},489{490"SVGA3D_Z_D24S8",491SVGA3D_Z_D24S8,492SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8,4931, 1, 4,494SVGA3DFORMAT_OP_ZSTENCIL495},496{497"SVGA3D_Z_D15S1",498SVGA3D_Z_D15S1,499SVGA3D_DEVCAP_MAX,5001, 1, 2,501SVGA3DFORMAT_OP_ZSTENCIL502},503{504"SVGA3D_LUMINANCE8",505SVGA3D_LUMINANCE8,506SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8,5071, 1, 1,508SVGA3DFORMAT_OP_TEXTURE |509SVGA3DFORMAT_OP_CUBETEXTURE |510SVGA3DFORMAT_OP_VOLUMETEXTURE511},512{513/*514* SVGA3D_LUMINANCE4_ALPHA4 is not supported, and has no corresponding515* SVGA3D_DEVCAP_xxx.516*/517"SVGA3D_LUMINANCE4_ALPHA4",518SVGA3D_LUMINANCE4_ALPHA4, 0, 0, 0, 0, 0519},520{521"SVGA3D_LUMINANCE16",522SVGA3D_LUMINANCE16,523SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16,5241, 1, 2,525SVGA3DFORMAT_OP_TEXTURE |526SVGA3DFORMAT_OP_CUBETEXTURE |527SVGA3DFORMAT_OP_VOLUMETEXTURE528},529{530"SVGA3D_LUMINANCE8_ALPHA8",531SVGA3D_LUMINANCE8_ALPHA8,532SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8,5331, 1, 2,534SVGA3DFORMAT_OP_TEXTURE |535SVGA3DFORMAT_OP_CUBETEXTURE |536SVGA3DFORMAT_OP_VOLUMETEXTURE537},538{539"SVGA3D_DXT1",540SVGA3D_DXT1,541SVGA3D_DEVCAP_SURFACEFMT_DXT1,5424, 4, 8,543SVGA3DFORMAT_OP_TEXTURE |544SVGA3DFORMAT_OP_CUBETEXTURE545},546{547"SVGA3D_DXT2",548SVGA3D_DXT2,549SVGA3D_DEVCAP_SURFACEFMT_DXT2,5504, 4, 8,551SVGA3DFORMAT_OP_TEXTURE |552SVGA3DFORMAT_OP_CUBETEXTURE553},554{555"SVGA3D_DXT3",556SVGA3D_DXT3,557SVGA3D_DEVCAP_SURFACEFMT_DXT3,5584, 4, 16,559SVGA3DFORMAT_OP_TEXTURE |560SVGA3DFORMAT_OP_CUBETEXTURE561},562{563"SVGA3D_DXT4",564SVGA3D_DXT4,565SVGA3D_DEVCAP_SURFACEFMT_DXT4,5664, 4, 16,567SVGA3DFORMAT_OP_TEXTURE |568SVGA3DFORMAT_OP_CUBETEXTURE569},570{571"SVGA3D_DXT5",572SVGA3D_DXT5,573SVGA3D_DEVCAP_SURFACEFMT_DXT5,5744, 4, 8,575SVGA3DFORMAT_OP_TEXTURE |576SVGA3DFORMAT_OP_CUBETEXTURE577},578{579"SVGA3D_BUMPU8V8",580SVGA3D_BUMPU8V8,581SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8,5821, 1, 2,583SVGA3DFORMAT_OP_TEXTURE |584SVGA3DFORMAT_OP_CUBETEXTURE |585SVGA3DFORMAT_OP_VOLUMETEXTURE586},587{588/*589* SVGA3D_BUMPL6V5U5 is unsupported; it has no corresponding590* SVGA3D_DEVCAP_xxx.591*/592"SVGA3D_BUMPL6V5U5",593SVGA3D_BUMPL6V5U5, 0, 0, 0, 0, 0594},595{596"SVGA3D_BUMPX8L8V8U8",597SVGA3D_BUMPX8L8V8U8,598SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8,5991, 1, 4,600SVGA3DFORMAT_OP_TEXTURE |601SVGA3DFORMAT_OP_CUBETEXTURE602},603{604"SVGA3D_FORMAT_DEAD1",605SVGA3D_FORMAT_DEAD1, 0, 0, 0, 0, 0606},607{608"SVGA3D_ARGB_S10E5",609SVGA3D_ARGB_S10E5,610SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5,6111, 1, 2,612SVGA3DFORMAT_OP_TEXTURE |613SVGA3DFORMAT_OP_CUBETEXTURE |614SVGA3DFORMAT_OP_VOLUMETEXTURE |615SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET616},617{618"SVGA3D_ARGB_S23E8",619SVGA3D_ARGB_S23E8,620SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8,6211, 1, 4,622SVGA3DFORMAT_OP_TEXTURE |623SVGA3DFORMAT_OP_CUBETEXTURE |624SVGA3DFORMAT_OP_VOLUMETEXTURE |625SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET626},627{628"SVGA3D_A2R10G10B10",629SVGA3D_A2R10G10B10,630SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10,6311, 1, 4,632SVGA3DFORMAT_OP_TEXTURE |633SVGA3DFORMAT_OP_CUBETEXTURE |634SVGA3DFORMAT_OP_VOLUMETEXTURE |635SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET636},637{638/*639* SVGA3D_V8U8 is unsupported; it has no corresponding640* SVGA3D_DEVCAP_xxx. SVGA3D_BUMPU8V8 should be used instead.641*/642"SVGA3D_V8U8",643SVGA3D_V8U8, 0, 0, 0, 0, 0644},645{646"SVGA3D_Q8W8V8U8",647SVGA3D_Q8W8V8U8,648SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8,6491, 1, 4,650SVGA3DFORMAT_OP_TEXTURE |651SVGA3DFORMAT_OP_CUBETEXTURE652},653{654"SVGA3D_CxV8U8",655SVGA3D_CxV8U8,656SVGA3D_DEVCAP_SURFACEFMT_CxV8U8,6571, 1, 2,658SVGA3DFORMAT_OP_TEXTURE659},660{661/*662* SVGA3D_X8L8V8U8 is unsupported; it has no corresponding663* SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.664*/665"SVGA3D_X8L8V8U8",666SVGA3D_X8L8V8U8, 0, 0, 0, 0, 0667},668{669"SVGA3D_A2W10V10U10",670SVGA3D_A2W10V10U10,671SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10,6721, 1, 4,673SVGA3DFORMAT_OP_TEXTURE674},675{676"SVGA3D_ALPHA8",677SVGA3D_ALPHA8,678SVGA3D_DEVCAP_SURFACEFMT_ALPHA8,6791, 1, 1,680SVGA3DFORMAT_OP_TEXTURE |681SVGA3DFORMAT_OP_CUBETEXTURE |682SVGA3DFORMAT_OP_VOLUMETEXTURE683},684{685"SVGA3D_R_S10E5",686SVGA3D_R_S10E5,687SVGA3D_DEVCAP_SURFACEFMT_R_S10E5,6881, 1, 2,689SVGA3DFORMAT_OP_TEXTURE |690SVGA3DFORMAT_OP_VOLUMETEXTURE |691SVGA3DFORMAT_OP_CUBETEXTURE |692SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET693},694{695"SVGA3D_R_S23E8",696SVGA3D_R_S23E8,697SVGA3D_DEVCAP_SURFACEFMT_R_S23E8,6981, 1, 4,699SVGA3DFORMAT_OP_TEXTURE |700SVGA3DFORMAT_OP_VOLUMETEXTURE |701SVGA3DFORMAT_OP_CUBETEXTURE |702SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET703},704{705"SVGA3D_RG_S10E5",706SVGA3D_RG_S10E5,707SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5,7081, 1, 2,709SVGA3DFORMAT_OP_TEXTURE |710SVGA3DFORMAT_OP_VOLUMETEXTURE |711SVGA3DFORMAT_OP_CUBETEXTURE |712SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET713},714{715"SVGA3D_RG_S23E8",716SVGA3D_RG_S23E8,717SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8,7181, 1, 4,719SVGA3DFORMAT_OP_TEXTURE |720SVGA3DFORMAT_OP_VOLUMETEXTURE |721SVGA3DFORMAT_OP_CUBETEXTURE |722SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET723},724{725/*726* SVGA3D_BUFFER is a placeholder format for index/vertex buffers.727*/728"SVGA3D_BUFFER",729SVGA3D_BUFFER, 0, 1, 1, 1, 0730},731{732"SVGA3D_Z_D24X8",733SVGA3D_Z_D24X8,734SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8,7351, 1, 4,736SVGA3DFORMAT_OP_ZSTENCIL737},738{739"SVGA3D_V16U16",740SVGA3D_V16U16,741SVGA3D_DEVCAP_SURFACEFMT_V16U16,7421, 1, 4,743SVGA3DFORMAT_OP_TEXTURE |744SVGA3DFORMAT_OP_CUBETEXTURE |745SVGA3DFORMAT_OP_VOLUMETEXTURE746},747{748"SVGA3D_G16R16",749SVGA3D_G16R16,750SVGA3D_DEVCAP_SURFACEFMT_G16R16,7511, 1, 4,752SVGA3DFORMAT_OP_TEXTURE |753SVGA3DFORMAT_OP_CUBETEXTURE |754SVGA3DFORMAT_OP_VOLUMETEXTURE |755SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET756},757{758"SVGA3D_A16B16G16R16",759SVGA3D_A16B16G16R16,760SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16,7611, 1, 8,762SVGA3DFORMAT_OP_TEXTURE |763SVGA3DFORMAT_OP_CUBETEXTURE |764SVGA3DFORMAT_OP_VOLUMETEXTURE |765SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET766},767{768"SVGA3D_UYVY",769SVGA3D_UYVY,770SVGA3D_DEVCAP_SURFACEFMT_UYVY,7710, 0, 0, 0772},773{774"SVGA3D_YUY2",775SVGA3D_YUY2,776SVGA3D_DEVCAP_SURFACEFMT_YUY2,7770, 0, 0, 0778},779{780"SVGA3D_NV12",781SVGA3D_NV12,782SVGA3D_DEVCAP_SURFACEFMT_NV12,7830, 0, 0, 0784},785{786"SVGA3D_AYUV",787SVGA3D_AYUV,788SVGA3D_DEVCAP_SURFACEFMT_AYUV,7890, 0, 0, 0790},791{792"SVGA3D_R32G32B32A32_TYPELESS",793SVGA3D_R32G32B32A32_TYPELESS,794SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS,7951, 1, 16, 0796},797{798"SVGA3D_R32G32B32A32_UINT",799SVGA3D_R32G32B32A32_UINT,800SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT,8011, 1, 16, 0802},803{804"SVGA3D_R32G32B32A32_SINT",805SVGA3D_R32G32B32A32_SINT,806SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT,8071, 1, 16, 0808},809{810"SVGA3D_R32G32B32_TYPELESS",811SVGA3D_R32G32B32_TYPELESS,812SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS,8131, 1, 12, 0814},815{816"SVGA3D_R32G32B32_FLOAT",817SVGA3D_R32G32B32_FLOAT,818SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT,8191, 1, 12, 0820},821{822"SVGA3D_R32G32B32_UINT",823SVGA3D_R32G32B32_UINT,824SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT,8251, 1, 12, 0826},827{828"SVGA3D_R32G32B32_SINT",829SVGA3D_R32G32B32_SINT,830SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT,8311, 1, 12, 0832},833{834"SVGA3D_R16G16B16A16_TYPELESS",835SVGA3D_R16G16B16A16_TYPELESS,836SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS,8371, 1, 8, 0838},839{840"SVGA3D_R16G16B16A16_UINT",841SVGA3D_R16G16B16A16_UINT,842SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT,8431, 1, 8, 0844},845{846"SVGA3D_R16G16B16A16_SNORM",847SVGA3D_R16G16B16A16_SNORM,848SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM,8491, 1, 8, 0850},851{852"SVGA3D_R16G16B16A16_SINT",853SVGA3D_R16G16B16A16_SINT,854SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT,8551, 1, 8, 0856},857{858"SVGA3D_R32G32_TYPELESS",859SVGA3D_R32G32_TYPELESS,860SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS,8611, 1, 8, 0862},863{864"SVGA3D_R32G32_UINT",865SVGA3D_R32G32_UINT,866SVGA3D_DEVCAP_DXFMT_R32G32_UINT,8671, 1, 8, 0868},869{870"SVGA3D_R32G32_SINT",871SVGA3D_R32G32_SINT,872SVGA3D_DEVCAP_DXFMT_R32G32_SINT,8731, 1, 8,8740875},876{877"SVGA3D_R32G8X24_TYPELESS",878SVGA3D_R32G8X24_TYPELESS,879SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS,8801, 1, 8, 0881},882{883"SVGA3D_D32_FLOAT_S8X24_UINT",884SVGA3D_D32_FLOAT_S8X24_UINT,885SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT,8861, 1, 8, 0887},888{889"SVGA3D_R32_FLOAT_X8X24",890SVGA3D_R32_FLOAT_X8X24,891SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24,8921, 1, 8, 0893},894{895"SVGA3D_X32_G8X24_UINT",896SVGA3D_X32_G8X24_UINT,897SVGA3D_DEVCAP_DXFMT_X32_G8X24_UINT,8981, 1, 4, 0899},900{901"SVGA3D_R10G10B10A2_TYPELESS",902SVGA3D_R10G10B10A2_TYPELESS,903SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS,9041, 1, 4, 0905},906{907"SVGA3D_R10G10B10A2_UINT",908SVGA3D_R10G10B10A2_UINT,909SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT,9101, 1, 4, 0911},912{913"SVGA3D_R11G11B10_FLOAT",914SVGA3D_R11G11B10_FLOAT,915SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT,9161, 1, 4, 0917},918{919"SVGA3D_R8G8B8A8_TYPELESS",920SVGA3D_R8G8B8A8_TYPELESS,921SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS,9221, 1, 4, 0923},924{925"SVGA3D_R8G8B8A8_UNORM",926SVGA3D_R8G8B8A8_UNORM,927SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM,9281, 1, 4, 0929},930{931"SVGA3D_R8G8B8A8_UNORM_SRGB",932SVGA3D_R8G8B8A8_UNORM_SRGB,933SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB,9341, 1, 4, 0935},936{937"SVGA3D_R8G8B8A8_UINT",938SVGA3D_R8G8B8A8_UINT,939SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT,9401, 1, 4, 0941},942{943"SVGA3D_R8G8B8A8_SINT",944SVGA3D_R8G8B8A8_SINT,945SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT,9461, 1, 4, 0947},948{949"SVGA3D_R16G16_TYPELESS",950SVGA3D_R16G16_TYPELESS,951SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS,9521, 1, 4, 0953},954{955"SVGA3D_R16G16_UINT",956SVGA3D_R16G16_UINT,957SVGA3D_DEVCAP_DXFMT_R16G16_UINT,9581, 1, 4, 0959},960{961"SVGA3D_R16G16_SINT",962SVGA3D_R16G16_SINT,963SVGA3D_DEVCAP_DXFMT_R16G16_SINT,9641, 1, 4, 0965},966{967"SVGA3D_R32_TYPELESS",968SVGA3D_R32_TYPELESS,969SVGA3D_DEVCAP_DXFMT_R32_TYPELESS,9701, 1, 4, 0971},972{973"SVGA3D_D32_FLOAT",974SVGA3D_D32_FLOAT,975SVGA3D_DEVCAP_DXFMT_D32_FLOAT,9761, 1, 4, 0977},978{979"SVGA3D_R32_UINT",980SVGA3D_R32_UINT,981SVGA3D_DEVCAP_DXFMT_R32_UINT,9821, 1, 4, 0983},984{985"SVGA3D_R32_SINT",986SVGA3D_R32_SINT,987SVGA3D_DEVCAP_DXFMT_R32_SINT,9881, 1, 4, 0989},990{991"SVGA3D_R24G8_TYPELESS",992SVGA3D_R24G8_TYPELESS,993SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS,9941, 1, 4, 0995},996{997"SVGA3D_D24_UNORM_S8_UINT",998SVGA3D_D24_UNORM_S8_UINT,999SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT,10001, 1, 4, 01001},1002{1003"SVGA3D_R24_UNORM_X8",1004SVGA3D_R24_UNORM_X8,1005SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8,10061, 1, 4, 01007},1008{1009"SVGA3D_X24_G8_UINT",1010SVGA3D_X24_G8_UINT,1011SVGA3D_DEVCAP_DXFMT_X24_G8_UINT,10121, 1, 4, 01013},1014{1015"SVGA3D_R8G8_TYPELESS",1016SVGA3D_R8G8_TYPELESS,1017SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS,10181, 1, 2, 01019},1020{1021"SVGA3D_R8G8_UNORM",1022SVGA3D_R8G8_UNORM,1023SVGA3D_DEVCAP_DXFMT_R8G8_UNORM,10241, 1, 2, 01025},1026{1027"SVGA3D_R8G8_UINT",1028SVGA3D_R8G8_UINT,1029SVGA3D_DEVCAP_DXFMT_R8G8_UINT,10301, 1, 2, 01031},1032{1033"SVGA3D_R8G8_SINT",1034SVGA3D_R8G8_SINT,1035SVGA3D_DEVCAP_DXFMT_R8G8_SINT,10361, 1, 2, 01037},1038{1039"SVGA3D_R16_TYPELESS",1040SVGA3D_R16_TYPELESS,1041SVGA3D_DEVCAP_DXFMT_R16_TYPELESS,10421, 1, 2, 01043},1044{1045"SVGA3D_R16_UNORM",1046SVGA3D_R16_UNORM,1047SVGA3D_DEVCAP_DXFMT_R16_UNORM,10481, 1, 2, 01049},1050{1051"SVGA3D_R16_UINT",1052SVGA3D_R16_UINT,1053SVGA3D_DEVCAP_DXFMT_R16_UINT,10541, 1, 2, 01055},1056{1057"SVGA3D_R16_SNORM",1058SVGA3D_R16_SNORM,1059SVGA3D_DEVCAP_DXFMT_R16_SNORM,10601, 1, 2, 01061},1062{1063"SVGA3D_R16_SINT",1064SVGA3D_R16_SINT,1065SVGA3D_DEVCAP_DXFMT_R16_SINT,10661, 1, 2, 01067},1068{1069"SVGA3D_R8_TYPELESS",1070SVGA3D_R8_TYPELESS,1071SVGA3D_DEVCAP_DXFMT_R8_TYPELESS,10721, 1, 1, 01073},1074{1075"SVGA3D_R8_UNORM",1076SVGA3D_R8_UNORM,1077SVGA3D_DEVCAP_DXFMT_R8_UNORM,10781, 1, 1, 01079},1080{1081"SVGA3D_R8_UINT",1082SVGA3D_R8_UINT,1083SVGA3D_DEVCAP_DXFMT_R8_UINT,10841, 1, 1, 01085},1086{1087"SVGA3D_R8_SNORM",1088SVGA3D_R8_SNORM,1089SVGA3D_DEVCAP_DXFMT_R8_SNORM,10901, 1, 1, 01091},1092{1093"SVGA3D_R8_SINT",1094SVGA3D_R8_SINT,1095SVGA3D_DEVCAP_DXFMT_R8_SINT,10961, 1, 1, 01097},1098{1099"SVGA3D_P8",1100SVGA3D_P8, 0, 0, 0, 0, 01101},1102{1103"SVGA3D_R9G9B9E5_SHAREDEXP",1104SVGA3D_R9G9B9E5_SHAREDEXP,1105SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP,11061, 1, 4, 01107},1108{1109"SVGA3D_R8G8_B8G8_UNORM",1110SVGA3D_R8G8_B8G8_UNORM, 0, 0, 0, 0, 01111},1112{1113"SVGA3D_G8R8_G8B8_UNORM",1114SVGA3D_G8R8_G8B8_UNORM, 0, 0, 0, 0, 01115},1116{1117"SVGA3D_BC1_TYPELESS",1118SVGA3D_BC1_TYPELESS,1119SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS,11204, 4, 8, 01121},1122{1123"SVGA3D_BC1_UNORM_SRGB",1124SVGA3D_BC1_UNORM_SRGB,1125SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB,11264, 4, 8, 01127},1128{1129"SVGA3D_BC2_TYPELESS",1130SVGA3D_BC2_TYPELESS,1131SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS,11324, 4, 16, 01133},1134{1135"SVGA3D_BC2_UNORM_SRGB",1136SVGA3D_BC2_UNORM_SRGB,1137SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB,11384, 4, 16, 01139},1140{1141"SVGA3D_BC3_TYPELESS",1142SVGA3D_BC3_TYPELESS,1143SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS,11444, 4, 16, 01145},1146{1147"SVGA3D_BC3_UNORM_SRGB",1148SVGA3D_BC3_UNORM_SRGB,1149SVGA3D_DEVCAP_DXFMT_BC3_UNORM_SRGB,11504, 4, 16, 01151},1152{1153"SVGA3D_BC4_TYPELESS",1154SVGA3D_BC4_TYPELESS,1155SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS,11564, 4, 8, 01157},1158{1159"SVGA3D_ATI1",1160SVGA3D_ATI1, 0, 0, 0, 0, 01161},1162{1163"SVGA3D_BC4_SNORM",1164SVGA3D_BC4_SNORM,1165SVGA3D_DEVCAP_DXFMT_BC4_SNORM,11664, 4, 8, 01167},1168{1169"SVGA3D_BC5_TYPELESS",1170SVGA3D_BC5_TYPELESS,1171SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS,11724, 4, 16, 01173},1174{1175"SVGA3D_ATI2",1176SVGA3D_ATI2, 0, 0, 0, 0, 01177},1178{1179"SVGA3D_BC5_SNORM",1180SVGA3D_BC5_SNORM,1181SVGA3D_DEVCAP_DXFMT_BC5_SNORM,11824, 4, 16, 01183},1184{1185"SVGA3D_R10G10B10_XR_BIAS_A2_UNORM",1186SVGA3D_R10G10B10_XR_BIAS_A2_UNORM, 0, 0, 0, 0, 01187},1188{1189"SVGA3D_B8G8R8A8_TYPELESS",1190SVGA3D_B8G8R8A8_TYPELESS,1191SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS,11921, 1, 4, 01193},1194{1195"SVGA3D_B8G8R8A8_UNORM_SRGB",1196SVGA3D_B8G8R8A8_UNORM_SRGB,1197SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB,11981, 1, 4, 01199},1200{1201"SVGA3D_B8G8R8X8_TYPELESS",1202SVGA3D_B8G8R8X8_TYPELESS,1203SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS,12041, 1, 4, 01205},1206{1207"SVGA3D_B8G8R8X8_UNORM_SRGB",1208SVGA3D_B8G8R8X8_UNORM_SRGB,1209SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB,12101, 1, 4, 01211},1212{1213"SVGA3D_Z_DF16",1214SVGA3D_Z_DF16,1215SVGA3D_DEVCAP_SURFACEFMT_Z_DF16,12161, 1, 2, 01217},1218{1219"SVGA3D_Z_DF24",1220SVGA3D_Z_DF24,1221SVGA3D_DEVCAP_SURFACEFMT_Z_DF24,12221, 1, 4, 01223},1224{1225"SVGA3D_Z_D24S8_INT",1226SVGA3D_Z_D24S8_INT,1227SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT,12281, 1, 4, 01229},1230{1231"SVGA3D_YV12",1232SVGA3D_YV12, 0, 0, 0, 0, 01233},1234{1235"SVGA3D_R32G32B32A32_FLOAT",1236SVGA3D_R32G32B32A32_FLOAT,1237SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT,12381, 1, 16, 01239},1240{1241"SVGA3D_R16G16B16A16_FLOAT",1242SVGA3D_R16G16B16A16_FLOAT,1243SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT,12441, 1, 8, 01245},1246{1247"SVGA3D_R16G16B16A16_UNORM",1248SVGA3D_R16G16B16A16_UNORM,1249SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM,12501, 1, 8, 01251},1252{1253"SVGA3D_R32G32_FLOAT",1254SVGA3D_R32G32_FLOAT,1255SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT,12561, 1, 8, 01257},1258{1259"SVGA3D_R10G10B10A2_UNORM",1260SVGA3D_R10G10B10A2_UNORM,1261SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM,12621, 1, 4, 01263},1264{1265"SVGA3D_R8G8B8A8_SNORM",1266SVGA3D_R8G8B8A8_SNORM,1267SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM,12681, 1, 4, 01269},1270{1271"SVGA3D_R16G16_FLOAT",1272SVGA3D_R16G16_FLOAT,1273SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT,12741, 1, 4, 01275},1276{1277"SVGA3D_R16G16_UNORM",1278SVGA3D_R16G16_UNORM,1279SVGA3D_DEVCAP_DXFMT_R16G16_UNORM,12801, 1, 4, 01281},1282{1283"SVGA3D_R16G16_SNORM",1284SVGA3D_R16G16_SNORM,1285SVGA3D_DEVCAP_DXFMT_R16G16_SNORM,12861, 1, 4, 01287},1288{1289"SVGA3D_R32_FLOAT",1290SVGA3D_R32_FLOAT,1291SVGA3D_DEVCAP_DXFMT_R32_FLOAT,12921, 1, 4, 01293},1294{1295"SVGA3D_R8G8_SNORM",1296SVGA3D_R8G8_SNORM,1297SVGA3D_DEVCAP_DXFMT_R8G8_SNORM,12981, 1, 2, 01299},1300{1301"SVGA3D_R16_FLOAT",1302SVGA3D_R16_FLOAT,1303SVGA3D_DEVCAP_DXFMT_R16_FLOAT,13041, 1, 2, 01305},1306{1307"SVGA3D_D16_UNORM",1308SVGA3D_D16_UNORM,1309SVGA3D_DEVCAP_DXFMT_D16_UNORM,13101, 1, 2, 01311},1312{1313"SVGA3D_A8_UNORM",1314SVGA3D_A8_UNORM,1315SVGA3D_DEVCAP_DXFMT_A8_UNORM,13161, 1, 1, 01317},1318{1319"SVGA3D_BC1_UNORM",1320SVGA3D_BC1_UNORM,1321SVGA3D_DEVCAP_DXFMT_BC1_UNORM,13224, 4, 8, 01323},1324{1325"SVGA3D_BC2_UNORM",1326SVGA3D_BC2_UNORM,1327SVGA3D_DEVCAP_DXFMT_BC2_UNORM,13284, 4, 16, 01329},1330{1331"SVGA3D_BC3_UNORM",1332SVGA3D_BC3_UNORM,1333SVGA3D_DEVCAP_DXFMT_BC3_UNORM,13344, 4, 16, 01335},1336{1337"SVGA3D_B5G6R5_UNORM",1338SVGA3D_B5G6R5_UNORM,1339SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM,13401, 1, 2, 01341},1342{1343"SVGA3D_B5G5R5A1_UNORM",1344SVGA3D_B5G5R5A1_UNORM,1345SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM,13461, 1, 2, 01347},1348{1349"SVGA3D_B8G8R8A8_UNORM",1350SVGA3D_B8G8R8A8_UNORM,1351SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM,13521, 1, 4, 01353},1354{1355"SVGA3D_B8G8R8X8_UNORM",1356SVGA3D_B8G8R8X8_UNORM,1357SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM,13581, 1, 4, 01359},1360{1361"SVGA3D_BC4_UNORM",1362SVGA3D_BC4_UNORM,1363SVGA3D_DEVCAP_DXFMT_BC4_UNORM,13644, 4, 8, 01365},1366{1367"SVGA3D_BC5_UNORM",1368SVGA3D_BC5_UNORM,1369SVGA3D_DEVCAP_DXFMT_BC5_UNORM,13704, 4, 16, 01371}1372};13731374static const SVGA3dSurfaceFormat compat_x8r8g8b8[] = {1375SVGA3D_X8R8G8B8, SVGA3D_A8R8G8B8, SVGA3D_B8G8R8X8_UNORM,1376SVGA3D_B8G8R8A8_UNORM, 01377};1378static const SVGA3dSurfaceFormat compat_r8[] = {1379SVGA3D_R8_UNORM, SVGA3D_NV12, SVGA3D_YV12, 01380};1381static const SVGA3dSurfaceFormat compat_g8r8[] = {1382SVGA3D_R8G8_UNORM, SVGA3D_NV12, 01383};1384static const SVGA3dSurfaceFormat compat_r5g6b5[] = {1385SVGA3D_R5G6B5, SVGA3D_B5G6R5_UNORM, 01386};13871388static const struct format_compat_entry format_compats[] = {1389{PIPE_FORMAT_B8G8R8X8_UNORM, compat_x8r8g8b8},1390{PIPE_FORMAT_B8G8R8A8_UNORM, compat_x8r8g8b8},1391{PIPE_FORMAT_R8_UNORM, compat_r8},1392{PIPE_FORMAT_R8G8_UNORM, compat_g8r8},1393{PIPE_FORMAT_B5G6R5_UNORM, compat_r5g6b5}1394};13951396/**1397* Debug only:1398* 1. check that format_cap_table[i] matches the i-th SVGA3D format.1399* 2. check that format_conversion_table[i].pformat == i.1400*/1401static void1402check_format_tables(void)1403{1404static boolean first_call = TRUE;14051406if (first_call) {1407unsigned i;14081409STATIC_ASSERT(ARRAY_SIZE(format_cap_table) == SVGA3D_FORMAT_MAX);1410for (i = 0; i < ARRAY_SIZE(format_cap_table); i++) {1411assert(format_cap_table[i].format == i);1412}14131414first_call = FALSE;1415}1416}141714181419/**1420* Return string name of an SVGA3dDevCapIndex value.1421* For debugging.1422*/1423static const char *1424svga_devcap_name(SVGA3dDevCapIndex cap)1425{1426static const struct debug_named_value devcap_names[] = {1427/* Note, we only list the DXFMT devcaps so far */1428DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_X8R8G8B8),1429DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_A8R8G8B8),1430DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R5G6B5),1431DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_X1R5G5B5),1432DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_A1R5G5B5),1433DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_A4R4G4B4),1434DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_D32),1435DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_D16),1436DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_D24S8),1437DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_D15S1),1438DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_LUMINANCE8),1439DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_LUMINANCE4_ALPHA4),1440DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_LUMINANCE16),1441DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_LUMINANCE8_ALPHA8),1442DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_DXT1),1443DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_DXT2),1444DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_DXT3),1445DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_DXT4),1446DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_DXT5),1447DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BUMPU8V8),1448DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BUMPL6V5U5),1449DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BUMPX8L8V8U8),1450DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD1),1451DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_ARGB_S10E5),1452DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_ARGB_S23E8),1453DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_A2R10G10B10),1454DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_V8U8),1455DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Q8W8V8U8),1456DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_CxV8U8),1457DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_X8L8V8U8),1458DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_A2W10V10U10),1459DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_ALPHA8),1460DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R_S10E5),1461DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R_S23E8),1462DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_RG_S10E5),1463DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_RG_S23E8),1464DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BUFFER),1465DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_D24X8),1466DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_V16U16),1467DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_G16R16),1468DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_A16B16G16R16),1469DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_UYVY),1470DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_YUY2),1471DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_NV12),1472DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_AYUV),1473DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS),1474DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT),1475DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT),1476DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS),1477DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT),1478DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT),1479DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT),1480DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS),1481DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT),1482DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM),1483DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT),1484DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS),1485DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32_UINT),1486DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32_SINT),1487DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS),1488DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT),1489DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24),1490DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_X32_G8X24_UINT),1491DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS),1492DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT),1493DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT),1494DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS),1495DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM),1496DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB),1497DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT),1498DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT),1499DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS),1500DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16_UINT),1501DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16_SINT),1502DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32_TYPELESS),1503DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_D32_FLOAT),1504DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32_UINT),1505DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32_SINT),1506DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS),1507DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT),1508DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8),1509DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_X24_G8_UINT),1510DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS),1511DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8_UNORM),1512DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8_UINT),1513DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8_SINT),1514DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16_TYPELESS),1515DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16_UNORM),1516DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16_UINT),1517DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16_SNORM),1518DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16_SINT),1519DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8_TYPELESS),1520DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8_UNORM),1521DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8_UINT),1522DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8_SNORM),1523DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8_SINT),1524DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_P8),1525DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP),1526DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8_B8G8_UNORM),1527DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_G8R8_G8B8_UNORM),1528DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS),1529DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB),1530DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS),1531DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB),1532DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS),1533DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC3_UNORM_SRGB),1534DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS),1535DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_ATI1),1536DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC4_SNORM),1537DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS),1538DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_ATI2),1539DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC5_SNORM),1540DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R10G10B10_XR_BIAS_A2_UNORM),1541DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS),1542DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB),1543DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS),1544DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB),1545DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_DF16),1546DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_DF24),1547DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_Z_D24S8_INT),1548DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_YV12),1549DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT),1550DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT),1551DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM),1552DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT),1553DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM),1554DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM),1555DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT),1556DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16_UNORM),1557DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16G16_SNORM),1558DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R32_FLOAT),1559DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R8G8_SNORM),1560DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_R16_FLOAT),1561DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_D16_UNORM),1562DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_A8_UNORM),1563DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC1_UNORM),1564DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC2_UNORM),1565DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC3_UNORM),1566DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM),1567DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM),1568DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM),1569DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM),1570DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC4_UNORM),1571DEBUG_NAMED_VALUE(SVGA3D_DEVCAP_DXFMT_BC5_UNORM),1572DEBUG_NAMED_VALUE_END,1573};1574return debug_dump_enum(devcap_names, cap);1575}157615771578/**1579* Return string for a bitmask of name of SVGA3D_DXFMT_x flags.1580* For debugging.1581*/1582static const char *1583svga_devcap_format_flags(unsigned flags)1584{1585static const struct debug_named_value devcap_flags[] = {1586DEBUG_NAMED_VALUE(SVGA3D_DXFMT_SUPPORTED),1587DEBUG_NAMED_VALUE(SVGA3D_DXFMT_SHADER_SAMPLE),1588DEBUG_NAMED_VALUE(SVGA3D_DXFMT_COLOR_RENDERTARGET),1589DEBUG_NAMED_VALUE(SVGA3D_DXFMT_DEPTH_RENDERTARGET),1590DEBUG_NAMED_VALUE(SVGA3D_DXFMT_BLENDABLE),1591DEBUG_NAMED_VALUE(SVGA3D_DXFMT_MIPS),1592DEBUG_NAMED_VALUE(SVGA3D_DXFMT_ARRAY),1593DEBUG_NAMED_VALUE(SVGA3D_DXFMT_VOLUME),1594DEBUG_NAMED_VALUE(SVGA3D_DXFMT_DX_VERTEX_BUFFER),1595DEBUG_NAMED_VALUE(SVGA3D_DXFMT_MULTISAMPLE),1596DEBUG_NAMED_VALUE_END1597};15981599return debug_dump_flags(devcap_flags, flags);1600}160116021603/*1604* Get format capabilities from the host. It takes in consideration1605* deprecated/unsupported formats, and formats which are implicitely assumed to1606* be supported when the host does not provide an explicit capability entry.1607*/1608void1609svga_get_format_cap(struct svga_screen *ss,1610SVGA3dSurfaceFormat format,1611SVGA3dSurfaceFormatCaps *caps)1612{1613struct svga_winsys_screen *sws = ss->sws;1614SVGA3dDevCapResult result;1615const struct format_cap *entry;16161617#ifdef DEBUG1618check_format_tables();1619#else1620(void) check_format_tables;1621#endif16221623assert(format < ARRAY_SIZE(format_cap_table));1624entry = &format_cap_table[format];1625assert(entry->format == format);16261627if (entry->devcap && sws->get_cap(sws, entry->devcap, &result)) {1628assert(format < SVGA3D_UYVY || entry->defaultOperations == 0);1629caps->value = result.u;1630} else {1631/* Implicitly advertised format -- use default caps */1632caps->value = entry->defaultOperations;1633}1634}163516361637/*1638* Get DX format capabilities from VGPU10 device.1639*/1640static void1641svga_get_dx_format_cap(struct svga_screen *ss,1642SVGA3dSurfaceFormat format,1643SVGA3dDevCapResult *caps)1644{1645struct svga_winsys_screen *sws = ss->sws;1646const struct format_cap *entry;16471648#ifdef DEBUG1649check_format_tables();1650#else1651(void) check_format_tables;1652#endif16531654assert(sws->have_vgpu10);1655assert(format < ARRAY_SIZE(format_cap_table));1656entry = &format_cap_table[format];1657assert(entry->format == format);1658assert(entry->devcap > SVGA3D_DEVCAP_DXCONTEXT);16591660caps->u = 0;1661if (entry->devcap) {1662sws->get_cap(sws, entry->devcap, caps);16631664/* pre-SM41 capabable svga device supports SHADER_SAMPLE capability for1665* these formats but does not advertise the devcap.1666* So enable this bit here.1667*/1668if (!sws->have_sm4_1 &&1669(format == SVGA3D_R32_FLOAT_X8X24 ||1670format == SVGA3D_R24_UNORM_X8)) {1671caps->u |= SVGA3D_DXFMT_SHADER_SAMPLE;1672}1673}16741675if (0) {1676debug_printf("Format %s, devcap %s = 0x%x (%s)\n",1677svga_format_name(format),1678svga_devcap_name(entry->devcap),1679caps->u,1680svga_devcap_format_flags(caps->u));1681}1682}168316841685void1686svga_format_size(SVGA3dSurfaceFormat format,1687unsigned *block_width,1688unsigned *block_height,1689unsigned *bytes_per_block)1690{1691assert(format < ARRAY_SIZE(format_cap_table));1692*block_width = format_cap_table[format].block_width;1693*block_height = format_cap_table[format].block_height;1694*bytes_per_block = format_cap_table[format].block_bytes;1695/* Make sure the table entry was valid */1696if (*block_width == 0)1697debug_printf("Bad table entry for %s\n", svga_format_name(format));1698assert(*block_width);1699assert(*block_height);1700assert(*bytes_per_block);1701}170217031704const char *1705svga_format_name(SVGA3dSurfaceFormat format)1706{1707assert(format < ARRAY_SIZE(format_cap_table));1708return format_cap_table[format].name;1709}171017111712/**1713* Is the given SVGA3dSurfaceFormat a signed or unsigned integer color format?1714*/1715boolean1716svga_format_is_integer(SVGA3dSurfaceFormat format)1717{1718switch (format) {1719case SVGA3D_R32G32B32A32_SINT:1720case SVGA3D_R32G32B32_SINT:1721case SVGA3D_R32G32_SINT:1722case SVGA3D_R32_SINT:1723case SVGA3D_R16G16B16A16_SINT:1724case SVGA3D_R16G16_SINT:1725case SVGA3D_R16_SINT:1726case SVGA3D_R8G8B8A8_SINT:1727case SVGA3D_R8G8_SINT:1728case SVGA3D_R8_SINT:1729case SVGA3D_R32G32B32A32_UINT:1730case SVGA3D_R32G32B32_UINT:1731case SVGA3D_R32G32_UINT:1732case SVGA3D_R32_UINT:1733case SVGA3D_R16G16B16A16_UINT:1734case SVGA3D_R16G16_UINT:1735case SVGA3D_R16_UINT:1736case SVGA3D_R8G8B8A8_UINT:1737case SVGA3D_R8G8_UINT:1738case SVGA3D_R8_UINT:1739case SVGA3D_R10G10B10A2_UINT:1740return TRUE;1741default:1742return FALSE;1743}1744}17451746boolean1747svga_format_support_gen_mips(enum pipe_format format)1748{1749const struct vgpu10_format_entry *entry = svga_format_entry(format);17501751return (entry->flags & TF_GEN_MIPS) > 0;1752}175317541755/**1756* Given a texture format, return the expected data type returned from1757* the texture sampler. For example, UNORM8 formats return floating point1758* values while SINT formats returned signed integer values.1759* Note: this function could be moved into the gallum u_format.[ch] code1760* if it's useful to anyone else.1761*/1762enum tgsi_return_type1763svga_get_texture_datatype(enum pipe_format format)1764{1765const struct util_format_description *desc = util_format_description(format);1766enum tgsi_return_type t;17671768if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN ) {1769if (util_format_is_depth_or_stencil(format)) {1770t = TGSI_RETURN_TYPE_FLOAT; /* XXX revisit this */1771}1772else if (desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT) {1773t = TGSI_RETURN_TYPE_FLOAT;1774}1775else if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {1776t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_UNORM : TGSI_RETURN_TYPE_UINT;1777}1778else if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {1779t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_SNORM : TGSI_RETURN_TYPE_SINT;1780}1781else {1782assert(!"Unexpected channel type in svga_get_texture_datatype()");1783t = TGSI_RETURN_TYPE_FLOAT;1784}1785}1786else {1787/* compressed format, shared exponent format, etc. */1788switch (format) {1789case PIPE_FORMAT_DXT1_RGB:1790case PIPE_FORMAT_DXT1_RGBA:1791case PIPE_FORMAT_DXT3_RGBA:1792case PIPE_FORMAT_DXT5_RGBA:1793case PIPE_FORMAT_DXT1_SRGB:1794case PIPE_FORMAT_DXT1_SRGBA:1795case PIPE_FORMAT_DXT3_SRGBA:1796case PIPE_FORMAT_DXT5_SRGBA:1797case PIPE_FORMAT_RGTC1_UNORM:1798case PIPE_FORMAT_RGTC2_UNORM:1799case PIPE_FORMAT_LATC1_UNORM:1800case PIPE_FORMAT_LATC2_UNORM:1801case PIPE_FORMAT_ETC1_RGB8:1802t = TGSI_RETURN_TYPE_UNORM;1803break;1804case PIPE_FORMAT_RGTC1_SNORM:1805case PIPE_FORMAT_RGTC2_SNORM:1806case PIPE_FORMAT_LATC1_SNORM:1807case PIPE_FORMAT_LATC2_SNORM:1808case PIPE_FORMAT_R10G10B10X2_SNORM:1809t = TGSI_RETURN_TYPE_SNORM;1810break;1811case PIPE_FORMAT_R11G11B10_FLOAT:1812case PIPE_FORMAT_R9G9B9E5_FLOAT:1813t = TGSI_RETURN_TYPE_FLOAT;1814break;1815default:1816assert(!"Unexpected channel type in svga_get_texture_datatype()");1817t = TGSI_RETURN_TYPE_FLOAT;1818}1819}18201821return t;1822}182318241825/**1826* Given an svga context, return true iff there are currently any integer color1827* buffers attached to the framebuffer.1828*/1829boolean1830svga_has_any_integer_cbufs(const struct svga_context *svga)1831{1832unsigned i;1833for (i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) {1834struct pipe_surface *cbuf = svga->curr.framebuffer.cbufs[i];18351836if (cbuf && util_format_is_pure_integer(cbuf->format)) {1837return TRUE;1838}1839}1840return FALSE;1841}184218431844/**1845* Given an SVGA format, return the corresponding typeless format.1846* If there is no typeless format, return the format unchanged.1847*/1848SVGA3dSurfaceFormat1849svga_typeless_format(SVGA3dSurfaceFormat format)1850{1851switch (format) {1852case SVGA3D_R32G32B32A32_UINT:1853case SVGA3D_R32G32B32A32_SINT:1854case SVGA3D_R32G32B32A32_FLOAT:1855return SVGA3D_R32G32B32A32_TYPELESS;1856case SVGA3D_R32G32B32_FLOAT:1857case SVGA3D_R32G32B32_UINT:1858case SVGA3D_R32G32B32_SINT:1859return SVGA3D_R32G32B32_TYPELESS;1860case SVGA3D_R16G16B16A16_UINT:1861case SVGA3D_R16G16B16A16_UNORM:1862case SVGA3D_R16G16B16A16_SNORM:1863case SVGA3D_R16G16B16A16_SINT:1864case SVGA3D_R16G16B16A16_FLOAT:1865return SVGA3D_R16G16B16A16_TYPELESS;1866case SVGA3D_R32G32_UINT:1867case SVGA3D_R32G32_SINT:1868case SVGA3D_R32G32_FLOAT:1869return SVGA3D_R32G32_TYPELESS;1870case SVGA3D_D32_FLOAT_S8X24_UINT:1871case SVGA3D_X32_G8X24_UINT:1872case SVGA3D_R32G8X24_TYPELESS:1873return SVGA3D_R32G8X24_TYPELESS;1874case SVGA3D_R10G10B10A2_UINT:1875case SVGA3D_R10G10B10A2_UNORM:1876return SVGA3D_R10G10B10A2_TYPELESS;1877case SVGA3D_R8G8B8A8_UNORM:1878case SVGA3D_R8G8B8A8_SNORM:1879case SVGA3D_R8G8B8A8_UNORM_SRGB:1880case SVGA3D_R8G8B8A8_UINT:1881case SVGA3D_R8G8B8A8_SINT:1882case SVGA3D_R8G8B8A8_TYPELESS:1883return SVGA3D_R8G8B8A8_TYPELESS;1884case SVGA3D_R16G16_UINT:1885case SVGA3D_R16G16_SINT:1886case SVGA3D_R16G16_UNORM:1887case SVGA3D_R16G16_SNORM:1888case SVGA3D_R16G16_FLOAT:1889return SVGA3D_R16G16_TYPELESS;1890case SVGA3D_D32_FLOAT:1891case SVGA3D_R32_FLOAT:1892case SVGA3D_R32_UINT:1893case SVGA3D_R32_SINT:1894case SVGA3D_R32_TYPELESS:1895return SVGA3D_R32_TYPELESS;1896case SVGA3D_D24_UNORM_S8_UINT:1897case SVGA3D_R24G8_TYPELESS:1898return SVGA3D_R24G8_TYPELESS;1899case SVGA3D_X24_G8_UINT:1900return SVGA3D_R24_UNORM_X8;1901case SVGA3D_R8G8_UNORM:1902case SVGA3D_R8G8_SNORM:1903case SVGA3D_R8G8_UINT:1904case SVGA3D_R8G8_SINT:1905return SVGA3D_R8G8_TYPELESS;1906case SVGA3D_D16_UNORM:1907case SVGA3D_R16_UNORM:1908case SVGA3D_R16_UINT:1909case SVGA3D_R16_SNORM:1910case SVGA3D_R16_SINT:1911case SVGA3D_R16_FLOAT:1912case SVGA3D_R16_TYPELESS:1913return SVGA3D_R16_TYPELESS;1914case SVGA3D_R8_UNORM:1915case SVGA3D_R8_UINT:1916case SVGA3D_R8_SNORM:1917case SVGA3D_R8_SINT:1918return SVGA3D_R8_TYPELESS;1919case SVGA3D_B8G8R8A8_UNORM_SRGB:1920case SVGA3D_B8G8R8A8_UNORM:1921case SVGA3D_B8G8R8A8_TYPELESS:1922return SVGA3D_B8G8R8A8_TYPELESS;1923case SVGA3D_B8G8R8X8_UNORM_SRGB:1924case SVGA3D_B8G8R8X8_UNORM:1925case SVGA3D_B8G8R8X8_TYPELESS:1926return SVGA3D_B8G8R8X8_TYPELESS;1927case SVGA3D_BC1_UNORM:1928case SVGA3D_BC1_UNORM_SRGB:1929case SVGA3D_BC1_TYPELESS:1930return SVGA3D_BC1_TYPELESS;1931case SVGA3D_BC2_UNORM:1932case SVGA3D_BC2_UNORM_SRGB:1933case SVGA3D_BC2_TYPELESS:1934return SVGA3D_BC2_TYPELESS;1935case SVGA3D_BC3_UNORM:1936case SVGA3D_BC3_UNORM_SRGB:1937case SVGA3D_BC3_TYPELESS:1938return SVGA3D_BC3_TYPELESS;1939case SVGA3D_BC4_UNORM:1940case SVGA3D_BC4_SNORM:1941return SVGA3D_BC4_TYPELESS;1942case SVGA3D_BC5_UNORM:1943case SVGA3D_BC5_SNORM:1944return SVGA3D_BC5_TYPELESS;19451946/* Special cases (no corresponding _TYPELESS formats) */1947case SVGA3D_A8_UNORM:1948case SVGA3D_B5G5R5A1_UNORM:1949case SVGA3D_B5G6R5_UNORM:1950case SVGA3D_R11G11B10_FLOAT:1951case SVGA3D_R9G9B9E5_SHAREDEXP:1952return format;1953default:1954debug_printf("Unexpected format %s in %s\n",1955svga_format_name(format), __FUNCTION__);1956return format;1957}1958}195919601961/**1962* Given a surface format, return the corresponding format to use for1963* a texture sampler. In most cases, it's the format unchanged, but there1964* are some special cases.1965*/1966SVGA3dSurfaceFormat1967svga_sampler_format(SVGA3dSurfaceFormat format)1968{1969switch (format) {1970case SVGA3D_D16_UNORM:1971return SVGA3D_R16_UNORM;1972case SVGA3D_D24_UNORM_S8_UINT:1973return SVGA3D_R24_UNORM_X8;1974case SVGA3D_D32_FLOAT:1975return SVGA3D_R32_FLOAT;1976case SVGA3D_D32_FLOAT_S8X24_UINT:1977return SVGA3D_R32_FLOAT_X8X24;1978default:1979return format;1980}1981}198219831984/**1985* Is the given format an uncompressed snorm format?1986*/1987bool1988svga_format_is_uncompressed_snorm(SVGA3dSurfaceFormat format)1989{1990switch (format) {1991case SVGA3D_R8G8B8A8_SNORM:1992case SVGA3D_R8G8_SNORM:1993case SVGA3D_R8_SNORM:1994case SVGA3D_R16G16B16A16_SNORM:1995case SVGA3D_R16G16_SNORM:1996case SVGA3D_R16_SNORM:1997return true;1998default:1999return false;2000}2001}200220032004bool2005svga_format_is_typeless(SVGA3dSurfaceFormat format)2006{2007switch (format) {2008case SVGA3D_R32G32B32A32_TYPELESS:2009case SVGA3D_R32G32B32_TYPELESS:2010case SVGA3D_R16G16B16A16_TYPELESS:2011case SVGA3D_R32G32_TYPELESS:2012case SVGA3D_R32G8X24_TYPELESS:2013case SVGA3D_R10G10B10A2_TYPELESS:2014case SVGA3D_R8G8B8A8_TYPELESS:2015case SVGA3D_R16G16_TYPELESS:2016case SVGA3D_R32_TYPELESS:2017case SVGA3D_R24G8_TYPELESS:2018case SVGA3D_R8G8_TYPELESS:2019case SVGA3D_R16_TYPELESS:2020case SVGA3D_R8_TYPELESS:2021case SVGA3D_BC1_TYPELESS:2022case SVGA3D_BC2_TYPELESS:2023case SVGA3D_BC3_TYPELESS:2024case SVGA3D_BC4_TYPELESS:2025case SVGA3D_BC5_TYPELESS:2026case SVGA3D_B8G8R8A8_TYPELESS:2027case SVGA3D_B8G8R8X8_TYPELESS:2028return true;2029default:2030return false;2031}2032}203320342035/**2036* \brief Can we import a surface with a given SVGA3D format as a texture?2037*2038* \param ss[in] pointer to the svga screen.2039* \param pformat[in] pipe format of the local texture.2040* \param sformat[in] svga3d format of the imported surface.2041* \param bind[in] bind flags of the imported texture.2042* \param verbose[in] Print out incompatibilities in debug mode.2043*/2044bool2045svga_format_is_shareable(const struct svga_screen *ss,2046enum pipe_format pformat,2047SVGA3dSurfaceFormat sformat,2048unsigned bind,2049bool verbose)2050{2051SVGA3dSurfaceFormat default_format =2052svga_translate_format(ss, pformat, bind);2053int i;20542055if (default_format == SVGA3D_FORMAT_INVALID)2056return false;2057if (default_format == sformat)2058return true;20592060for (i = 0; i < ARRAY_SIZE(format_compats); ++i) {2061if (format_compats[i].pformat == pformat) {2062const SVGA3dSurfaceFormat *compat_format =2063format_compats[i].compat_format;2064while (*compat_format != 0) {2065if (*compat_format == sformat)2066return true;2067compat_format++;2068}2069}2070}20712072if (verbose) {2073debug_printf("Incompatible imported surface format.\n");2074debug_printf("Texture format: \"%s\". Imported format: \"%s\".\n",2075svga_format_name(default_format),2076svga_format_name(sformat));2077}20782079return false;2080}208120822083/**2084* Return the sRGB format which corresponds to the given (linear) format.2085* If there's no such sRGB format, return the format as-is.2086*/2087SVGA3dSurfaceFormat2088svga_linear_to_srgb(SVGA3dSurfaceFormat format)2089{2090switch (format) {2091case SVGA3D_R8G8B8A8_UNORM:2092return SVGA3D_R8G8B8A8_UNORM_SRGB;2093case SVGA3D_BC1_UNORM:2094return SVGA3D_BC1_UNORM_SRGB;2095case SVGA3D_BC2_UNORM:2096return SVGA3D_BC2_UNORM_SRGB;2097case SVGA3D_BC3_UNORM:2098return SVGA3D_BC3_UNORM_SRGB;2099case SVGA3D_B8G8R8A8_UNORM:2100return SVGA3D_B8G8R8A8_UNORM_SRGB;2101case SVGA3D_B8G8R8X8_UNORM:2102return SVGA3D_B8G8R8X8_UNORM_SRGB;2103default:2104return format;2105}2106}210721082109/**2110* Implement pipe_screen::is_format_supported().2111* \param bindings bitmask of PIPE_BIND_x flags2112*/2113bool2114svga_is_format_supported(struct pipe_screen *screen,2115enum pipe_format format,2116enum pipe_texture_target target,2117unsigned sample_count,2118unsigned storage_sample_count,2119unsigned bindings)2120{2121struct svga_screen *ss = svga_screen(screen);2122SVGA3dSurfaceFormat svga_format;2123SVGA3dSurfaceFormatCaps caps;2124SVGA3dSurfaceFormatCaps mask;21252126assert(bindings);2127assert(!ss->sws->have_vgpu10);21282129/* Multisamples is not supported in VGPU9 device */2130if (sample_count > 1)2131return false;21322133svga_format = svga_translate_format(ss, format, bindings);2134if (svga_format == SVGA3D_FORMAT_INVALID) {2135return false;2136}21372138if (util_format_is_srgb(format) &&2139(bindings & (PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_RENDER_TARGET))) {2140/* We only support sRGB rendering with vgpu10 */2141return false;2142}21432144/*2145* Override host capabilities, so that we end up with the same2146* visuals for all virtual hardware implementations.2147*/2148if (bindings & PIPE_BIND_DISPLAY_TARGET) {2149switch (svga_format) {2150case SVGA3D_A8R8G8B8:2151case SVGA3D_X8R8G8B8:2152case SVGA3D_R5G6B5:2153break;21542155/* VGPU10 formats */2156case SVGA3D_B8G8R8A8_UNORM:2157case SVGA3D_B8G8R8X8_UNORM:2158case SVGA3D_B5G6R5_UNORM:2159case SVGA3D_B8G8R8X8_UNORM_SRGB:2160case SVGA3D_B8G8R8A8_UNORM_SRGB:2161case SVGA3D_R8G8B8A8_UNORM_SRGB:2162break;21632164/* Often unsupported/problematic. This means we end up with the same2165* visuals for all virtual hardware implementations.2166*/2167case SVGA3D_A4R4G4B4:2168case SVGA3D_A1R5G5B5:2169return false;21702171default:2172return false;2173}2174}21752176/*2177* Query the host capabilities.2178*/2179svga_get_format_cap(ss, svga_format, &caps);21802181if (bindings & PIPE_BIND_RENDER_TARGET) {2182/* Check that the color surface is blendable, unless it's an2183* integer format.2184*/2185if (!svga_format_is_integer(svga_format) &&2186(caps.value & SVGA3DFORMAT_OP_NOALPHABLEND)) {2187return false;2188}2189}21902191mask.value = 0;2192if (bindings & PIPE_BIND_RENDER_TARGET)2193mask.value |= SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET;21942195if (bindings & PIPE_BIND_DEPTH_STENCIL)2196mask.value |= SVGA3DFORMAT_OP_ZSTENCIL;21972198if (bindings & PIPE_BIND_SAMPLER_VIEW)2199mask.value |= SVGA3DFORMAT_OP_TEXTURE;22002201if (target == PIPE_TEXTURE_CUBE)2202mask.value |= SVGA3DFORMAT_OP_CUBETEXTURE;2203else if (target == PIPE_TEXTURE_3D)2204mask.value |= SVGA3DFORMAT_OP_VOLUMETEXTURE;22052206return (caps.value & mask.value) == mask.value;2207}220822092210/**2211* Implement pipe_screen::is_format_supported() for VGPU10 device.2212* \param bindings bitmask of PIPE_BIND_x flags2213*/2214bool2215svga_is_dx_format_supported(struct pipe_screen *screen,2216enum pipe_format format,2217enum pipe_texture_target target,2218unsigned sample_count,2219unsigned storage_sample_count,2220unsigned bindings)2221{2222struct svga_screen *ss = svga_screen(screen);2223SVGA3dSurfaceFormat svga_format;2224SVGA3dDevCapResult caps;2225unsigned int mask = 0;22262227assert(bindings);2228assert(ss->sws->have_vgpu10);22292230if (MAX2(1, sample_count) != MAX2(1, storage_sample_count))2231return false;22322233if (sample_count > 1) {2234/* In ms_samples, if bit N is set it means that we support2235* multisample with N+1 samples per pixel.2236*/2237if ((ss->ms_samples & (1 << (sample_count - 1))) == 0) {2238return false;2239}2240mask |= SVGA3D_DXFMT_MULTISAMPLE;2241}22422243/*2244* For VGPU10 vertex formats, skip querying host capabilities2245*/22462247if (bindings & PIPE_BIND_VERTEX_BUFFER) {2248SVGA3dSurfaceFormat svga_format;2249unsigned flags;2250svga_translate_vertex_format_vgpu10(format, &svga_format, &flags);2251return svga_format != SVGA3D_FORMAT_INVALID;2252}22532254if (bindings & PIPE_BIND_SAMPLER_VIEW && target == PIPE_BUFFER) {2255unsigned flags;2256svga_translate_texture_buffer_view_format(format, &svga_format, &flags);2257return svga_format != SVGA3D_FORMAT_INVALID;2258}22592260svga_format = svga_translate_format(ss, format, bindings);2261if (svga_format == SVGA3D_FORMAT_INVALID) {2262return false;2263}22642265/*2266* Override host capabilities, so that we end up with the same2267* visuals for all virtual hardware implementations.2268*/2269if (bindings & PIPE_BIND_DISPLAY_TARGET) {2270switch (svga_format) {2271case SVGA3D_A8R8G8B8:2272case SVGA3D_X8R8G8B8:2273case SVGA3D_R5G6B5:2274break;22752276/* VGPU10 formats */2277case SVGA3D_B8G8R8A8_UNORM:2278case SVGA3D_B8G8R8X8_UNORM:2279case SVGA3D_B5G6R5_UNORM:2280case SVGA3D_B8G8R8X8_UNORM_SRGB:2281case SVGA3D_B8G8R8A8_UNORM_SRGB:2282case SVGA3D_R8G8B8A8_UNORM_SRGB:2283break;22842285/* Often unsupported/problematic. This means we end up with the same2286* visuals for all virtual hardware implementations.2287*/2288case SVGA3D_A4R4G4B4:2289case SVGA3D_A1R5G5B5:2290return false;22912292default:2293return false;2294}2295}22962297/*2298* Query the host capabilities.2299*/2300svga_get_dx_format_cap(ss, svga_format, &caps);23012302if (bindings & PIPE_BIND_RENDER_TARGET) {2303/* Check that the color surface is blendable, unless it's an2304* integer format.2305*/2306if (!(svga_format_is_integer(svga_format) ||2307(caps.u & SVGA3D_DXFMT_BLENDABLE))) {2308return false;2309}2310mask |= SVGA3D_DXFMT_COLOR_RENDERTARGET;2311}23122313if (bindings & PIPE_BIND_DEPTH_STENCIL)2314mask |= SVGA3D_DXFMT_DEPTH_RENDERTARGET;23152316switch (target) {2317case PIPE_TEXTURE_3D:2318mask |= SVGA3D_DXFMT_VOLUME;2319break;2320case PIPE_TEXTURE_1D_ARRAY:2321case PIPE_TEXTURE_2D_ARRAY:2322case PIPE_TEXTURE_CUBE_ARRAY:2323mask |= SVGA3D_DXFMT_ARRAY;2324break;2325default:2326break;2327}23282329/* Is the format supported for rendering */2330if ((caps.u & mask) != mask)2331return false;23322333if (bindings & PIPE_BIND_SAMPLER_VIEW) {2334SVGA3dSurfaceFormat sampler_format;23352336/* Get the sampler view format */2337sampler_format = svga_sampler_format(svga_format);2338if (sampler_format != svga_format) {2339caps.u = 0;2340svga_get_dx_format_cap(ss, sampler_format, &caps);2341mask &= SVGA3D_DXFMT_VOLUME;2342mask |= SVGA3D_DXFMT_SHADER_SAMPLE;2343if ((caps.u & mask) != mask)2344return false;2345}2346}23472348return true;2349}235023512352