[igt-dev] [PATCH i-g-t v2 1/8] igt/vmwgfx: Add generated headers for svga device

Kamil Konieczny kamil.konieczny at linux.intel.com
Fri Mar 17 16:52:52 UTC 2023


Hi Zack,

On 2023-03-15 at 22:26:52 -0400, Zack Rusin wrote:
> From: Maaz Mombasawala <mombasawalam at vmware.com>
> 
> Add generated headers for svga device which will be used
> to interface with the vmwgfx driver.
> 
> Signed-off-by: Roye Eshed <reshed at vmware.com>
> Signed-off-by: Zack Rusin <zackr at vmware.com>
> Signed-off-by: Maaz Mombasawala <mombasawalam at vmware.com>
> ---
>  lib/svga/svga3d_cmd.h         | 1511 +++++++++++++++++++++++++++++
>  lib/svga/svga3d_devcaps.h     |  369 +++++++
>  lib/svga/svga3d_dx.h          | 1722 +++++++++++++++++++++++++++++++++
>  lib/svga/svga3d_limits.h      |   83 ++
>  lib/svga/svga3d_reg.h         |   44 +
>  lib/svga/svga3d_surfacedefs.h | 1559 +++++++++++++++++++++++++++++
>  lib/svga/svga3d_types.h       | 1554 +++++++++++++++++++++++++++++
>  lib/svga/svga_escape.h        |   54 ++
>  lib/svga/svga_overlay.h       |  115 +++
>  lib/svga/svga_reg.h           |  897 +++++++++++++++++
>  lib/svga/vm_basic_types.h     |  161 +++
>  11 files changed, 8069 insertions(+)
>  create mode 100644 lib/svga/svga3d_cmd.h
>  create mode 100644 lib/svga/svga3d_devcaps.h
>  create mode 100644 lib/svga/svga3d_dx.h
>  create mode 100644 lib/svga/svga3d_limits.h
>  create mode 100644 lib/svga/svga3d_reg.h
>  create mode 100644 lib/svga/svga3d_surfacedefs.h
>  create mode 100644 lib/svga/svga3d_types.h
>  create mode 100644 lib/svga/svga_escape.h
>  create mode 100644 lib/svga/svga_overlay.h
>  create mode 100644 lib/svga/svga_reg.h
>  create mode 100644 lib/svga/vm_basic_types.h
> 
> diff --git a/lib/svga/svga3d_cmd.h b/lib/svga/svga3d_cmd.h
> new file mode 100644
> index 00000000..5a64d40b
> --- /dev/null
> +++ b/lib/svga/svga3d_cmd.h
> @@ -0,0 +1,1511 @@
> +/**********************************************************
> + * Copyright 2012-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT

imho SPDX should be first, (c) in line below. Did you check it
with checkpatch.pl from Linux kernel ?

> + *

Please delete below text, SPDX is here for replacing this.
Please correct it here and in other patches,

Regards,
Kamil

> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga3d_cmd.h --
> + *
> + *    SVGA 3d hardware cmd definitions
> + */
> +
> +#ifndef _SVGA3D_CMD_H_
> +#define _SVGA3D_CMD_H_
> +
> +#include "svga3d_types.h"
> +#include "svga3d_limits.h"
> +#include "svga_reg.h"
> +
> +typedef enum SVGAFifo3dCmdId {
> +	SVGA_3D_CMD_LEGACY_BASE = 1000,
> +	SVGA_3D_CMD_BASE = 1040,
> +
> +	SVGA_3D_CMD_SURFACE_DEFINE = 1040,
> +	SVGA_3D_CMD_SURFACE_DESTROY = 1041,
> +	SVGA_3D_CMD_SURFACE_COPY = 1042,
> +	SVGA_3D_CMD_SURFACE_STRETCHBLT = 1043,
> +	SVGA_3D_CMD_SURFACE_DMA = 1044,
> +	SVGA_3D_CMD_CONTEXT_DEFINE = 1045,
> +	SVGA_3D_CMD_CONTEXT_DESTROY = 1046,
> +	SVGA_3D_CMD_SETTRANSFORM = 1047,
> +	SVGA_3D_CMD_SETZRANGE = 1048,
> +	SVGA_3D_CMD_SETRENDERSTATE = 1049,
> +	SVGA_3D_CMD_SETRENDERTARGET = 1050,
> +	SVGA_3D_CMD_SETTEXTURESTATE = 1051,
> +	SVGA_3D_CMD_SETMATERIAL = 1052,
> +	SVGA_3D_CMD_SETLIGHTDATA = 1053,
> +	SVGA_3D_CMD_SETLIGHTENABLED = 1054,
> +	SVGA_3D_CMD_SETVIEWPORT = 1055,
> +	SVGA_3D_CMD_SETCLIPPLANE = 1056,
> +	SVGA_3D_CMD_CLEAR = 1057,
> +	SVGA_3D_CMD_PRESENT = 1058,
> +	SVGA_3D_CMD_SHADER_DEFINE = 1059,
> +	SVGA_3D_CMD_SHADER_DESTROY = 1060,
> +	SVGA_3D_CMD_SET_SHADER = 1061,
> +	SVGA_3D_CMD_SET_SHADER_CONST = 1062,
> +	SVGA_3D_CMD_DRAW_PRIMITIVES = 1063,
> +	SVGA_3D_CMD_SETSCISSORRECT = 1064,
> +	SVGA_3D_CMD_BEGIN_QUERY = 1065,
> +	SVGA_3D_CMD_END_QUERY = 1066,
> +	SVGA_3D_CMD_WAIT_FOR_QUERY = 1067,
> +	SVGA_3D_CMD_PRESENT_READBACK = 1068,
> +	SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN = 1069,
> +	SVGA_3D_CMD_SURFACE_DEFINE_V2 = 1070,
> +	SVGA_3D_CMD_GENERATE_MIPMAPS = 1071,
> +	SVGA_3D_CMD_DEAD4 = 1072,
> +	SVGA_3D_CMD_DEAD5 = 1073,
> +	SVGA_3D_CMD_DEAD6 = 1074,
> +	SVGA_3D_CMD_DEAD7 = 1075,
> +	SVGA_3D_CMD_DEAD8 = 1076,
> +	SVGA_3D_CMD_DEAD9 = 1077,
> +	SVGA_3D_CMD_DEAD10 = 1078,
> +	SVGA_3D_CMD_DEAD11 = 1079,
> +	SVGA_3D_CMD_ACTIVATE_SURFACE = 1080,
> +	SVGA_3D_CMD_DEACTIVATE_SURFACE = 1081,
> +	SVGA_3D_CMD_SCREEN_DMA = 1082,
> +	SVGA_3D_CMD_DEAD1 = 1083,
> +	SVGA_3D_CMD_DEAD2 = 1084,
> +
> +	SVGA_3D_CMD_DEAD12 = 1085,
> +	SVGA_3D_CMD_DEAD13 = 1086,
> +	SVGA_3D_CMD_DEAD14 = 1087,
> +	SVGA_3D_CMD_DEAD15 = 1088,
> +	SVGA_3D_CMD_DEAD16 = 1089,
> +	SVGA_3D_CMD_DEAD17 = 1090,
> +
> +	SVGA_3D_CMD_SET_OTABLE_BASE = 1091,
> +	SVGA_3D_CMD_READBACK_OTABLE = 1092,
> +
> +	SVGA_3D_CMD_DEFINE_GB_MOB = 1093,
> +	SVGA_3D_CMD_DESTROY_GB_MOB = 1094,
> +	SVGA_3D_CMD_DEAD3 = 1095,
> +	SVGA_3D_CMD_UPDATE_GB_MOB_MAPPING = 1096,
> +
> +	SVGA_3D_CMD_DEFINE_GB_SURFACE = 1097,
> +	SVGA_3D_CMD_DESTROY_GB_SURFACE = 1098,
> +	SVGA_3D_CMD_BIND_GB_SURFACE = 1099,
> +	SVGA_3D_CMD_COND_BIND_GB_SURFACE = 1100,
> +	SVGA_3D_CMD_UPDATE_GB_IMAGE = 1101,
> +	SVGA_3D_CMD_UPDATE_GB_SURFACE = 1102,
> +	SVGA_3D_CMD_READBACK_GB_IMAGE = 1103,
> +	SVGA_3D_CMD_READBACK_GB_SURFACE = 1104,
> +	SVGA_3D_CMD_INVALIDATE_GB_IMAGE = 1105,
> +	SVGA_3D_CMD_INVALIDATE_GB_SURFACE = 1106,
> +
> +	SVGA_3D_CMD_DEFINE_GB_CONTEXT = 1107,
> +	SVGA_3D_CMD_DESTROY_GB_CONTEXT = 1108,
> +	SVGA_3D_CMD_BIND_GB_CONTEXT = 1109,
> +	SVGA_3D_CMD_READBACK_GB_CONTEXT = 1110,
> +	SVGA_3D_CMD_INVALIDATE_GB_CONTEXT = 1111,
> +
> +	SVGA_3D_CMD_DEFINE_GB_SHADER = 1112,
> +	SVGA_3D_CMD_DESTROY_GB_SHADER = 1113,
> +	SVGA_3D_CMD_BIND_GB_SHADER = 1114,
> +
> +	SVGA_3D_CMD_SET_OTABLE_BASE64 = 1115,
> +
> +	SVGA_3D_CMD_BEGIN_GB_QUERY = 1116,
> +	SVGA_3D_CMD_END_GB_QUERY = 1117,
> +	SVGA_3D_CMD_WAIT_FOR_GB_QUERY = 1118,
> +
> +	SVGA_3D_CMD_NOP = 1119,
> +
> +	SVGA_3D_CMD_ENABLE_GART = 1120,
> +	SVGA_3D_CMD_DISABLE_GART = 1121,
> +	SVGA_3D_CMD_MAP_MOB_INTO_GART = 1122,
> +	SVGA_3D_CMD_UNMAP_GART_RANGE = 1123,
> +
> +	SVGA_3D_CMD_DEFINE_GB_SCREENTARGET = 1124,
> +	SVGA_3D_CMD_DESTROY_GB_SCREENTARGET = 1125,
> +	SVGA_3D_CMD_BIND_GB_SCREENTARGET = 1126,
> +	SVGA_3D_CMD_UPDATE_GB_SCREENTARGET = 1127,
> +
> +	SVGA_3D_CMD_READBACK_GB_IMAGE_PARTIAL = 1128,
> +	SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL = 1129,
> +
> +	SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE = 1130,
> +
> +	SVGA_3D_CMD_GB_SCREEN_DMA = 1131,
> +	SVGA_3D_CMD_BIND_GB_SURFACE_WITH_PITCH = 1132,
> +	SVGA_3D_CMD_GB_MOB_FENCE = 1133,
> +	SVGA_3D_CMD_DEFINE_GB_SURFACE_V2 = 1134,
> +	SVGA_3D_CMD_DEFINE_GB_MOB64 = 1135,
> +	SVGA_3D_CMD_REDEFINE_GB_MOB64 = 1136,
> +	SVGA_3D_CMD_NOP_ERROR = 1137,
> +
> +	SVGA_3D_CMD_SET_VERTEX_STREAMS = 1138,
> +	SVGA_3D_CMD_SET_VERTEX_DECLS = 1139,
> +	SVGA_3D_CMD_SET_VERTEX_DIVISORS = 1140,
> +	SVGA_3D_CMD_DRAW = 1141,
> +	SVGA_3D_CMD_DRAW_INDEXED = 1142,
> +
> +	SVGA_3D_CMD_DX_MIN = 1143,
> +	SVGA_3D_CMD_DX_DEFINE_CONTEXT = 1143,
> +	SVGA_3D_CMD_DX_DESTROY_CONTEXT = 1144,
> +	SVGA_3D_CMD_DX_BIND_CONTEXT = 1145,
> +	SVGA_3D_CMD_DX_READBACK_CONTEXT = 1146,
> +	SVGA_3D_CMD_DX_INVALIDATE_CONTEXT = 1147,
> +	SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER = 1148,
> +	SVGA_3D_CMD_DX_SET_SHADER_RESOURCES = 1149,
> +	SVGA_3D_CMD_DX_SET_SHADER = 1150,
> +	SVGA_3D_CMD_DX_SET_SAMPLERS = 1151,
> +	SVGA_3D_CMD_DX_DRAW = 1152,
> +	SVGA_3D_CMD_DX_DRAW_INDEXED = 1153,
> +	SVGA_3D_CMD_DX_DRAW_INSTANCED = 1154,
> +	SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED = 1155,
> +	SVGA_3D_CMD_DX_DRAW_AUTO = 1156,
> +	SVGA_3D_CMD_DX_SET_INPUT_LAYOUT = 1157,
> +	SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS = 1158,
> +	SVGA_3D_CMD_DX_SET_INDEX_BUFFER = 1159,
> +	SVGA_3D_CMD_DX_SET_TOPOLOGY = 1160,
> +	SVGA_3D_CMD_DX_SET_RENDERTARGETS = 1161,
> +	SVGA_3D_CMD_DX_SET_BLEND_STATE = 1162,
> +	SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE = 1163,
> +	SVGA_3D_CMD_DX_SET_RASTERIZER_STATE = 1164,
> +	SVGA_3D_CMD_DX_DEFINE_QUERY = 1165,
> +	SVGA_3D_CMD_DX_DESTROY_QUERY = 1166,
> +	SVGA_3D_CMD_DX_BIND_QUERY = 1167,
> +	SVGA_3D_CMD_DX_SET_QUERY_OFFSET = 1168,
> +	SVGA_3D_CMD_DX_BEGIN_QUERY = 1169,
> +	SVGA_3D_CMD_DX_END_QUERY = 1170,
> +	SVGA_3D_CMD_DX_READBACK_QUERY = 1171,
> +	SVGA_3D_CMD_DX_SET_PREDICATION = 1172,
> +	SVGA_3D_CMD_DX_SET_SOTARGETS = 1173,
> +	SVGA_3D_CMD_DX_SET_VIEWPORTS = 1174,
> +	SVGA_3D_CMD_DX_SET_SCISSORRECTS = 1175,
> +	SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW = 1176,
> +	SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW = 1177,
> +	SVGA_3D_CMD_DX_PRED_COPY_REGION = 1178,
> +	SVGA_3D_CMD_DX_PRED_COPY = 1179,
> +	SVGA_3D_CMD_DX_PRESENTBLT = 1180,
> +	SVGA_3D_CMD_DX_GENMIPS = 1181,
> +	SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE = 1182,
> +	SVGA_3D_CMD_DX_READBACK_SUBRESOURCE = 1183,
> +	SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE = 1184,
> +	SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW = 1185,
> +	SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW = 1186,
> +	SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW = 1187,
> +	SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW = 1188,
> +	SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW = 1189,
> +	SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW = 1190,
> +	SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT = 1191,
> +	SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT = 1192,
> +	SVGA_3D_CMD_DX_DEFINE_BLEND_STATE = 1193,
> +	SVGA_3D_CMD_DX_DESTROY_BLEND_STATE = 1194,
> +	SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE = 1195,
> +	SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE = 1196,
> +	SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE = 1197,
> +	SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE = 1198,
> +	SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE = 1199,
> +	SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE = 1200,
> +	SVGA_3D_CMD_DX_DEFINE_SHADER = 1201,
> +	SVGA_3D_CMD_DX_DESTROY_SHADER = 1202,
> +	SVGA_3D_CMD_DX_BIND_SHADER = 1203,
> +	SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT = 1204,
> +	SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT = 1205,
> +	SVGA_3D_CMD_DX_SET_STREAMOUTPUT = 1206,
> +	SVGA_3D_CMD_DX_SET_COTABLE = 1207,
> +	SVGA_3D_CMD_DX_READBACK_COTABLE = 1208,
> +	SVGA_3D_CMD_DX_BUFFER_COPY = 1209,
> +	SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER = 1210,
> +	SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK = 1211,
> +	SVGA_3D_CMD_DX_MOVE_QUERY = 1212,
> +	SVGA_3D_CMD_DX_BIND_ALL_QUERY = 1213,
> +	SVGA_3D_CMD_DX_READBACK_ALL_QUERY = 1214,
> +	SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER = 1215,
> +	SVGA_3D_CMD_DX_MOB_FENCE_64 = 1216,
> +	SVGA_3D_CMD_DX_BIND_ALL_SHADER = 1217,
> +	SVGA_3D_CMD_DX_HINT = 1218,
> +	SVGA_3D_CMD_DX_BUFFER_UPDATE = 1219,
> +	SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET = 1220,
> +	SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET = 1221,
> +	SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET = 1222,
> +	SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET = 1223,
> +	SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET = 1224,
> +	SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET = 1225,
> +
> +	SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER = 1226,
> +	SVGA_3D_CMD_DX_MAX = 1227,
> +
> +	SVGA_3D_CMD_SCREEN_COPY = 1227,
> +
> +	SVGA_3D_CMD_RESERVED1 = 1228,
> +	SVGA_3D_CMD_RESERVED2 = 1229,
> +	SVGA_3D_CMD_RESERVED3 = 1230,
> +	SVGA_3D_CMD_RESERVED4 = 1231,
> +	SVGA_3D_CMD_RESERVED5 = 1232,
> +	SVGA_3D_CMD_RESERVED6 = 1233,
> +	SVGA_3D_CMD_RESERVED7 = 1234,
> +	SVGA_3D_CMD_RESERVED8 = 1235,
> +
> +	SVGA_3D_CMD_GROW_OTABLE = 1236,
> +	SVGA_3D_CMD_DX_GROW_COTABLE = 1237,
> +	SVGA_3D_CMD_INTRA_SURFACE_COPY = 1238,
> +
> +	SVGA_3D_CMD_DEFINE_GB_SURFACE_V3 = 1239,
> +
> +	SVGA_3D_CMD_DX_RESOLVE_COPY = 1240,
> +	SVGA_3D_CMD_DX_PRED_RESOLVE_COPY = 1241,
> +	SVGA_3D_CMD_DX_PRED_CONVERT_REGION = 1242,
> +	SVGA_3D_CMD_DX_PRED_CONVERT = 1243,
> +	SVGA_3D_CMD_WHOLE_SURFACE_COPY = 1244,
> +
> +	SVGA_3D_CMD_DX_DEFINE_UA_VIEW = 1245,
> +	SVGA_3D_CMD_DX_DESTROY_UA_VIEW = 1246,
> +	SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT = 1247,
> +	SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT = 1248,
> +	SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT = 1249,
> +	SVGA_3D_CMD_DX_SET_UA_VIEWS = 1250,
> +
> +	SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT = 1251,
> +	SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT = 1252,
> +	SVGA_3D_CMD_DX_DISPATCH = 1253,
> +	SVGA_3D_CMD_DX_DISPATCH_INDIRECT = 1254,
> +
> +	SVGA_3D_CMD_WRITE_ZERO_SURFACE = 1255,
> +	SVGA_3D_CMD_UPDATE_ZERO_SURFACE = 1256,
> +	SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER = 1257,
> +	SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT = 1258,
> +
> +	SVGA_3D_CMD_LOGICOPS_BITBLT = 1259,
> +	SVGA_3D_CMD_LOGICOPS_TRANSBLT = 1260,
> +	SVGA_3D_CMD_LOGICOPS_STRETCHBLT = 1261,
> +	SVGA_3D_CMD_LOGICOPS_COLORFILL = 1262,
> +	SVGA_3D_CMD_LOGICOPS_ALPHABLEND = 1263,
> +	SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND = 1264,
> +
> +	SVGA_3D_CMD_DX_COPY_COTABLE_INTO_MOB = 1265,
> +
> +	SVGA_3D_CMD_UPDATE_GB_SCREENTARGET_V2 = 1266,
> +
> +	SVGA_3D_CMD_DEFINE_GB_SURFACE_V4 = 1267,
> +	SVGA_3D_CMD_DX_SET_CS_UA_VIEWS = 1268,
> +	SVGA_3D_CMD_DX_SET_MIN_LOD = 1269,
> +
> +	SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2 = 1272,
> +	SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB = 1273,
> +	SVGA_3D_CMD_DX_SET_SHADER_IFACE = 1274,
> +	SVGA_3D_CMD_DX_BIND_STREAMOUTPUT = 1275,
> +	SVGA_3D_CMD_SURFACE_STRETCHBLT_NON_MS_TO_MS = 1276,
> +	SVGA_3D_CMD_DX_BIND_SHADER_IFACE = 1277,
> +
> +	SVGA_3D_CMD_UPDATE_GB_SCREENTARGET_MOVE = 1278,
> +
> +	SVGA_3D_CMD_DX_PRED_STAGING_COPY = 1281,
> +	SVGA_3D_CMD_DX_STAGING_COPY = 1282,
> +	SVGA_3D_CMD_DX_PRED_STAGING_COPY_REGION = 1283,
> +	SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS_V2 = 1284,
> +	SVGA_3D_CMD_DX_SET_INDEX_BUFFER_V2 = 1285,
> +	SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS_OFFSET_AND_SIZE = 1286,
> +	SVGA_3D_CMD_DX_SET_INDEX_BUFFER_OFFSET_AND_SIZE = 1287,
> +	SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE_V2 = 1288,
> +	SVGA_3D_CMD_DX_PRED_STAGING_CONVERT_REGION = 1289,
> +	SVGA_3D_CMD_DX_PRED_STAGING_CONVERT = 1290,
> +	SVGA_3D_CMD_DX_STAGING_BUFFER_COPY = 1291,
> +
> +	SVGA_3D_CMD_MAX = 1303,
> +	SVGA_3D_CMD_FUTURE_MAX = 3000
> +} SVGAFifo3dCmdId;
> +
> +#define SVGA_NUM_3D_CMD (SVGA_3D_CMD_MAX - SVGA_3D_CMD_BASE)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 id;
> +	uint32 size;
> +} SVGA3dCmdHeader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 numMipLevels;
> +} SVGA3dSurfaceFace;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +	SVGA3dSurface1Flags surfaceFlags;
> +	SVGA3dSurfaceFormat format;
> +
> +	SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES];
> +
> +} SVGA3dCmdDefineSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +	SVGA3dSurface1Flags surfaceFlags;
> +	SVGA3dSurfaceFormat format;
> +
> +	SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES];
> +	uint32 multisampleCount;
> +	SVGA3dTextureFilter autogenFilter;
> +
> +} SVGA3dCmdDefineSurface_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +} SVGA3dCmdDestroySurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +} SVGA3dCmdDefineContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +} SVGA3dCmdDestroyContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dClearFlag clearFlag;
> +	uint32 color;
> +	float depth;
> +	uint32 stencil;
> +
> +} SVGA3dCmdClear;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dLightType type;
> +	SVGA3dBool inWorldSpace;
> +	float diffuse[4];
> +	float specular[4];
> +	float ambient[4];
> +	float position[4];
> +	float direction[4];
> +	float range;
> +	float falloff;
> +	float attenuation0;
> +	float attenuation1;
> +	float attenuation2;
> +	float theta;
> +	float phi;
> +} SVGA3dLightData;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +
> +} SVGA3dCmdPresent;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dRenderStateName state;
> +	union {
> +		uint32 uintValue;
> +		float floatValue;
> +	};
> +} SVGA3dRenderState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +
> +} SVGA3dCmdSetRenderState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dRenderTargetType type;
> +	SVGA3dSurfaceImageId target;
> +} SVGA3dCmdSetRenderTarget;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceImageId src;
> +	SVGA3dSurfaceImageId dest;
> +
> +} SVGA3dCmdSurfaceCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceImageId surface;
> +	SVGA3dCopyBox box;
> +} SVGA3dCmdIntraSurfaceCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 srcSid;
> +	uint32 destSid;
> +} SVGA3dCmdWholeSurfaceCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceImageId src;
> +	SVGA3dSurfaceImageId dest;
> +	SVGA3dBox boxSrc;
> +	SVGA3dBox boxDest;
> +} SVGA3dCmdSurfaceStretchBltNonMSToMS;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceImageId src;
> +	SVGA3dSurfaceImageId dest;
> +	SVGA3dBox boxSrc;
> +	SVGA3dBox boxDest;
> +	SVGA3dStretchBltMode mode;
> +} SVGA3dCmdSurfaceStretchBlt;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 discard : 1;
> +
> +	uint32 unsynchronized : 1;
> +
> +	uint32 reserved : 30;
> +} SVGA3dSurfaceDMAFlags;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAGuestImage guest;
> +	SVGA3dSurfaceImageId host;
> +	SVGA3dTransferType transfer;
> +
> +} SVGA3dCmdSurfaceDMA;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 suffixSize;
> +
> +	uint32 maximumOffset;
> +
> +	SVGA3dSurfaceDMAFlags flags;
> +} SVGA3dCmdSurfaceDMASuffix;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 first;
> +	uint32 last;
> +} SVGA3dArrayRangeHint;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 surfaceId;
> +	uint32 offset;
> +	uint32 stride;
> +} SVGA3dArray;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dDeclType type;
> +	SVGA3dDeclMethod method;
> +	SVGA3dDeclUsage usage;
> +	uint32 usageIndex;
> +} SVGA3dVertexArrayIdentity;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dVertexDecl {
> +	SVGA3dVertexArrayIdentity identity;
> +	SVGA3dArray array;
> +	SVGA3dArrayRangeHint rangeHint;
> +} SVGA3dVertexDecl;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dPrimitiveRange {
> +	SVGA3dPrimitiveType primType;
> +	uint32 primitiveCount;
> +
> +	SVGA3dArray indexArray;
> +	uint32 indexWidth;
> +
> +	int32 indexBias;
> +} SVGA3dPrimitiveRange;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 numVertexDecls;
> +	uint32 numRanges;
> +
> +} SVGA3dCmdDrawPrimitives;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +
> +	uint32 primitiveCount;
> +	uint32 startVertexLocation;
> +
> +	uint8 primitiveType;
> +	uint8 padding[3];
> +} SVGA3dCmdDraw;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +
> +	uint8 primitiveType;
> +
> +	uint32 indexBufferSid;
> +	uint32 indexBufferOffset;
> +
> +	uint8 indexBufferStride;
> +
> +	int32 baseVertexLocation;
> +
> +	uint32 primitiveCount;
> +	uint32 pad0;
> +	uint16 pad1;
> +} SVGA3dCmdDrawIndexed;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint16 streamOffset;
> +	uint8 stream;
> +	uint8 type;
> +	uint8 method;
> +	uint8 usage;
> +	uint8 usageIndex;
> +	uint8 padding;
> +
> +} SVGA3dVertexElement;
> +#pragma pack(pop)
> +
> +#define SVGA3D_VERTEX_ELEMENT_RESPECT_STREAM (1 << 7)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +
> +	uint32 numElements;
> +
> +} SVGA3dCmdSetVertexDecls;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +	uint32 stride;
> +	uint32 offset;
> +} SVGA3dVertexStream;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +
> +	uint32 numStreams;
> +
> +} SVGA3dCmdSetVertexStreams;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 numDivisors;
> +} SVGA3dCmdSetVertexDivisors;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stage;
> +	SVGA3dTextureStateName name;
> +	union {
> +		uint32 value;
> +		float floatValue;
> +	};
> +} SVGA3dTextureState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +
> +} SVGA3dCmdSetTextureState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dTransformType type;
> +	float matrix[16];
> +} SVGA3dCmdSetTransform;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	float min;
> +	float max;
> +} SVGA3dZRange;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dZRange zRange;
> +} SVGA3dCmdSetZRange;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	float diffuse[4];
> +	float ambient[4];
> +	float specular[4];
> +	float emissive[4];
> +	float shininess;
> +} SVGA3dMaterial;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dFace face;
> +	SVGA3dMaterial material;
> +} SVGA3dCmdSetMaterial;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 index;
> +	SVGA3dLightData data;
> +} SVGA3dCmdSetLightData;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 index;
> +	uint32 enabled;
> +} SVGA3dCmdSetLightEnabled;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dRect rect;
> +} SVGA3dCmdSetViewport;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dRect rect;
> +} SVGA3dCmdSetScissorRect;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 index;
> +	float plane[4];
> +} SVGA3dCmdSetClipPlane;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 shid;
> +	SVGA3dShaderType type;
> +
> +} SVGA3dCmdDefineShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 shid;
> +	SVGA3dShaderType type;
> +} SVGA3dCmdDestroyShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 reg;
> +	SVGA3dShaderType type;
> +	SVGA3dShaderConstType ctype;
> +	uint32 values[4];
> +
> +} SVGA3dCmdSetShaderConst;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dShaderType type;
> +	uint32 shid;
> +} SVGA3dCmdSetShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dQueryType type;
> +} SVGA3dCmdBeginQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dQueryType type;
> +	SVGAGuestPtr guestResult;
> +} SVGA3dCmdEndQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dQueryType type;
> +	SVGAGuestPtr guestResult;
> +} SVGA3dCmdWaitForQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 totalSize;
> +	SVGA3dQueryState state;
> +	union {
> +		uint32 result32;
> +		uint32 queryCookie;
> +	};
> +} SVGA3dQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceImageId srcImage;
> +	SVGASignedRect srcRect;
> +	uint32 destScreenId;
> +	SVGASignedRect destRect;
> +
> +} SVGA3dCmdBlitSurfaceToScreen;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +	SVGA3dTextureFilter filter;
> +} SVGA3dCmdGenerateMipmaps;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +} SVGA3dCmdActivateSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +} SVGA3dCmdDeactivateSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdScreenDMA {
> +	uint32 screenId;
> +	SVGAGuestImage refBuffer;
> +	SVGAGuestImage destBuffer;
> +	SVGAGuestImage changeMap;
> +} SVGA3dCmdScreenDMA;
> +#pragma pack(pop)
> +
> +#define SVGA3D_LOTRANSBLT_HONORALPHA (0x01)
> +#define SVGA3D_LOSTRETCHBLT_MIRRORX (0x01)
> +#define SVGA3D_LOSTRETCHBLT_MIRRORY (0x02)
> +#define SVGA3D_LOALPHABLEND_SRCHASALPHA (0x01)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdLogicOpsBitBlt {
> +	SVGA3dSurfaceImageId src;
> +	SVGA3dSurfaceImageId dst;
> +	SVGA3dLogicOp logicOp;
> +	SVGA3dLogicOpRop3 logicOpRop3;
> +
> +} SVGA3dCmdLogicOpsBitBlt;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdLogicOpsTransBlt {
> +	SVGA3dSurfaceImageId src;
> +	SVGA3dSurfaceImageId dst;
> +	uint32 color;
> +	uint32 flags;
> +	SVGA3dBox srcBox;
> +	SVGA3dSignedBox dstBox;
> +	SVGA3dBox clipBox;
> +} SVGA3dCmdLogicOpsTransBlt;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdLogicOpsStretchBlt {
> +	SVGA3dSurfaceImageId src;
> +	SVGA3dSurfaceImageId dst;
> +	uint16 mode;
> +	uint16 flags;
> +	SVGA3dBox srcBox;
> +	SVGA3dSignedBox dstBox;
> +	SVGA3dBox clipBox;
> +} SVGA3dCmdLogicOpsStretchBlt;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdLogicOpsColorFill {
> +	SVGA3dSurfaceImageId dst;
> +	uint32 color;
> +	SVGA3dLogicOp logicOp;
> +	SVGA3dLogicOpRop3 logicOpRop3;
> +
> +} SVGA3dCmdLogicOpsColorFill;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdLogicOpsAlphaBlend {
> +	SVGA3dSurfaceImageId src;
> +	SVGA3dSurfaceImageId dst;
> +	uint32 alphaVal;
> +	uint32 flags;
> +	SVGA3dBox srcBox;
> +	SVGA3dSignedBox dstBox;
> +	SVGA3dBox clipBox;
> +} SVGA3dCmdLogicOpsAlphaBlend;
> +#pragma pack(pop)
> +
> +#define SVGA3D_CLEARTYPE_INVALID_GAMMA_INDEX 0xFFFFFFFF
> +
> +#define SVGA3D_CLEARTYPE_GAMMA_WIDTH 512
> +#define SVGA3D_CLEARTYPE_GAMMA_HEIGHT 16
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdLogicOpsClearTypeBlend {
> +	SVGA3dSurfaceImageId tmp;
> +	SVGA3dSurfaceImageId dst;
> +	SVGA3dSurfaceImageId gammaSurf;
> +	SVGA3dSurfaceImageId alphaSurf;
> +	uint32 gamma;
> +	uint32 color;
> +	uint32 color2;
> +	int32 alphaOffsetX;
> +	int32 alphaOffsetY;
> +
> +} SVGA3dCmdLogicOpsClearTypeBlend;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAMobFormat ptDepth;
> +	uint32 sizeInBytes;
> +	PPN64 base;
> +} SVGAOTableMobEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dSurface1Flags surface1Flags;
> +	uint32 numMipLevels;
> +	uint32 multisampleCount;
> +	SVGA3dTextureFilter autogenFilter;
> +	SVGA3dSize size;
> +	SVGAMobId mobid;
> +	uint32 arraySize;
> +	uint32 mobPitch;
> +	SVGA3dSurface2Flags surface2Flags;
> +	uint8 multisamplePattern;
> +	uint8 qualityLevel;
> +	uint16 bufferByteStride;
> +	float minLOD;
> +	uint32 pad0[2];
> +} SVGAOTableSurfaceEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGAMobId mobid;
> +} SVGAOTableContextEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dShaderType type;
> +	uint32 sizeInBytes;
> +	uint32 offsetInBytes;
> +	SVGAMobId mobid;
> +} SVGAOTableShaderEntry;
> +#pragma pack(pop)
> +
> +#define SVGA_STFLAG_PRIMARY (1 << 0)
> +#define SVGA_STFLAG_RESERVED (1 << 1)
> +typedef uint32 SVGAScreenTargetFlags;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceImageId image;
> +	uint32 width;
> +	uint32 height;
> +	int32 xRoot;
> +	int32 yRoot;
> +	SVGAScreenTargetFlags flags;
> +	uint32 dpi;
> +	uint32 pad[7];
> +} SVGAOTableScreenTargetEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	float value[4];
> +} SVGA3dShaderConstFloat;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	int32 value[4];
> +} SVGA3dShaderConstInt;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 value;
> +} SVGA3dShaderConstBool;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint16 streamOffset;
> +	uint8 stream;
> +	uint8 type;
> +	uint8 methodUsage;
> +	uint8 usageIndex;
> +} SVGAGBVertexElement;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +	uint16 stride;
> +	uint32 offset;
> +} SVGAGBVertexStream;
> +#pragma pack(pop)
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dRect viewport;
> +	SVGA3dRect scissorRect;
> +	SVGA3dZRange zRange;
> +
> +	SVGA3dSurfaceImageId renderTargets[SVGA3D_RT_MAX];
> +	SVGAGBVertexElement decl1[4];
> +
> +	uint32 renderStates[SVGA3D_RS_MAX];
> +	SVGAGBVertexElement decl2[18];
> +	uint32 pad0[2];
> +
> +	struct {
> +		SVGA3dFace face;
> +		SVGA3dMaterial material;
> +	} material;
> +
> +	float clipPlanes[SVGA3D_MAX_CLIP_PLANES][4];
> +	float matrices[SVGA3D_TRANSFORM_MAX][16];
> +
> +	SVGA3dBool lightEnabled[SVGA3D_NUM_LIGHTS];
> +	SVGA3dLightData lightData[SVGA3D_NUM_LIGHTS];
> +
> +	uint32 shaders[SVGA3D_NUM_SHADERTYPE_PREDX];
> +	SVGAGBVertexElement decl3[10];
> +	uint32 pad1[3];
> +
> +	uint32 occQueryActive;
> +	uint32 occQueryValue;
> +
> +	SVGA3dShaderConstInt pShaderIValues[SVGA3D_CONSTINTREG_MAX];
> +	SVGA3dShaderConstInt vShaderIValues[SVGA3D_CONSTINTREG_MAX];
> +	uint16 pShaderBValues;
> +	uint16 vShaderBValues;
> +
> +	SVGAGBVertexStream streams[SVGA3D_MAX_VERTEX_ARRAYS];
> +	SVGA3dVertexDivisor divisors[SVGA3D_MAX_VERTEX_ARRAYS];
> +	uint32 numVertexDecls;
> +	uint32 numVertexStreams;
> +	uint32 numVertexDivisors;
> +	uint32 pad2[30];
> +
> +	uint32 tsColorKey[SVGA3D_NUM_TEXTURE_UNITS];
> +	uint32 textureStages[SVGA3D_NUM_TEXTURE_UNITS][SVGA3D_TS_CONSTANT + 1];
> +	uint32 tsColorKeyEnable[SVGA3D_NUM_TEXTURE_UNITS];
> +
> +	SVGA3dShaderConstFloat pShaderFValues[SVGA3D_CONSTREG_MAX];
> +	SVGA3dShaderConstFloat vShaderFValues[SVGA3D_CONSTREG_MAX];
> +} SVGAGBContextData;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAOTableType type;
> +	PPN32 baseAddress;
> +	uint32 sizeInBytes;
> +	uint32 validSizeInBytes;
> +	SVGAMobFormat ptDepth;
> +} SVGA3dCmdSetOTableBase;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAOTableType type;
> +	PPN64 baseAddress;
> +	uint32 sizeInBytes;
> +	uint32 validSizeInBytes;
> +	SVGAMobFormat ptDepth;
> +} SVGA3dCmdSetOTableBase64;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAOTableType type;
> +	PPN64 baseAddress;
> +	uint32 sizeInBytes;
> +	uint32 validSizeInBytes;
> +	SVGAMobFormat ptDepth;
> +} SVGA3dCmdGrowOTable;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAOTableType type;
> +} SVGA3dCmdReadbackOTable;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBMob {
> +	SVGAMobId mobid;
> +	SVGAMobFormat ptDepth;
> +	PPN32 base;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDefineGBMob;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDestroyGBMob {
> +	SVGAMobId mobid;
> +} SVGA3dCmdDestroyGBMob;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBMob64 {
> +	SVGAMobId mobid;
> +	SVGAMobFormat ptDepth;
> +	PPN64 base;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDefineGBMob64;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdRedefineGBMob64 {
> +	SVGAMobId mobid;
> +	SVGAMobFormat ptDepth;
> +	PPN64 base;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdRedefineGBMob64;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdUpdateGBMobMapping {
> +	SVGAMobId mobid;
> +} SVGA3dCmdUpdateGBMobMapping;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBSurface {
> +	uint32 sid;
> +	SVGA3dSurface1Flags surfaceFlags;
> +	SVGA3dSurfaceFormat format;
> +	uint32 numMipLevels;
> +	uint32 multisampleCount;
> +	SVGA3dTextureFilter autogenFilter;
> +	SVGA3dSize size;
> +} SVGA3dCmdDefineGBSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBSurface_v2 {
> +	uint32 sid;
> +	SVGA3dSurface1Flags surfaceFlags;
> +	SVGA3dSurfaceFormat format;
> +	uint32 numMipLevels;
> +	uint32 multisampleCount;
> +	SVGA3dTextureFilter autogenFilter;
> +	SVGA3dSize size;
> +	uint32 arraySize;
> +	uint32 pad;
> +} SVGA3dCmdDefineGBSurface_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBSurface_v3 {
> +	uint32 sid;
> +	SVGA3dSurfaceAllFlags surfaceFlags;
> +	SVGA3dSurfaceFormat format;
> +	uint32 numMipLevels;
> +	uint32 multisampleCount;
> +	SVGA3dMSPattern multisamplePattern;
> +	SVGA3dMSQualityLevel qualityLevel;
> +	SVGA3dTextureFilter autogenFilter;
> +	SVGA3dSize size;
> +	uint32 arraySize;
> +} SVGA3dCmdDefineGBSurface_v3;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBSurface_v4 {
> +	uint32 sid;
> +	SVGA3dSurfaceAllFlags surfaceFlags;
> +	SVGA3dSurfaceFormat format;
> +	uint32 numMipLevels;
> +	uint32 multisampleCount;
> +	SVGA3dMSPattern multisamplePattern;
> +	SVGA3dMSQualityLevel qualityLevel;
> +	SVGA3dTextureFilter autogenFilter;
> +	SVGA3dSize size;
> +	uint32 arraySize;
> +	uint32 bufferByteStride;
> +} SVGA3dCmdDefineGBSurface_v4;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDestroyGBSurface {
> +	uint32 sid;
> +} SVGA3dCmdDestroyGBSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdBindGBSurface {
> +	uint32 sid;
> +	SVGAMobId mobid;
> +} SVGA3dCmdBindGBSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdBindGBSurfaceWithPitch {
> +	uint32 sid;
> +	SVGAMobId mobid;
> +	uint32 baseLevelPitch;
> +} SVGA3dCmdBindGBSurfaceWithPitch;
> +#pragma pack(pop)
> +
> +#define SVGA3D_COND_BIND_GB_SURFACE_FLAG_READBACK (1 << 0)
> +#define SVGA3D_COND_BIND_GB_SURFACE_FLAG_UPDATE (1 << 1)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdCondBindGBSurface {
> +	uint32 sid;
> +	SVGAMobId testMobid;
> +	SVGAMobId mobid;
> +	uint32 flags;
> +} SVGA3dCmdCondBindGBSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdUpdateGBImage {
> +	SVGA3dSurfaceImageId image;
> +	SVGA3dBox box;
> +} SVGA3dCmdUpdateGBImage;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdUpdateGBSurface {
> +	uint32 sid;
> +} SVGA3dCmdUpdateGBSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdReadbackGBImage {
> +	SVGA3dSurfaceImageId image;
> +} SVGA3dCmdReadbackGBImage;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdReadbackGBSurface {
> +	uint32 sid;
> +} SVGA3dCmdReadbackGBSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdReadbackGBImagePartial {
> +	SVGA3dSurfaceImageId image;
> +	SVGA3dBox box;
> +	uint32 invertBox;
> +} SVGA3dCmdReadbackGBImagePartial;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdInvalidateGBImage {
> +	SVGA3dSurfaceImageId image;
> +} SVGA3dCmdInvalidateGBImage;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdInvalidateGBSurface {
> +	uint32 sid;
> +} SVGA3dCmdInvalidateGBSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdInvalidateGBImagePartial {
> +	SVGA3dSurfaceImageId image;
> +	SVGA3dBox box;
> +	uint32 invertBox;
> +} SVGA3dCmdInvalidateGBImagePartial;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBContext {
> +	uint32 cid;
> +} SVGA3dCmdDefineGBContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDestroyGBContext {
> +	uint32 cid;
> +} SVGA3dCmdDestroyGBContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdBindGBContext {
> +	uint32 cid;
> +	SVGAMobId mobid;
> +	uint32 validContents;
> +} SVGA3dCmdBindGBContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdReadbackGBContext {
> +	uint32 cid;
> +} SVGA3dCmdReadbackGBContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdInvalidateGBContext {
> +	uint32 cid;
> +} SVGA3dCmdInvalidateGBContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDefineGBShader {
> +	uint32 shid;
> +	SVGA3dShaderType type;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDefineGBShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdBindGBShader {
> +	uint32 shid;
> +	SVGAMobId mobid;
> +	uint32 offsetInBytes;
> +} SVGA3dCmdBindGBShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDestroyGBShader {
> +	uint32 shid;
> +} SVGA3dCmdDestroyGBShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	uint32 regStart;
> +	SVGA3dShaderType shaderType;
> +	SVGA3dShaderConstType constType;
> +
> +} SVGA3dCmdSetGBShaderConstInline;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dQueryType type;
> +} SVGA3dCmdBeginGBQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dQueryType type;
> +	SVGAMobId mobid;
> +	uint32 offset;
> +} SVGA3dCmdEndGBQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGA3dQueryType type;
> +	SVGAMobId mobid;
> +	uint32 offset;
> +} SVGA3dCmdWaitForGBQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAMobId mobid;
> +	uint32 mustBeZero;
> +	uint32 initialized;
> +} SVGA3dCmdEnableGart;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAMobId mobid;
> +	uint32 gartOffset;
> +} SVGA3dCmdMapMobIntoGart;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 gartOffset;
> +	uint32 numPages;
> +} SVGA3dCmdUnmapGartRange;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stid;
> +	uint32 width;
> +	uint32 height;
> +	int32 xRoot;
> +	int32 yRoot;
> +	SVGAScreenTargetFlags flags;
> +
> +	uint32 dpi;
> +} SVGA3dCmdDefineGBScreenTarget;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stid;
> +} SVGA3dCmdDestroyGBScreenTarget;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stid;
> +	SVGA3dSurfaceImageId image;
> +} SVGA3dCmdBindGBScreenTarget;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stid;
> +	SVGA3dRect rect;
> +} SVGA3dCmdUpdateGBScreenTarget;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stid;
> +	SVGA3dRect rect;
> +	SVGA3dFrameUpdateType type;
> +} SVGA3dCmdUpdateGBScreenTarget_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stid;
> +	SVGA3dRect rect;
> +	SVGA3dFrameUpdateType type;
> +	SVGAUnsignedPoint srcPoint;
> +} SVGA3dCmdUpdateGBScreenTargetMove;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdGBScreenDMA {
> +	uint32 screenId;
> +	uint32 dead;
> +	SVGAMobId destMobID;
> +	uint32 destPitch;
> +	SVGAMobId changeMapMobID;
> +} SVGA3dCmdGBScreenDMA;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 value;
> +	uint32 mobId;
> +	uint32 mobOffset;
> +} SVGA3dCmdGBMobFence;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 stid;
> +	SVGA3dSurfaceImageId dest;
> +
> +	uint32 statusMobId;
> +	uint32 statusMobOffset;
> +
> +	uint32 mustBeInvalidId;
> +	uint32 mustBeZero;
> +} SVGA3dCmdScreenCopy;
> +#pragma pack(pop)
> +
> +#define SVGA_SCREEN_COPY_STATUS_FAILURE 0x00
> +#define SVGA_SCREEN_COPY_STATUS_SUCCESS 0x01
> +#define SVGA_SCREEN_COPY_STATUS_INVALID 0xFFFFFFFF
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +} SVGA3dCmdWriteZeroSurface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 sid;
> +} SVGA3dCmdUpdateZeroSurface;
> +#pragma pack(pop)
> +
> +#endif
> diff --git a/lib/svga/svga3d_devcaps.h b/lib/svga/svga3d_devcaps.h
> new file mode 100644
> index 00000000..286fe552
> --- /dev/null
> +++ b/lib/svga/svga3d_devcaps.h
> @@ -0,0 +1,369 @@
> +/**********************************************************
> + * Copyright 1998-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga3d_devcaps.h --
> + *
> + *    SVGA 3d caps definitions
> + */
> +
> +#ifndef _SVGA3D_DEVCAPS_H_
> +#define _SVGA3D_DEVCAPS_H_
> +
> +#include "svga3d_types.h"
> +
> +#define SVGA3D_MAKE_HWVERSION(major, minor) (((major) << 16) | ((minor)&0xFF))
> +#define SVGA3D_MAJOR_HWVERSION(version) ((version) >> 16)
> +#define SVGA3D_MINOR_HWVERSION(version) ((version)&0xFF)
> +
> +typedef enum {
> +	SVGA3D_HWVERSION_WS5_RC1 = SVGA3D_MAKE_HWVERSION(0, 1),
> +	SVGA3D_HWVERSION_WS5_RC2 = SVGA3D_MAKE_HWVERSION(0, 2),
> +	SVGA3D_HWVERSION_WS51_RC1 = SVGA3D_MAKE_HWVERSION(0, 3),
> +	SVGA3D_HWVERSION_WS6_B1 = SVGA3D_MAKE_HWVERSION(1, 1),
> +	SVGA3D_HWVERSION_FUSION_11 = SVGA3D_MAKE_HWVERSION(1, 4),
> +	SVGA3D_HWVERSION_WS65_B1 = SVGA3D_MAKE_HWVERSION(2, 0),
> +	SVGA3D_HWVERSION_WS8_B1 = SVGA3D_MAKE_HWVERSION(2, 1),
> +	SVGA3D_HWVERSION_CURRENT = SVGA3D_HWVERSION_WS8_B1,
> +} SVGA3dHardwareVersion;
> +
> +typedef uint32 SVGA3dDevCapIndex;
> +
> +#define SVGA3D_DEVCAP_INVALID ((uint32)-1)
> +#define SVGA3D_DEVCAP_3D 0
> +#define SVGA3D_DEVCAP_MAX_LIGHTS 1
> +
> +#define SVGA3D_DEVCAP_MAX_TEXTURES 2
> +#define SVGA3D_DEVCAP_MAX_CLIP_PLANES 3
> +#define SVGA3D_DEVCAP_VERTEX_SHADER_VERSION 4
> +#define SVGA3D_DEVCAP_VERTEX_SHADER 5
> +#define SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION 6
> +#define SVGA3D_DEVCAP_FRAGMENT_SHADER 7
> +#define SVGA3D_DEVCAP_MAX_RENDER_TARGETS 8
> +#define SVGA3D_DEVCAP_S23E8_TEXTURES 9
> +#define SVGA3D_DEVCAP_S10E5_TEXTURES 10
> +#define SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND 11
> +#define SVGA3D_DEVCAP_D16_BUFFER_FORMAT 12
> +#define SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT 13
> +#define SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT 14
> +#define SVGA3D_DEVCAP_QUERY_TYPES 15
> +#define SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING 16
> +#define SVGA3D_DEVCAP_MAX_POINT_SIZE 17
> +#define SVGA3D_DEVCAP_MAX_SHADER_TEXTURES 18
> +#define SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH 19
> +#define SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT 20
> +#define SVGA3D_DEVCAP_MAX_VOLUME_EXTENT 21
> +#define SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT 22
> +#define SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO 23
> +#define SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY 24
> +#define SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT 25
> +#define SVGA3D_DEVCAP_MAX_VERTEX_INDEX 26
> +#define SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS 27
> +#define SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS 28
> +#define SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS 29
> +#define SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS 30
> +#define SVGA3D_DEVCAP_TEXTURE_OPS 31
> +#define SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8 32
> +#define SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8 33
> +#define SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10 34
> +#define SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5 35
> +#define SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5 36
> +#define SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4 37
> +#define SVGA3D_DEVCAP_SURFACEFMT_R5G6B5 38
> +#define SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16 39
> +#define SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8 40
> +#define SVGA3D_DEVCAP_SURFACEFMT_ALPHA8 41
> +#define SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8 42
> +#define SVGA3D_DEVCAP_SURFACEFMT_Z_D16 43
> +#define SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8 44
> +#define SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8 45
> +#define SVGA3D_DEVCAP_SURFACEFMT_DXT1 46
> +#define SVGA3D_DEVCAP_SURFACEFMT_DXT2 47
> +#define SVGA3D_DEVCAP_SURFACEFMT_DXT3 48
> +#define SVGA3D_DEVCAP_SURFACEFMT_DXT4 49
> +#define SVGA3D_DEVCAP_SURFACEFMT_DXT5 50
> +#define SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8 51
> +#define SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10 52
> +#define SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8 53
> +#define SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8 54
> +#define SVGA3D_DEVCAP_SURFACEFMT_CxV8U8 55
> +#define SVGA3D_DEVCAP_SURFACEFMT_R_S10E5 56
> +#define SVGA3D_DEVCAP_SURFACEFMT_R_S23E8 57
> +#define SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5 58
> +#define SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8 59
> +#define SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5 60
> +#define SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8 61
> +
> +#define SVGA3D_DEVCAP_MISSING62 62
> +
> +#define SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES 63
> +
> +#define SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS 64
> +
> +#define SVGA3D_DEVCAP_SURFACEFMT_V16U16 65
> +#define SVGA3D_DEVCAP_SURFACEFMT_G16R16 66
> +#define SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16 67
> +#define SVGA3D_DEVCAP_SURFACEFMT_UYVY 68
> +#define SVGA3D_DEVCAP_SURFACEFMT_YUY2 69
> +
> +#define SVGA3D_DEVCAP_DEAD4 70
> +#define SVGA3D_DEVCAP_DEAD5 71
> +#define SVGA3D_DEVCAP_DEAD7 72
> +#define SVGA3D_DEVCAP_DEAD6 73
> +
> +#define SVGA3D_DEVCAP_AUTOGENMIPMAPS 74
> +#define SVGA3D_DEVCAP_SURFACEFMT_NV12 75
> +#define SVGA3D_DEVCAP_DEAD10 76
> +
> +#define SVGA3D_DEVCAP_MAX_CONTEXT_IDS 77
> +
> +#define SVGA3D_DEVCAP_MAX_SURFACE_IDS 78
> +
> +#define SVGA3D_DEVCAP_SURFACEFMT_Z_DF16 79
> +#define SVGA3D_DEVCAP_SURFACEFMT_Z_DF24 80
> +#define SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT 81
> +
> +#define SVGA3D_DEVCAP_SURFACEFMT_ATI1 82
> +#define SVGA3D_DEVCAP_SURFACEFMT_ATI2 83
> +
> +#define SVGA3D_DEVCAP_DEAD1 84
> +#define SVGA3D_DEVCAP_DEAD8 85
> +#define SVGA3D_DEVCAP_DEAD9 86
> +
> +#define SVGA3D_DEVCAP_LINE_AA 87
> +#define SVGA3D_DEVCAP_LINE_STIPPLE 88
> +#define SVGA3D_DEVCAP_MAX_LINE_WIDTH 89
> +#define SVGA3D_DEVCAP_MAX_AA_LINE_WIDTH 90
> +
> +#define SVGA3D_DEVCAP_SURFACEFMT_YV12 91
> +
> +#define SVGA3D_DEVCAP_DEAD3 92
> +
> +#define SVGA3D_DEVCAP_TS_COLOR_KEY 93
> +
> +#define SVGA3D_DEVCAP_DEAD2 94
> +
> +#define SVGA3D_DEVCAP_DXCONTEXT 95
> +
> +#define SVGA3D_DEVCAP_DEAD11 96
> +
> +#define SVGA3D_DEVCAP_DX_MAX_VERTEXBUFFERS 97
> +
> +#define SVGA3D_DEVCAP_DX_MAX_CONSTANT_BUFFERS 98
> +
> +#define SVGA3D_DEVCAP_DX_PROVOKING_VERTEX 99
> +
> +#define SVGA3D_DEVCAP_DXFMT_X8R8G8B8 100
> +#define SVGA3D_DEVCAP_DXFMT_A8R8G8B8 101
> +#define SVGA3D_DEVCAP_DXFMT_R5G6B5 102
> +#define SVGA3D_DEVCAP_DXFMT_X1R5G5B5 103
> +#define SVGA3D_DEVCAP_DXFMT_A1R5G5B5 104
> +#define SVGA3D_DEVCAP_DXFMT_A4R4G4B4 105
> +#define SVGA3D_DEVCAP_DXFMT_Z_D32 106
> +#define SVGA3D_DEVCAP_DXFMT_Z_D16 107
> +#define SVGA3D_DEVCAP_DXFMT_Z_D24S8 108
> +#define SVGA3D_DEVCAP_DXFMT_Z_D15S1 109
> +#define SVGA3D_DEVCAP_DXFMT_LUMINANCE8 110
> +#define SVGA3D_DEVCAP_DXFMT_LUMINANCE4_ALPHA4 111
> +#define SVGA3D_DEVCAP_DXFMT_LUMINANCE16 112
> +#define SVGA3D_DEVCAP_DXFMT_LUMINANCE8_ALPHA8 113
> +#define SVGA3D_DEVCAP_DXFMT_DXT1 114
> +#define SVGA3D_DEVCAP_DXFMT_DXT2 115
> +#define SVGA3D_DEVCAP_DXFMT_DXT3 116
> +#define SVGA3D_DEVCAP_DXFMT_DXT4 117
> +#define SVGA3D_DEVCAP_DXFMT_DXT5 118
> +#define SVGA3D_DEVCAP_DXFMT_BUMPU8V8 119
> +#define SVGA3D_DEVCAP_DXFMT_BUMPL6V5U5 120
> +#define SVGA3D_DEVCAP_DXFMT_BUMPX8L8V8U8 121
> +#define SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD1 122
> +#define SVGA3D_DEVCAP_DXFMT_ARGB_S10E5 123
> +#define SVGA3D_DEVCAP_DXFMT_ARGB_S23E8 124
> +#define SVGA3D_DEVCAP_DXFMT_A2R10G10B10 125
> +#define SVGA3D_DEVCAP_DXFMT_V8U8 126
> +#define SVGA3D_DEVCAP_DXFMT_Q8W8V8U8 127
> +#define SVGA3D_DEVCAP_DXFMT_CxV8U8 128
> +#define SVGA3D_DEVCAP_DXFMT_X8L8V8U8 129
> +#define SVGA3D_DEVCAP_DXFMT_A2W10V10U10 130
> +#define SVGA3D_DEVCAP_DXFMT_ALPHA8 131
> +#define SVGA3D_DEVCAP_DXFMT_R_S10E5 132
> +#define SVGA3D_DEVCAP_DXFMT_R_S23E8 133
> +#define SVGA3D_DEVCAP_DXFMT_RG_S10E5 134
> +#define SVGA3D_DEVCAP_DXFMT_RG_S23E8 135
> +#define SVGA3D_DEVCAP_DXFMT_BUFFER 136
> +#define SVGA3D_DEVCAP_DXFMT_Z_D24X8 137
> +#define SVGA3D_DEVCAP_DXFMT_V16U16 138
> +#define SVGA3D_DEVCAP_DXFMT_G16R16 139
> +#define SVGA3D_DEVCAP_DXFMT_A16B16G16R16 140
> +#define SVGA3D_DEVCAP_DXFMT_UYVY 141
> +#define SVGA3D_DEVCAP_DXFMT_YUY2 142
> +#define SVGA3D_DEVCAP_DXFMT_NV12 143
> +#define SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD2 144
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS 145
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT 146
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT 147
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS 148
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT 149
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT 150
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT 151
> +#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS 152
> +#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT 153
> +#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM 154
> +#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT 155
> +#define SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS 156
> +#define SVGA3D_DEVCAP_DXFMT_R32G32_UINT 157
> +#define SVGA3D_DEVCAP_DXFMT_R32G32_SINT 158
> +#define SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS 159
> +#define SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT 160
> +#define SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24 161
> +#define SVGA3D_DEVCAP_DXFMT_X32_G8X24_UINT 162
> +#define SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS 163
> +#define SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT 164
> +#define SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT 165
> +#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS 166
> +#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM 167
> +#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB 168
> +#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT 169
> +#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT 170
> +#define SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS 171
> +#define SVGA3D_DEVCAP_DXFMT_R16G16_UINT 172
> +#define SVGA3D_DEVCAP_DXFMT_R16G16_SINT 173
> +#define SVGA3D_DEVCAP_DXFMT_R32_TYPELESS 174
> +#define SVGA3D_DEVCAP_DXFMT_D32_FLOAT 175
> +#define SVGA3D_DEVCAP_DXFMT_R32_UINT 176
> +#define SVGA3D_DEVCAP_DXFMT_R32_SINT 177
> +#define SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS 178
> +#define SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT 179
> +#define SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8 180
> +#define SVGA3D_DEVCAP_DXFMT_X24_G8_UINT 181
> +#define SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS 182
> +#define SVGA3D_DEVCAP_DXFMT_R8G8_UNORM 183
> +#define SVGA3D_DEVCAP_DXFMT_R8G8_UINT 184
> +#define SVGA3D_DEVCAP_DXFMT_R8G8_SINT 185
> +#define SVGA3D_DEVCAP_DXFMT_R16_TYPELESS 186
> +#define SVGA3D_DEVCAP_DXFMT_R16_UNORM 187
> +#define SVGA3D_DEVCAP_DXFMT_R16_UINT 188
> +#define SVGA3D_DEVCAP_DXFMT_R16_SNORM 189
> +#define SVGA3D_DEVCAP_DXFMT_R16_SINT 190
> +#define SVGA3D_DEVCAP_DXFMT_R8_TYPELESS 191
> +#define SVGA3D_DEVCAP_DXFMT_R8_UNORM 192
> +#define SVGA3D_DEVCAP_DXFMT_R8_UINT 193
> +#define SVGA3D_DEVCAP_DXFMT_R8_SNORM 194
> +#define SVGA3D_DEVCAP_DXFMT_R8_SINT 195
> +#define SVGA3D_DEVCAP_DXFMT_P8 196
> +#define SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP 197
> +#define SVGA3D_DEVCAP_DXFMT_R8G8_B8G8_UNORM 198
> +#define SVGA3D_DEVCAP_DXFMT_G8R8_G8B8_UNORM 199
> +#define SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS 200
> +#define SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB 201
> +#define SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS 202
> +#define SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB 203
> +#define SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS 204
> +#define SVGA3D_DEVCAP_DXFMT_BC3_UNORM_SRGB 205
> +#define SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS 206
> +#define SVGA3D_DEVCAP_DXFMT_ATI1 207
> +#define SVGA3D_DEVCAP_DXFMT_BC4_SNORM 208
> +#define SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS 209
> +#define SVGA3D_DEVCAP_DXFMT_ATI2 210
> +#define SVGA3D_DEVCAP_DXFMT_BC5_SNORM 211
> +#define SVGA3D_DEVCAP_DXFMT_R10G10B10_XR_BIAS_A2_UNORM 212
> +#define SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS 213
> +#define SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB 214
> +#define SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS 215
> +#define SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB 216
> +#define SVGA3D_DEVCAP_DXFMT_Z_DF16 217
> +#define SVGA3D_DEVCAP_DXFMT_Z_DF24 218
> +#define SVGA3D_DEVCAP_DXFMT_Z_D24S8_INT 219
> +#define SVGA3D_DEVCAP_DXFMT_YV12 220
> +#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT 221
> +#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT 222
> +#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM 223
> +#define SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT 224
> +#define SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM 225
> +#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM 226
> +#define SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT 227
> +#define SVGA3D_DEVCAP_DXFMT_R16G16_UNORM 228
> +#define SVGA3D_DEVCAP_DXFMT_R16G16_SNORM 229
> +#define SVGA3D_DEVCAP_DXFMT_R32_FLOAT 230
> +#define SVGA3D_DEVCAP_DXFMT_R8G8_SNORM 231
> +#define SVGA3D_DEVCAP_DXFMT_R16_FLOAT 232
> +#define SVGA3D_DEVCAP_DXFMT_D16_UNORM 233
> +#define SVGA3D_DEVCAP_DXFMT_A8_UNORM 234
> +#define SVGA3D_DEVCAP_DXFMT_BC1_UNORM 235
> +#define SVGA3D_DEVCAP_DXFMT_BC2_UNORM 236
> +#define SVGA3D_DEVCAP_DXFMT_BC3_UNORM 237
> +#define SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM 238
> +#define SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM 239
> +#define SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM 240
> +#define SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM 241
> +#define SVGA3D_DEVCAP_DXFMT_BC4_UNORM 242
> +#define SVGA3D_DEVCAP_DXFMT_BC5_UNORM 243
> +
> +#define SVGA3D_DEVCAP_SM41 244
> +#define SVGA3D_DEVCAP_MULTISAMPLE_2X 245
> +#define SVGA3D_DEVCAP_MULTISAMPLE_4X 246
> +
> +#define SVGA3D_DEVCAP_MS_FULL_QUALITY 247
> +
> +#define SVGA3D_DEVCAP_LOGICOPS 248
> +
> +#define SVGA3D_DEVCAP_LOGIC_BLENDOPS 249
> +
> +#define SVGA3D_DEVCAP_DEAD12 250
> +
> +#define SVGA3D_DEVCAP_DXFMT_BC6H_TYPELESS 251
> +#define SVGA3D_DEVCAP_DXFMT_BC6H_UF16 252
> +#define SVGA3D_DEVCAP_DXFMT_BC6H_SF16 253
> +#define SVGA3D_DEVCAP_DXFMT_BC7_TYPELESS 254
> +#define SVGA3D_DEVCAP_DXFMT_BC7_UNORM 255
> +#define SVGA3D_DEVCAP_DXFMT_BC7_UNORM_SRGB 256
> +
> +#define SVGA3D_DEVCAP_DEAD13 257
> +
> +#define SVGA3D_DEVCAP_SM5 258
> +#define SVGA3D_DEVCAP_MULTISAMPLE_8X 259
> +
> +#define SVGA3D_DEVCAP_MAX 262
> +
> +#define SVGA3D_DXFMT_SUPPORTED (1 << 0)
> +#define SVGA3D_DXFMT_SHADER_SAMPLE (1 << 1)
> +#define SVGA3D_DXFMT_COLOR_RENDERTARGET (1 << 2)
> +#define SVGA3D_DXFMT_DEPTH_RENDERTARGET (1 << 3)
> +#define SVGA3D_DXFMT_BLENDABLE (1 << 4)
> +#define SVGA3D_DXFMT_MIPS (1 << 5)
> +#define SVGA3D_DXFMT_ARRAY (1 << 6)
> +#define SVGA3D_DXFMT_VOLUME (1 << 7)
> +#define SVGA3D_DXFMT_DX_VERTEX_BUFFER (1 << 8)
> +#define SVGA3D_DXFMT_MULTISAMPLE (1 << 9)
> +#define SVGA3D_DXFMT_MAX (1 << 10)
> +
> +typedef union {
> +	SVGA3dBool b;
> +	uint32 u;
> +	int32 i;
> +	float f;
> +} SVGA3dDevCapResult;
> +
> +#endif
> diff --git a/lib/svga/svga3d_dx.h b/lib/svga/svga3d_dx.h
> new file mode 100644
> index 00000000..a24aae85
> --- /dev/null
> +++ b/lib/svga/svga3d_dx.h
> @@ -0,0 +1,1722 @@
> +/**********************************************************
> + * Copyright 2012-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga3d_dx.h --
> + *
> + *    SVGA 3d hardware definitions for DX10 support.
> + */
> +
> +#ifndef _SVGA3D_DX_H_
> +#define _SVGA3D_DX_H_
> +
> +#include "svga_reg.h"
> +#include "svga3d_limits.h"
> +#include "svga3d_types.h"
> +
> +#define SVGA3D_INPUT_MIN 0
> +#define SVGA3D_INPUT_PER_VERTEX_DATA 0
> +#define SVGA3D_INPUT_PER_INSTANCE_DATA 1
> +#define SVGA3D_INPUT_MAX 2
> +typedef uint32 SVGA3dInputClassification;
> +
> +#define SVGA3D_COLOR_WRITE_ENABLE_RED (1 << 0)
> +#define SVGA3D_COLOR_WRITE_ENABLE_GREEN (1 << 1)
> +#define SVGA3D_COLOR_WRITE_ENABLE_BLUE (1 << 2)
> +#define SVGA3D_COLOR_WRITE_ENABLE_ALPHA (1 << 3)
> +#define SVGA3D_COLOR_WRITE_ENABLE_ALL                                      \
> +	(SVGA3D_COLOR_WRITE_ENABLE_RED | SVGA3D_COLOR_WRITE_ENABLE_GREEN | \
> +	 SVGA3D_COLOR_WRITE_ENABLE_BLUE | SVGA3D_COLOR_WRITE_ENABLE_ALPHA)
> +typedef uint8 SVGA3dColorWriteEnable;
> +
> +#define SVGA3D_DEPTH_WRITE_MASK_ZERO 0
> +#define SVGA3D_DEPTH_WRITE_MASK_ALL 1
> +typedef uint8 SVGA3dDepthWriteMask;
> +
> +#define SVGA3D_FILTER_MIP_LINEAR (1 << 0)
> +#define SVGA3D_FILTER_MAG_LINEAR (1 << 2)
> +#define SVGA3D_FILTER_MIN_LINEAR (1 << 4)
> +#define SVGA3D_FILTER_ANISOTROPIC (1 << 6)
> +#define SVGA3D_FILTER_COMPARE (1 << 7)
> +typedef uint32 SVGA3dFilter;
> +
> +#define SVGA3D_CULL_INVALID 0
> +#define SVGA3D_CULL_MIN 1
> +#define SVGA3D_CULL_NONE 1
> +#define SVGA3D_CULL_FRONT 2
> +#define SVGA3D_CULL_BACK 3
> +#define SVGA3D_CULL_MAX 4
> +typedef uint8 SVGA3dCullMode;
> +
> +#define SVGA3D_COMPARISON_INVALID 0
> +#define SVGA3D_COMPARISON_MIN 1
> +#define SVGA3D_COMPARISON_NEVER 1
> +#define SVGA3D_COMPARISON_LESS 2
> +#define SVGA3D_COMPARISON_EQUAL 3
> +#define SVGA3D_COMPARISON_LESS_EQUAL 4
> +#define SVGA3D_COMPARISON_GREATER 5
> +#define SVGA3D_COMPARISON_NOT_EQUAL 6
> +#define SVGA3D_COMPARISON_GREATER_EQUAL 7
> +#define SVGA3D_COMPARISON_ALWAYS 8
> +#define SVGA3D_COMPARISON_MAX 9
> +typedef uint8 SVGA3dComparisonFunc;
> +
> +#define SVGA3D_MULTISAMPLE_RAST_DISABLE 0
> +#define SVGA3D_MULTISAMPLE_RAST_ENABLE 1
> +#define SVGA3D_MULTISAMPLE_RAST_DX_MAX 1
> +#define SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE 2
> +#define SVGA3D_MULTISAMPLE_RAST_MAX 2
> +typedef uint8 SVGA3dMultisampleRastEnable;
> +
> +#define SVGA3D_DX_MAX_VERTEXBUFFERS 32
> +#define SVGA3D_DX_MAX_VERTEXINPUTREGISTERS 16
> +#define SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS 32
> +#define SVGA3D_DX_MAX_SOTARGETS 4
> +#define SVGA3D_DX_MAX_SRVIEWS 128
> +#define SVGA3D_DX_MAX_CONSTBUFFERS 16
> +#define SVGA3D_DX_MAX_SAMPLERS 16
> +#define SVGA3D_DX_MAX_CLASS_INSTANCES 253
> +
> +#define SVGA3D_DX_MAX_CONSTBUF_BINDING_SIZE (4096 * 4 * (uint32)sizeof(uint32))
> +
> +typedef uint32 SVGA3dShaderResourceViewId;
> +typedef uint32 SVGA3dRenderTargetViewId;
> +typedef uint32 SVGA3dDepthStencilViewId;
> +typedef uint32 SVGA3dUAViewId;
> +
> +typedef uint32 SVGA3dShaderId;
> +typedef uint32 SVGA3dElementLayoutId;
> +typedef uint32 SVGA3dSamplerId;
> +typedef uint32 SVGA3dBlendStateId;
> +typedef uint32 SVGA3dDepthStencilStateId;
> +typedef uint32 SVGA3dRasterizerStateId;
> +typedef uint32 SVGA3dQueryId;
> +typedef uint32 SVGA3dStreamOutputId;
> +
> +typedef union {
> +	struct {
> +		uint32 r;
> +		uint32 g;
> +		uint32 b;
> +		uint32 a;
> +	};
> +
> +	uint32 value[4];
> +} SVGA3dRGBAUint32;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 cid;
> +	SVGAMobId mobid;
> +} SVGAOTableDXContextEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineContext {
> +	uint32 cid;
> +} SVGA3dCmdDXDefineContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyContext {
> +	uint32 cid;
> +} SVGA3dCmdDXDestroyContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBindContext {
> +	uint32 cid;
> +	SVGAMobId mobid;
> +	uint32 validContents;
> +} SVGA3dCmdDXBindContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXReadbackContext {
> +	uint32 cid;
> +} SVGA3dCmdDXReadbackContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXInvalidateContext {
> +	uint32 cid;
> +} SVGA3dCmdDXInvalidateContext;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetSingleConstantBuffer {
> +	uint32 slot;
> +	SVGA3dShaderType type;
> +	SVGA3dSurfaceId sid;
> +	uint32 offsetInBytes;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDXSetSingleConstantBuffer;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetShaderResources {
> +	uint32 startView;
> +	SVGA3dShaderType type;
> +
> +} SVGA3dCmdDXSetShaderResources;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetShader {
> +	SVGA3dShaderId shaderId;
> +	SVGA3dShaderType type;
> +} SVGA3dCmdDXSetShader;
> +#pragma pack(pop)
> +
> +typedef union {
> +	struct {
> +		uint32 cbOffset : 12;
> +		uint32 cbId : 4;
> +		uint32 baseSamp : 4;
> +		uint32 baseTex : 7;
> +		uint32 reserved : 5;
> +	};
> +	uint32 value;
> +} SVGA3dIfaceData;
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetShaderIface {
> +	SVGA3dShaderType type;
> +	uint32 numClassInstances;
> +	uint32 index;
> +	uint32 iface;
> +	SVGA3dIfaceData data;
> +} SVGA3dCmdDXSetShaderIface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBindShaderIface {
> +	uint32 cid;
> +	SVGAMobId mobid;
> +	uint32 offsetInBytes;
> +} SVGA3dCmdDXBindShaderIface;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetSamplers {
> +	uint32 startSampler;
> +	SVGA3dShaderType type;
> +
> +} SVGA3dCmdDXSetSamplers;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDraw {
> +	uint32 vertexCount;
> +	uint32 startVertexLocation;
> +} SVGA3dCmdDXDraw;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDrawIndexed {
> +	uint32 indexCount;
> +	uint32 startIndexLocation;
> +	int32 baseVertexLocation;
> +} SVGA3dCmdDXDrawIndexed;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDrawInstanced {
> +	uint32 vertexCountPerInstance;
> +	uint32 instanceCount;
> +	uint32 startVertexLocation;
> +	uint32 startInstanceLocation;
> +} SVGA3dCmdDXDrawInstanced;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDrawIndexedInstanced {
> +	uint32 indexCountPerInstance;
> +	uint32 instanceCount;
> +	uint32 startIndexLocation;
> +	int32 baseVertexLocation;
> +	uint32 startInstanceLocation;
> +} SVGA3dCmdDXDrawIndexedInstanced;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDrawIndexedInstancedIndirect {
> +	SVGA3dSurfaceId argsBufferSid;
> +	uint32 byteOffsetForArgs;
> +} SVGA3dCmdDXDrawIndexedInstancedIndirect;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDrawInstancedIndirect {
> +	SVGA3dSurfaceId argsBufferSid;
> +	uint32 byteOffsetForArgs;
> +} SVGA3dCmdDXDrawInstancedIndirect;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDrawAuto {
> +	uint32 pad0;
> +} SVGA3dCmdDXDrawAuto;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDispatch {
> +	uint32 threadGroupCountX;
> +	uint32 threadGroupCountY;
> +	uint32 threadGroupCountZ;
> +} SVGA3dCmdDXDispatch;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDispatchIndirect {
> +	SVGA3dSurfaceId argsBufferSid;
> +	uint32 byteOffsetForArgs;
> +} SVGA3dCmdDXDispatchIndirect;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetInputLayout {
> +	SVGA3dElementLayoutId elementLayoutId;
> +} SVGA3dCmdDXSetInputLayout;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dVertexBuffer {
> +	SVGA3dSurfaceId sid;
> +	uint32 stride;
> +	uint32 offset;
> +} SVGA3dVertexBuffer;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetVertexBuffers {
> +	uint32 startBuffer;
> +
> +} SVGA3dCmdDXSetVertexBuffers;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dVertexBuffer_v2 {
> +	SVGA3dSurfaceId sid;
> +	uint32 stride;
> +	uint32 offset;
> +	uint32 sizeInBytes;
> +} SVGA3dVertexBuffer_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetVertexBuffers_v2 {
> +	uint32 startBuffer;
> +
> +} SVGA3dCmdDXSetVertexBuffers_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dVertexBufferOffsetAndSize {
> +	uint32 stride;
> +	uint32 offset;
> +	uint32 sizeInBytes;
> +} SVGA3dVertexBufferOffsetAndSize;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetVertexBuffersOffsetAndSize {
> +	uint32 startBuffer;
> +
> +} SVGA3dCmdDXSetVertexBuffersOffsetAndSize;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetIndexBuffer {
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	uint32 offset;
> +} SVGA3dCmdDXSetIndexBuffer;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetIndexBuffer_v2 {
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	uint32 offset;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDXSetIndexBuffer_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetIndexBufferOffsetAndSize {
> +	SVGA3dSurfaceFormat format;
> +	uint32 offset;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDXSetIndexBufferOffsetAndSize;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetTopology {
> +	SVGA3dPrimitiveType topology;
> +} SVGA3dCmdDXSetTopology;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetRenderTargets {
> +	SVGA3dDepthStencilViewId depthStencilViewId;
> +
> +} SVGA3dCmdDXSetRenderTargets;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetBlendState {
> +	SVGA3dBlendStateId blendId;
> +	float blendFactor[4];
> +	uint32 sampleMask;
> +} SVGA3dCmdDXSetBlendState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetDepthStencilState {
> +	SVGA3dDepthStencilStateId depthStencilId;
> +	uint32 stencilRef;
> +} SVGA3dCmdDXSetDepthStencilState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetRasterizerState {
> +	SVGA3dRasterizerStateId rasterizerId;
> +} SVGA3dCmdDXSetRasterizerState;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0)
> +typedef uint32 SVGA3dDXQueryFlags;
> +
> +#define SVGADX_QDSTATE_INVALID ((uint8)-1)
> +#define SVGADX_QDSTATE_MIN 0
> +#define SVGADX_QDSTATE_IDLE 0
> +#define SVGADX_QDSTATE_ACTIVE 1
> +#define SVGADX_QDSTATE_PENDING 2
> +#define SVGADX_QDSTATE_FINISHED 3
> +#define SVGADX_QDSTATE_MAX 4
> +typedef uint8 SVGADXQueryDeviceState;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dQueryTypeUint8 type;
> +	uint16 pad0;
> +	SVGADXQueryDeviceState state;
> +	SVGA3dDXQueryFlags flags;
> +	SVGAMobId mobid;
> +	uint32 offset;
> +} SVGACOTableDXQueryEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineQuery {
> +	SVGA3dQueryId queryId;
> +	SVGA3dQueryType type;
> +	SVGA3dDXQueryFlags flags;
> +} SVGA3dCmdDXDefineQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyQuery {
> +	SVGA3dQueryId queryId;
> +} SVGA3dCmdDXDestroyQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBindQuery {
> +	SVGA3dQueryId queryId;
> +	SVGAMobId mobid;
> +} SVGA3dCmdDXBindQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetQueryOffset {
> +	SVGA3dQueryId queryId;
> +	uint32 mobOffset;
> +} SVGA3dCmdDXSetQueryOffset;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBeginQuery {
> +	SVGA3dQueryId queryId;
> +} SVGA3dCmdDXBeginQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXEndQuery {
> +	SVGA3dQueryId queryId;
> +} SVGA3dCmdDXEndQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXReadbackQuery {
> +	SVGA3dQueryId queryId;
> +} SVGA3dCmdDXReadbackQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXMoveQuery {
> +	SVGA3dQueryId queryId;
> +	SVGAMobId mobid;
> +	uint32 mobOffset;
> +} SVGA3dCmdDXMoveQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBindAllQuery {
> +	uint32 cid;
> +	SVGAMobId mobid;
> +} SVGA3dCmdDXBindAllQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXReadbackAllQuery {
> +	uint32 cid;
> +} SVGA3dCmdDXReadbackAllQuery;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetPredication {
> +	SVGA3dQueryId queryId;
> +	uint32 predicateValue;
> +} SVGA3dCmdDXSetPredication;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct MKS3dDXSOState {
> +	uint32 offset;
> +	uint32 intOffset;
> +	uint32 vertexCount;
> +	uint32 dead;
> +} SVGA3dDXSOState;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DX_SO_OFFSET_APPEND ((uint32)~0u)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dSoTarget {
> +	SVGA3dSurfaceId sid;
> +	uint32 offset;
> +	uint32 sizeInBytes;
> +} SVGA3dSoTarget;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetSOTargets {
> +	uint32 pad0;
> +
> +} SVGA3dCmdDXSetSOTargets;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dViewport {
> +	float x;
> +	float y;
> +	float width;
> +	float height;
> +	float minDepth;
> +	float maxDepth;
> +} SVGA3dViewport;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetViewports {
> +	uint32 pad0;
> +
> +} SVGA3dCmdDXSetViewports;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DX_MAX_VIEWPORTS 16
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetScissorRects {
> +	uint32 pad0;
> +
> +} SVGA3dCmdDXSetScissorRects;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DX_MAX_SCISSORRECTS 16
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXClearRenderTargetView {
> +	SVGA3dRenderTargetViewId renderTargetViewId;
> +	SVGA3dRGBAFloat rgba;
> +} SVGA3dCmdDXClearRenderTargetView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXClearDepthStencilView {
> +	uint16 flags;
> +	uint16 stencil;
> +	SVGA3dDepthStencilViewId depthStencilViewId;
> +	float depth;
> +} SVGA3dCmdDXClearDepthStencilView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredCopyRegion {
> +	SVGA3dSurfaceId dstSid;
> +	uint32 dstSubResource;
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dCopyBox box;
> +} SVGA3dCmdDXPredCopyRegion;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredStagingCopyRegion {
> +	SVGA3dSurfaceId dstSid;
> +	uint32 dstSubResource;
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dCopyBox box;
> +	uint8 readback;
> +	uint8 unsynchronized;
> +	uint8 mustBeZero[2];
> +} SVGA3dCmdDXPredStagingCopyRegion;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredCopy {
> +	SVGA3dSurfaceId dstSid;
> +	SVGA3dSurfaceId srcSid;
> +} SVGA3dCmdDXPredCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredConvertRegion {
> +	SVGA3dSurfaceId dstSid;
> +	uint32 dstSubResource;
> +	SVGA3dBox destBox;
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dBox srcBox;
> +} SVGA3dCmdDXPredConvertRegion;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredStagingConvertRegion {
> +	SVGA3dSurfaceId dstSid;
> +	uint32 dstSubResource;
> +	SVGA3dBox destBox;
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dBox srcBox;
> +	uint8 readback;
> +	uint8 unsynchronized;
> +	uint8 mustBeZero[2];
> +} SVGA3dCmdDXPredStagingConvertRegion;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredConvert {
> +	SVGA3dSurfaceId dstSid;
> +	SVGA3dSurfaceId srcSid;
> +} SVGA3dCmdDXPredConvert;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredStagingConvert {
> +	SVGA3dSurfaceId dstSid;
> +	SVGA3dSurfaceId srcSid;
> +	uint8 readback;
> +	uint8 unsynchronized;
> +	uint8 mustBeZero[2];
> +} SVGA3dCmdDXPredStagingConvert;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBufferCopy {
> +	SVGA3dSurfaceId dest;
> +	SVGA3dSurfaceId src;
> +	uint32 destX;
> +	uint32 srcX;
> +	uint32 width;
> +} SVGA3dCmdDXBufferCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXStagingBufferCopy {
> +	SVGA3dSurfaceId dest;
> +	SVGA3dSurfaceId src;
> +	uint32 destX;
> +	uint32 srcX;
> +	uint32 width;
> +	uint8 readback;
> +	uint8 unsynchronized;
> +	uint8 mustBeZero[2];
> +} SVGA3dCmdDXStagingBufferCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceId dstSid;
> +	uint32 dstSubResource;
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dSurfaceFormat copyFormat;
> +} SVGA3dCmdDXResolveCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceId dstSid;
> +	uint32 dstSubResource;
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dSurfaceFormat copyFormat;
> +} SVGA3dCmdDXPredResolveCopy;
> +#pragma pack(pop)
> +
> +typedef uint32 SVGA3dDXPresentBltMode;
> +#define SVGADX_PRESENTBLT_LINEAR (1 << 0)
> +#define SVGADX_PRESENTBLT_FORCE_SRC_SRGB (1 << 1)
> +#define SVGADX_PRESENTBLT_FORCE_SRC_XRBIAS (1 << 2)
> +#define SVGADX_PRESENTBLT_MODE_MAX (1 << 3)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPresentBlt {
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dSurfaceId dstSid;
> +	uint32 destSubResource;
> +	SVGA3dBox boxSrc;
> +	SVGA3dBox boxDest;
> +	SVGA3dDXPresentBltMode mode;
> +} SVGA3dCmdDXPresentBlt;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXGenMips {
> +	SVGA3dShaderResourceViewId shaderResourceViewId;
> +} SVGA3dCmdDXGenMips;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXUpdateSubResource {
> +	SVGA3dSurfaceId sid;
> +	uint32 subResource;
> +	SVGA3dBox box;
> +} SVGA3dCmdDXUpdateSubResource;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXReadbackSubResource {
> +	SVGA3dSurfaceId sid;
> +	uint32 subResource;
> +} SVGA3dCmdDXReadbackSubResource;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXInvalidateSubResource {
> +	SVGA3dSurfaceId sid;
> +	uint32 subResource;
> +} SVGA3dCmdDXInvalidateSubResource;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXTransferFromBuffer {
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcOffset;
> +	uint32 srcPitch;
> +	uint32 srcSlicePitch;
> +	SVGA3dSurfaceId destSid;
> +	uint32 destSubResource;
> +	SVGA3dBox destBox;
> +} SVGA3dCmdDXTransferFromBuffer;
> +#pragma pack(pop)
> +
> +#define SVGA3D_TRANSFER_TO_BUFFER_READBACK (1 << 0)
> +#define SVGA3D_TRANSFER_TO_BUFFER_FLAGS_MASK (1 << 0)
> +typedef uint32 SVGA3dTransferToBufferFlags;
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXTransferToBuffer {
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcSubResource;
> +	SVGA3dBox srcBox;
> +	SVGA3dSurfaceId destSid;
> +	uint32 destOffset;
> +	uint32 destPitch;
> +	uint32 destSlicePitch;
> +	SVGA3dTransferToBufferFlags flags;
> +} SVGA3dCmdDXTransferToBuffer;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredTransferFromBuffer {
> +	SVGA3dSurfaceId srcSid;
> +	uint32 srcOffset;
> +	uint32 srcPitch;
> +	uint32 srcSlicePitch;
> +	SVGA3dSurfaceId destSid;
> +	uint32 destSubResource;
> +	SVGA3dBox destBox;
> +} SVGA3dCmdDXPredTransferFromBuffer;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSurfaceCopyAndReadback {
> +	SVGA3dSurfaceId srcSid;
> +	SVGA3dSurfaceId destSid;
> +	SVGA3dCopyBox box;
> +} SVGA3dCmdDXSurfaceCopyAndReadback;
> +#pragma pack(pop)
> +
> +typedef uint32 SVGADXHintId;
> +#define SVGA_DX_HINT_NONE 0
> +#define SVGA_DX_HINT_PREFETCH_OBJECT 1
> +#define SVGA_DX_HINT_PREEVICT_OBJECT 2
> +#define SVGA_DX_HINT_PREFETCH_COBJECT 3
> +#define SVGA_DX_HINT_PREEVICT_COBJECT 4
> +#define SVGA_DX_HINT_MAX 5
> +
> +#pragma pack(push, 1)
> +typedef struct SVGAObjectRef {
> +	SVGAOTableType type;
> +	uint32 id;
> +} SVGAObjectRef;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGACObjectRef {
> +	SVGACOTableType type;
> +	uint32 cid;
> +	uint32 id;
> +} SVGACObjectRef;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXHint {
> +	SVGADXHintId hintId;
> +
> +} SVGA3dCmdDXHint;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBufferUpdate {
> +	SVGA3dSurfaceId sid;
> +	uint32 x;
> +	uint32 width;
> +} SVGA3dCmdDXBufferUpdate;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetConstantBufferOffset {
> +	uint32 slot;
> +	uint32 offsetInBytes;
> +} SVGA3dCmdDXSetConstantBufferOffset;
> +#pragma pack(pop)
> +
> +typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetVSConstantBufferOffset;
> +
> +typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetPSConstantBufferOffset;
> +
> +typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetGSConstantBufferOffset;
> +
> +typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetHSConstantBufferOffset;
> +
> +typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetDSConstantBufferOffset;
> +
> +typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetCSConstantBufferOffset;
> +
> +#define SVGA3D_BUFFEREX_SRV_RAW (1 << 0)
> +#define SVGA3D_BUFFEREX_SRV_FLAGS_MAX (1 << 1)
> +#define SVGA3D_BUFFEREX_SRV_FLAGS_MASK (SVGA3D_BUFFEREX_SRV_FLAGS_MAX - 1)
> +typedef uint32 SVGA3dBufferExFlags;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	union {
> +		struct {
> +			uint32 firstElement;
> +			uint32 numElements;
> +			uint32 pad0;
> +			uint32 pad1;
> +		} buffer;
> +		struct {
> +			uint32 mostDetailedMip;
> +			uint32 firstArraySlice;
> +			uint32 mipLevels;
> +			uint32 arraySize;
> +		} tex;
> +		struct {
> +			uint32 firstElement;
> +			uint32 numElements;
> +			SVGA3dBufferExFlags flags;
> +			uint32 pad0;
> +		} bufferex;
> +	};
> +} SVGA3dShaderResourceViewDesc;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +	SVGA3dShaderResourceViewDesc desc;
> +	uint32 pad;
> +} SVGACOTableDXSRViewEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineShaderResourceView {
> +	SVGA3dShaderResourceViewId shaderResourceViewId;
> +
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +
> +	SVGA3dShaderResourceViewDesc desc;
> +} SVGA3dCmdDXDefineShaderResourceView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyShaderResourceView {
> +	SVGA3dShaderResourceViewId shaderResourceViewId;
> +} SVGA3dCmdDXDestroyShaderResourceView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dRenderTargetViewDesc {
> +	union {
> +		struct {
> +			uint32 firstElement;
> +			uint32 numElements;
> +			uint32 padding0;
> +		} buffer;
> +		struct {
> +			uint32 mipSlice;
> +			uint32 firstArraySlice;
> +			uint32 arraySize;
> +		} tex;
> +		struct {
> +			uint32 mipSlice;
> +			uint32 firstW;
> +			uint32 wSize;
> +		} tex3D;
> +	};
> +} SVGA3dRenderTargetViewDesc;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +	SVGA3dRenderTargetViewDesc desc;
> +	uint32 pad[2];
> +} SVGACOTableDXRTViewEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineRenderTargetView {
> +	SVGA3dRenderTargetViewId renderTargetViewId;
> +
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +
> +	SVGA3dRenderTargetViewDesc desc;
> +} SVGA3dCmdDXDefineRenderTargetView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyRenderTargetView {
> +	SVGA3dRenderTargetViewId renderTargetViewId;
> +} SVGA3dCmdDXDestroyRenderTargetView;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_DEPTH 0x01
> +#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_STENCIL 0x02
> +#define SVGA3D_DXDSVIEW_CREATE_FLAG_MASK 0x03
> +typedef uint8 SVGA3DCreateDSViewFlags;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +	uint32 mipSlice;
> +	uint32 firstArraySlice;
> +	uint32 arraySize;
> +	SVGA3DCreateDSViewFlags flags;
> +	uint8 pad0;
> +	uint16 pad1;
> +	uint32 pad2;
> +} SVGACOTableDXDSViewEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineDepthStencilView {
> +	SVGA3dDepthStencilViewId depthStencilViewId;
> +
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +	uint32 mipSlice;
> +	uint32 firstArraySlice;
> +	uint32 arraySize;
> +	SVGA3DCreateDSViewFlags flags;
> +	uint8 pad0;
> +	uint16 pad1;
> +} SVGA3dCmdDXDefineDepthStencilView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineDepthStencilView_v2 {
> +	SVGA3dDepthStencilViewId depthStencilViewId;
> +
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +	uint32 mipSlice;
> +	uint32 firstArraySlice;
> +	uint32 arraySize;
> +	SVGA3DCreateDSViewFlags flags;
> +	uint8 pad0;
> +	uint16 pad1;
> +} SVGA3dCmdDXDefineDepthStencilView_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyDepthStencilView {
> +	SVGA3dDepthStencilViewId depthStencilViewId;
> +} SVGA3dCmdDXDestroyDepthStencilView;
> +#pragma pack(pop)
> +
> +#define SVGA3D_UABUFFER_RAW (1 << 0)
> +#define SVGA3D_UABUFFER_APPEND (1 << 1)
> +#define SVGA3D_UABUFFER_COUNTER (1 << 2)
> +typedef uint32 SVGA3dUABufferFlags;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	union {
> +		struct {
> +			uint32 firstElement;
> +			uint32 numElements;
> +			SVGA3dUABufferFlags flags;
> +			uint32 padding0;
> +			uint32 padding1;
> +		} buffer;
> +		struct {
> +			uint32 mipSlice;
> +			uint32 firstArraySlice;
> +			uint32 arraySize;
> +			uint32 padding0;
> +			uint32 padding1;
> +		} tex;
> +		struct {
> +			uint32 mipSlice;
> +			uint32 firstW;
> +			uint32 wSize;
> +			uint32 padding0;
> +			uint32 padding1;
> +		} tex3D;
> +	};
> +} SVGA3dUAViewDesc;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +	SVGA3dUAViewDesc desc;
> +	uint32 structureCount;
> +	uint32 pad[7];
> +} SVGACOTableDXUAViewEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineUAView {
> +	SVGA3dUAViewId uaViewId;
> +
> +	SVGA3dSurfaceId sid;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dResourceType resourceDimension;
> +
> +	SVGA3dUAViewDesc desc;
> +} SVGA3dCmdDXDefineUAView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyUAView {
> +	SVGA3dUAViewId uaViewId;
> +} SVGA3dCmdDXDestroyUAView;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXClearUAViewUint {
> +	SVGA3dUAViewId uaViewId;
> +	SVGA3dRGBAUint32 value;
> +} SVGA3dCmdDXClearUAViewUint;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXClearUAViewFloat {
> +	SVGA3dUAViewId uaViewId;
> +	SVGA3dRGBAFloat value;
> +} SVGA3dCmdDXClearUAViewFloat;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXCopyStructureCount {
> +	SVGA3dUAViewId srcUAViewId;
> +	SVGA3dSurfaceId destSid;
> +	uint32 destByteOffset;
> +} SVGA3dCmdDXCopyStructureCount;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetStructureCount {
> +	SVGA3dUAViewId uaViewId;
> +	uint32 structureCount;
> +} SVGA3dCmdDXSetStructureCount;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetUAViews {
> +	uint32 uavSpliceIndex;
> +
> +} SVGA3dCmdDXSetUAViews;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetCSUAViews {
> +	uint32 startIndex;
> +
> +} SVGA3dCmdDXSetCSUAViews;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dInputElementDesc {
> +	uint32 inputSlot;
> +	uint32 alignedByteOffset;
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dInputClassification inputSlotClass;
> +	uint32 instanceDataStepRate;
> +	uint32 inputRegister;
> +} SVGA3dInputElementDesc;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 elid;
> +	uint32 numDescs;
> +	SVGA3dInputElementDesc descs[32];
> +	uint32 pad[62];
> +} SVGACOTableDXElementLayoutEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineElementLayout {
> +	SVGA3dElementLayoutId elementLayoutId;
> +
> +} SVGA3dCmdDXDefineElementLayout;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyElementLayout {
> +	SVGA3dElementLayoutId elementLayoutId;
> +} SVGA3dCmdDXDestroyElementLayout;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DX_MAX_RENDER_TARGETS 8
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dDXBlendStatePerRT {
> +	uint8 blendEnable;
> +	uint8 srcBlend;
> +	uint8 destBlend;
> +	uint8 blendOp;
> +	uint8 srcBlendAlpha;
> +	uint8 destBlendAlpha;
> +	uint8 blendOpAlpha;
> +	SVGA3dColorWriteEnable renderTargetWriteMask;
> +	uint8 logicOpEnable;
> +	uint8 logicOp;
> +	uint16 pad0;
> +} SVGA3dDXBlendStatePerRT;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint8 alphaToCoverageEnable;
> +	uint8 independentBlendEnable;
> +	uint16 pad0;
> +	SVGA3dDXBlendStatePerRT perRT[SVGA3D_DX_MAX_RENDER_TARGETS];
> +	uint32 pad1[7];
> +} SVGACOTableDXBlendStateEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineBlendState {
> +	SVGA3dBlendStateId blendId;
> +	uint8 alphaToCoverageEnable;
> +	uint8 independentBlendEnable;
> +	uint16 pad0;
> +	SVGA3dDXBlendStatePerRT perRT[SVGA3D_DX_MAX_RENDER_TARGETS];
> +} SVGA3dCmdDXDefineBlendState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyBlendState {
> +	SVGA3dBlendStateId blendId;
> +} SVGA3dCmdDXDestroyBlendState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint8 depthEnable;
> +	SVGA3dDepthWriteMask depthWriteMask;
> +	SVGA3dComparisonFunc depthFunc;
> +	uint8 stencilEnable;
> +	uint8 frontEnable;
> +	uint8 backEnable;
> +	uint8 stencilReadMask;
> +	uint8 stencilWriteMask;
> +
> +	uint8 frontStencilFailOp;
> +	uint8 frontStencilDepthFailOp;
> +	uint8 frontStencilPassOp;
> +	SVGA3dComparisonFunc frontStencilFunc;
> +
> +	uint8 backStencilFailOp;
> +	uint8 backStencilDepthFailOp;
> +	uint8 backStencilPassOp;
> +	SVGA3dComparisonFunc backStencilFunc;
> +} SVGACOTableDXDepthStencilEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineDepthStencilState {
> +	SVGA3dDepthStencilStateId depthStencilId;
> +
> +	uint8 depthEnable;
> +	SVGA3dDepthWriteMask depthWriteMask;
> +	SVGA3dComparisonFunc depthFunc;
> +	uint8 stencilEnable;
> +	uint8 frontEnable;
> +	uint8 backEnable;
> +	uint8 stencilReadMask;
> +	uint8 stencilWriteMask;
> +
> +	uint8 frontStencilFailOp;
> +	uint8 frontStencilDepthFailOp;
> +	uint8 frontStencilPassOp;
> +	SVGA3dComparisonFunc frontStencilFunc;
> +
> +	uint8 backStencilFailOp;
> +	uint8 backStencilDepthFailOp;
> +	uint8 backStencilPassOp;
> +	SVGA3dComparisonFunc backStencilFunc;
> +} SVGA3dCmdDXDefineDepthStencilState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyDepthStencilState {
> +	SVGA3dDepthStencilStateId depthStencilId;
> +} SVGA3dCmdDXDestroyDepthStencilState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint8 fillMode;
> +	SVGA3dCullMode cullMode;
> +	uint8 frontCounterClockwise;
> +	uint8 provokingVertexLast;
> +	int32 depthBias;
> +	float depthBiasClamp;
> +	float slopeScaledDepthBias;
> +	uint8 depthClipEnable;
> +	uint8 scissorEnable;
> +	SVGA3dMultisampleRastEnable multisampleEnable;
> +	uint8 antialiasedLineEnable;
> +	float lineWidth;
> +	uint8 lineStippleEnable;
> +	uint8 lineStippleFactor;
> +	uint16 lineStipplePattern;
> +	uint8 forcedSampleCount;
> +	uint8 mustBeZero[3];
> +} SVGACOTableDXRasterizerStateEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineRasterizerState {
> +	SVGA3dRasterizerStateId rasterizerId;
> +
> +	uint8 fillMode;
> +	SVGA3dCullMode cullMode;
> +	uint8 frontCounterClockwise;
> +	uint8 provokingVertexLast;
> +	int32 depthBias;
> +	float depthBiasClamp;
> +	float slopeScaledDepthBias;
> +	uint8 depthClipEnable;
> +	uint8 scissorEnable;
> +	SVGA3dMultisampleRastEnable multisampleEnable;
> +	uint8 antialiasedLineEnable;
> +	float lineWidth;
> +	uint8 lineStippleEnable;
> +	uint8 lineStippleFactor;
> +	uint16 lineStipplePattern;
> +} SVGA3dCmdDXDefineRasterizerState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineRasterizerState_v2 {
> +	SVGA3dRasterizerStateId rasterizerId;
> +
> +	uint8 fillMode;
> +	SVGA3dCullMode cullMode;
> +	uint8 frontCounterClockwise;
> +	uint8 provokingVertexLast;
> +	int32 depthBias;
> +	float depthBiasClamp;
> +	float slopeScaledDepthBias;
> +	uint8 depthClipEnable;
> +	uint8 scissorEnable;
> +	SVGA3dMultisampleRastEnable multisampleEnable;
> +	uint8 antialiasedLineEnable;
> +	float lineWidth;
> +	uint8 lineStippleEnable;
> +	uint8 lineStippleFactor;
> +	uint16 lineStipplePattern;
> +	uint32 forcedSampleCount;
> +} SVGA3dCmdDXDefineRasterizerState_v2;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyRasterizerState {
> +	SVGA3dRasterizerStateId rasterizerId;
> +} SVGA3dCmdDXDestroyRasterizerState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGA3dFilter filter;
> +	uint8 addressU;
> +	uint8 addressV;
> +	uint8 addressW;
> +	uint8 pad0;
> +	float mipLODBias;
> +	uint8 maxAnisotropy;
> +	SVGA3dComparisonFunc comparisonFunc;
> +	uint16 pad1;
> +	SVGA3dRGBAFloat borderColor;
> +	float minLOD;
> +	float maxLOD;
> +	uint32 pad2[6];
> +} SVGACOTableDXSamplerEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineSamplerState {
> +	SVGA3dSamplerId samplerId;
> +	SVGA3dFilter filter;
> +	uint8 addressU;
> +	uint8 addressV;
> +	uint8 addressW;
> +	uint8 pad0;
> +	float mipLODBias;
> +	uint8 maxAnisotropy;
> +	SVGA3dComparisonFunc comparisonFunc;
> +	uint16 pad1;
> +	SVGA3dRGBAFloat borderColor;
> +	float minLOD;
> +	float maxLOD;
> +} SVGA3dCmdDXDefineSamplerState;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroySamplerState {
> +	SVGA3dSamplerId samplerId;
> +} SVGA3dCmdDXDestroySamplerState;
> +#pragma pack(pop)
> +
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED 0
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_POSITION 1
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_CLIP_DISTANCE 2
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_CULL_DISTANCE 3
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_RENDER_TARGET_ARRAY_INDEX 4
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_VIEWPORT_ARRAY_INDEX 5
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_VERTEX_ID 6
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_PRIMITIVE_ID 7
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_INSTANCE_ID 8
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_IS_FRONT_FACE 9
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_SAMPLE_INDEX 10
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR 11
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR 12
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR 13
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR 14
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR 15
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR 16
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR 17
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR 18
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR 19
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_INSIDE_TESSFACTOR 20
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DETAIL_TESSFACTOR 21
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DENSITY_TESSFACTOR 22
> +#define SVGADX_SIGNATURE_SEMANTIC_NAME_MAX 23
> +typedef uint32 SVGA3dDXSignatureSemanticName;
> +
> +#define SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN 0
> +typedef uint32 SVGA3dDXSignatureRegisterComponentType;
> +
> +#define SVGADX_SIGNATURE_MIN_PRECISION_DEFAULT 0
> +typedef uint32 SVGA3dDXSignatureMinPrecision;
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dDXSignatureEntry {
> +	uint32 registerIndex;
> +	SVGA3dDXSignatureSemanticName semanticName;
> +	uint32 mask;
> +	SVGA3dDXSignatureRegisterComponentType componentType;
> +	SVGA3dDXSignatureMinPrecision minPrecision;
> +} SVGA3dDXShaderSignatureEntry;
> +#pragma pack(pop)
> +
> +#define SVGADX_SIGNATURE_HEADER_VERSION_0 0x08a92d12
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dDXSignatureHeader {
> +	uint32 headerVersion;
> +	uint32 numInputSignatures;
> +	uint32 numOutputSignatures;
> +	uint32 numPatchConstantSignatures;
> +} SVGA3dDXShaderSignatureHeader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineShader {
> +	SVGA3dShaderId shaderId;
> +	SVGA3dShaderType type;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDXDefineShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGACOTableDXShaderEntry {
> +	SVGA3dShaderType type;
> +	uint32 sizeInBytes;
> +	uint32 offsetInBytes;
> +	SVGAMobId mobid;
> +	uint32 pad[4];
> +} SVGACOTableDXShaderEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyShader {
> +	SVGA3dShaderId shaderId;
> +} SVGA3dCmdDXDestroyShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBindShader {
> +	uint32 cid;
> +	uint32 shid;
> +	SVGAMobId mobid;
> +	uint32 offsetInBytes;
> +} SVGA3dCmdDXBindShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBindAllShader {
> +	uint32 cid;
> +	SVGAMobId mobid;
> +} SVGA3dCmdDXBindAllShader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXCondBindAllShader {
> +	uint32 cid;
> +	SVGAMobId testMobid;
> +	SVGAMobId mobid;
> +} SVGA3dCmdDXCondBindAllShader;
> +#pragma pack(pop)
> +
> +#define SVGA3D_MAX_DX10_STREAMOUT_DECLS 64
> +#define SVGA3D_MAX_STREAMOUT_DECLS 512
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dStreamOutputDeclarationEntry {
> +	uint32 outputSlot;
> +	uint32 registerIndex;
> +	uint8 registerMask;
> +	uint8 pad0;
> +	uint16 pad1;
> +	uint32 stream;
> +} SVGA3dStreamOutputDeclarationEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGAOTableStreamOutputEntry {
> +	uint32 numOutputStreamEntries;
> +	SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
> +	uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
> +	uint32 rasterizedStream;
> +	uint32 numOutputStreamStrides;
> +	uint32 mobid;
> +	uint32 offsetInBytes;
> +	uint8 usesMob;
> +	uint8 pad0;
> +	uint16 pad1;
> +	uint32 pad2[246];
> +} SVGACOTableDXStreamOutputEntry;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineStreamOutput {
> +	SVGA3dStreamOutputId soid;
> +	uint32 numOutputStreamEntries;
> +	SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
> +	uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
> +	uint32 rasterizedStream;
> +} SVGA3dCmdDXDefineStreamOutput;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DX_SO_NO_RASTERIZED_STREAM 0xFFFFFFFF
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDefineStreamOutputWithMob {
> +	SVGA3dStreamOutputId soid;
> +	uint32 numOutputStreamEntries;
> +	uint32 numOutputStreamStrides;
> +	uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
> +	uint32 rasterizedStream;
> +} SVGA3dCmdDXDefineStreamOutputWithMob;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXBindStreamOutput {
> +	SVGA3dStreamOutputId soid;
> +	uint32 mobid;
> +	uint32 offsetInBytes;
> +	uint32 sizeInBytes;
> +} SVGA3dCmdDXBindStreamOutput;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXDestroyStreamOutput {
> +	SVGA3dStreamOutputId soid;
> +} SVGA3dCmdDXDestroyStreamOutput;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetStreamOutput {
> +	SVGA3dStreamOutputId soid;
> +} SVGA3dCmdDXSetStreamOutput;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetMinLOD {
> +	SVGA3dSurfaceId sid;
> +	float minLOD;
> +} SVGA3dCmdDXSetMinLOD;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint64 value;
> +	uint32 mobId;
> +	uint32 mobOffset;
> +} SVGA3dCmdDXMobFence64;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXSetCOTable {
> +	uint32 cid;
> +	uint32 mobid;
> +	SVGACOTableType type;
> +	uint32 validSizeInBytes;
> +} SVGA3dCmdDXSetCOTable;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXGrowCOTable {
> +	uint32 cid;
> +	uint32 mobid;
> +	SVGACOTableType type;
> +	uint32 validSizeInBytes;
> +} SVGA3dCmdDXGrowCOTable;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXReadbackCOTable {
> +	uint32 cid;
> +	SVGACOTableType type;
> +} SVGA3dCmdDXReadbackCOTable;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXCopyCOTableIntoMob {
> +	uint32 cid;
> +	SVGACOTableType type;
> +	uint32 mobid;
> +} SVGA3dCmdDXCopyCOTableIntoMob;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXPredStagingCopy {
> +	SVGA3dSurfaceId dstSid;
> +	SVGA3dSurfaceId srcSid;
> +	uint8 readback;
> +	uint8 unsynchronized;
> +	uint8 mustBeZero[2];
> +
> +} SVGA3dCmdDXPredStagingCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCmdDXStagingCopy {
> +	SVGA3dSurfaceId dstSid;
> +	SVGA3dSurfaceId srcSid;
> +	uint8 readback;
> +	uint8 unsynchronized;
> +	uint8 mustBeZero[2];
> +
> +} SVGA3dCmdDXStagingCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCOTableData {
> +	uint32 mobid;
> +} SVGA3dCOTableData;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dBufferBinding {
> +	uint32 bufferId;
> +	uint32 stride;
> +	uint32 offset;
> +} SVGA3dBufferBinding;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dConstantBufferBinding {
> +	uint32 sid;
> +	uint32 offsetInBytes;
> +	uint32 sizeInBytes;
> +} SVGA3dConstantBufferBinding;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGADXInputAssemblyMobFormat {
> +	uint32 layoutId;
> +	SVGA3dBufferBinding vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
> +	uint32 indexBufferSid;
> +	uint32 pad;
> +	uint32 indexBufferOffset;
> +	uint32 indexBufferFormat;
> +	uint32 topology;
> +} SVGADXInputAssemblyMobFormat;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGADXContextMobFormat {
> +	SVGADXInputAssemblyMobFormat inputAssembly;
> +
> +	struct {
> +		uint32 blendStateId;
> +		uint32 blendFactor[4];
> +		uint32 sampleMask;
> +		uint32 depthStencilStateId;
> +		uint32 stencilRef;
> +		uint32 rasterizerStateId;
> +		uint32 depthStencilViewId;
> +		uint32 renderTargetViewIds[SVGA3D_DX_MAX_RENDER_TARGETS];
> +	} renderState;
> +
> +	uint32 pad0[8];
> +
> +	struct {
> +		uint32 targets[SVGA3D_DX_MAX_SOTARGETS];
> +		uint32 soid;
> +	} streamOut;
> +
> +	uint32 pad1[10];
> +
> +	uint32 uavSpliceIndex;
> +
> +	uint8 numViewports;
> +	uint8 numScissorRects;
> +	uint16 pad2[1];
> +
> +	uint32 pad3[3];
> +
> +	SVGA3dViewport viewports[SVGA3D_DX_MAX_VIEWPORTS];
> +	uint32 pad4[32];
> +
> +	SVGASignedRect scissorRects[SVGA3D_DX_MAX_SCISSORRECTS];
> +	uint32 pad5[64];
> +
> +	struct {
> +		uint32 queryID;
> +		uint32 value;
> +	} predication;
> +
> +	SVGAMobId shaderIfaceMobid;
> +	uint32 shaderIfaceOffset;
> +	struct {
> +		uint32 shaderId;
> +		SVGA3dConstantBufferBinding
> +			constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS];
> +		uint32 shaderResources[SVGA3D_DX_MAX_SRVIEWS];
> +		uint32 samplers[SVGA3D_DX_MAX_SAMPLERS];
> +	} shaderState[SVGA3D_NUM_SHADERTYPE];
> +	uint32 pad6[26];
> +
> +	SVGA3dQueryId queryID[SVGA3D_MAX_QUERY];
> +
> +	SVGA3dCOTableData cotables[SVGA_COTABLE_MAX];
> +
> +	uint32 pad7[64];
> +
> +	uint32 uaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
> +	uint32 csuaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
> +
> +	uint32 pad8[188];
> +} SVGADXContextMobFormat;
> +#pragma pack(pop)
> +
> +#define SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED 256
> +
> +#pragma pack(push, 1)
> +typedef struct SVGADXShaderIfaceMobFormat {
> +	struct {
> +		uint32 numClassInstances;
> +		uint32 iface[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
> +		SVGA3dIfaceData data[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
> +	} shaderIfaceState[SVGA3D_NUM_SHADERTYPE];
> +
> +	uint32 pad0[1018];
> +} SVGADXShaderIfaceMobFormat;
> +#pragma pack(pop)
> +
> +#endif
> diff --git a/lib/svga/svga3d_limits.h b/lib/svga/svga3d_limits.h
> new file mode 100644
> index 00000000..a71246db
> --- /dev/null
> +++ b/lib/svga/svga3d_limits.h
> @@ -0,0 +1,83 @@
> +/**********************************************************
> + * Copyright 2012-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga3d_limits.h --
> + *
> + *    SVGA 3d hardware limits
> + */
> +
> +#ifndef _SVGA3D_LIMITS_H_
> +#define _SVGA3D_LIMITS_H_
> +
> +#define SVGA3D_HB_MAX_CONTEXT_IDS 256
> +#define SVGA3D_HB_MAX_SURFACE_IDS (32 * 1024)
> +
> +#define SVGA3D_DX_MAX_RENDER_TARGETS 8
> +#define SVGA3D_DX11_MAX_UAVIEWS 8
> +#define SVGA3D_DX11_1_MAX_UAVIEWS 64
> +#define SVGA3D_MAX_UAVIEWS (SVGA3D_DX11_1_MAX_UAVIEWS)
> +#define SVGA3D_DX11_MAX_SIMULTANEOUS_RTUAV (SVGA3D_DX11_MAX_UAVIEWS)
> +#define SVGA3D_DX11_1_MAX_SIMULTANEOUS_RTUAV (SVGA3D_DX11_1_MAX_UAVIEWS)
> +#define SVGA3D_MAX_SIMULTANEOUS_RTUAV (SVGA3D_MAX_UAVIEWS)
> +
> +#define SVGA3D_HB_MAX_SURFACE_SIZE MBYTES_2_BYTES(128)
> +
> +#define SVGA3D_MAX_SHADERIDS 5000
> +
> +#define SVGA3D_MAX_SIMULTANEOUS_SHADERS 20000
> +
> +#define SVGA3D_NUM_TEXTURE_UNITS 32
> +#define SVGA3D_NUM_LIGHTS 8
> +
> +#define SVGA3D_MAX_VIDEOPROCESSOR_SAMPLERS 32
> +
> +#define SVGA3D_MAX_SHADER_MEMORY_BYTES (8 * 1024 * 1024)
> +#define SVGA3D_MAX_SHADER_MEMORY \
> +	(SVGA3D_MAX_SHADER_MEMORY_BYTES / sizeof(uint32))
> +
> +#define SVGA3D_MAX_SHADER_THREAD_GROUPS 65535
> +
> +#define SVGA3D_MAX_CLIP_PLANES 6
> +
> +#define SVGA3D_MAX_TEXTURE_COORDS 8
> +
> +#define SVGA3D_MAX_SURFACE_FACES 6
> +
> +#define SVGA3D_SM4_MAX_SURFACE_ARRAYSIZE 512
> +#define SVGA3D_SM5_MAX_SURFACE_ARRAYSIZE 2048
> +#define SVGA3D_MAX_SURFACE_ARRAYSIZE SVGA3D_SM5_MAX_SURFACE_ARRAYSIZE
> +
> +#define SVGA3D_MAX_VERTEX_ARRAYS 32
> +
> +#define SVGA3D_MAX_DRAW_PRIMITIVE_RANGES 32
> +
> +#define SVGA3D_MAX_SAMPLES 8
> +
> +#define SVGA3D_MIN_SBX_DATA_SIZE (GBYTES_2_BYTES(1))
> +#define SVGA3D_MAX_SBX_DATA_SIZE (GBYTES_2_BYTES(4))
> +
> +#endif
> diff --git a/lib/svga/svga3d_reg.h b/lib/svga/svga3d_reg.h
> new file mode 100644
> index 00000000..0388cfa3
> --- /dev/null
> +++ b/lib/svga/svga3d_reg.h
> @@ -0,0 +1,44 @@
> +/**********************************************************
> + * Copyright 1998-2015 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga3d_reg.h --
> + *
> + *    SVGA 3d hardware definitions
> + */
> +
> +#ifndef _SVGA3D_REG_H_
> +#define _SVGA3D_REG_H_
> +
> +#include "svga_reg.h"
> +
> +#include "svga3d_types.h"
> +#include "svga3d_limits.h"
> +#include "svga3d_cmd.h"
> +#include "svga3d_dx.h"
> +#include "svga3d_devcaps.h"
> +
> +#endif
> diff --git a/lib/svga/svga3d_surfacedefs.h b/lib/svga/svga3d_surfacedefs.h
> new file mode 100644
> index 00000000..f36ee918
> --- /dev/null
> +++ b/lib/svga/svga3d_surfacedefs.h
> @@ -0,0 +1,1559 @@
> +/**********************************************************
> + * Copyright 2008-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga3d_surfacedefs.h --
> + *
> + *    Surface definitions for SVGA3d.
> + */
> +
> +#ifndef _SVGA3D_SURFACEDEFS_H_
> +#define _SVGA3D_SURFACEDEFS_H_
> +
> +#include "svga3d_types.h"
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +struct SVGAUseCaps;
> +
> +#if defined(_WIN32) && !defined(__GNUC__)
> +
> +#define STATIC_CONST __declspec(selectany) extern const
> +#else
> +#define STATIC_CONST static const
> +#endif
> +
> +typedef enum SVGA3dBlockDesc {
> +
> +	SVGA3DBLOCKDESC_NONE = 0,
> +
> +	SVGA3DBLOCKDESC_BLUE = 1 << 0,
> +	SVGA3DBLOCKDESC_W = 1 << 0,
> +	SVGA3DBLOCKDESC_BUMP_L = 1 << 0,
> +
> +	SVGA3DBLOCKDESC_GREEN = 1 << 1,
> +	SVGA3DBLOCKDESC_V = 1 << 1,
> +
> +	SVGA3DBLOCKDESC_RED = 1 << 2,
> +	SVGA3DBLOCKDESC_U = 1 << 2,
> +	SVGA3DBLOCKDESC_LUMINANCE = 1 << 2,
> +
> +	SVGA3DBLOCKDESC_ALPHA = 1 << 3,
> +	SVGA3DBLOCKDESC_Q = 1 << 3,
> +
> +	SVGA3DBLOCKDESC_BUFFER = 1 << 4,
> +
> +	SVGA3DBLOCKDESC_COMPRESSED = 1 << 5,
> +
> +	SVGA3DBLOCKDESC_FP = 1 << 6,
> +
> +	SVGA3DBLOCKDESC_PLANAR_YUV = 1 << 7,
> +
> +	SVGA3DBLOCKDESC_2PLANAR_YUV = 1 << 8,
> +
> +	SVGA3DBLOCKDESC_3PLANAR_YUV = 1 << 9,
> +
> +	SVGA3DBLOCKDESC_STENCIL = 1 << 11,
> +
> +	SVGA3DBLOCKDESC_TYPELESS = 1 << 12,
> +
> +	SVGA3DBLOCKDESC_SINT = 1 << 13,
> +
> +	SVGA3DBLOCKDESC_UINT = 1 << 14,
> +
> +	SVGA3DBLOCKDESC_NORM = 1 << 15,
> +
> +	SVGA3DBLOCKDESC_SRGB = 1 << 16,
> +
> +	SVGA3DBLOCKDESC_EXP = 1 << 17,
> +
> +	SVGA3DBLOCKDESC_COLOR = 1 << 18,
> +
> +	SVGA3DBLOCKDESC_DEPTH = 1 << 19,
> +
> +	SVGA3DBLOCKDESC_BUMP = 1 << 20,
> +
> +	SVGA3DBLOCKDESC_YUV_VIDEO = 1 << 21,
> +
> +	SVGA3DBLOCKDESC_MIXED = 1 << 22,
> +
> +	SVGA3DBLOCKDESC_CX = 1 << 23,
> +
> +	SVGA3DBLOCKDESC_BC1 = 1 << 24,
> +	SVGA3DBLOCKDESC_BC2 = 1 << 25,
> +	SVGA3DBLOCKDESC_BC3 = 1 << 26,
> +	SVGA3DBLOCKDESC_BC4 = 1 << 27,
> +	SVGA3DBLOCKDESC_BC5 = 1 << 28,
> +	SVGA3DBLOCKDESC_BC6H = 1 << 29,
> +	SVGA3DBLOCKDESC_BC7 = 1 << 30,
> +	SVGA3DBLOCKDESC_COMPRESSED_MASK =
> +		SVGA3DBLOCKDESC_BC1 | SVGA3DBLOCKDESC_BC2 |
> +		SVGA3DBLOCKDESC_BC3 | SVGA3DBLOCKDESC_BC4 |
> +		SVGA3DBLOCKDESC_BC5 | SVGA3DBLOCKDESC_BC6H |
> +		SVGA3DBLOCKDESC_BC7,
> +
> +	SVGA3DBLOCKDESC_A_UINT = SVGA3DBLOCKDESC_ALPHA | SVGA3DBLOCKDESC_UINT |
> +				 SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_A_UNORM = SVGA3DBLOCKDESC_A_UINT | SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_R_UINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_UINT |
> +				 SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_R_UNORM = SVGA3DBLOCKDESC_R_UINT | SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_R_SINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_SINT |
> +				 SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_R_SNORM = SVGA3DBLOCKDESC_R_SINT | SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_G_UINT = SVGA3DBLOCKDESC_GREEN | SVGA3DBLOCKDESC_UINT |
> +				 SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RG_UINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +				  SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RG_UNORM = SVGA3DBLOCKDESC_RG_UINT |
> +				   SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_RG_SINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +				  SVGA3DBLOCKDESC_SINT | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RG_SNORM = SVGA3DBLOCKDESC_RG_SINT |
> +				   SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_RGB_UINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +				   SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_UINT |
> +				   SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RGB_SINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +				   SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_SINT |
> +				   SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RGB_UNORM = SVGA3DBLOCKDESC_RGB_UINT |
> +				    SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_RGB_UNORM_SRGB = SVGA3DBLOCKDESC_RGB_UNORM |
> +					 SVGA3DBLOCKDESC_SRGB,
> +	SVGA3DBLOCKDESC_RGBA_UINT =
> +		SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +		SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_ALPHA |
> +		SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RGBA_UNORM = SVGA3DBLOCKDESC_RGBA_UINT |
> +				     SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_RGBA_UNORM_SRGB = SVGA3DBLOCKDESC_RGBA_UNORM |
> +					  SVGA3DBLOCKDESC_SRGB,
> +	SVGA3DBLOCKDESC_RGBA_SINT =
> +		SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +		SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_ALPHA |
> +		SVGA3DBLOCKDESC_SINT | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RGBA_SNORM = SVGA3DBLOCKDESC_RGBA_SINT |
> +				     SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_RGBA_FP = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +				  SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_ALPHA |
> +				  SVGA3DBLOCKDESC_FP | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_UV = SVGA3DBLOCKDESC_U | SVGA3DBLOCKDESC_V |
> +			     SVGA3DBLOCKDESC_BUMP,
> +	SVGA3DBLOCKDESC_UVL = SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_BUMP_L |
> +			      SVGA3DBLOCKDESC_MIXED | SVGA3DBLOCKDESC_BUMP,
> +	SVGA3DBLOCKDESC_UVW = SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_W |
> +			      SVGA3DBLOCKDESC_BUMP,
> +	SVGA3DBLOCKDESC_UVWA = SVGA3DBLOCKDESC_UVW | SVGA3DBLOCKDESC_ALPHA |
> +			       SVGA3DBLOCKDESC_MIXED | SVGA3DBLOCKDESC_BUMP,
> +	SVGA3DBLOCKDESC_UVWQ = SVGA3DBLOCKDESC_U | SVGA3DBLOCKDESC_V |
> +			       SVGA3DBLOCKDESC_W | SVGA3DBLOCKDESC_Q |
> +			       SVGA3DBLOCKDESC_BUMP,
> +	SVGA3DBLOCKDESC_L_UNORM = SVGA3DBLOCKDESC_LUMINANCE |
> +				  SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_NORM |
> +				  SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_LA_UNORM = SVGA3DBLOCKDESC_LUMINANCE |
> +				   SVGA3DBLOCKDESC_ALPHA |
> +				   SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_NORM |
> +				   SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_R_FP = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_FP |
> +			       SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RG_FP = SVGA3DBLOCKDESC_R_FP | SVGA3DBLOCKDESC_GREEN |
> +				SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RGB_FP = SVGA3DBLOCKDESC_RG_FP | SVGA3DBLOCKDESC_BLUE |
> +				 SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_YUV = SVGA3DBLOCKDESC_YUV_VIDEO | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_AYUV = SVGA3DBLOCKDESC_ALPHA |
> +			       SVGA3DBLOCKDESC_YUV_VIDEO |
> +			       SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_RGB_EXP = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
> +				  SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_EXP |
> +				  SVGA3DBLOCKDESC_COLOR,
> +
> +	SVGA3DBLOCKDESC_COMP_TYPELESS = SVGA3DBLOCKDESC_COMPRESSED |
> +					SVGA3DBLOCKDESC_TYPELESS,
> +	SVGA3DBLOCKDESC_COMP_UNORM =
> +		SVGA3DBLOCKDESC_COMPRESSED | SVGA3DBLOCKDESC_UINT |
> +		SVGA3DBLOCKDESC_NORM | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_COMP_SNORM =
> +		SVGA3DBLOCKDESC_COMPRESSED | SVGA3DBLOCKDESC_SINT |
> +		SVGA3DBLOCKDESC_NORM | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_COMP_UNORM |
> +					  SVGA3DBLOCKDESC_SRGB,
> +	SVGA3DBLOCKDESC_BC1_COMP_TYPELESS = SVGA3DBLOCKDESC_BC1 |
> +					    SVGA3DBLOCKDESC_COMP_TYPELESS,
> +	SVGA3DBLOCKDESC_BC1_COMP_UNORM = SVGA3DBLOCKDESC_BC1 |
> +					 SVGA3DBLOCKDESC_COMP_UNORM,
> +	SVGA3DBLOCKDESC_BC1_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC1_COMP_UNORM |
> +					      SVGA3DBLOCKDESC_SRGB,
> +	SVGA3DBLOCKDESC_BC2_COMP_TYPELESS = SVGA3DBLOCKDESC_BC2 |
> +					    SVGA3DBLOCKDESC_COMP_TYPELESS,
> +	SVGA3DBLOCKDESC_BC2_COMP_UNORM = SVGA3DBLOCKDESC_BC2 |
> +					 SVGA3DBLOCKDESC_COMP_UNORM,
> +	SVGA3DBLOCKDESC_BC2_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC2_COMP_UNORM |
> +					      SVGA3DBLOCKDESC_SRGB,
> +	SVGA3DBLOCKDESC_BC3_COMP_TYPELESS = SVGA3DBLOCKDESC_BC3 |
> +					    SVGA3DBLOCKDESC_COMP_TYPELESS,
> +	SVGA3DBLOCKDESC_BC3_COMP_UNORM = SVGA3DBLOCKDESC_BC3 |
> +					 SVGA3DBLOCKDESC_COMP_UNORM,
> +	SVGA3DBLOCKDESC_BC3_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC3_COMP_UNORM |
> +					      SVGA3DBLOCKDESC_SRGB,
> +	SVGA3DBLOCKDESC_BC4_COMP_TYPELESS = SVGA3DBLOCKDESC_BC4 |
> +					    SVGA3DBLOCKDESC_COMP_TYPELESS,
> +	SVGA3DBLOCKDESC_BC4_COMP_UNORM = SVGA3DBLOCKDESC_BC4 |
> +					 SVGA3DBLOCKDESC_COMP_UNORM,
> +	SVGA3DBLOCKDESC_BC4_COMP_SNORM = SVGA3DBLOCKDESC_BC4 |
> +					 SVGA3DBLOCKDESC_COMP_SNORM,
> +	SVGA3DBLOCKDESC_BC5_COMP_TYPELESS = SVGA3DBLOCKDESC_BC5 |
> +					    SVGA3DBLOCKDESC_COMP_TYPELESS,
> +	SVGA3DBLOCKDESC_BC5_COMP_UNORM = SVGA3DBLOCKDESC_BC5 |
> +					 SVGA3DBLOCKDESC_COMP_UNORM,
> +	SVGA3DBLOCKDESC_BC5_COMP_SNORM = SVGA3DBLOCKDESC_BC5 |
> +					 SVGA3DBLOCKDESC_COMP_SNORM,
> +	SVGA3DBLOCKDESC_BC6H_COMP_TYPELESS = SVGA3DBLOCKDESC_BC6H |
> +					     SVGA3DBLOCKDESC_COMP_TYPELESS,
> +	SVGA3DBLOCKDESC_BC6H_COMP_UF16 = SVGA3DBLOCKDESC_BC6H |
> +					 SVGA3DBLOCKDESC_COMPRESSED,
> +	SVGA3DBLOCKDESC_BC6H_COMP_SF16 = SVGA3DBLOCKDESC_BC6H |
> +					 SVGA3DBLOCKDESC_COMPRESSED,
> +	SVGA3DBLOCKDESC_BC7_COMP_TYPELESS = SVGA3DBLOCKDESC_BC7 |
> +					    SVGA3DBLOCKDESC_COMP_TYPELESS,
> +	SVGA3DBLOCKDESC_BC7_COMP_UNORM = SVGA3DBLOCKDESC_BC7 |
> +					 SVGA3DBLOCKDESC_COMP_UNORM,
> +	SVGA3DBLOCKDESC_BC7_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC7_COMP_UNORM |
> +					      SVGA3DBLOCKDESC_SRGB,
> +
> +	SVGA3DBLOCKDESC_NV12 =
> +		SVGA3DBLOCKDESC_YUV_VIDEO | SVGA3DBLOCKDESC_PLANAR_YUV |
> +		SVGA3DBLOCKDESC_2PLANAR_YUV | SVGA3DBLOCKDESC_COLOR,
> +	SVGA3DBLOCKDESC_YV12 =
> +		SVGA3DBLOCKDESC_YUV_VIDEO | SVGA3DBLOCKDESC_PLANAR_YUV |
> +		SVGA3DBLOCKDESC_3PLANAR_YUV | SVGA3DBLOCKDESC_COLOR,
> +
> +	SVGA3DBLOCKDESC_DEPTH_UINT = SVGA3DBLOCKDESC_DEPTH |
> +				     SVGA3DBLOCKDESC_UINT,
> +	SVGA3DBLOCKDESC_DEPTH_UNORM = SVGA3DBLOCKDESC_DEPTH_UINT |
> +				      SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_DS = SVGA3DBLOCKDESC_DEPTH | SVGA3DBLOCKDESC_STENCIL,
> +	SVGA3DBLOCKDESC_DS_UINT = SVGA3DBLOCKDESC_DEPTH |
> +				  SVGA3DBLOCKDESC_STENCIL |
> +				  SVGA3DBLOCKDESC_UINT,
> +	SVGA3DBLOCKDESC_DS_UNORM = SVGA3DBLOCKDESC_DS_UINT |
> +				   SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_DEPTH_FP = SVGA3DBLOCKDESC_DEPTH | SVGA3DBLOCKDESC_FP,
> +
> +	SVGA3DBLOCKDESC_UV_UINT = SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_UINT,
> +	SVGA3DBLOCKDESC_UV_SNORM = SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_SINT |
> +				   SVGA3DBLOCKDESC_NORM,
> +	SVGA3DBLOCKDESC_UVCX_SNORM = SVGA3DBLOCKDESC_UV_SNORM |
> +				     SVGA3DBLOCKDESC_CX,
> +	SVGA3DBLOCKDESC_UVWQ_SNORM = SVGA3DBLOCKDESC_UVWQ |
> +				     SVGA3DBLOCKDESC_SINT |
> +				     SVGA3DBLOCKDESC_NORM,
> +} SVGA3dBlockDesc;
> +
> +typedef struct SVGA3dChannelDef {
> +	union {
> +		uint8 blue;
> +		uint8 w_bump;
> +		uint8 l_bump;
> +		uint8 uv_video;
> +		uint8 u_video;
> +	};
> +	union {
> +		uint8 green;
> +		uint8 stencil;
> +		uint8 v_bump;
> +		uint8 v_video;
> +	};
> +	union {
> +		uint8 red;
> +		uint8 u_bump;
> +		uint8 luminance;
> +		uint8 y_video;
> +		uint8 depth;
> +		uint8 data;
> +	};
> +	union {
> +		uint8 alpha;
> +		uint8 q_bump;
> +		uint8 exp;
> +	};
> +} SVGA3dChannelDef;
> +
> +typedef struct SVGA3dSurfaceDesc {
> +	SVGA3dSurfaceFormat format;
> +	SVGA3dBlockDesc blockDesc;
> +
> +	SVGA3dSize blockSize;
> +	uint32 bytesPerBlock;
> +	uint32 pitchBytesPerBlock;
> +
> +	SVGA3dChannelDef bitDepth;
> +	SVGA3dChannelDef bitOffset;
> +} SVGA3dSurfaceDesc;
> +
> +STATIC_CONST SVGA3dSurfaceDesc g_SVGA3dSurfaceDescs[] = {
> +	{ SVGA3D_FORMAT_INVALID,
> +	  SVGA3DBLOCKDESC_NONE,
> +	  { 1, 1, 1 },
> +	  0,
> +	  0,
> +	  { { 0 }, { 0 }, { 0 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_X8R8G8B8,
> +	  SVGA3DBLOCKDESC_RGB_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_A8R8G8B8,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_R5G6B5,
> +	  SVGA3DBLOCKDESC_RGB_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 5 }, { 6 }, { 5 }, { 0 } },
> +	  { { 0 }, { 5 }, { 11 }, { 0 } } },
> +
> +	{ SVGA3D_X1R5G5B5,
> +	  SVGA3DBLOCKDESC_RGB_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 5 }, { 5 }, { 5 }, { 0 } },
> +	  { { 0 }, { 5 }, { 10 }, { 0 } } },
> +
> +	{ SVGA3D_A1R5G5B5,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 5 }, { 5 }, { 5 }, { 1 } },
> +	  { { 0 }, { 5 }, { 10 }, { 15 } } },
> +
> +	{ SVGA3D_A4R4G4B4,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 4 }, { 4 }, { 4 }, { 4 } },
> +	  { { 0 }, { 4 }, { 8 }, { 12 } } },
> +
> +	{ SVGA3D_Z_D32,
> +	  SVGA3DBLOCKDESC_DEPTH_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_Z_D16,
> +	  SVGA3DBLOCKDESC_DEPTH_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_Z_D24S8,
> +	  SVGA3DBLOCKDESC_DS_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 8 }, { 24 }, { 0 } },
> +	  { { 0 }, { 0 }, { 8 }, { 0 } } },
> +
> +	{ SVGA3D_Z_D15S1,
> +	  SVGA3DBLOCKDESC_DS_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 1 }, { 15 }, { 0 } },
> +	  { { 0 }, { 0 }, { 1 }, { 0 } } },
> +
> +	{ SVGA3D_LUMINANCE8,
> +	  SVGA3DBLOCKDESC_L_UNORM,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_LUMINANCE4_ALPHA4,
> +	  SVGA3DBLOCKDESC_LA_UNORM,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 4 }, { 4 } },
> +	  { { 0 }, { 0 }, { 0 }, { 4 } } },
> +
> +	{ SVGA3D_LUMINANCE16,
> +	  SVGA3DBLOCKDESC_L_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_LUMINANCE8_ALPHA8,
> +	  SVGA3DBLOCKDESC_LA_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 8 }, { 8 } },
> +	  { { 0 }, { 0 }, { 0 }, { 8 } } },
> +
> +	{ SVGA3D_DXT1,
> +	  SVGA3DBLOCKDESC_BC1_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_DXT2,
> +	  SVGA3DBLOCKDESC_BC2_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_DXT3,
> +	  SVGA3DBLOCKDESC_BC2_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_DXT4,
> +	  SVGA3DBLOCKDESC_BC3_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_DXT5,
> +	  SVGA3DBLOCKDESC_BC3_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BUMPU8V8,
> +	  SVGA3DBLOCKDESC_UV_SNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BUMPL6V5U5,
> +	  SVGA3DBLOCKDESC_UVL,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 6 }, { 5 }, { 5 }, { 0 } },
> +	  { { 10 }, { 5 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BUMPX8L8V8U8,
> +	  SVGA3DBLOCKDESC_UVL,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 0 } },
> +	  { { 16 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_FORMAT_DEAD1,
> +	  SVGA3DBLOCKDESC_NONE,
> +	  { 1, 1, 1 },
> +	  3,
> +	  3,
> +	  { { 8 }, { 8 }, { 8 }, { 0 } },
> +	  { { 16 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_ARGB_S10E5,
> +	  SVGA3DBLOCKDESC_RGBA_FP,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_ARGB_S23E8,
> +	  SVGA3DBLOCKDESC_RGBA_FP,
> +	  { 1, 1, 1 },
> +	  16,
> +	  16,
> +	  { { 32 }, { 32 }, { 32 }, { 32 } },
> +	  { { 64 }, { 32 }, { 0 }, { 96 } } },
> +
> +	{ SVGA3D_A2R10G10B10,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 10 }, { 10 }, { 2 } },
> +	  { { 0 }, { 10 }, { 20 }, { 30 } } },
> +
> +	{ SVGA3D_V8U8,
> +	  SVGA3DBLOCKDESC_UV_SNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_Q8W8V8U8,
> +	  SVGA3DBLOCKDESC_UVWQ_SNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 16 }, { 8 }, { 0 }, { 24 } } },
> +
> +	{ SVGA3D_CxV8U8,
> +	  SVGA3DBLOCKDESC_UVCX_SNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_X8L8V8U8,
> +	  SVGA3DBLOCKDESC_UVL,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 0 } },
> +	  { { 16 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_A2W10V10U10,
> +	  SVGA3DBLOCKDESC_UVWA,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 10 }, { 10 }, { 2 } },
> +	  { { 20 }, { 10 }, { 0 }, { 30 } } },
> +
> +	{ SVGA3D_ALPHA8,
> +	  SVGA3DBLOCKDESC_A_UNORM,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 0 }, { 8 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R_S10E5,
> +	  SVGA3DBLOCKDESC_R_FP,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R_S23E8,
> +	  SVGA3DBLOCKDESC_R_FP,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_RG_S10E5,
> +	  SVGA3DBLOCKDESC_RG_FP,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_RG_S23E8,
> +	  SVGA3DBLOCKDESC_RG_FP,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 32 }, { 32 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BUFFER,
> +	  SVGA3DBLOCKDESC_BUFFER,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_Z_D24X8,
> +	  SVGA3DBLOCKDESC_DEPTH_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 24 }, { 0 } },
> +	  { { 0 }, { 0 }, { 8 }, { 0 } } },
> +
> +	{ SVGA3D_V16U16,
> +	  SVGA3DBLOCKDESC_UV_SNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_G16R16,
> +	  SVGA3DBLOCKDESC_RG_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_A16B16G16R16,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_UYVY,
> +	  SVGA3DBLOCKDESC_YUV,
> +	  { 2, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 8 }, { 0 } } },
> +
> +	{ SVGA3D_YUY2,
> +	  SVGA3DBLOCKDESC_YUV,
> +	  { 2, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 0 }, { 8 }, { 0 } },
> +	  { { 8 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_NV12,
> +	  SVGA3DBLOCKDESC_NV12,
> +	  { 2, 2, 1 },
> +	  6,
> +	  2,
> +	  { { 0 }, { 0 }, { 48 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_FORMAT_DEAD2,
> +	  SVGA3DBLOCKDESC_NONE,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_R32G32B32A32_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  16,
> +	  16,
> +	  { { 32 }, { 32 }, { 32 }, { 32 } },
> +	  { { 64 }, { 32 }, { 0 }, { 96 } } },
> +
> +	{ SVGA3D_R32G32B32A32_UINT,
> +	  SVGA3DBLOCKDESC_RGBA_UINT,
> +	  { 1, 1, 1 },
> +	  16,
> +	  16,
> +	  { { 32 }, { 32 }, { 32 }, { 32 } },
> +	  { { 64 }, { 32 }, { 0 }, { 96 } } },
> +
> +	{ SVGA3D_R32G32B32A32_SINT,
> +	  SVGA3DBLOCKDESC_RGBA_SINT,
> +	  { 1, 1, 1 },
> +	  16,
> +	  16,
> +	  { { 32 }, { 32 }, { 32 }, { 32 } },
> +	  { { 64 }, { 32 }, { 0 }, { 96 } } },
> +
> +	{ SVGA3D_R32G32B32_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  12,
> +	  12,
> +	  { { 32 }, { 32 }, { 32 }, { 0 } },
> +	  { { 64 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32G32B32_FLOAT,
> +	  SVGA3DBLOCKDESC_RGB_FP,
> +	  { 1, 1, 1 },
> +	  12,
> +	  12,
> +	  { { 32 }, { 32 }, { 32 }, { 0 } },
> +	  { { 64 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32G32B32_UINT,
> +	  SVGA3DBLOCKDESC_RGB_UINT,
> +	  { 1, 1, 1 },
> +	  12,
> +	  12,
> +	  { { 32 }, { 32 }, { 32 }, { 0 } },
> +	  { { 64 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32G32B32_SINT,
> +	  SVGA3DBLOCKDESC_RGB_SINT,
> +	  { 1, 1, 1 },
> +	  12,
> +	  12,
> +	  { { 32 }, { 32 }, { 32 }, { 0 } },
> +	  { { 64 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16G16B16A16_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_R16G16B16A16_UINT,
> +	  SVGA3DBLOCKDESC_RGBA_UINT,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_R16G16B16A16_SNORM,
> +	  SVGA3DBLOCKDESC_RGBA_SNORM,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_R16G16B16A16_SINT,
> +	  SVGA3DBLOCKDESC_RGBA_SINT,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_R32G32_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 32 }, { 32 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32G32_UINT,
> +	  SVGA3DBLOCKDESC_RG_UINT,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 32 }, { 32 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32G32_SINT,
> +	  SVGA3DBLOCKDESC_RG_SINT,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 32 }, { 32 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32G8X24_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 8 }, { 32 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_D32_FLOAT_S8X24_UINT,
> +	  SVGA3DBLOCKDESC_DS,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 8 }, { 32 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32_FLOAT_X8X24,
> +	  SVGA3DBLOCKDESC_R_FP,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_X32_G8X24_UINT,
> +	  SVGA3DBLOCKDESC_G_UINT,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 8 }, { 0 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R10G10B10A2_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 10 }, { 10 }, { 2 } },
> +	  { { 20 }, { 10 }, { 0 }, { 30 } } },
> +
> +	{ SVGA3D_R10G10B10A2_UINT,
> +	  SVGA3DBLOCKDESC_RGBA_UINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 10 }, { 10 }, { 2 } },
> +	  { { 20 }, { 10 }, { 0 }, { 30 } } },
> +
> +	{ SVGA3D_R11G11B10_FLOAT,
> +	  SVGA3DBLOCKDESC_RGB_FP,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 11 }, { 11 }, { 0 } },
> +	  { { 22 }, { 11 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8G8B8A8_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 16 }, { 8 }, { 0 }, { 24 } } },
> +
> +	{ SVGA3D_R8G8B8A8_UNORM,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 16 }, { 8 }, { 0 }, { 24 } } },
> +
> +	{ SVGA3D_R8G8B8A8_UNORM_SRGB,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM_SRGB,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 16 }, { 8 }, { 0 }, { 24 } } },
> +
> +	{ SVGA3D_R8G8B8A8_UINT,
> +	  SVGA3DBLOCKDESC_RGBA_UINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 16 }, { 8 }, { 0 }, { 24 } } },
> +
> +	{ SVGA3D_R8G8B8A8_SINT,
> +	  SVGA3DBLOCKDESC_RGBA_SINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 16 }, { 8 }, { 0 }, { 24 } } },
> +
> +	{ SVGA3D_R16G16_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16G16_UINT,
> +	  SVGA3DBLOCKDESC_RG_UINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16G16_SINT,
> +	  SVGA3DBLOCKDESC_RG_SINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_D32_FLOAT,
> +	  SVGA3DBLOCKDESC_DEPTH_FP,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32_UINT,
> +	  SVGA3DBLOCKDESC_R_UINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32_SINT,
> +	  SVGA3DBLOCKDESC_R_SINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R24G8_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 8 }, { 24 }, { 0 } },
> +	  { { 0 }, { 24 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_D24_UNORM_S8_UINT,
> +	  SVGA3DBLOCKDESC_DS_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 8 }, { 24 }, { 0 } },
> +	  { { 0 }, { 24 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R24_UNORM_X8,
> +	  SVGA3DBLOCKDESC_R_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 24 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_X24_G8_UINT,
> +	  SVGA3DBLOCKDESC_G_UINT,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 8 }, { 0 }, { 0 } },
> +	  { { 0 }, { 24 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8G8_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8G8_UNORM,
> +	  SVGA3DBLOCKDESC_RG_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8G8_UINT,
> +	  SVGA3DBLOCKDESC_RG_UINT,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8G8_SINT,
> +	  SVGA3DBLOCKDESC_RG_SINT,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16_UNORM,
> +	  SVGA3DBLOCKDESC_R_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16_UINT,
> +	  SVGA3DBLOCKDESC_R_UINT,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16_SNORM,
> +	  SVGA3DBLOCKDESC_R_SNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16_SINT,
> +	  SVGA3DBLOCKDESC_R_SINT,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8_UNORM,
> +	  SVGA3DBLOCKDESC_R_UNORM,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8_UINT,
> +	  SVGA3DBLOCKDESC_R_UINT,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8_SNORM,
> +	  SVGA3DBLOCKDESC_R_SNORM,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8_SINT,
> +	  SVGA3DBLOCKDESC_R_SINT,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_P8,
> +	  SVGA3DBLOCKDESC_NONE,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R9G9B9E5_SHAREDEXP,
> +	  SVGA3DBLOCKDESC_RGB_EXP,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 9 }, { 9 }, { 9 }, { 5 } },
> +	  { { 18 }, { 9 }, { 0 }, { 27 } } },
> +
> +	{ SVGA3D_R8G8_B8G8_UNORM,
> +	  SVGA3DBLOCKDESC_NONE,
> +	  { 2, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 0 }, { 8 }, { 0 } } },
> +
> +	{ SVGA3D_G8R8_G8B8_UNORM,
> +	  SVGA3DBLOCKDESC_NONE,
> +	  { 2, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC1_TYPELESS,
> +	  SVGA3DBLOCKDESC_BC1_COMP_TYPELESS,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC1_UNORM_SRGB,
> +	  SVGA3DBLOCKDESC_BC1_COMP_UNORM_SRGB,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC2_TYPELESS,
> +	  SVGA3DBLOCKDESC_BC2_COMP_TYPELESS,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC2_UNORM_SRGB,
> +	  SVGA3DBLOCKDESC_BC2_COMP_UNORM_SRGB,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC3_TYPELESS,
> +	  SVGA3DBLOCKDESC_BC3_COMP_TYPELESS,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC3_UNORM_SRGB,
> +	  SVGA3DBLOCKDESC_BC3_COMP_UNORM_SRGB,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC4_TYPELESS,
> +	  SVGA3DBLOCKDESC_BC4_COMP_TYPELESS,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_ATI1,
> +	  SVGA3DBLOCKDESC_BC4_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC4_SNORM,
> +	  SVGA3DBLOCKDESC_BC4_COMP_SNORM,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC5_TYPELESS,
> +	  SVGA3DBLOCKDESC_BC5_COMP_TYPELESS,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_ATI2,
> +	  SVGA3DBLOCKDESC_BC5_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC5_SNORM,
> +	  SVGA3DBLOCKDESC_BC5_COMP_SNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R10G10B10_XR_BIAS_A2_UNORM,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 10 }, { 10 }, { 2 } },
> +	  { { 20 }, { 10 }, { 0 }, { 30 } } },
> +
> +	{ SVGA3D_B8G8R8A8_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_B8G8R8A8_UNORM_SRGB,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM_SRGB,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_B8G8R8X8_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_B8G8R8X8_UNORM_SRGB,
> +	  SVGA3DBLOCKDESC_RGB_UNORM_SRGB,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_Z_DF16,
> +	  SVGA3DBLOCKDESC_DEPTH_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_Z_DF24,
> +	  SVGA3DBLOCKDESC_DEPTH_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 24 }, { 0 } },
> +	  { { 0 }, { 0 }, { 8 }, { 0 } } },
> +
> +	{ SVGA3D_Z_D24S8_INT,
> +	  SVGA3DBLOCKDESC_DS_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 8 }, { 24 }, { 0 } },
> +	  { { 0 }, { 0 }, { 8 }, { 0 } } },
> +
> +	{ SVGA3D_YV12,
> +	  SVGA3DBLOCKDESC_YV12,
> +	  { 2, 2, 1 },
> +	  6,
> +	  2,
> +	  { { 0 }, { 0 }, { 48 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32G32B32A32_FLOAT,
> +	  SVGA3DBLOCKDESC_RGBA_FP,
> +	  { 1, 1, 1 },
> +	  16,
> +	  16,
> +	  { { 32 }, { 32 }, { 32 }, { 32 } },
> +	  { { 64 }, { 32 }, { 0 }, { 96 } } },
> +
> +	{ SVGA3D_R16G16B16A16_FLOAT,
> +	  SVGA3DBLOCKDESC_RGBA_FP,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_R16G16B16A16_UNORM,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 16 }, { 16 }, { 16 }, { 16 } },
> +	  { { 32 }, { 16 }, { 0 }, { 48 } } },
> +
> +	{ SVGA3D_R32G32_FLOAT,
> +	  SVGA3DBLOCKDESC_RG_FP,
> +	  { 1, 1, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 32 }, { 32 }, { 0 } },
> +	  { { 0 }, { 32 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R10G10B10A2_UNORM,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 10 }, { 10 }, { 2 } },
> +	  { { 20 }, { 10 }, { 0 }, { 30 } } },
> +
> +	{ SVGA3D_R8G8B8A8_SNORM,
> +	  SVGA3DBLOCKDESC_RGBA_SNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 16 }, { 8 }, { 0 }, { 24 } } },
> +
> +	{ SVGA3D_R16G16_FLOAT,
> +	  SVGA3DBLOCKDESC_RG_FP,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16G16_UNORM,
> +	  SVGA3DBLOCKDESC_RG_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16G16_SNORM,
> +	  SVGA3DBLOCKDESC_RG_SNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 16 }, { 16 }, { 0 } },
> +	  { { 0 }, { 16 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R32_FLOAT,
> +	  SVGA3DBLOCKDESC_R_FP,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 0 }, { 0 }, { 32 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R8G8_SNORM,
> +	  SVGA3DBLOCKDESC_RG_SNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_R16_FLOAT,
> +	  SVGA3DBLOCKDESC_R_FP,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_D16_UNORM,
> +	  SVGA3DBLOCKDESC_DEPTH_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 0 }, { 0 }, { 16 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_A8_UNORM,
> +	  SVGA3DBLOCKDESC_A_UNORM,
> +	  { 1, 1, 1 },
> +	  1,
> +	  1,
> +	  { { 0 }, { 0 }, { 0 }, { 8 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC1_UNORM,
> +	  SVGA3DBLOCKDESC_BC1_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC2_UNORM,
> +	  SVGA3DBLOCKDESC_BC2_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC3_UNORM,
> +	  SVGA3DBLOCKDESC_BC3_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_B5G6R5_UNORM,
> +	  SVGA3DBLOCKDESC_RGB_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 5 }, { 6 }, { 5 }, { 0 } },
> +	  { { 0 }, { 5 }, { 11 }, { 0 } } },
> +
> +	{ SVGA3D_B5G5R5A1_UNORM,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 5 }, { 5 }, { 5 }, { 1 } },
> +	  { { 0 }, { 5 }, { 10 }, { 15 } } },
> +
> +	{ SVGA3D_B8G8R8A8_UNORM,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_B8G8R8X8_UNORM,
> +	  SVGA3DBLOCKDESC_RGB_UNORM,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 0 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_BC4_UNORM,
> +	  SVGA3DBLOCKDESC_BC4_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  8,
> +	  8,
> +	  { { 0 }, { 0 }, { 64 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC5_UNORM,
> +	  SVGA3DBLOCKDESC_BC5_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_B4G4R4A4_UNORM,
> +	  SVGA3DBLOCKDESC_RGBA_UNORM,
> +	  { 1, 1, 1 },
> +	  2,
> +	  2,
> +	  { { 4 }, { 4 }, { 4 }, { 4 } },
> +	  { { 0 }, { 4 }, { 8 }, { 12 } } },
> +
> +	{ SVGA3D_BC6H_TYPELESS,
> +	  SVGA3DBLOCKDESC_BC6H_COMP_TYPELESS,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC6H_UF16,
> +	  SVGA3DBLOCKDESC_BC6H_COMP_UF16,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC6H_SF16,
> +	  SVGA3DBLOCKDESC_BC6H_COMP_SF16,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC7_TYPELESS,
> +	  SVGA3DBLOCKDESC_BC7_COMP_TYPELESS,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC7_UNORM,
> +	  SVGA3DBLOCKDESC_BC7_COMP_UNORM,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_BC7_UNORM_SRGB,
> +	  SVGA3DBLOCKDESC_BC7_COMP_UNORM_SRGB,
> +	  { 4, 4, 1 },
> +	  16,
> +	  16,
> +	  { { 0 }, { 0 }, { 128 }, { 0 } },
> +	  { { 0 }, { 0 }, { 0 }, { 0 } } },
> +
> +	{ SVGA3D_AYUV,
> +	  SVGA3DBLOCKDESC_AYUV,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 8 }, { 8 }, { 8 }, { 8 } },
> +	  { { 0 }, { 8 }, { 16 }, { 24 } } },
> +
> +	{ SVGA3D_R11G11B10_TYPELESS,
> +	  SVGA3DBLOCKDESC_TYPELESS,
> +	  { 1, 1, 1 },
> +	  4,
> +	  4,
> +	  { { 10 }, { 11 }, { 11 }, { 0 } },
> +	  { { 22 }, { 11 }, { 0 }, { 0 } } },
> +};
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif
> diff --git a/lib/svga/svga3d_types.h b/lib/svga/svga3d_types.h
> new file mode 100644
> index 00000000..e2c74db8
> --- /dev/null
> +++ b/lib/svga/svga3d_types.h
> @@ -0,0 +1,1554 @@
> +/**********************************************************
> + * Copyright 2012-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga3d_types.h --
> + *
> + *    SVGA 3d hardware definitions for basic types
> + */
> +
> +#ifndef _SVGA3D_TYPES_H_
> +#define _SVGA3D_TYPES_H_
> +
> +#include "vm_basic_types.h"
> +
> +#define SVGA3D_INVALID_ID ((uint32)-1)
> +
> +#define SVGA3D_RESOURCE_TYPE_MIN 1
> +#define SVGA3D_RESOURCE_BUFFER 1
> +#define SVGA3D_RESOURCE_TEXTURE1D 2
> +#define SVGA3D_RESOURCE_TEXTURE2D 3
> +#define SVGA3D_RESOURCE_TEXTURE3D 4
> +#define SVGA3D_RESOURCE_TEXTURECUBE 5
> +#define SVGA3D_RESOURCE_TYPE_DX10_MAX 6
> +#define SVGA3D_RESOURCE_BUFFEREX 6
> +#define SVGA3D_RESOURCE_TYPE_MAX 7
> +typedef uint32 SVGA3dResourceType;
> +
> +typedef uint8 SVGABool8;
> +typedef uint32 SVGA3dBool;
> +typedef uint32 SVGA3dColor;
> +
> +typedef uint32 SVGA3dSurfaceId;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 numerator;
> +	uint32 denominator;
> +} SVGA3dFraction64;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCopyRect {
> +	uint32 x;
> +	uint32 y;
> +	uint32 w;
> +	uint32 h;
> +	uint32 srcx;
> +	uint32 srcy;
> +} SVGA3dCopyRect;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dCopyBox {
> +	uint32 x;
> +	uint32 y;
> +	uint32 z;
> +	uint32 w;
> +	uint32 h;
> +	uint32 d;
> +	uint32 srcx;
> +	uint32 srcy;
> +	uint32 srcz;
> +} SVGA3dCopyBox;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dRect {
> +	uint32 x;
> +	uint32 y;
> +	uint32 w;
> +	uint32 h;
> +} SVGA3dRect;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 x;
> +	uint32 y;
> +	uint32 z;
> +	uint32 w;
> +	uint32 h;
> +	uint32 d;
> +} SVGA3dBox;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	int32 x;
> +	int32 y;
> +	int32 z;
> +	int32 w;
> +	int32 h;
> +	int32 d;
> +} SVGA3dSignedBox;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 x;
> +	uint32 y;
> +	uint32 z;
> +} SVGA3dPoint;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef union {
> +	struct {
> +		float r;
> +		float g;
> +		float b;
> +		float a;
> +	};
> +
> +	float value[4];
> +} SVGA3dRGBAFloat;
> +#pragma pack(pop)
> +
> +typedef enum SVGA3dSurfaceFormat {
> +	SVGA3D_FORMAT_INVALID = 0,
> +
> +	SVGA3D_X8R8G8B8 = 1,
> +	SVGA3D_FORMAT_MIN = 1,
> +
> +	SVGA3D_A8R8G8B8 = 2,
> +
> +	SVGA3D_R5G6B5 = 3,
> +	SVGA3D_X1R5G5B5 = 4,
> +	SVGA3D_A1R5G5B5 = 5,
> +	SVGA3D_A4R4G4B4 = 6,
> +
> +	SVGA3D_Z_D32 = 7,
> +	SVGA3D_Z_D16 = 8,
> +	SVGA3D_Z_D24S8 = 9,
> +	SVGA3D_Z_D15S1 = 10,
> +
> +	SVGA3D_LUMINANCE8 = 11,
> +	SVGA3D_LUMINANCE4_ALPHA4 = 12,
> +	SVGA3D_LUMINANCE16 = 13,
> +	SVGA3D_LUMINANCE8_ALPHA8 = 14,
> +
> +	SVGA3D_DXT1 = 15,
> +	SVGA3D_DXT2 = 16,
> +	SVGA3D_DXT3 = 17,
> +	SVGA3D_DXT4 = 18,
> +	SVGA3D_DXT5 = 19,
> +
> +	SVGA3D_BUMPU8V8 = 20,
> +	SVGA3D_BUMPL6V5U5 = 21,
> +	SVGA3D_BUMPX8L8V8U8 = 22,
> +	SVGA3D_FORMAT_DEAD1 = 23,
> +
> +	SVGA3D_ARGB_S10E5 = 24,
> +	SVGA3D_ARGB_S23E8 = 25,
> +
> +	SVGA3D_A2R10G10B10 = 26,
> +
> +	SVGA3D_V8U8 = 27,
> +	SVGA3D_Q8W8V8U8 = 28,
> +	SVGA3D_CxV8U8 = 29,
> +
> +	SVGA3D_X8L8V8U8 = 30,
> +	SVGA3D_A2W10V10U10 = 31,
> +
> +	SVGA3D_ALPHA8 = 32,
> +
> +	SVGA3D_R_S10E5 = 33,
> +	SVGA3D_R_S23E8 = 34,
> +	SVGA3D_RG_S10E5 = 35,
> +	SVGA3D_RG_S23E8 = 36,
> +
> +	SVGA3D_BUFFER = 37,
> +
> +	SVGA3D_Z_D24X8 = 38,
> +
> +	SVGA3D_V16U16 = 39,
> +
> +	SVGA3D_G16R16 = 40,
> +	SVGA3D_A16B16G16R16 = 41,
> +
> +	SVGA3D_UYVY = 42,
> +	SVGA3D_YUY2 = 43,
> +
> +	SVGA3D_NV12 = 44,
> +
> +	SVGA3D_FORMAT_DEAD2 = 45,
> +
> +	SVGA3D_R32G32B32A32_TYPELESS = 46,
> +	SVGA3D_R32G32B32A32_UINT = 47,
> +	SVGA3D_R32G32B32A32_SINT = 48,
> +	SVGA3D_R32G32B32_TYPELESS = 49,
> +	SVGA3D_R32G32B32_FLOAT = 50,
> +	SVGA3D_R32G32B32_UINT = 51,
> +	SVGA3D_R32G32B32_SINT = 52,
> +	SVGA3D_R16G16B16A16_TYPELESS = 53,
> +	SVGA3D_R16G16B16A16_UINT = 54,
> +	SVGA3D_R16G16B16A16_SNORM = 55,
> +	SVGA3D_R16G16B16A16_SINT = 56,
> +	SVGA3D_R32G32_TYPELESS = 57,
> +	SVGA3D_R32G32_UINT = 58,
> +	SVGA3D_R32G32_SINT = 59,
> +	SVGA3D_R32G8X24_TYPELESS = 60,
> +	SVGA3D_D32_FLOAT_S8X24_UINT = 61,
> +	SVGA3D_R32_FLOAT_X8X24 = 62,
> +	SVGA3D_X32_G8X24_UINT = 63,
> +	SVGA3D_R10G10B10A2_TYPELESS = 64,
> +	SVGA3D_R10G10B10A2_UINT = 65,
> +	SVGA3D_R11G11B10_FLOAT = 66,
> +	SVGA3D_R8G8B8A8_TYPELESS = 67,
> +	SVGA3D_R8G8B8A8_UNORM = 68,
> +	SVGA3D_R8G8B8A8_UNORM_SRGB = 69,
> +	SVGA3D_R8G8B8A8_UINT = 70,
> +	SVGA3D_R8G8B8A8_SINT = 71,
> +	SVGA3D_R16G16_TYPELESS = 72,
> +	SVGA3D_R16G16_UINT = 73,
> +	SVGA3D_R16G16_SINT = 74,
> +	SVGA3D_R32_TYPELESS = 75,
> +	SVGA3D_D32_FLOAT = 76,
> +	SVGA3D_R32_UINT = 77,
> +	SVGA3D_R32_SINT = 78,
> +	SVGA3D_R24G8_TYPELESS = 79,
> +	SVGA3D_D24_UNORM_S8_UINT = 80,
> +	SVGA3D_R24_UNORM_X8 = 81,
> +	SVGA3D_X24_G8_UINT = 82,
> +	SVGA3D_R8G8_TYPELESS = 83,
> +	SVGA3D_R8G8_UNORM = 84,
> +	SVGA3D_R8G8_UINT = 85,
> +	SVGA3D_R8G8_SINT = 86,
> +	SVGA3D_R16_TYPELESS = 87,
> +	SVGA3D_R16_UNORM = 88,
> +	SVGA3D_R16_UINT = 89,
> +	SVGA3D_R16_SNORM = 90,
> +	SVGA3D_R16_SINT = 91,
> +	SVGA3D_R8_TYPELESS = 92,
> +	SVGA3D_R8_UNORM = 93,
> +	SVGA3D_R8_UINT = 94,
> +	SVGA3D_R8_SNORM = 95,
> +	SVGA3D_R8_SINT = 96,
> +	SVGA3D_P8 = 97,
> +	SVGA3D_R9G9B9E5_SHAREDEXP = 98,
> +	SVGA3D_R8G8_B8G8_UNORM = 99,
> +	SVGA3D_G8R8_G8B8_UNORM = 100,
> +	SVGA3D_BC1_TYPELESS = 101,
> +	SVGA3D_BC1_UNORM_SRGB = 102,
> +	SVGA3D_BC2_TYPELESS = 103,
> +	SVGA3D_BC2_UNORM_SRGB = 104,
> +	SVGA3D_BC3_TYPELESS = 105,
> +	SVGA3D_BC3_UNORM_SRGB = 106,
> +	SVGA3D_BC4_TYPELESS = 107,
> +	SVGA3D_ATI1 = 108,
> +	SVGA3D_BC4_SNORM = 109,
> +	SVGA3D_BC5_TYPELESS = 110,
> +	SVGA3D_ATI2 = 111,
> +	SVGA3D_BC5_SNORM = 112,
> +	SVGA3D_R10G10B10_XR_BIAS_A2_UNORM = 113,
> +	SVGA3D_B8G8R8A8_TYPELESS = 114,
> +	SVGA3D_B8G8R8A8_UNORM_SRGB = 115,
> +	SVGA3D_B8G8R8X8_TYPELESS = 116,
> +	SVGA3D_B8G8R8X8_UNORM_SRGB = 117,
> +
> +	SVGA3D_Z_DF16 = 118,
> +	SVGA3D_Z_DF24 = 119,
> +	SVGA3D_Z_D24S8_INT = 120,
> +
> +	SVGA3D_YV12 = 121,
> +
> +	SVGA3D_R32G32B32A32_FLOAT = 122,
> +	SVGA3D_R16G16B16A16_FLOAT = 123,
> +	SVGA3D_R16G16B16A16_UNORM = 124,
> +	SVGA3D_R32G32_FLOAT = 125,
> +	SVGA3D_R10G10B10A2_UNORM = 126,
> +	SVGA3D_R8G8B8A8_SNORM = 127,
> +	SVGA3D_R16G16_FLOAT = 128,
> +	SVGA3D_R16G16_UNORM = 129,
> +	SVGA3D_R16G16_SNORM = 130,
> +	SVGA3D_R32_FLOAT = 131,
> +	SVGA3D_R8G8_SNORM = 132,
> +	SVGA3D_R16_FLOAT = 133,
> +	SVGA3D_D16_UNORM = 134,
> +	SVGA3D_A8_UNORM = 135,
> +	SVGA3D_BC1_UNORM = 136,
> +	SVGA3D_BC2_UNORM = 137,
> +	SVGA3D_BC3_UNORM = 138,
> +	SVGA3D_B5G6R5_UNORM = 139,
> +	SVGA3D_B5G5R5A1_UNORM = 140,
> +	SVGA3D_B8G8R8A8_UNORM = 141,
> +	SVGA3D_B8G8R8X8_UNORM = 142,
> +	SVGA3D_BC4_UNORM = 143,
> +	SVGA3D_BC5_UNORM = 144,
> +	SVGA3D_B4G4R4A4_UNORM = 145,
> +
> +	SVGA3D_BC6H_TYPELESS = 146,
> +	SVGA3D_BC6H_UF16 = 147,
> +	SVGA3D_BC6H_SF16 = 148,
> +	SVGA3D_BC7_TYPELESS = 149,
> +	SVGA3D_BC7_UNORM = 150,
> +	SVGA3D_BC7_UNORM_SRGB = 151,
> +
> +	SVGA3D_AYUV = 152,
> +
> +	SVGA3D_R11G11B10_TYPELESS = 153,
> +
> +	SVGA3D_FORMAT_MAX
> +} SVGA3dSurfaceFormat;
> +
> +#define SVGA3D_SURFACE_CUBEMAP (1 << 0)
> +
> +#define SVGA3D_SURFACE_HINT_STATIC (CONST64U(1) << 1)
> +#define SVGA3D_SURFACE_HINT_DYNAMIC (CONST64U(1) << 2)
> +#define SVGA3D_SURFACE_HINT_INDEXBUFFER (CONST64U(1) << 3)
> +#define SVGA3D_SURFACE_HINT_VERTEXBUFFER (CONST64U(1) << 4)
> +#define SVGA3D_SURFACE_HINT_TEXTURE (CONST64U(1) << 5)
> +#define SVGA3D_SURFACE_HINT_RENDERTARGET (CONST64U(1) << 6)
> +#define SVGA3D_SURFACE_HINT_DEPTHSTENCIL (CONST64U(1) << 7)
> +#define SVGA3D_SURFACE_HINT_WRITEONLY (CONST64U(1) << 8)
> +#define SVGA3D_SURFACE_DEAD2 (CONST64U(1) << 9)
> +#define SVGA3D_SURFACE_AUTOGENMIPMAPS (CONST64U(1) << 10)
> +
> +#define SVGA3D_SURFACE_DEAD1 (CONST64U(1) << 11)
> +
> +#define SVGA3D_SURFACE_MOB_PITCH (CONST64U(1) << 12)
> +
> +#define SVGA3D_SURFACE_INACTIVE (CONST64U(1) << 13)
> +#define SVGA3D_SURFACE_HINT_RT_LOCKABLE (CONST64U(1) << 14)
> +#define SVGA3D_SURFACE_VOLUME (CONST64U(1) << 15)
> +
> +#define SVGA3D_SURFACE_SCREENTARGET (CONST64U(1) << 16)
> +
> +#define SVGA3D_SURFACE_ALIGN16 (CONST64U(1) << 17)
> +
> +#define SVGA3D_SURFACE_1D (CONST64U(1) << 18)
> +#define SVGA3D_SURFACE_ARRAY (CONST64U(1) << 19)
> +
> +#define SVGA3D_SURFACE_BIND_VERTEX_BUFFER (CONST64U(1) << 20)
> +#define SVGA3D_SURFACE_BIND_INDEX_BUFFER (CONST64U(1) << 21)
> +#define SVGA3D_SURFACE_BIND_CONSTANT_BUFFER (CONST64U(1) << 22)
> +#define SVGA3D_SURFACE_BIND_SHADER_RESOURCE (CONST64U(1) << 23)
> +#define SVGA3D_SURFACE_BIND_RENDER_TARGET (CONST64U(1) << 24)
> +#define SVGA3D_SURFACE_BIND_DEPTH_STENCIL (CONST64U(1) << 25)
> +#define SVGA3D_SURFACE_BIND_STREAM_OUTPUT (CONST64U(1) << 26)
> +
> +#define SVGA3D_SURFACE_STAGING_UPLOAD (CONST64U(1) << 27)
> +#define SVGA3D_SURFACE_STAGING_DOWNLOAD (CONST64U(1) << 28)
> +#define SVGA3D_SURFACE_HINT_INDIRECT_UPDATE (CONST64U(1) << 29)
> +
> +#define SVGA3D_SURFACE_TRANSFER_FROM_BUFFER (CONST64U(1) << 30)
> +
> +#define SVGA3D_SURFACE_RESERVED1 (CONST64U(1) << 31)
> +#define SVGA3D_SURFACE_VADECODE SVGA3D_SURFACE_RESERVED1
> +
> +#define SVGA3D_SURFACE_MULTISAMPLE (CONST64U(1) << 32)
> +
> +#define SVGA3D_SURFACE_BIND_UAVIEW (CONST64U(1) << 33)
> +
> +#define SVGA3D_SURFACE_TRANSFER_TO_BUFFER (CONST64U(1) << 34)
> +
> +#define SVGA3D_SURFACE_BIND_LOGICOPS (CONST64U(1) << 35)
> +
> +#define SVGA3D_SURFACE_BIND_RAW_VIEWS (CONST64U(1) << 36)
> +#define SVGA3D_SURFACE_BUFFER_STRUCTURED (CONST64U(1) << 37)
> +
> +#define SVGA3D_SURFACE_DRAWINDIRECT_ARGS (CONST64U(1) << 38)
> +#define SVGA3D_SURFACE_RESOURCE_CLAMP (CONST64U(1) << 39)
> +
> +#define SVGA3D_SURFACE_STAGING_COPY (CONST64U(1) << 40)
> +
> +#define SVGA3D_SURFACE_FLAG_MAX (CONST64U(1) << 44)
> +
> +typedef uint32 SVGA3dSurface1Flags;
> +typedef uint32 SVGA3dSurface2Flags;
> +typedef uint64 SVGA3dSurfaceAllFlags;
> +
> +#define SVGA3D_SURFACE_FLAGS1_MASK ((uint64)MAX_UINT32)
> +#define SVGA3D_SURFACE_FLAGS2_MASK (MAX_UINT64 & ~SVGA3D_SURFACE_FLAGS1_MASK)
> +
> +#define SVGA3D_SURFACE_HB_DISALLOWED_MASK                                      \
> +	(SVGA3D_SURFACE_MOB_PITCH | SVGA3D_SURFACE_SCREENTARGET |              \
> +	 SVGA3D_SURFACE_ALIGN16 | SVGA3D_SURFACE_BIND_CONSTANT_BUFFER |        \
> +	 SVGA3D_SURFACE_BIND_STREAM_OUTPUT | SVGA3D_SURFACE_STAGING_UPLOAD |   \
> +	 SVGA3D_SURFACE_STAGING_DOWNLOAD |                                     \
> +	 SVGA3D_SURFACE_HINT_INDIRECT_UPDATE |                                 \
> +	 SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | SVGA3D_SURFACE_MULTISAMPLE |    \
> +	 SVGA3D_SURFACE_BIND_UAVIEW | SVGA3D_SURFACE_TRANSFER_TO_BUFFER |      \
> +	 SVGA3D_SURFACE_BIND_LOGICOPS | SVGA3D_SURFACE_BIND_RAW_VIEWS |        \
> +	 SVGA3D_SURFACE_BUFFER_STRUCTURED | SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
> +	 SVGA3D_SURFACE_RESOURCE_CLAMP | SVGA3D_SURFACE_STAGING_COPY |         \
> +	 SVGA3D_SURFACE_RESTRICT_UPDATE | SVGA3D_SURFACE_BIND_TENSOR |         \
> +	 SVGA3D_SURFACE_LO_STAGING)
> +
> +#define SVGA3D_SURFACE_HB_PRESENT_DISALLOWED_MASK         \
> +	(SVGA3D_SURFACE_1D | SVGA3D_SURFACE_MULTISAMPLE | \
> +	 SVGA3D_SURFACE_STAGING_COPY)
> +
> +#define SVGA3D_SURFACE_2D_DISALLOWED_MASK                                   \
> +	(SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_AUTOGENMIPMAPS |           \
> +	 SVGA3D_SURFACE_VOLUME | SVGA3D_SURFACE_1D |                        \
> +	 SVGA3D_SURFACE_BIND_VERTEX_BUFFER |                                \
> +	 SVGA3D_SURFACE_BIND_INDEX_BUFFER |                                 \
> +	 SVGA3D_SURFACE_BIND_CONSTANT_BUFFER |                              \
> +	 SVGA3D_SURFACE_BIND_DEPTH_STENCIL |                                \
> +	 SVGA3D_SURFACE_BIND_STREAM_OUTPUT |                                \
> +	 SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | SVGA3D_SURFACE_MULTISAMPLE | \
> +	 SVGA3D_SURFACE_BIND_UAVIEW | SVGA3D_SURFACE_TRANSFER_TO_BUFFER |   \
> +	 SVGA3D_SURFACE_BIND_RAW_VIEWS | SVGA3D_SURFACE_BUFFER_STRUCTURED | \
> +	 SVGA3D_SURFACE_DRAWINDIRECT_ARGS | SVGA3D_SURFACE_RESOURCE_CLAMP | \
> +	 SVGA3D_SURFACE_BIND_TENSOR)
> +
> +#define SVGA3D_SURFACE_BASICOPS_DISALLOWED_MASK                   \
> +	(SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_AUTOGENMIPMAPS | \
> +	 SVGA3D_SURFACE_VOLUME | SVGA3D_SURFACE_1D |              \
> +	 SVGA3D_SURFACE_MULTISAMPLE)
> +
> +#define SVGA3D_SURFACE_SCREENTARGET_DISALLOWED_MASK                            \
> +	(SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_AUTOGENMIPMAPS |              \
> +	 SVGA3D_SURFACE_VOLUME | SVGA3D_SURFACE_1D |                           \
> +	 SVGA3D_SURFACE_BIND_VERTEX_BUFFER |                                   \
> +	 SVGA3D_SURFACE_BIND_INDEX_BUFFER |                                    \
> +	 SVGA3D_SURFACE_BIND_CONSTANT_BUFFER |                                 \
> +	 SVGA3D_SURFACE_BIND_DEPTH_STENCIL |                                   \
> +	 SVGA3D_SURFACE_BIND_STREAM_OUTPUT | SVGA3D_SURFACE_INACTIVE |         \
> +	 SVGA3D_SURFACE_STAGING_UPLOAD | SVGA3D_SURFACE_STAGING_DOWNLOAD |     \
> +	 SVGA3D_SURFACE_HINT_INDIRECT_UPDATE |                                 \
> +	 SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | SVGA3D_SURFACE_MULTISAMPLE |    \
> +	 SVGA3D_SURFACE_TRANSFER_TO_BUFFER | SVGA3D_SURFACE_BIND_RAW_VIEWS |   \
> +	 SVGA3D_SURFACE_BUFFER_STRUCTURED | SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
> +	 SVGA3D_SURFACE_RESOURCE_CLAMP | SVGA3D_SURFACE_STAGING_COPY |         \
> +	 SVGA3D_SURFACE_BIND_TENSOR | SVGA3D_SURFACE_LO_STAGING)
> +
> +#define SVGA3D_SURFACE_BUFFER_DISALLOWED_MASK                               \
> +	(SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_AUTOGENMIPMAPS |           \
> +	 SVGA3D_SURFACE_VOLUME | SVGA3D_SURFACE_1D | SVGA3D_SURFACE_DEAD2 | \
> +	 SVGA3D_SURFACE_ARRAY | SVGA3D_SURFACE_MULTISAMPLE |                \
> +	 SVGA3D_SURFACE_MOB_PITCH | SVGA3D_SURFACE_RESOURCE_CLAMP)
> +
> +#define SVGA3D_SURFACE_MULTISAMPLE_DISALLOWED_MASK                          \
> +	(SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_AUTOGENMIPMAPS |           \
> +	 SVGA3D_SURFACE_VOLUME | SVGA3D_SURFACE_1D |                        \
> +	 SVGA3D_SURFACE_SCREENTARGET | SVGA3D_SURFACE_MOB_PITCH |           \
> +	 SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | SVGA3D_SURFACE_BIND_UAVIEW | \
> +	 SVGA3D_SURFACE_TRANSFER_TO_BUFFER | SVGA3D_SURFACE_BIND_LOGICOPS | \
> +	 SVGA3D_SURFACE_BIND_RAW_VIEWS | SVGA3D_SURFACE_BUFFER_STRUCTURED | \
> +	 SVGA3D_SURFACE_DRAWINDIRECT_ARGS | SVGA3D_SURFACE_STAGING_COPY)
> +
> +#define SVGA3D_SURFACE_DX_ONLY_MASK                                          \
> +	(SVGA3D_SURFACE_BIND_STREAM_OUTPUT | SVGA3D_SURFACE_STAGING_UPLOAD | \
> +	 SVGA3D_SURFACE_STAGING_DOWNLOAD |                                   \
> +	 SVGA3D_SURFACE_TRANSFER_FROM_BUFFER |                               \
> +	 SVGA3D_SURFACE_TRANSFER_TO_BUFFER)
> +
> +#define SVGA3D_SURFACE_ANY_STAGING_MASK                                    \
> +	(SVGA3D_SURFACE_STAGING_UPLOAD | SVGA3D_SURFACE_STAGING_DOWNLOAD | \
> +	 SVGA3D_SURFACE_STAGING_COPY | SVGA3D_SURFACE_LO_STAGING)
> +
> +#define SVGA3D_SURFACE_ANY_NONHINT_STAGING_MASK \
> +	(SVGA3D_SURFACE_ANY_STAGING_MASK & ~(SVGA3D_SURFACE_LO_STAGING))
> +
> +#define SVGA3D_SURFACE_BIND_MASK                                          \
> +	(SVGA3D_SURFACE_BIND_VERTEX_BUFFER |                              \
> +	 SVGA3D_SURFACE_BIND_INDEX_BUFFER |                               \
> +	 SVGA3D_SURFACE_BIND_CONSTANT_BUFFER |                            \
> +	 SVGA3D_SURFACE_BIND_SHADER_RESOURCE |                            \
> +	 SVGA3D_SURFACE_BIND_RENDER_TARGET |                              \
> +	 SVGA3D_SURFACE_BIND_DEPTH_STENCIL |                              \
> +	 SVGA3D_SURFACE_BIND_STREAM_OUTPUT | SVGA3D_SURFACE_BIND_UAVIEW | \
> +	 SVGA3D_SURFACE_BIND_LOGICOPS | SVGA3D_SURFACE_BIND_RAW_VIEWS |   \
> +	 SVGA3D_SURFACE_BIND_TENSOR)
> +
> +#define SVGA3D_SURFACE_STAGING_DISALLOWED_MASK                              \
> +	(SVGA3D_SURFACE_BIND_MASK | SVGA3D_SURFACE_AUTOGENMIPMAPS |         \
> +	 SVGA3D_SURFACE_SCREENTARGET | SVGA3D_SURFACE_HINT_RENDERTARGET |   \
> +	 SVGA3D_SURFACE_HINT_INDIRECT_UPDATE | SVGA3D_SURFACE_MULTISAMPLE | \
> +	 SVGA3D_SURFACE_DRAWINDIRECT_ARGS | SVGA3D_SURFACE_RESOURCE_CLAMP | \
> +	 SVGA3D_SURFACE_BIND_TENSOR)
> +
> +#define SVGA3D_SURFACE_STAGING_COPY_DISALLOWED_MASK \
> +	(SVGA3D_SURFACE_STAGING_DISALLOWED_MASK |   \
> +	 SVGA3D_SURFACE_TRANSFER_TO_BUFFER |        \
> +	 SVGA3D_SURFACE_TRANSFER_FROM_BUFFER)
> +
> +#define SVGA3D_SURFACE_LOGICOPS_DISALLOWED_MASK                             \
> +	(SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_DEAD2 |                    \
> +	 SVGA3D_SURFACE_AUTOGENMIPMAPS | SVGA3D_SURFACE_VOLUME |            \
> +	 SVGA3D_SURFACE_1D | SVGA3D_SURFACE_BIND_VERTEX_BUFFER |            \
> +	 SVGA3D_SURFACE_BIND_INDEX_BUFFER |                                 \
> +	 SVGA3D_SURFACE_BIND_CONSTANT_BUFFER |                              \
> +	 SVGA3D_SURFACE_BIND_DEPTH_STENCIL |                                \
> +	 SVGA3D_SURFACE_BIND_STREAM_OUTPUT |                                \
> +	 SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | SVGA3D_SURFACE_MULTISAMPLE | \
> +	 SVGA3D_SURFACE_BIND_UAVIEW | SVGA3D_SURFACE_TRANSFER_TO_BUFFER |   \
> +	 SVGA3D_SURFACE_BIND_RAW_VIEWS | SVGA3D_SURFACE_BUFFER_STRUCTURED | \
> +	 SVGA3D_SURFACE_DRAWINDIRECT_ARGS | SVGA3D_SURFACE_RESOURCE_CLAMP | \
> +	 SVGA3D_SURFACE_STAGING_COPY)
> +
> +#define SVGA3D_SURFACE_SM5_MASK                                                \
> +	(SVGA3D_SURFACE_DRAWINDIRECT_ARGS | SVGA3D_SURFACE_BUFFER_STRUCTURED | \
> +	 SVGA3D_SURFACE_BIND_RAW_VIEWS | SVGA3D_SURFACE_BIND_UAVIEW |          \
> +	 SVGA3D_SURFACE_RESOURCE_CLAMP)
> +
> +#define SVGA3D_BUFFER_STRUCTURED_STRIDE_MAX 2048
> +
> +typedef enum {
> +	SVGA3DFORMAT_OP_TEXTURE = 0x00000001,
> +	SVGA3DFORMAT_OP_VOLUMETEXTURE = 0x00000002,
> +	SVGA3DFORMAT_OP_CUBETEXTURE = 0x00000004,
> +	SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET = 0x00000008,
> +	SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET = 0x00000010,
> +	SVGA3DFORMAT_OP_ZSTENCIL = 0x00000040,
> +	SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH = 0x00000080,
> +
> +	SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET = 0x00000100,
> +
> +	SVGA3DFORMAT_OP_DISPLAYMODE = 0x00000400,
> +
> +	SVGA3DFORMAT_OP_3DACCELERATION = 0x00000800,
> +
> +	SVGA3DFORMAT_OP_PIXELSIZE = 0x00001000,
> +
> +	SVGA3DFORMAT_OP_CONVERT_TO_ARGB = 0x00002000,
> +
> +	SVGA3DFORMAT_OP_OFFSCREENPLAIN = 0x00004000,
> +
> +	SVGA3DFORMAT_OP_SRGBREAD = 0x00008000,
> +
> +	SVGA3DFORMAT_OP_BUMPMAP = 0x00010000,
> +
> +	SVGA3DFORMAT_OP_DMAP = 0x00020000,
> +
> +	SVGA3DFORMAT_OP_NOFILTER = 0x00040000,
> +
> +	SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB = 0x00080000,
> +
> +	SVGA3DFORMAT_OP_SRGBWRITE = 0x00100000,
> +
> +	SVGA3DFORMAT_OP_NOALPHABLEND = 0x00200000,
> +
> +	SVGA3DFORMAT_OP_AUTOGENMIPMAP = 0x00400000,
> +
> +	SVGA3DFORMAT_OP_VERTEXTEXTURE = 0x00800000,
> +
> +	SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP = 0x01000000
> +} SVGA3dFormatOp;
> +
> +#define SVGA3D_FORMAT_POSITIVE                                                 \
> +	(SVGA3DFORMAT_OP_TEXTURE | SVGA3DFORMAT_OP_VOLUMETEXTURE |             \
> +	 SVGA3DFORMAT_OP_CUBETEXTURE |                                         \
> +	 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET |                              \
> +	 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET | SVGA3DFORMAT_OP_ZSTENCIL | \
> +	 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH |                 \
> +	 SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET |                \
> +	 SVGA3DFORMAT_OP_DISPLAYMODE | SVGA3DFORMAT_OP_3DACCELERATION |        \
> +	 SVGA3DFORMAT_OP_PIXELSIZE | SVGA3DFORMAT_OP_CONVERT_TO_ARGB |         \
> +	 SVGA3DFORMAT_OP_OFFSCREENPLAIN | SVGA3DFORMAT_OP_SRGBREAD |           \
> +	 SVGA3DFORMAT_OP_BUMPMAP | SVGA3DFORMAT_OP_DMAP |                      \
> +	 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB | SVGA3DFORMAT_OP_SRGBWRITE |      \
> +	 SVGA3DFORMAT_OP_AUTOGENMIPMAP | SVGA3DFORMAT_OP_VERTEXTEXTURE)
> +
> +#define SVGA3D_FORMAT_NEGATIVE                                     \
> +	(SVGA3DFORMAT_OP_NOFILTER | SVGA3DFORMAT_OP_NOALPHABLEND | \
> +	 SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP)
> +
> +typedef union {
> +	uint32 value;
> +	struct {
> +		uint32 texture : 1;
> +		uint32 volumeTexture : 1;
> +		uint32 cubeTexture : 1;
> +		uint32 offscreenRenderTarget : 1;
> +		uint32 sameFormatRenderTarget : 1;
> +		uint32 unknown1 : 1;
> +		uint32 zStencil : 1;
> +		uint32 zStencilArbitraryDepth : 1;
> +		uint32 sameFormatUpToAlpha : 1;
> +		uint32 unknown2 : 1;
> +		uint32 displayMode : 1;
> +		uint32 acceleration3d : 1;
> +		uint32 pixelSize : 1;
> +		uint32 convertToARGB : 1;
> +		uint32 offscreenPlain : 1;
> +		uint32 sRGBRead : 1;
> +		uint32 bumpMap : 1;
> +		uint32 dmap : 1;
> +		uint32 noFilter : 1;
> +		uint32 memberOfGroupARGB : 1;
> +		uint32 sRGBWrite : 1;
> +		uint32 noAlphaBlend : 1;
> +		uint32 autoGenMipMap : 1;
> +		uint32 vertexTexture : 1;
> +		uint32 noTexCoordWrapNorMip : 1;
> +	};
> +} SVGA3dSurfaceFormatCaps;
> +
> +typedef enum {
> +	SVGA3D_RS_INVALID = 0,
> +	SVGA3D_RS_MIN = 1,
> +	SVGA3D_RS_ZENABLE = 1,
> +	SVGA3D_RS_ZWRITEENABLE = 2,
> +	SVGA3D_RS_ALPHATESTENABLE = 3,
> +	SVGA3D_RS_DITHERENABLE = 4,
> +	SVGA3D_RS_BLENDENABLE = 5,
> +	SVGA3D_RS_FOGENABLE = 6,
> +	SVGA3D_RS_SPECULARENABLE = 7,
> +	SVGA3D_RS_STENCILENABLE = 8,
> +	SVGA3D_RS_LIGHTINGENABLE = 9,
> +	SVGA3D_RS_NORMALIZENORMALS = 10,
> +	SVGA3D_RS_POINTSPRITEENABLE = 11,
> +	SVGA3D_RS_POINTSCALEENABLE = 12,
> +	SVGA3D_RS_STENCILREF = 13,
> +	SVGA3D_RS_STENCILMASK = 14,
> +	SVGA3D_RS_STENCILWRITEMASK = 15,
> +	SVGA3D_RS_FOGSTART = 16,
> +	SVGA3D_RS_FOGEND = 17,
> +	SVGA3D_RS_FOGDENSITY = 18,
> +	SVGA3D_RS_POINTSIZE = 19,
> +	SVGA3D_RS_POINTSIZEMIN = 20,
> +	SVGA3D_RS_POINTSIZEMAX = 21,
> +	SVGA3D_RS_POINTSCALE_A = 22,
> +	SVGA3D_RS_POINTSCALE_B = 23,
> +	SVGA3D_RS_POINTSCALE_C = 24,
> +	SVGA3D_RS_FOGCOLOR = 25,
> +	SVGA3D_RS_AMBIENT = 26,
> +	SVGA3D_RS_CLIPPLANEENABLE = 27,
> +	SVGA3D_RS_FOGMODE = 28,
> +	SVGA3D_RS_FILLMODE = 29,
> +	SVGA3D_RS_SHADEMODE = 30,
> +	SVGA3D_RS_LINEPATTERN = 31,
> +	SVGA3D_RS_SRCBLEND = 32,
> +	SVGA3D_RS_DSTBLEND = 33,
> +	SVGA3D_RS_BLENDEQUATION = 34,
> +	SVGA3D_RS_CULLMODE = 35,
> +	SVGA3D_RS_ZFUNC = 36,
> +	SVGA3D_RS_ALPHAFUNC = 37,
> +	SVGA3D_RS_STENCILFUNC = 38,
> +	SVGA3D_RS_STENCILFAIL = 39,
> +	SVGA3D_RS_STENCILZFAIL = 40,
> +	SVGA3D_RS_STENCILPASS = 41,
> +	SVGA3D_RS_ALPHAREF = 42,
> +	SVGA3D_RS_FRONTWINDING = 43,
> +	SVGA3D_RS_COORDINATETYPE = 44,
> +	SVGA3D_RS_ZBIAS = 45,
> +	SVGA3D_RS_RANGEFOGENABLE = 46,
> +	SVGA3D_RS_COLORWRITEENABLE = 47,
> +	SVGA3D_RS_VERTEXMATERIALENABLE = 48,
> +	SVGA3D_RS_DIFFUSEMATERIALSOURCE = 49,
> +	SVGA3D_RS_SPECULARMATERIALSOURCE = 50,
> +	SVGA3D_RS_AMBIENTMATERIALSOURCE = 51,
> +	SVGA3D_RS_EMISSIVEMATERIALSOURCE = 52,
> +	SVGA3D_RS_TEXTUREFACTOR = 53,
> +	SVGA3D_RS_LOCALVIEWER = 54,
> +	SVGA3D_RS_SCISSORTESTENABLE = 55,
> +	SVGA3D_RS_BLENDCOLOR = 56,
> +	SVGA3D_RS_STENCILENABLE2SIDED = 57,
> +	SVGA3D_RS_CCWSTENCILFUNC = 58,
> +	SVGA3D_RS_CCWSTENCILFAIL = 59,
> +	SVGA3D_RS_CCWSTENCILZFAIL = 60,
> +	SVGA3D_RS_CCWSTENCILPASS = 61,
> +	SVGA3D_RS_VERTEXBLEND = 62,
> +	SVGA3D_RS_SLOPESCALEDEPTHBIAS = 63,
> +	SVGA3D_RS_DEPTHBIAS = 64,
> +
> +	SVGA3D_RS_OUTPUTGAMMA = 65,
> +	SVGA3D_RS_ZVISIBLE = 66,
> +	SVGA3D_RS_LASTPIXEL = 67,
> +	SVGA3D_RS_CLIPPING = 68,
> +	SVGA3D_RS_WRAP0 = 69,
> +	SVGA3D_RS_WRAP1 = 70,
> +	SVGA3D_RS_WRAP2 = 71,
> +	SVGA3D_RS_WRAP3 = 72,
> +	SVGA3D_RS_WRAP4 = 73,
> +	SVGA3D_RS_WRAP5 = 74,
> +	SVGA3D_RS_WRAP6 = 75,
> +	SVGA3D_RS_WRAP7 = 76,
> +	SVGA3D_RS_WRAP8 = 77,
> +	SVGA3D_RS_WRAP9 = 78,
> +	SVGA3D_RS_WRAP10 = 79,
> +	SVGA3D_RS_WRAP11 = 80,
> +	SVGA3D_RS_WRAP12 = 81,
> +	SVGA3D_RS_WRAP13 = 82,
> +	SVGA3D_RS_WRAP14 = 83,
> +	SVGA3D_RS_WRAP15 = 84,
> +	SVGA3D_RS_MULTISAMPLEANTIALIAS = 85,
> +	SVGA3D_RS_MULTISAMPLEMASK = 86,
> +	SVGA3D_RS_INDEXEDVERTEXBLENDENABLE = 87,
> +	SVGA3D_RS_TWEENFACTOR = 88,
> +	SVGA3D_RS_ANTIALIASEDLINEENABLE = 89,
> +	SVGA3D_RS_COLORWRITEENABLE1 = 90,
> +	SVGA3D_RS_COLORWRITEENABLE2 = 91,
> +	SVGA3D_RS_COLORWRITEENABLE3 = 92,
> +	SVGA3D_RS_SEPARATEALPHABLENDENABLE = 93,
> +	SVGA3D_RS_SRCBLENDALPHA = 94,
> +	SVGA3D_RS_DSTBLENDALPHA = 95,
> +	SVGA3D_RS_BLENDEQUATIONALPHA = 96,
> +	SVGA3D_RS_TRANSPARENCYANTIALIAS = 97,
> +	SVGA3D_RS_LINEWIDTH = 98,
> +	SVGA3D_RS_MAX
> +} SVGA3dRenderStateName;
> +
> +typedef enum {
> +	SVGA3D_TRANSPARENCYANTIALIAS_NORMAL = 0,
> +	SVGA3D_TRANSPARENCYANTIALIAS_ALPHATOCOVERAGE = 1,
> +	SVGA3D_TRANSPARENCYANTIALIAS_SUPERSAMPLE = 2,
> +	SVGA3D_TRANSPARENCYANTIALIAS_MAX
> +} SVGA3dTransparencyAntialiasType;
> +
> +typedef enum {
> +	SVGA3D_VERTEXMATERIAL_NONE = 0,
> +	SVGA3D_VERTEXMATERIAL_DIFFUSE = 1,
> +	SVGA3D_VERTEXMATERIAL_SPECULAR = 2,
> +	SVGA3D_VERTEXMATERIAL_MAX = 3,
> +} SVGA3dVertexMaterial;
> +
> +typedef enum {
> +	SVGA3D_FILLMODE_INVALID = 0,
> +	SVGA3D_FILLMODE_MIN = 1,
> +	SVGA3D_FILLMODE_POINT = 1,
> +	SVGA3D_FILLMODE_LINE = 2,
> +	SVGA3D_FILLMODE_FILL = 3,
> +	SVGA3D_FILLMODE_MAX
> +} SVGA3dFillModeType;
> +
> +#pragma pack(push, 1)
> +typedef union {
> +	struct {
> +		uint16 mode;
> +		uint16 face;
> +	};
> +	uint32 uintValue;
> +} SVGA3dFillMode;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA3D_SHADEMODE_INVALID = 0,
> +	SVGA3D_SHADEMODE_FLAT = 1,
> +	SVGA3D_SHADEMODE_SMOOTH = 2,
> +	SVGA3D_SHADEMODE_PHONG = 3,
> +	SVGA3D_SHADEMODE_MAX
> +} SVGA3dShadeMode;
> +
> +#pragma pack(push, 1)
> +typedef union {
> +	struct {
> +		uint16 repeat;
> +		uint16 pattern;
> +	};
> +	uint32 uintValue;
> +} SVGA3dLinePattern;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA3D_BLENDOP_INVALID = 0,
> +	SVGA3D_BLENDOP_MIN = 1,
> +	SVGA3D_BLENDOP_ZERO = 1,
> +	SVGA3D_BLENDOP_ONE = 2,
> +	SVGA3D_BLENDOP_SRCCOLOR = 3,
> +	SVGA3D_BLENDOP_INVSRCCOLOR = 4,
> +	SVGA3D_BLENDOP_SRCALPHA = 5,
> +	SVGA3D_BLENDOP_INVSRCALPHA = 6,
> +	SVGA3D_BLENDOP_DESTALPHA = 7,
> +	SVGA3D_BLENDOP_INVDESTALPHA = 8,
> +	SVGA3D_BLENDOP_DESTCOLOR = 9,
> +	SVGA3D_BLENDOP_INVDESTCOLOR = 10,
> +	SVGA3D_BLENDOP_SRCALPHASAT = 11,
> +	SVGA3D_BLENDOP_BLENDFACTOR = 12,
> +	SVGA3D_BLENDOP_INVBLENDFACTOR = 13,
> +	SVGA3D_BLENDOP_SRC1COLOR = 14,
> +	SVGA3D_BLENDOP_INVSRC1COLOR = 15,
> +	SVGA3D_BLENDOP_SRC1ALPHA = 16,
> +	SVGA3D_BLENDOP_INVSRC1ALPHA = 17,
> +	SVGA3D_BLENDOP_BLENDFACTORALPHA = 18,
> +	SVGA3D_BLENDOP_INVBLENDFACTORALPHA = 19,
> +	SVGA3D_BLENDOP_MAX
> +} SVGA3dBlendOp;
> +
> +typedef enum {
> +	SVGA3D_BLENDEQ_INVALID = 0,
> +	SVGA3D_BLENDEQ_MIN = 1,
> +	SVGA3D_BLENDEQ_ADD = 1,
> +	SVGA3D_BLENDEQ_SUBTRACT = 2,
> +	SVGA3D_BLENDEQ_REVSUBTRACT = 3,
> +	SVGA3D_BLENDEQ_MINIMUM = 4,
> +	SVGA3D_BLENDEQ_MAXIMUM = 5,
> +	SVGA3D_BLENDEQ_MAX
> +} SVGA3dBlendEquation;
> +
> +typedef enum {
> +	SVGA3D_DX11_LOGICOP_MIN = 0,
> +	SVGA3D_DX11_LOGICOP_CLEAR = 0,
> +	SVGA3D_DX11_LOGICOP_SET = 1,
> +	SVGA3D_DX11_LOGICOP_COPY = 2,
> +	SVGA3D_DX11_LOGICOP_COPY_INVERTED = 3,
> +	SVGA3D_DX11_LOGICOP_NOOP = 4,
> +	SVGA3D_DX11_LOGICOP_INVERT = 5,
> +	SVGA3D_DX11_LOGICOP_AND = 6,
> +	SVGA3D_DX11_LOGICOP_NAND = 7,
> +	SVGA3D_DX11_LOGICOP_OR = 8,
> +	SVGA3D_DX11_LOGICOP_NOR = 9,
> +	SVGA3D_DX11_LOGICOP_XOR = 10,
> +	SVGA3D_DX11_LOGICOP_EQUIV = 11,
> +	SVGA3D_DX11_LOGICOP_AND_REVERSE = 12,
> +	SVGA3D_DX11_LOGICOP_AND_INVERTED = 13,
> +	SVGA3D_DX11_LOGICOP_OR_REVERSE = 14,
> +	SVGA3D_DX11_LOGICOP_OR_INVERTED = 15,
> +	SVGA3D_DX11_LOGICOP_MAX
> +} SVGA3dDX11LogicOp;
> +
> +typedef enum {
> +	SVGA3D_FRONTWINDING_INVALID = 0,
> +	SVGA3D_FRONTWINDING_CW = 1,
> +	SVGA3D_FRONTWINDING_MIN = 1,
> +	SVGA3D_FRONTWINDING_CCW = 2,
> +	SVGA3D_FRONTWINDING_MAX
> +} SVGA3dFrontWinding;
> +
> +typedef enum {
> +	SVGA3D_FACE_INVALID = 0,
> +	SVGA3D_FACE_NONE = 1,
> +	SVGA3D_FACE_MIN = 1,
> +	SVGA3D_FACE_FRONT = 2,
> +	SVGA3D_FACE_BACK = 3,
> +	SVGA3D_FACE_FRONT_BACK = 4,
> +	SVGA3D_FACE_MAX
> +} SVGA3dFace;
> +
> +typedef enum {
> +	SVGA3D_CMP_INVALID = 0,
> +	SVGA3D_CMP_NEVER = 1,
> +	SVGA3D_CMP_LESS = 2,
> +	SVGA3D_CMP_EQUAL = 3,
> +	SVGA3D_CMP_LESSEQUAL = 4,
> +	SVGA3D_CMP_GREATER = 5,
> +	SVGA3D_CMP_NOTEQUAL = 6,
> +	SVGA3D_CMP_GREATEREQUAL = 7,
> +	SVGA3D_CMP_ALWAYS = 8,
> +	SVGA3D_CMP_MAX
> +} SVGA3dCmpFunc;
> +
> +typedef enum {
> +	SVGA3D_FOGFUNC_INVALID = 0,
> +	SVGA3D_FOGFUNC_EXP = 1,
> +	SVGA3D_FOGFUNC_EXP2 = 2,
> +	SVGA3D_FOGFUNC_LINEAR = 3,
> +	SVGA3D_FOGFUNC_PER_VERTEX = 4
> +} SVGA3dFogFunction;
> +
> +typedef enum {
> +	SVGA3D_FOGTYPE_INVALID = 0,
> +	SVGA3D_FOGTYPE_VERTEX = 1,
> +	SVGA3D_FOGTYPE_PIXEL = 2,
> +	SVGA3D_FOGTYPE_MAX = 3
> +} SVGA3dFogType;
> +
> +typedef enum {
> +	SVGA3D_FOGBASE_INVALID = 0,
> +	SVGA3D_FOGBASE_DEPTHBASED = 1,
> +	SVGA3D_FOGBASE_RANGEBASED = 2,
> +	SVGA3D_FOGBASE_MAX = 3
> +} SVGA3dFogBase;
> +
> +typedef enum {
> +	SVGA3D_STENCILOP_INVALID = 0,
> +	SVGA3D_STENCILOP_MIN = 1,
> +	SVGA3D_STENCILOP_KEEP = 1,
> +	SVGA3D_STENCILOP_ZERO = 2,
> +	SVGA3D_STENCILOP_REPLACE = 3,
> +	SVGA3D_STENCILOP_INCRSAT = 4,
> +	SVGA3D_STENCILOP_DECRSAT = 5,
> +	SVGA3D_STENCILOP_INVERT = 6,
> +	SVGA3D_STENCILOP_INCR = 7,
> +	SVGA3D_STENCILOP_DECR = 8,
> +	SVGA3D_STENCILOP_MAX
> +} SVGA3dStencilOp;
> +
> +typedef enum {
> +	SVGA3D_CLIPPLANE_0 = (1 << 0),
> +	SVGA3D_CLIPPLANE_1 = (1 << 1),
> +	SVGA3D_CLIPPLANE_2 = (1 << 2),
> +	SVGA3D_CLIPPLANE_3 = (1 << 3),
> +	SVGA3D_CLIPPLANE_4 = (1 << 4),
> +	SVGA3D_CLIPPLANE_5 = (1 << 5),
> +} SVGA3dClipPlanes;
> +
> +typedef enum {
> +	SVGA3D_CLEAR_COLOR = 0x1,
> +	SVGA3D_CLEAR_DEPTH = 0x2,
> +	SVGA3D_CLEAR_STENCIL = 0x4,
> +
> +	SVGA3D_CLEAR_COLORFILL = 0x8
> +} SVGA3dClearFlag;
> +
> +typedef enum {
> +	SVGA3D_RT_DEPTH = 0,
> +	SVGA3D_RT_MIN = 0,
> +	SVGA3D_RT_STENCIL = 1,
> +	SVGA3D_RT_COLOR0 = 2,
> +	SVGA3D_RT_COLOR1 = 3,
> +	SVGA3D_RT_COLOR2 = 4,
> +	SVGA3D_RT_COLOR3 = 5,
> +	SVGA3D_RT_COLOR4 = 6,
> +	SVGA3D_RT_COLOR5 = 7,
> +	SVGA3D_RT_COLOR6 = 8,
> +	SVGA3D_RT_COLOR7 = 9,
> +	SVGA3D_RT_MAX,
> +	SVGA3D_RT_INVALID = ((uint32)-1),
> +} SVGA3dRenderTargetType;
> +
> +#define SVGA3D_MAX_RT_COLOR (SVGA3D_RT_COLOR7 - SVGA3D_RT_COLOR0 + 1)
> +
> +#pragma pack(push, 1)
> +typedef union {
> +	struct {
> +		uint32 red : 1;
> +		uint32 green : 1;
> +		uint32 blue : 1;
> +		uint32 alpha : 1;
> +	};
> +	uint32 uintValue;
> +} SVGA3dColorMask;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA3D_VBLEND_DISABLE = 0,
> +	SVGA3D_VBLEND_1WEIGHT = 1,
> +	SVGA3D_VBLEND_2WEIGHT = 2,
> +	SVGA3D_VBLEND_3WEIGHT = 3,
> +	SVGA3D_VBLEND_MAX = 4,
> +} SVGA3dVertexBlendFlags;
> +
> +typedef enum {
> +	SVGA3D_WRAPCOORD_0 = 1 << 0,
> +	SVGA3D_WRAPCOORD_1 = 1 << 1,
> +	SVGA3D_WRAPCOORD_2 = 1 << 2,
> +	SVGA3D_WRAPCOORD_3 = 1 << 3,
> +	SVGA3D_WRAPCOORD_ALL = 0xF,
> +} SVGA3dWrapFlags;
> +
> +typedef enum {
> +	SVGA3D_TS_INVALID = 0,
> +	SVGA3D_TS_MIN = 1,
> +	SVGA3D_TS_BIND_TEXTURE = 1,
> +	SVGA3D_TS_COLOROP = 2,
> +	SVGA3D_TS_COLORARG1 = 3,
> +	SVGA3D_TS_COLORARG2 = 4,
> +	SVGA3D_TS_ALPHAOP = 5,
> +	SVGA3D_TS_ALPHAARG1 = 6,
> +	SVGA3D_TS_ALPHAARG2 = 7,
> +	SVGA3D_TS_ADDRESSU = 8,
> +	SVGA3D_TS_ADDRESSV = 9,
> +	SVGA3D_TS_MIPFILTER = 10,
> +	SVGA3D_TS_MAGFILTER = 11,
> +	SVGA3D_TS_MINFILTER = 12,
> +	SVGA3D_TS_BORDERCOLOR = 13,
> +	SVGA3D_TS_TEXCOORDINDEX = 14,
> +	SVGA3D_TS_TEXTURETRANSFORMFLAGS = 15,
> +	SVGA3D_TS_TEXCOORDGEN = 16,
> +	SVGA3D_TS_BUMPENVMAT00 = 17,
> +	SVGA3D_TS_BUMPENVMAT01 = 18,
> +	SVGA3D_TS_BUMPENVMAT10 = 19,
> +	SVGA3D_TS_BUMPENVMAT11 = 20,
> +	SVGA3D_TS_TEXTURE_MIPMAP_LEVEL = 21,
> +	SVGA3D_TS_TEXTURE_LOD_BIAS = 22,
> +	SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL = 23,
> +	SVGA3D_TS_ADDRESSW = 24,
> +
> +	SVGA3D_TS_GAMMA = 25,
> +	SVGA3D_TS_BUMPENVLSCALE = 26,
> +	SVGA3D_TS_BUMPENVLOFFSET = 27,
> +	SVGA3D_TS_COLORARG0 = 28,
> +	SVGA3D_TS_ALPHAARG0 = 29,
> +	SVGA3D_TS_PREGB_MAX = 30,
> +	SVGA3D_TS_CONSTANT = 30,
> +	SVGA3D_TS_COLOR_KEY_ENABLE = 31,
> +	SVGA3D_TS_COLOR_KEY = 32,
> +	SVGA3D_TS_MAX
> +} SVGA3dTextureStateName;
> +
> +typedef enum {
> +	SVGA3D_TC_INVALID = 0,
> +	SVGA3D_TC_DISABLE = 1,
> +	SVGA3D_TC_SELECTARG1 = 2,
> +	SVGA3D_TC_SELECTARG2 = 3,
> +	SVGA3D_TC_MODULATE = 4,
> +	SVGA3D_TC_ADD = 5,
> +	SVGA3D_TC_ADDSIGNED = 6,
> +	SVGA3D_TC_SUBTRACT = 7,
> +	SVGA3D_TC_BLENDTEXTUREALPHA = 8,
> +	SVGA3D_TC_BLENDDIFFUSEALPHA = 9,
> +	SVGA3D_TC_BLENDCURRENTALPHA = 10,
> +	SVGA3D_TC_BLENDFACTORALPHA = 11,
> +	SVGA3D_TC_MODULATE2X = 12,
> +	SVGA3D_TC_MODULATE4X = 13,
> +	SVGA3D_TC_DSDT = 14,
> +	SVGA3D_TC_DOTPRODUCT3 = 15,
> +	SVGA3D_TC_BLENDTEXTUREALPHAPM = 16,
> +	SVGA3D_TC_ADDSIGNED2X = 17,
> +	SVGA3D_TC_ADDSMOOTH = 18,
> +	SVGA3D_TC_PREMODULATE = 19,
> +	SVGA3D_TC_MODULATEALPHA_ADDCOLOR = 20,
> +	SVGA3D_TC_MODULATECOLOR_ADDALPHA = 21,
> +	SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR = 22,
> +	SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA = 23,
> +	SVGA3D_TC_BUMPENVMAPLUMINANCE = 24,
> +	SVGA3D_TC_MULTIPLYADD = 25,
> +	SVGA3D_TC_LERP = 26,
> +	SVGA3D_TC_MAX
> +} SVGA3dTextureCombiner;
> +
> +#define SVGA3D_TC_CAP_BIT(svga3d_tc_op) \
> +	(svga3d_tc_op ? (1 << (svga3d_tc_op - 1)) : 0)
> +
> +typedef enum {
> +	SVGA3D_TEX_ADDRESS_INVALID = 0,
> +	SVGA3D_TEX_ADDRESS_MIN = 1,
> +	SVGA3D_TEX_ADDRESS_WRAP = 1,
> +	SVGA3D_TEX_ADDRESS_MIRROR = 2,
> +	SVGA3D_TEX_ADDRESS_CLAMP = 3,
> +	SVGA3D_TEX_ADDRESS_BORDER = 4,
> +	SVGA3D_TEX_ADDRESS_MIRRORONCE = 5,
> +	SVGA3D_TEX_ADDRESS_EDGE = 6,
> +	SVGA3D_TEX_ADDRESS_MAX
> +} SVGA3dTextureAddress;
> +
> +typedef enum {
> +	SVGA3D_TEX_FILTER_NONE = 0,
> +	SVGA3D_TEX_FILTER_MIN = 0,
> +	SVGA3D_TEX_FILTER_NEAREST = 1,
> +	SVGA3D_TEX_FILTER_LINEAR = 2,
> +	SVGA3D_TEX_FILTER_ANISOTROPIC = 3,
> +	SVGA3D_TEX_FILTER_FLATCUBIC = 4,
> +	SVGA3D_TEX_FILTER_GAUSSIANCUBIC = 5,
> +	SVGA3D_TEX_FILTER_PYRAMIDALQUAD = 6,
> +	SVGA3D_TEX_FILTER_GAUSSIANQUAD = 7,
> +	SVGA3D_TEX_FILTER_MAX
> +} SVGA3dTextureFilter;
> +
> +typedef enum {
> +	SVGA3D_TEX_TRANSFORM_OFF = 0,
> +	SVGA3D_TEX_TRANSFORM_S = (1 << 0),
> +	SVGA3D_TEX_TRANSFORM_T = (1 << 1),
> +	SVGA3D_TEX_TRANSFORM_R = (1 << 2),
> +	SVGA3D_TEX_TRANSFORM_Q = (1 << 3),
> +	SVGA3D_TEX_PROJECTED = (1 << 15),
> +} SVGA3dTexTransformFlags;
> +
> +typedef enum {
> +	SVGA3D_TEXCOORD_GEN_OFF = 0,
> +	SVGA3D_TEXCOORD_GEN_EYE_POSITION = 1,
> +	SVGA3D_TEXCOORD_GEN_EYE_NORMAL = 2,
> +	SVGA3D_TEXCOORD_GEN_REFLECTIONVECTOR = 3,
> +	SVGA3D_TEXCOORD_GEN_SPHERE = 4,
> +	SVGA3D_TEXCOORD_GEN_MAX
> +} SVGA3dTextureCoordGen;
> +
> +typedef enum {
> +	SVGA3D_TA_INVALID = 0,
> +	SVGA3D_TA_TFACTOR = 1,
> +	SVGA3D_TA_PREVIOUS = 2,
> +	SVGA3D_TA_DIFFUSE = 3,
> +	SVGA3D_TA_TEXTURE = 4,
> +	SVGA3D_TA_SPECULAR = 5,
> +	SVGA3D_TA_CONSTANT = 6,
> +	SVGA3D_TA_MAX
> +} SVGA3dTextureArgData;
> +
> +#define SVGA3D_TM_MASK_LEN 4
> +
> +typedef enum {
> +	SVGA3D_TM_NONE = 0,
> +	SVGA3D_TM_ALPHA = (1 << SVGA3D_TM_MASK_LEN),
> +	SVGA3D_TM_ONE_MINUS = (2 << SVGA3D_TM_MASK_LEN),
> +} SVGA3dTextureArgModifier;
> +
> +typedef enum {
> +	SVGA3D_DECLUSAGE_POSITION = 0,
> +	SVGA3D_DECLUSAGE_BLENDWEIGHT,
> +	SVGA3D_DECLUSAGE_BLENDINDICES,
> +	SVGA3D_DECLUSAGE_NORMAL,
> +	SVGA3D_DECLUSAGE_PSIZE,
> +	SVGA3D_DECLUSAGE_TEXCOORD,
> +	SVGA3D_DECLUSAGE_TANGENT,
> +	SVGA3D_DECLUSAGE_BINORMAL,
> +	SVGA3D_DECLUSAGE_TESSFACTOR,
> +	SVGA3D_DECLUSAGE_POSITIONT,
> +	SVGA3D_DECLUSAGE_COLOR,
> +	SVGA3D_DECLUSAGE_FOG,
> +	SVGA3D_DECLUSAGE_DEPTH,
> +	SVGA3D_DECLUSAGE_SAMPLE,
> +	SVGA3D_DECLUSAGE_MAX
> +} SVGA3dDeclUsage;
> +
> +typedef enum {
> +	SVGA3D_DECLMETHOD_DEFAULT = 0,
> +	SVGA3D_DECLMETHOD_PARTIALU,
> +	SVGA3D_DECLMETHOD_PARTIALV,
> +	SVGA3D_DECLMETHOD_CROSSUV,
> +	SVGA3D_DECLMETHOD_UV,
> +	SVGA3D_DECLMETHOD_LOOKUP,
> +	SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED,
> +} SVGA3dDeclMethod;
> +
> +typedef enum {
> +	SVGA3D_DECLTYPE_FLOAT1 = 0,
> +	SVGA3D_DECLTYPE_FLOAT2 = 1,
> +	SVGA3D_DECLTYPE_FLOAT3 = 2,
> +	SVGA3D_DECLTYPE_FLOAT4 = 3,
> +	SVGA3D_DECLTYPE_D3DCOLOR = 4,
> +	SVGA3D_DECLTYPE_UBYTE4 = 5,
> +	SVGA3D_DECLTYPE_SHORT2 = 6,
> +	SVGA3D_DECLTYPE_SHORT4 = 7,
> +	SVGA3D_DECLTYPE_UBYTE4N = 8,
> +	SVGA3D_DECLTYPE_SHORT2N = 9,
> +	SVGA3D_DECLTYPE_SHORT4N = 10,
> +	SVGA3D_DECLTYPE_USHORT2N = 11,
> +	SVGA3D_DECLTYPE_USHORT4N = 12,
> +	SVGA3D_DECLTYPE_UDEC3 = 13,
> +	SVGA3D_DECLTYPE_DEC3N = 14,
> +	SVGA3D_DECLTYPE_FLOAT16_2 = 15,
> +	SVGA3D_DECLTYPE_FLOAT16_4 = 16,
> +	SVGA3D_DECLTYPE_MAX,
> +} SVGA3dDeclType;
> +
> +typedef union {
> +	struct {
> +		uint32 count : 30;
> +
> +		uint32 indexedData : 1;
> +
> +		uint32 instanceData : 1;
> +	};
> +
> +	uint32 value;
> +} SVGA3dVertexDivisor;
> +
> +typedef enum {
> +
> +	SVGA3D_PRIMITIVE_INVALID = 0,
> +	SVGA3D_PRIMITIVE_MIN = 0,
> +	SVGA3D_PRIMITIVE_TRIANGLELIST = 1,
> +	SVGA3D_PRIMITIVE_POINTLIST = 2,
> +	SVGA3D_PRIMITIVE_LINELIST = 3,
> +	SVGA3D_PRIMITIVE_LINESTRIP = 4,
> +	SVGA3D_PRIMITIVE_TRIANGLESTRIP = 5,
> +	SVGA3D_PRIMITIVE_TRIANGLEFAN = 6,
> +	SVGA3D_PRIMITIVE_LINELIST_ADJ = 7,
> +	SVGA3D_PRIMITIVE_PREDX_MAX = 7,
> +	SVGA3D_PRIMITIVE_LINESTRIP_ADJ = 8,
> +	SVGA3D_PRIMITIVE_TRIANGLELIST_ADJ = 9,
> +	SVGA3D_PRIMITIVE_TRIANGLESTRIP_ADJ = 10,
> +	SVGA3D_PRIMITIVE_DX10_MAX = 11,
> +	SVGA3D_PRIMITIVE_1_CONTROL_POINT_PATCH = 11,
> +	SVGA3D_PRIMITIVE_2_CONTROL_POINT_PATCH = 12,
> +	SVGA3D_PRIMITIVE_3_CONTROL_POINT_PATCH = 13,
> +	SVGA3D_PRIMITIVE_4_CONTROL_POINT_PATCH = 14,
> +	SVGA3D_PRIMITIVE_5_CONTROL_POINT_PATCH = 15,
> +	SVGA3D_PRIMITIVE_6_CONTROL_POINT_PATCH = 16,
> +	SVGA3D_PRIMITIVE_7_CONTROL_POINT_PATCH = 17,
> +	SVGA3D_PRIMITIVE_8_CONTROL_POINT_PATCH = 18,
> +	SVGA3D_PRIMITIVE_9_CONTROL_POINT_PATCH = 19,
> +	SVGA3D_PRIMITIVE_10_CONTROL_POINT_PATCH = 20,
> +	SVGA3D_PRIMITIVE_11_CONTROL_POINT_PATCH = 21,
> +	SVGA3D_PRIMITIVE_12_CONTROL_POINT_PATCH = 22,
> +	SVGA3D_PRIMITIVE_13_CONTROL_POINT_PATCH = 23,
> +	SVGA3D_PRIMITIVE_14_CONTROL_POINT_PATCH = 24,
> +	SVGA3D_PRIMITIVE_15_CONTROL_POINT_PATCH = 25,
> +	SVGA3D_PRIMITIVE_16_CONTROL_POINT_PATCH = 26,
> +	SVGA3D_PRIMITIVE_17_CONTROL_POINT_PATCH = 27,
> +	SVGA3D_PRIMITIVE_18_CONTROL_POINT_PATCH = 28,
> +	SVGA3D_PRIMITIVE_19_CONTROL_POINT_PATCH = 29,
> +	SVGA3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 30,
> +	SVGA3D_PRIMITIVE_21_CONTROL_POINT_PATCH = 31,
> +	SVGA3D_PRIMITIVE_22_CONTROL_POINT_PATCH = 32,
> +	SVGA3D_PRIMITIVE_23_CONTROL_POINT_PATCH = 33,
> +	SVGA3D_PRIMITIVE_24_CONTROL_POINT_PATCH = 34,
> +	SVGA3D_PRIMITIVE_25_CONTROL_POINT_PATCH = 35,
> +	SVGA3D_PRIMITIVE_26_CONTROL_POINT_PATCH = 36,
> +	SVGA3D_PRIMITIVE_27_CONTROL_POINT_PATCH = 37,
> +	SVGA3D_PRIMITIVE_28_CONTROL_POINT_PATCH = 38,
> +	SVGA3D_PRIMITIVE_29_CONTROL_POINT_PATCH = 39,
> +	SVGA3D_PRIMITIVE_30_CONTROL_POINT_PATCH = 40,
> +	SVGA3D_PRIMITIVE_31_CONTROL_POINT_PATCH = 41,
> +	SVGA3D_PRIMITIVE_32_CONTROL_POINT_PATCH = 42,
> +	SVGA3D_PRIMITIVE_MAX = 43
> +} SVGA3dPrimitiveType;
> +
> +typedef enum {
> +	SVGA3D_COORDINATE_INVALID = 0,
> +	SVGA3D_COORDINATE_LEFTHANDED = 1,
> +	SVGA3D_COORDINATE_RIGHTHANDED = 2,
> +	SVGA3D_COORDINATE_MAX
> +} SVGA3dCoordinateType;
> +
> +typedef enum {
> +	SVGA3D_TRANSFORM_INVALID = 0,
> +	SVGA3D_TRANSFORM_WORLD = 1,
> +	SVGA3D_TRANSFORM_MIN = 1,
> +	SVGA3D_TRANSFORM_VIEW = 2,
> +	SVGA3D_TRANSFORM_PROJECTION = 3,
> +	SVGA3D_TRANSFORM_TEXTURE0 = 4,
> +	SVGA3D_TRANSFORM_TEXTURE1 = 5,
> +	SVGA3D_TRANSFORM_TEXTURE2 = 6,
> +	SVGA3D_TRANSFORM_TEXTURE3 = 7,
> +	SVGA3D_TRANSFORM_TEXTURE4 = 8,
> +	SVGA3D_TRANSFORM_TEXTURE5 = 9,
> +	SVGA3D_TRANSFORM_TEXTURE6 = 10,
> +	SVGA3D_TRANSFORM_TEXTURE7 = 11,
> +	SVGA3D_TRANSFORM_WORLD1 = 12,
> +	SVGA3D_TRANSFORM_WORLD2 = 13,
> +	SVGA3D_TRANSFORM_WORLD3 = 14,
> +	SVGA3D_TRANSFORM_MAX
> +} SVGA3dTransformType;
> +
> +typedef enum {
> +	SVGA3D_LIGHTTYPE_INVALID = 0,
> +	SVGA3D_LIGHTTYPE_MIN = 1,
> +	SVGA3D_LIGHTTYPE_POINT = 1,
> +	SVGA3D_LIGHTTYPE_SPOT1 = 2,
> +	SVGA3D_LIGHTTYPE_SPOT2 = 3,
> +	SVGA3D_LIGHTTYPE_DIRECTIONAL = 4,
> +	SVGA3D_LIGHTTYPE_MAX
> +} SVGA3dLightType;
> +
> +typedef enum {
> +	SVGA3D_CUBEFACE_POSX = 0,
> +	SVGA3D_CUBEFACE_NEGX = 1,
> +	SVGA3D_CUBEFACE_POSY = 2,
> +	SVGA3D_CUBEFACE_NEGY = 3,
> +	SVGA3D_CUBEFACE_POSZ = 4,
> +	SVGA3D_CUBEFACE_NEGZ = 5,
> +} SVGA3dCubeFace;
> +
> +typedef enum {
> +	SVGA3D_SHADERTYPE_INVALID = 0,
> +	SVGA3D_SHADERTYPE_MIN = 1,
> +	SVGA3D_SHADERTYPE_VS = 1,
> +	SVGA3D_SHADERTYPE_PS = 2,
> +	SVGA3D_SHADERTYPE_PREDX_MAX = 3,
> +	SVGA3D_SHADERTYPE_GS = 3,
> +	SVGA3D_SHADERTYPE_DX10_MAX = 4,
> +	SVGA3D_SHADERTYPE_HS = 4,
> +	SVGA3D_SHADERTYPE_DS = 5,
> +	SVGA3D_SHADERTYPE_CS = 6,
> +	SVGA3D_SHADERTYPE_MAX = 7
> +} SVGA3dShaderType;
> +
> +#define SVGA3D_NUM_SHADERTYPE_PREDX \
> +	(SVGA3D_SHADERTYPE_PREDX_MAX - SVGA3D_SHADERTYPE_MIN)
> +
> +#define SVGA3D_NUM_SHADERTYPE_DX10 \
> +	(SVGA3D_SHADERTYPE_DX10_MAX - SVGA3D_SHADERTYPE_MIN)
> +
> +#define SVGA3D_NUM_SHADERTYPE (SVGA3D_SHADERTYPE_MAX - SVGA3D_SHADERTYPE_MIN)
> +
> +typedef enum {
> +	SVGA3D_CONST_TYPE_MIN = 0,
> +	SVGA3D_CONST_TYPE_FLOAT = 0,
> +	SVGA3D_CONST_TYPE_INT = 1,
> +	SVGA3D_CONST_TYPE_BOOL = 2,
> +	SVGA3D_CONST_TYPE_MAX = 3,
> +} SVGA3dShaderConstType;
> +
> +#define SVGA3D_CONSTREG_MAX 256
> +#define SVGA3D_CONSTINTREG_MAX 16
> +#define SVGA3D_CONSTBOOLREG_MAX 16
> +
> +typedef enum {
> +	SVGA3D_STRETCH_BLT_POINT = 0,
> +	SVGA3D_STRETCH_BLT_LINEAR = 1,
> +	SVGA3D_STRETCH_BLT_MAX
> +} SVGA3dStretchBltMode;
> +
> +typedef enum {
> +	SVGA3D_QUERYTYPE_INVALID = ((uint8)-1),
> +	SVGA3D_QUERYTYPE_MIN = 0,
> +	SVGA3D_QUERYTYPE_OCCLUSION = 0,
> +	SVGA3D_QUERYTYPE_TIMESTAMP = 1,
> +	SVGA3D_QUERYTYPE_TIMESTAMPDISJOINT = 2,
> +	SVGA3D_QUERYTYPE_PIPELINESTATS = 3,
> +	SVGA3D_QUERYTYPE_OCCLUSIONPREDICATE = 4,
> +	SVGA3D_QUERYTYPE_STREAMOUTPUTSTATS = 5,
> +	SVGA3D_QUERYTYPE_STREAMOVERFLOWPREDICATE = 6,
> +	SVGA3D_QUERYTYPE_OCCLUSION64 = 7,
> +	SVGA3D_QUERYTYPE_DX10_MAX = 8,
> +	SVGA3D_QUERYTYPE_SOSTATS_STREAM0 = 8,
> +	SVGA3D_QUERYTYPE_SOSTATS_STREAM1 = 9,
> +	SVGA3D_QUERYTYPE_SOSTATS_STREAM2 = 10,
> +	SVGA3D_QUERYTYPE_SOSTATS_STREAM3 = 11,
> +	SVGA3D_QUERYTYPE_SOP_STREAM0 = 12,
> +	SVGA3D_QUERYTYPE_SOP_STREAM1 = 13,
> +	SVGA3D_QUERYTYPE_SOP_STREAM2 = 14,
> +	SVGA3D_QUERYTYPE_SOP_STREAM3 = 15,
> +	SVGA3D_QUERYTYPE_MAX
> +} SVGA3dQueryType;
> +
> +typedef uint8 SVGA3dQueryTypeUint8;
> +
> +#define SVGA3D_NUM_QUERYTYPE (SVGA3D_QUERYTYPE_MAX - SVGA3D_QUERYTYPE_MIN)
> +
> +#define SVGA3D_MAX_QUERY 64
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 samplesRendered;
> +} SVGADXOcclusionQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 passed;
> +} SVGADXEventQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint64 timestamp;
> +} SVGADXTimestampQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint64 realFrequency;
> +	uint32 disjoint;
> +} SVGADXTimestampDisjointQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint64 inputAssemblyVertices;
> +	uint64 inputAssemblyPrimitives;
> +	uint64 vertexShaderInvocations;
> +	uint64 geometryShaderInvocations;
> +	uint64 geometryShaderPrimitives;
> +	uint64 clipperInvocations;
> +	uint64 clipperPrimitives;
> +	uint64 pixelShaderInvocations;
> +	uint64 hullShaderInvocations;
> +	uint64 domainShaderInvocations;
> +	uint64 computeShaderInvocations;
> +} SVGADXPipelineStatisticsQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 anySamplesRendered;
> +} SVGADXOcclusionPredicateQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint64 numPrimitivesWritten;
> +	uint64 numPrimitivesRequired;
> +} SVGADXStreamOutStatisticsQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 overflowed;
> +} SVGADXStreamOutPredicateQueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint64 samplesRendered;
> +} SVGADXOcclusion64QueryResult;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef union SVGADXQueryResultUnion {
> +	SVGADXOcclusionQueryResult occ;
> +	SVGADXEventQueryResult event;
> +	SVGADXTimestampQueryResult ts;
> +	SVGADXTimestampDisjointQueryResult tsDisjoint;
> +	SVGADXPipelineStatisticsQueryResult pipelineStats;
> +	SVGADXOcclusionPredicateQueryResult occPred;
> +	SVGADXStreamOutStatisticsQueryResult soStats;
> +	SVGADXStreamOutPredicateQueryResult soPred;
> +	SVGADXOcclusion64QueryResult occ64;
> +} SVGADXQueryResultUnion;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA3D_QUERYSTATE_PENDING = 0,
> +	SVGA3D_QUERYSTATE_SUCCEEDED = 1,
> +	SVGA3D_QUERYSTATE_FAILED = 2,
> +	SVGA3D_QUERYSTATE_NEW = 3,
> +} SVGA3dQueryState;
> +
> +typedef enum {
> +	SVGA3D_WRITE_HOST_VRAM = 1,
> +	SVGA3D_READ_HOST_VRAM = 2,
> +} SVGA3dTransferType;
> +
> +#define SVGA3D_LOGICOP_INVALID 0
> +#define SVGA3D_LOGICOP_COPY 1
> +
> +#define SVGA3D_LOGICOP_MIN 1
> +#define SVGA3D_LOGICOP_NOT 2
> +#define SVGA3D_LOGICOP_AND 3
> +#define SVGA3D_LOGICOP_OR 4
> +#define SVGA3D_LOGICOP_XOR 5
> +#define SVGA3D_LOGICOP_NXOR 6
> +#define SVGA3D_LOGICOP_ROP3 7
> +
> +#define SVGA3D_LOGICOP_MAX 8
> +
> +typedef uint16 SVGA3dLogicOp;
> +
> +#define SVGA3D_LOGICOP_ROP3_INVALID ((uint16)-1)
> +#define SVGA3D_LOGICOP_ROP3_MIN 0
> +#define SVGA3D_LOGICOP_ROP3_MAX 256
> +
> +typedef uint16 SVGA3dLogicOpRop3;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	union {
> +		struct {
> +			uint16 function;
> +			uint8 type;
> +			uint8 base;
> +		};
> +		uint32 uintValue;
> +	};
> +} SVGA3dFogMode;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dSurfaceImageId {
> +	uint32 sid;
> +	uint32 face;
> +	uint32 mipmap;
> +} SVGA3dSurfaceImageId;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dSubSurfaceId {
> +	uint32 sid;
> +	uint32 subResourceId;
> +} SVGA3dSubSurfaceId;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 width;
> +	uint32 height;
> +	uint32 depth;
> +} SVGA3dSize;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA_OTABLE_MOB = 0,
> +	SVGA_OTABLE_MIN = 0,
> +	SVGA_OTABLE_SURFACE = 1,
> +	SVGA_OTABLE_CONTEXT = 2,
> +	SVGA_OTABLE_SHADER = 3,
> +	SVGA_OTABLE_SCREENTARGET = 4,
> +
> +	SVGA_OTABLE_DX9_MAX = 5,
> +
> +	SVGA_OTABLE_DXCONTEXT = 5,
> +	SVGA_OTABLE_DX_MAX = 6,
> +
> +	SVGA_OTABLE_DEVEL_MAX = 6,
> +	SVGA_OTABLE_MAX = 6,
> +
> +	SVGA_OTABLE_RESERVED1 = 6,
> +	SVGA_OTABLE_RESERVED2 = 7,
> +	SVGA_OTABLE_BUG_1952836_MAX = 8,
> +} SVGAOTableType;
> +
> +typedef enum {
> +	SVGA_COTABLE_MIN = 0,
> +	SVGA_COTABLE_RTVIEW = 0,
> +	SVGA_COTABLE_DSVIEW = 1,
> +	SVGA_COTABLE_SRVIEW = 2,
> +	SVGA_COTABLE_ELEMENTLAYOUT = 3,
> +	SVGA_COTABLE_BLENDSTATE = 4,
> +	SVGA_COTABLE_DEPTHSTENCIL = 5,
> +	SVGA_COTABLE_RASTERIZERSTATE = 6,
> +	SVGA_COTABLE_SAMPLER = 7,
> +	SVGA_COTABLE_STREAMOUTPUT = 8,
> +	SVGA_COTABLE_DXQUERY = 9,
> +	SVGA_COTABLE_DXSHADER = 10,
> +	SVGA_COTABLE_DX10_MAX = 11,
> +	SVGA_COTABLE_UAVIEW = 11,
> +	SVGA_COTABLE_MAX = 12,
> +} SVGACOTableType;
> +
> +#define SVGA_COTABLE_MAX_IDS (MAX_UINT16 - 2)
> +
> +typedef enum SVGAMobFormat {
> +	SVGA3D_MOBFMT_INVALID = SVGA3D_INVALID_ID,
> +	SVGA3D_MOBFMT_PT_0 = 0,
> +	SVGA3D_MOBFMT_MIN = 0,
> +	SVGA3D_MOBFMT_PT_1 = 1,
> +	SVGA3D_MOBFMT_PT_2 = 2,
> +	SVGA3D_MOBFMT_RANGE = 3,
> +	SVGA3D_MOBFMT_PT64_0 = 4,
> +	SVGA3D_MOBFMT_PT64_1 = 5,
> +	SVGA3D_MOBFMT_PT64_2 = 6,
> +	SVGA3D_MOBFMT_PREDX_MAX = 7,
> +	SVGA3D_MOBFMT_EMPTY = 7,
> +
> +	SVGA3D_MOBFMT_MAX,
> +
> +	SVGA3D_MOBFMT_HB,
> +} SVGAMobFormat;
> +
> +#define SVGA3D_MOB_EMPTY_BASE 1
> +
> +typedef enum SVGA3dMSPattern {
> +	SVGA3D_MS_PATTERN_NONE = 0,
> +	SVGA3D_MS_PATTERN_MIN = 0,
> +	SVGA3D_MS_PATTERN_STANDARD = 1,
> +	SVGA3D_MS_PATTERN_CENTER = 2,
> +	SVGA3D_MS_PATTERN_MAX = 3,
> +} SVGA3dMSPattern;
> +
> +typedef enum SVGA3dMSQualityLevel {
> +	SVGA3D_MS_QUALITY_NONE = 0,
> +	SVGA3D_MS_QUALITY_MIN = 0,
> +	SVGA3D_MS_QUALITY_FULL = 1,
> +	SVGA3D_MS_QUALITY_RESOLVED = 2,
> +	SVGA3D_MS_QUALITY_MAX = 3,
> +} SVGA3dMSQualityLevel;
> +
> +typedef enum SVGA3dFrameUpdateType {
> +	SVGA3D_FRAME_END = 0,
> +	SVGA3D_FRAME_MIN = 0,
> +	SVGA3D_FRAME_PARTIAL = 1,
> +	SVGA3D_FRAME_UNKNOWN = 2,
> +	SVGA3D_FRAME_MAX = 3,
> +} SVGA3dFrameUpdateType;
> +
> +#endif
> diff --git a/lib/svga/svga_escape.h b/lib/svga/svga_escape.h
> new file mode 100644
> index 00000000..3b229083
> --- /dev/null
> +++ b/lib/svga/svga_escape.h
> @@ -0,0 +1,54 @@
> +/**********************************************************
> + * Copyright 2007,2020 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga_escape.h --
> + *
> + *    Definitions for our own (vendor-specific) SVGA Escape commands.
> + */
> +
> +#ifndef _SVGA_ESCAPE_H_
> +#define _SVGA_ESCAPE_H_
> +
> +#define SVGA_ESCAPE_NSID_VMWARE 0x00000000
> +#define SVGA_ESCAPE_NSID_DEVEL 0xFFFFFFFF
> +
> +#define SVGA_ESCAPE_VMWARE_MAJOR_MASK 0xFFFF0000
> +
> +#define SVGA_ESCAPE_VMWARE_HINT 0x00030000
> +#define SVGA_ESCAPE_VMWARE_HINT_FULLSCREEN 0x00030001
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 command;
> +	uint32 fullscreen;
> +	struct {
> +		int32 x, y;
> +	} monitorPosition;
> +} SVGAEscapeHintFullscreen;
> +#pragma pack(pop)
> +
> +#endif
> diff --git a/lib/svga/svga_overlay.h b/lib/svga/svga_overlay.h
> new file mode 100644
> index 00000000..0a197f08
> --- /dev/null
> +++ b/lib/svga/svga_overlay.h
> @@ -0,0 +1,115 @@
> +/**********************************************************
> + * Copyright 2007-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga_overlay.h --
> + *
> + *    Definitions for video-overlay support.
> + */
> +
> +#ifndef _SVGA_OVERLAY_H_
> +#define _SVGA_OVERLAY_H_
> +
> +#include "svga_reg.h"
> +
> +#if defined __cplusplus
> +extern "C" {
> +#endif
> +
> +#define VMWARE_FOURCC_YV12 0x32315659
> +#define VMWARE_FOURCC_YUY2 0x32595559
> +#define VMWARE_FOURCC_UYVY 0x59565955
> +
> +typedef enum {
> +	SVGA_OVERLAY_FORMAT_INVALID = 0,
> +	SVGA_OVERLAY_FORMAT_YV12 = VMWARE_FOURCC_YV12,
> +	SVGA_OVERLAY_FORMAT_YUY2 = VMWARE_FOURCC_YUY2,
> +	SVGA_OVERLAY_FORMAT_UYVY = VMWARE_FOURCC_UYVY,
> +} SVGAOverlayFormat;
> +
> +#define SVGA_VIDEO_COLORKEY_MASK 0x00ffffff
> +
> +#define SVGA_ESCAPE_VMWARE_VIDEO 0x00020000
> +
> +#define SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS 0x00020001
> +
> +#define SVGA_ESCAPE_VMWARE_VIDEO_FLUSH 0x00020002
> +
> +typedef struct SVGAEscapeVideoSetRegs {
> +	struct {
> +		uint32 cmdType;
> +		uint32 streamId;
> +	} header;
> +
> +	struct {
> +		uint32 registerId;
> +		uint32 value;
> +	} items[1];
> +} SVGAEscapeVideoSetRegs;
> +
> +typedef struct SVGAEscapeVideoFlush {
> +	uint32 cmdType;
> +	uint32 streamId;
> +} SVGAEscapeVideoFlush;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 command;
> +	uint32 overlay;
> +} SVGAFifoEscapeCmdVideoBase;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAFifoEscapeCmdVideoBase videoCmd;
> +} SVGAFifoEscapeCmdVideoFlush;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAFifoEscapeCmdVideoBase videoCmd;
> +	struct {
> +		uint32 regId;
> +		uint32 value;
> +	} items[1];
> +} SVGAFifoEscapeCmdVideoSetRegs;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAFifoEscapeCmdVideoBase videoCmd;
> +	struct {
> +		uint32 regId;
> +		uint32 value;
> +	} items[SVGA_VIDEO_NUM_REGS];
> +} SVGAFifoEscapeCmdVideoSetAllRegs;
> +#pragma pack(pop)
> +
> +#if defined __cplusplus
> +}
> +#endif
> +
> +#endif
> diff --git a/lib/svga/svga_reg.h b/lib/svga/svga_reg.h
> new file mode 100644
> index 00000000..3cb47d1f
> --- /dev/null
> +++ b/lib/svga/svga_reg.h
> @@ -0,0 +1,897 @@
> +/**********************************************************
> + * Copyright 1998-2021 VMware, Inc.
> + * SPDX-License-Identifier: GPL-2.0 OR MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +/*
> + * svga_reg.h --
> + *
> + *    Virtual hardware definitions for the VMware SVGA II device.
> + */
> +
> +#ifndef _SVGA_REG_H_
> +#define _SVGA_REG_H_
> +
> +#include "vm_basic_types.h"
> +
> +typedef enum {
> +	SVGA_REG_ENABLE_DISABLE = 0,
> +	SVGA_REG_ENABLE_ENABLE = (1 << 0),
> +	SVGA_REG_ENABLE_HIDE = (1 << 1),
> +} SvgaRegEnable;
> +
> +typedef uint32 SVGAMobId;
> +
> +#define SVGA_MAX_WIDTH 2560
> +#define SVGA_MAX_HEIGHT 1600
> +
> +#define SVGA_MAX_BITS_PER_PIXEL 32
> +#define SVGA_MAX_DEPTH 24
> +#define SVGA_MAX_DISPLAYS 10
> +#define SVGA_MAX_SCREEN_SIZE 8192
> +#define SVGA_SCREEN_ROOT_LIMIT (SVGA_MAX_SCREEN_SIZE * SVGA_MAX_DISPLAYS)
> +
> +#define SVGA_CURSOR_ON_HIDE 0x0
> +#define SVGA_CURSOR_ON_SHOW 0x1
> +
> +#define SVGA_CURSOR_ON_REMOVE_FROM_FB 0x2
> +
> +#define SVGA_CURSOR_ON_RESTORE_TO_FB 0x3
> +
> +#define SVGA_FB_MAX_TRACEABLE_SIZE 0x1000000
> +
> +#define SVGA_MAX_PSEUDOCOLOR_DEPTH 8
> +#define SVGA_MAX_PSEUDOCOLORS (1 << SVGA_MAX_PSEUDOCOLOR_DEPTH)
> +#define SVGA_NUM_PALETTE_REGS (3 * SVGA_MAX_PSEUDOCOLORS)
> +
> +#define SVGA_MAGIC 0x900000UL
> +#define SVGA_MAKE_ID(ver) (SVGA_MAGIC << 8 | (ver))
> +
> +#define SVGA_VERSION_3 3
> +#define SVGA_ID_3 SVGA_MAKE_ID(SVGA_VERSION_3)
> +
> +#define SVGA_VERSION_2 2
> +#define SVGA_ID_2 SVGA_MAKE_ID(SVGA_VERSION_2)
> +
> +#define SVGA_VERSION_1 1
> +#define SVGA_ID_1 SVGA_MAKE_ID(SVGA_VERSION_1)
> +
> +#define SVGA_VERSION_0 0
> +#define SVGA_ID_0 SVGA_MAKE_ID(SVGA_VERSION_0)
> +
> +#define SVGA_ID_INVALID 0xFFFFFFFF
> +
> +#define SVGA_INDEX_PORT 0x0
> +#define SVGA_VALUE_PORT 0x1
> +#define SVGA_BIOS_PORT 0x2
> +#define SVGA_IRQSTATUS_PORT 0x8
> +
> +#define SVGA_IRQFLAG_ANY_FENCE (1 << 0)
> +#define SVGA_IRQFLAG_FIFO_PROGRESS (1 << 1)
> +#define SVGA_IRQFLAG_FENCE_GOAL (1 << 2)
> +#define SVGA_IRQFLAG_COMMAND_BUFFER (1 << 3)
> +#define SVGA_IRQFLAG_ERROR (1 << 4)
> +#define SVGA_IRQFLAG_REG_FENCE_GOAL (1 << 5)
> +#define SVGA_IRQFLAG_MAX (1 << 6)
> +
> +#define SVGA_MAX_CURSOR_CMD_BYTES (40 * 1024)
> +#define SVGA_MAX_CURSOR_CMD_DIMENSION 1024
> +
> +enum {
> +	SVGA_REG_ID = 0,
> +	SVGA_REG_ENABLE = 1,
> +	SVGA_REG_WIDTH = 2,
> +	SVGA_REG_HEIGHT = 3,
> +	SVGA_REG_MAX_WIDTH = 4,
> +	SVGA_REG_MAX_HEIGHT = 5,
> +	SVGA_REG_DEPTH = 6,
> +	SVGA_REG_BITS_PER_PIXEL = 7,
> +	SVGA_REG_PSEUDOCOLOR = 8,
> +	SVGA_REG_RED_MASK = 9,
> +	SVGA_REG_GREEN_MASK = 10,
> +	SVGA_REG_BLUE_MASK = 11,
> +	SVGA_REG_BYTES_PER_LINE = 12,
> +	SVGA_REG_FB_START = 13,
> +	SVGA_REG_FB_OFFSET = 14,
> +	SVGA_REG_VRAM_SIZE = 15,
> +	SVGA_REG_FB_SIZE = 16,
> +
> +	SVGA_REG_ID_0_TOP = 17,
> +
> +	SVGA_REG_CAPABILITIES = 17,
> +	SVGA_REG_MEM_START = 18,
> +	SVGA_REG_MEM_SIZE = 19,
> +	SVGA_REG_CONFIG_DONE = 20,
> +	SVGA_REG_SYNC = 21,
> +	SVGA_REG_BUSY = 22,
> +	SVGA_REG_GUEST_ID = 23,
> +	SVGA_REG_DEAD = 24,
> +	SVGA_REG_CURSOR_X = 25,
> +	SVGA_REG_CURSOR_Y = 26,
> +	SVGA_REG_CURSOR_ON = 27,
> +	SVGA_REG_HOST_BITS_PER_PIXEL = 28,
> +	SVGA_REG_SCRATCH_SIZE = 29,
> +	SVGA_REG_MEM_REGS = 30,
> +	SVGA_REG_NUM_DISPLAYS = 31,
> +	SVGA_REG_PITCHLOCK = 32,
> +	SVGA_REG_IRQMASK = 33,
> +
> +	SVGA_REG_NUM_GUEST_DISPLAYS = 34,
> +	SVGA_REG_DISPLAY_ID = 35,
> +	SVGA_REG_DISPLAY_IS_PRIMARY = 36,
> +	SVGA_REG_DISPLAY_POSITION_X = 37,
> +	SVGA_REG_DISPLAY_POSITION_Y = 38,
> +	SVGA_REG_DISPLAY_WIDTH = 39,
> +	SVGA_REG_DISPLAY_HEIGHT = 40,
> +
> +	SVGA_REG_GMR_ID = 41,
> +	SVGA_REG_GMR_DESCRIPTOR = 42,
> +	SVGA_REG_GMR_MAX_IDS = 43,
> +	SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH = 44,
> +
> +	SVGA_REG_TRACES = 45,
> +	SVGA_REG_GMRS_MAX_PAGES = 46,
> +	SVGA_REG_MEMORY_SIZE = 47,
> +	SVGA_REG_COMMAND_LOW = 48,
> +	SVGA_REG_COMMAND_HIGH = 49,
> +
> +	SVGA_REG_MAX_PRIMARY_MEM = 50,
> +
> +	SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB = 51,
> +
> +	SVGA_REG_DEV_CAP = 52,
> +	SVGA_REG_CMD_PREPEND_LOW = 53,
> +	SVGA_REG_CMD_PREPEND_HIGH = 54,
> +	SVGA_REG_SCREENTARGET_MAX_WIDTH = 55,
> +	SVGA_REG_SCREENTARGET_MAX_HEIGHT = 56,
> +	SVGA_REG_MOB_MAX_SIZE = 57,
> +	SVGA_REG_BLANK_SCREEN_TARGETS = 58,
> +	SVGA_REG_CAP2 = 59,
> +	SVGA_REG_DEVEL_CAP = 60,
> +
> +	SVGA_REG_GUEST_DRIVER_ID = 61,
> +	SVGA_REG_GUEST_DRIVER_VERSION1 = 62,
> +	SVGA_REG_GUEST_DRIVER_VERSION2 = 63,
> +	SVGA_REG_GUEST_DRIVER_VERSION3 = 64,
> +
> +	SVGA_REG_CURSOR_MOBID = 65,
> +	SVGA_REG_CURSOR_MAX_BYTE_SIZE = 66,
> +	SVGA_REG_CURSOR_MAX_DIMENSION = 67,
> +
> +	SVGA_REG_FIFO_CAPS = 68,
> +	SVGA_REG_FENCE = 69,
> +
> +	SVGA_REG_CURSOR4_ON = 70,
> +	SVGA_REG_CURSOR4_X = 71,
> +	SVGA_REG_CURSOR4_Y = 72,
> +	SVGA_REG_CURSOR4_SCREEN_ID = 73,
> +	SVGA_REG_CURSOR4_SUBMIT = 74,
> +
> +	SVGA_REG_SCREENDMA = 75,
> +
> +	SVGA_REG_GBOBJECT_MEM_SIZE_KB = 76,
> +
> +	SVGA_REG_REGS_START_HIGH32 = 77,
> +	SVGA_REG_REGS_START_LOW32 = 78,
> +	SVGA_REG_FB_START_HIGH32 = 79,
> +	SVGA_REG_FB_START_LOW32 = 80,
> +
> +	SVGA_REG_MSHINT = 81,
> +
> +	SVGA_REG_IRQ_STATUS = 82,
> +
> +	SVGA_REG_DIRTY_TRACKING = 83,
> +	SVGA_REG_FENCE_GOAL = 84,
> +
> +	SVGA_REG_TOP = 85,
> +
> +	SVGA_PALETTE_BASE = 1024,
> +
> +	SVGA_SCRATCH_BASE = SVGA_PALETTE_BASE + SVGA_NUM_PALETTE_REGS
> +
> +};
> +
> +typedef enum SVGARegGuestDriverId {
> +	SVGA_REG_GUEST_DRIVER_ID_UNKNOWN = 0,
> +	SVGA_REG_GUEST_DRIVER_ID_WDDM = 1,
> +	SVGA_REG_GUEST_DRIVER_ID_LINUX = 2,
> +	SVGA_REG_GUEST_DRIVER_ID_MAX,
> +
> +	SVGA_REG_GUEST_DRIVER_ID_SUBMIT = MAX_UINT32,
> +} SVGARegGuestDriverId;
> +
> +typedef enum SVGARegMSHint {
> +	SVGA_REG_MSHINT_DISABLED = 0,
> +	SVGA_REG_MSHINT_FULL = 1,
> +	SVGA_REG_MSHINT_RESOLVED = 2,
> +} SVGARegMSHint;
> +
> +typedef enum SVGARegDirtyTracking {
> +	SVGA_REG_DIRTY_TRACKING_PER_IMAGE = 0,
> +	SVGA_REG_DIRTY_TRACKING_PER_SURFACE = 1,
> +} SVGARegDirtyTracking;
> +
> +#define SVGA_GMR_NULL ((uint32)-1)
> +#define SVGA_GMR_FRAMEBUFFER ((uint32)-2)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGAGuestMemDescriptor {
> +	uint32 ppn;
> +	uint32 numPages;
> +} SVGAGuestMemDescriptor;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct SVGAGuestPtr {
> +	uint32 gmrId;
> +	uint32 offset;
> +} SVGAGuestPtr;
> +#pragma pack(pop)
> +
> +#define SVGA_CB_MAX_SIZE_DEFAULT (KBYTES_2_BYTES(512))
> +#define SVGA_CB_MAX_SIZE_4MB (MBYTES_2_BYTES(4))
> +#define SVGA_CB_MAX_SIZE SVGA_CB_MAX_SIZE_4MB
> +#define SVGA_CB_MAX_QUEUED_PER_CONTEXT 32
> +#define SVGA_CB_MAX_COMMAND_SIZE (32 * 1024)
> +
> +#define SVGA_CB_CONTEXT_MASK 0x3f
> +typedef enum {
> +	SVGA_CB_CONTEXT_DEVICE = 0x3f,
> +	SVGA_CB_CONTEXT_0 = 0x0,
> +	SVGA_CB_CONTEXT_1 = 0x1,
> +	SVGA_CB_CONTEXT_MAX = 0x2,
> +} SVGACBContext;
> +
> +typedef enum {
> +
> +	SVGA_CB_STATUS_NONE = 0,
> +
> +	SVGA_CB_STATUS_COMPLETED = 1,
> +
> +	SVGA_CB_STATUS_QUEUE_FULL = 2,
> +
> +	SVGA_CB_STATUS_COMMAND_ERROR = 3,
> +
> +	SVGA_CB_STATUS_CB_HEADER_ERROR = 4,
> +
> +	SVGA_CB_STATUS_PREEMPTED = 5,
> +
> +	SVGA_CB_STATUS_SUBMISSION_ERROR = 6,
> +
> +	SVGA_CB_STATUS_PARTIAL_COMPLETE = 7,
> +} SVGACBStatus;
> +
> +typedef enum {
> +	SVGA_CB_FLAG_NONE = 0,
> +	SVGA_CB_FLAG_NO_IRQ = 1 << 0,
> +	SVGA_CB_FLAG_DX_CONTEXT = 1 << 1,
> +	SVGA_CB_FLAG_MOB = 1 << 2,
> +} SVGACBFlags;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	volatile SVGACBStatus status;
> +	volatile uint32 errorOffset;
> +	uint64 id;
> +	SVGACBFlags flags;
> +	uint32 length;
> +	union {
> +		PA pa;
> +		struct {
> +			SVGAMobId mobid;
> +			uint32 mobOffset;
> +		} mob;
> +	} ptr;
> +	uint32 offset;
> +	uint32 dxContext;
> +	uint32 mustBeZero[6];
> +} SVGACBHeader;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA_DC_CMD_NOP = 0,
> +	SVGA_DC_CMD_START_STOP_CONTEXT = 1,
> +	SVGA_DC_CMD_PREEMPT = 2,
> +	SVGA_DC_CMD_START_QUEUE = 3,
> +	SVGA_DC_CMD_ASYNC_STOP_QUEUE = 4,
> +	SVGA_DC_CMD_EMPTY_CONTEXT_QUEUE = 5,
> +	SVGA_DC_CMD_MAX = 6
> +} SVGADeviceContextCmdId;
> +
> +typedef struct SVGADCCmdStartStop {
> +	uint32 enable;
> +	SVGACBContext context;
> +} SVGADCCmdStartStop;
> +
> +typedef struct SVGADCCmdPreempt {
> +	SVGACBContext context;
> +	uint32 ignoreIDZero;
> +} SVGADCCmdPreempt;
> +
> +typedef struct SVGADCCmdStartQueue {
> +	SVGACBContext context;
> +} SVGADCCmdStartQueue;
> +
> +typedef struct SVGADCCmdAsyncStopQueue {
> +	SVGACBContext context;
> +} SVGADCCmdAsyncStopQueue;
> +
> +typedef struct SVGADCCmdEmptyQueue {
> +	SVGACBContext context;
> +} SVGADCCmdEmptyQueue;
> +
> +typedef struct SVGAGMRImageFormat {
> +	union {
> +		struct {
> +			uint32 bitsPerPixel : 8;
> +			uint32 colorDepth : 8;
> +			uint32 reserved : 16;
> +		};
> +
> +		uint32 value;
> +	};
> +} SVGAGMRImageFormat;
> +
> +#pragma pack(push, 1)
> +typedef struct SVGAGuestImage {
> +	SVGAGuestPtr ptr;
> +
> +	uint32 pitch;
> +} SVGAGuestImage;
> +#pragma pack(pop)
> +
> +typedef struct SVGAColorBGRX {
> +	union {
> +		struct {
> +			uint32 b : 8;
> +			uint32 g : 8;
> +			uint32 r : 8;
> +			uint32 x : 8;
> +		};
> +
> +		uint32 value;
> +	};
> +} SVGAColorBGRX;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	int32 left;
> +	int32 top;
> +	int32 right;
> +	int32 bottom;
> +} SVGASignedRect;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	int32 x;
> +	int32 y;
> +} SVGASignedPoint;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 x;
> +	uint32 y;
> +} SVGAUnsignedPoint;
> +#pragma pack(pop)
> +
> +#define SVGA_CAP_NONE 0x00000000
> +#define SVGA_CAP_RECT_COPY 0x00000002
> +#define SVGA_CAP_CURSOR 0x00000020
> +#define SVGA_CAP_CURSOR_BYPASS 0x00000040
> +#define SVGA_CAP_CURSOR_BYPASS_2 0x00000080
> +#define SVGA_CAP_8BIT_EMULATION 0x00000100
> +#define SVGA_CAP_ALPHA_CURSOR 0x00000200
> +#define SVGA_CAP_3D 0x00004000
> +#define SVGA_CAP_EXTENDED_FIFO 0x00008000
> +#define SVGA_CAP_MULTIMON 0x00010000
> +#define SVGA_CAP_PITCHLOCK 0x00020000
> +#define SVGA_CAP_IRQMASK 0x00040000
> +#define SVGA_CAP_DISPLAY_TOPOLOGY 0x00080000
> +#define SVGA_CAP_GMR 0x00100000
> +#define SVGA_CAP_TRACES 0x00200000
> +#define SVGA_CAP_GMR2 0x00400000
> +#define SVGA_CAP_SCREEN_OBJECT_2 0x00800000
> +#define SVGA_CAP_COMMAND_BUFFERS 0x01000000
> +#define SVGA_CAP_DEAD1 0x02000000
> +#define SVGA_CAP_CMD_BUFFERS_2 0x04000000
> +#define SVGA_CAP_GBOBJECTS 0x08000000
> +#define SVGA_CAP_DX 0x10000000
> +#define SVGA_CAP_HP_CMD_QUEUE 0x20000000
> +#define SVGA_CAP_NO_BB_RESTRICTION 0x40000000
> +#define SVGA_CAP_CAP2_REGISTER 0x80000000
> +
> +#define SVGA_CAP2_NONE 0x00000000
> +#define SVGA_CAP2_GROW_OTABLE 0x00000001
> +#define SVGA_CAP2_INTRA_SURFACE_COPY 0x00000002
> +#define SVGA_CAP2_DX2 0x00000004
> +#define SVGA_CAP2_GB_MEMSIZE_2 0x00000008
> +#define SVGA_CAP2_SCREENDMA_REG 0x00000010
> +#define SVGA_CAP2_OTABLE_PTDEPTH_2 0x00000020
> +#define SVGA_CAP2_NON_MS_TO_MS_STRETCHBLT 0x00000040
> +#define SVGA_CAP2_CURSOR_MOB 0x00000080
> +#define SVGA_CAP2_MSHINT 0x00000100
> +#define SVGA_CAP2_CB_MAX_SIZE_4MB 0x00000200
> +#define SVGA_CAP2_DX3 0x00000400
> +#define SVGA_CAP2_FRAME_TYPE 0x00000800
> +#define SVGA_CAP2_COTABLE_COPY 0x00001000
> +#define SVGA_CAP2_TRACE_FULL_FB 0x00002000
> +#define SVGA_CAP2_EXTRA_REGS 0x00004000
> +#define SVGA_CAP2_LO_STAGING 0x00008000
> +#define SVGA_CAP2_RESERVED 0x80000000
> +
> +typedef enum {
> +	SVGABackdoorCapDeviceCaps = 0,
> +	SVGABackdoorCapFifoCaps = 1,
> +	SVGABackdoorCap3dHWVersion = 2,
> +	SVGABackdoorCapDeviceCaps2 = 3,
> +	SVGABackdoorCapDevelCaps = 4,
> +	SVGABackdoorDevelRenderer = 5,
> +	SVGABackdoorDevelUsingISB = 6,
> +	SVGABackdoorCapMax = 7,
> +} SVGABackdoorCapType;
> +
> +enum {
> +
> +	SVGA_FIFO_MIN = 0,
> +	SVGA_FIFO_MAX,
> +	SVGA_FIFO_NEXT_CMD,
> +	SVGA_FIFO_STOP,
> +
> +	SVGA_FIFO_CAPABILITIES = 4,
> +	SVGA_FIFO_FLAGS,
> +
> +	SVGA_FIFO_FENCE,
> +
> +	SVGA_FIFO_3D_HWVERSION,
> +
> +	SVGA_FIFO_PITCHLOCK,
> +
> +	SVGA_FIFO_CURSOR_ON,
> +	SVGA_FIFO_CURSOR_X,
> +	SVGA_FIFO_CURSOR_Y,
> +	SVGA_FIFO_CURSOR_COUNT,
> +	SVGA_FIFO_CURSOR_LAST_UPDATED,
> +
> +	SVGA_FIFO_RESERVED,
> +
> +	SVGA_FIFO_CURSOR_SCREEN_ID,
> +
> +	SVGA_FIFO_DEAD,
> +
> +	SVGA_FIFO_3D_HWVERSION_REVISED,
> +
> +	SVGA_FIFO_3D_CAPS = 32,
> +	SVGA_FIFO_3D_CAPS_LAST = 32 + 255,
> +
> +	SVGA_FIFO_GUEST_3D_HWVERSION,
> +	SVGA_FIFO_FENCE_GOAL,
> +	SVGA_FIFO_BUSY,
> +
> +	SVGA_FIFO_NUM_REGS
> +};
> +
> +#define SVGA_FIFO_3D_CAPS_SIZE (SVGA_FIFO_3D_CAPS_LAST - SVGA_FIFO_3D_CAPS + 1)
> +
> +#define SVGA3D_FIFO_CAPS_RECORD_DEVCAPS 0x100
> +typedef uint32 SVGA3dFifoCapsRecordType;
> +
> +typedef uint32 SVGA3dFifoCapPair[2];
> +
> +#pragma pack(push, 1)
> +typedef struct SVGA3dFifoCapsRecordHeader {
> +	uint32 length;
> +	SVGA3dFifoCapsRecordType type;
> +
> +} SVGA3dFifoCapsRecordHeader;
> +#pragma pack(pop)
> +
> +#define SVGA_FIFO_EXTENDED_MANDATORY_REGS (SVGA_FIFO_3D_CAPS_LAST + 1)
> +
> +#define SVGA_FIFO_CAP_NONE 0
> +#define SVGA_FIFO_CAP_FENCE (1 << 0)
> +#define SVGA_FIFO_CAP_ACCELFRONT (1 << 1)
> +#define SVGA_FIFO_CAP_PITCHLOCK (1 << 2)
> +#define SVGA_FIFO_CAP_VIDEO (1 << 3)
> +#define SVGA_FIFO_CAP_CURSOR_BYPASS_3 (1 << 4)
> +#define SVGA_FIFO_CAP_ESCAPE (1 << 5)
> +#define SVGA_FIFO_CAP_RESERVE (1 << 6)
> +#define SVGA_FIFO_CAP_SCREEN_OBJECT (1 << 7)
> +#define SVGA_FIFO_CAP_GMR2 (1 << 8)
> +#define SVGA_FIFO_CAP_3D_HWVERSION_REVISED SVGA_FIFO_CAP_GMR2
> +#define SVGA_FIFO_CAP_SCREEN_OBJECT_2 (1 << 9)
> +#define SVGA_FIFO_CAP_DEAD (1 << 10)
> +
> +#define SVGA_FIFO_FLAG_NONE 0
> +#define SVGA_FIFO_FLAG_ACCELFRONT (1 << 0)
> +#define SVGA_FIFO_FLAG_RESERVED (1 << 31)
> +
> +#define SVGA_FIFO_RESERVED_UNKNOWN 0xffffffff
> +
> +#define SVGA_SCREENDMA_REG_UNDEFINED 0
> +#define SVGA_SCREENDMA_REG_NOT_PRESENT 1
> +#define SVGA_SCREENDMA_REG_PRESENT 2
> +#define SVGA_SCREENDMA_REG_MAX 3
> +
> +#define SVGA_NUM_OVERLAY_UNITS 32
> +
> +#define SVGA_VIDEO_FLAG_COLORKEY 0x0001
> +
> +enum {
> +	SVGA_VIDEO_ENABLED = 0,
> +	SVGA_VIDEO_FLAGS,
> +	SVGA_VIDEO_DATA_OFFSET,
> +	SVGA_VIDEO_FORMAT,
> +	SVGA_VIDEO_COLORKEY,
> +	SVGA_VIDEO_SIZE,
> +	SVGA_VIDEO_WIDTH,
> +	SVGA_VIDEO_HEIGHT,
> +	SVGA_VIDEO_SRC_X,
> +	SVGA_VIDEO_SRC_Y,
> +	SVGA_VIDEO_SRC_WIDTH,
> +	SVGA_VIDEO_SRC_HEIGHT,
> +	SVGA_VIDEO_DST_X,
> +	SVGA_VIDEO_DST_Y,
> +	SVGA_VIDEO_DST_WIDTH,
> +	SVGA_VIDEO_DST_HEIGHT,
> +	SVGA_VIDEO_PITCH_1,
> +	SVGA_VIDEO_PITCH_2,
> +	SVGA_VIDEO_PITCH_3,
> +	SVGA_VIDEO_DATA_GMRID,
> +	SVGA_VIDEO_DST_SCREEN_ID,
> +	SVGA_VIDEO_NUM_REGS
> +};
> +
> +#pragma pack(push, 1)
> +typedef struct SVGAOverlayUnit {
> +	uint32 enabled;
> +	uint32 flags;
> +	uint32 dataOffset;
> +	uint32 format;
> +	uint32 colorKey;
> +	uint32 size;
> +	uint32 width;
> +	uint32 height;
> +	uint32 srcX;
> +	uint32 srcY;
> +	uint32 srcWidth;
> +	uint32 srcHeight;
> +	int32 dstX;
> +	int32 dstY;
> +	uint32 dstWidth;
> +	uint32 dstHeight;
> +	uint32 pitches[3];
> +	uint32 dataGMRId;
> +	uint32 dstScreenId;
> +} SVGAOverlayUnit;
> +#pragma pack(pop)
> +
> +#define SVGA_INVALID_DISPLAY_ID ((uint32)-1)
> +
> +typedef struct SVGADisplayTopology {
> +	uint16 displayId;
> +	uint16 isPrimary;
> +	uint32 width;
> +	uint32 height;
> +	uint32 positionX;
> +	uint32 positionY;
> +} SVGADisplayTopology;
> +
> +#define SVGA_SCREEN_MUST_BE_SET (1 << 0)
> +#define SVGA_SCREEN_HAS_ROOT SVGA_SCREEN_MUST_BE_SET
> +#define SVGA_SCREEN_IS_PRIMARY (1 << 1)
> +#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2)
> +
> +#define SVGA_SCREEN_DEACTIVATE (1 << 3)
> +
> +#define SVGA_SCREEN_BLANKING (1 << 4)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 structSize;
> +	uint32 id;
> +	uint32 flags;
> +	struct {
> +		uint32 width;
> +		uint32 height;
> +	} size;
> +	struct {
> +		int32 x;
> +		int32 y;
> +	} root;
> +
> +	SVGAGuestImage backingStore;
> +
> +	uint32 cloneCount;
> +} SVGAScreenObject;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA_CMD_INVALID_CMD = 0,
> +	SVGA_CMD_UPDATE = 1,
> +	SVGA_CMD_RECT_COPY = 3,
> +	SVGA_CMD_RECT_ROP_COPY = 14,
> +	SVGA_CMD_DEFINE_CURSOR = 19,
> +	SVGA_CMD_DEFINE_ALPHA_CURSOR = 22,
> +	SVGA_CMD_UPDATE_VERBOSE = 25,
> +	SVGA_CMD_FRONT_ROP_FILL = 29,
> +	SVGA_CMD_FENCE = 30,
> +	SVGA_CMD_ESCAPE = 33,
> +	SVGA_CMD_DEFINE_SCREEN = 34,
> +	SVGA_CMD_DESTROY_SCREEN = 35,
> +	SVGA_CMD_DEFINE_GMRFB = 36,
> +	SVGA_CMD_BLIT_GMRFB_TO_SCREEN = 37,
> +	SVGA_CMD_BLIT_SCREEN_TO_GMRFB = 38,
> +	SVGA_CMD_ANNOTATION_FILL = 39,
> +	SVGA_CMD_ANNOTATION_COPY = 40,
> +	SVGA_CMD_DEFINE_GMR2 = 41,
> +	SVGA_CMD_REMAP_GMR2 = 42,
> +	SVGA_CMD_DEAD = 43,
> +	SVGA_CMD_DEAD_2 = 44,
> +	SVGA_CMD_NOP = 45,
> +	SVGA_CMD_NOP_ERROR = 46,
> +	SVGA_CMD_MAX
> +} SVGAFifoCmdId;
> +
> +#define SVGA_CMD_MAX_DATASIZE (256 * 1024)
> +#define SVGA_CMD_MAX_ARGS 64
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 x;
> +	uint32 y;
> +	uint32 width;
> +	uint32 height;
> +} SVGAFifoCmdUpdate;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 srcX;
> +	uint32 srcY;
> +	uint32 destX;
> +	uint32 destY;
> +	uint32 width;
> +	uint32 height;
> +} SVGAFifoCmdRectCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 srcX;
> +	uint32 srcY;
> +	uint32 destX;
> +	uint32 destY;
> +	uint32 width;
> +	uint32 height;
> +	uint32 rop;
> +} SVGAFifoCmdRectRopCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 id;
> +	uint32 hotspotX;
> +	uint32 hotspotY;
> +	uint32 width;
> +	uint32 height;
> +	uint32 andMaskDepth;
> +	uint32 xorMaskDepth;
> +
> +} SVGAFifoCmdDefineCursor;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 id;
> +	uint32 hotspotX;
> +	uint32 hotspotY;
> +	uint32 width;
> +	uint32 height;
> +
> +} SVGAFifoCmdDefineAlphaCursor;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 hotspotX;
> +	uint32 hotspotY;
> +	uint32 width;
> +	uint32 height;
> +	uint32 andMaskDepth;
> +	uint32 xorMaskDepth;
> +
> +} SVGAGBColorCursorHeader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 hotspotX;
> +	uint32 hotspotY;
> +	uint32 width;
> +	uint32 height;
> +
> +} SVGAGBAlphaCursorHeader;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA_COLOR_CURSOR = 0,
> +	SVGA_ALPHA_CURSOR = 1,
> +} SVGAGBCursorType;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAGBCursorType type;
> +	union {
> +		SVGAGBColorCursorHeader colorHeader;
> +		SVGAGBAlphaCursorHeader alphaHeader;
> +	} header;
> +	uint32 sizeInBytes;
> +
> +} SVGAGBCursorHeader;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 x;
> +	uint32 y;
> +	uint32 width;
> +	uint32 height;
> +	uint32 reason;
> +} SVGAFifoCmdUpdateVerbose;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 color;
> +	uint32 x;
> +	uint32 y;
> +	uint32 width;
> +	uint32 height;
> +	uint32 rop;
> +} SVGAFifoCmdFrontRopFill;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 fence;
> +} SVGAFifoCmdFence;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 nsid;
> +	uint32 size;
> +
> +} SVGAFifoCmdEscape;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAScreenObject screen;
> +} SVGAFifoCmdDefineScreen;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 screenId;
> +} SVGAFifoCmdDestroyScreen;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAGuestPtr ptr;
> +	uint32 bytesPerLine;
> +	SVGAGMRImageFormat format;
> +} SVGAFifoCmdDefineGMRFB;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGASignedPoint srcOrigin;
> +	SVGASignedRect destRect;
> +	uint32 destScreenId;
> +} SVGAFifoCmdBlitGMRFBToScreen;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGASignedPoint destOrigin;
> +	SVGASignedRect srcRect;
> +	uint32 srcScreenId;
> +} SVGAFifoCmdBlitScreenToGMRFB;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGAColorBGRX color;
> +} SVGAFifoCmdAnnotationFill;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	SVGASignedPoint srcOrigin;
> +	uint32 srcScreenId;
> +} SVGAFifoCmdAnnotationCopy;
> +#pragma pack(pop)
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 gmrId;
> +	uint32 numPages;
> +} SVGAFifoCmdDefineGMR2;
> +#pragma pack(pop)
> +
> +typedef enum {
> +	SVGA_REMAP_GMR2_PPN32 = 0,
> +	SVGA_REMAP_GMR2_VIA_GMR = (1 << 0),
> +	SVGA_REMAP_GMR2_PPN64 = (1 << 1),
> +	SVGA_REMAP_GMR2_SINGLE_PPN = (1 << 2),
> +} SVGARemapGMR2Flags;
> +
> +#pragma pack(push, 1)
> +typedef struct {
> +	uint32 gmrId;
> +	SVGARemapGMR2Flags flags;
> +	uint32 offsetPages;
> +	uint32 numPages;
> +
> +} SVGAFifoCmdRemapGMR2;
> +#pragma pack(pop)
> +
> +#define SVGA_VRAM_MIN_SIZE (4 * 640 * 480)
> +#define SVGA_VRAM_MIN_SIZE_3D (16 * 1024 * 1024)
> +#define SVGA_VRAM_MAX_SIZE (128 * 1024 * 1024)
> +#define SVGA_MEMORY_SIZE_MAX (1024 * 1024 * 1024)
> +#define SVGA_FIFO_SIZE_MAX (2 * 1024 * 1024)
> +#define SVGA_GRAPHICS_MEMORY_KB_MIN (32 * 1024)
> +#define SVGA_GRAPHICS_MEMORY_KB_MAX_2GB (2 * 1024 * 1024)
> +#define SVGA_GRAPHICS_MEMORY_KB_MAX_3GB (3 * 1024 * 1024)
> +#define SVGA_GRAPHICS_MEMORY_KB_MAX_4GB (4 * 1024 * 1024)
> +#define SVGA_GRAPHICS_MEMORY_KB_MAX_8GB (8 * 1024 * 1024)
> +#define SVGA_GRAPHICS_MEMORY_KB_DEFAULT (256 * 1024)
> +
> +#define SVGA_VRAM_SIZE_W2K (64 * 1024 * 1024)
> +
> +#if defined(VMX86_SERVER)
> +#define SVGA_VRAM_SIZE (4 * 1024 * 1024)
> +#define SVGA_VRAM_SIZE_3D (64 * 1024 * 1024)
> +#define SVGA_FIFO_SIZE (256 * 1024)
> +#define SVGA_FIFO_SIZE_3D (516 * 1024)
> +#define SVGA_MEMORY_SIZE_DEFAULT (160 * 1024 * 1024)
> +#define SVGA_AUTODETECT_DEFAULT FALSE
> +#else
> +#define SVGA_VRAM_SIZE (16 * 1024 * 1024)
> +#define SVGA_VRAM_SIZE_3D SVGA_VRAM_MAX_SIZE
> +#define SVGA_FIFO_SIZE (2 * 1024 * 1024)
> +#define SVGA_FIFO_SIZE_3D SVGA_FIFO_SIZE
> +#define SVGA_MEMORY_SIZE_DEFAULT (768 * 1024 * 1024)
> +#define SVGA_AUTODETECT_DEFAULT TRUE
> +#endif
> +
> +#define SVGA_FIFO_SIZE_GBOBJECTS (256 * 1024)
> +#define SVGA_VRAM_SIZE_GBOBJECTS (4 * 1024 * 1024)
> +
> +#endif
> diff --git a/lib/svga/vm_basic_types.h b/lib/svga/vm_basic_types.h
> new file mode 100644
> index 00000000..042bb147
> --- /dev/null
> +++ b/lib/svga/vm_basic_types.h
> @@ -0,0 +1,161 @@
> +/* SPDX-License-Identifier: GPL-2.0 OR MIT */
> +/**********************************************************
> + * Copyright 2015-2021 VMware, Inc.
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +#ifndef VM_BASIC_TYPES_H
> +#define VM_BASIC_TYPES_H
> +
> +#define PAGE_SHIFT 12
> +#define PAGE_SIZE (1 << PAGE_SHIFT)
> +#define PAGE_MASK (~(PAGE_SIZE - 1))
> +#define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
> +
> +#include <stdbool.h>
> +#include <stdint.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <ctype.h>
> +
> +typedef uint32_t uint32;
> +typedef int32_t int32;
> +typedef uint64_t uint64;
> +typedef uint16_t uint16;
> +typedef int16_t int16;
> +typedef uint8_t uint8;
> +typedef int8_t int8;
> +
> +typedef uint64 PA;
> +typedef uint32 PPN;
> +typedef uint32 PPN32;
> +typedef uint64 PPN64;
> +
> +typedef bool Bool;
> +
> +#define MAX_UINT64 UINT64_MAX
> +#define MAX_UINT32 UINT32_MAX
> +#define MAX_UINT16 UINT16_MAX
> +
> +#define CONST64U(x) x##ULL
> +
> +#ifndef MBYTES_SHIFT
> +#define MBYTES_SHIFT 20
> +#endif
> +#ifndef MBYTES_2_BYTES
> +#define MBYTES_2_BYTES(_nbytes) ((uint64)(_nbytes) << MBYTES_SHIFT)
> +#endif
> +
> +/*
> + * 64-bit atomic ops from linux
> + */
> +typedef struct {
> +	volatile long long counter;
> +} atomic64_t;
> +
> +/*
> + * MKS Guest Stats types
> + */
> +
> +typedef struct MKSGuestStatCounter {
> +	atomic64_t count;
> +} MKSGuestStatCounter;
> +
> +typedef struct MKSGuestStatCounterTime {
> +	MKSGuestStatCounter counter;
> +	atomic64_t selfCycles;
> +	atomic64_t totalCycles;
> +} MKSGuestStatCounterTime;
> +
> +/*
> + * Flags for MKSGuestStatInfoEntry::flags below
> + */
> +
> +#define MKS_GUEST_STAT_FLAG_NONE 0
> +#define MKS_GUEST_STAT_FLAG_TIME (1U << 0)
> +
> +typedef __attribute__((aligned(32))) struct MKSGuestStatInfoEntry {
> +	union {
> +		const char *s;
> +		uint64 u;
> +	} name;
> +	union {
> +		const char *s;
> +		uint64 u;
> +	} description;
> +	uint64 flags;
> +	union {
> +		MKSGuestStatCounter *counter;
> +		MKSGuestStatCounterTime *counterTime;
> +		uint64 u;
> +	} stat;
> +} MKSGuestStatInfoEntry;
> +
> +#define INVALID_PPN64 ((PPN64)0x000fffffffffffffULL)
> +#define vmw_num_pages(size) (PAGE_ALIGN(size) >> PAGE_SHIFT)
> +
> +#define MKS_GUEST_STAT_INSTANCE_DESC_LENGTH 1024
> +#define MKS_GUEST_STAT_INSTANCE_MAX_STATS 4096
> +#define MKS_GUEST_STAT_INSTANCE_MAX_STAT_PPNS              \
> +	(vmw_num_pages(MKS_GUEST_STAT_INSTANCE_MAX_STATS * \
> +		       sizeof(MKSGuestStatCounterTime)))
> +#define MKS_GUEST_STAT_INSTANCE_MAX_INFO_PPNS              \
> +	(vmw_num_pages(MKS_GUEST_STAT_INSTANCE_MAX_STATS * \
> +		       sizeof(MKSGuestStatInfoEntry)))
> +#define MKS_GUEST_STAT_AVERAGE_NAME_LENGTH 40
> +#define MKS_GUEST_STAT_INSTANCE_MAX_STRS_PPNS              \
> +	(vmw_num_pages(MKS_GUEST_STAT_INSTANCE_MAX_STATS * \
> +		       MKS_GUEST_STAT_AVERAGE_NAME_LENGTH))
> +
> +/*
> + * The MKSGuestStatInstanceDescriptor is used as main interface to
> + * communicate guest stats back to the host code.  The guest must
> + * allocate an instance of this structure at the start of a page and
> + * provide the physical address to the host.  From there the host code
> + * can walk this structure to find other (pinned) pages containing the
> + * stats data.
> + *
> + * Since the MKSGuestStatInfoEntry structures contain userlevel
> + * pointers, the InstanceDescriptor also contains pointers to the
> + * begining of these sections allowing the host side code to correctly
> + * interpret the pointers.
> + *
> + * Because the host side code never acknowledges anything back to the
> + * guest there is no strict requirement to maintain compatability
> + * across releases.  If the interface changes the host might not be
> + * able to log stats, but the guest will continue to run normally.
> + */
> +
> +typedef struct MKSGuestStatInstanceDescriptor {
> +	uint64 reservedMBZ; /* must be zero for now. */
> +	uint64 statStartVA; /* VA of the start of the stats section. */
> +	uint64 strsStartVA; /* VA of the start of the strings section. */
> +	uint64 statLength; /* length of the stats section in bytes. */
> +	uint64 infoLength; /* length of the info entry section in bytes. */
> +	uint64 strsLength; /* length of the strings section in bytes. */
> +	PPN64 statPPNs[MKS_GUEST_STAT_INSTANCE_MAX_STAT_PPNS]; /* stat counters */
> +	PPN64 infoPPNs[MKS_GUEST_STAT_INSTANCE_MAX_INFO_PPNS]; /* stat info */
> +	PPN64 strsPPNs[MKS_GUEST_STAT_INSTANCE_MAX_STRS_PPNS]; /* strings */
> +	char description[MKS_GUEST_STAT_INSTANCE_DESC_LENGTH];
> +} MKSGuestStatInstanceDescriptor;
> +
> +#endif
> -- 
> 2.38.1
> 


More information about the igt-dev mailing list