Home | History | Annotate | Download | only in include
      1 /**********************************************************
      2  * Copyright 2007-2015 VMware, Inc.  All rights reserved.
      3  *
      4  * Permission is hereby granted, free of charge, to any person
      5  * obtaining a copy of this software and associated documentation
      6  * files (the "Software"), to deal in the Software without
      7  * restriction, including without limitation the rights to use, copy,
      8  * modify, merge, publish, distribute, sublicense, and/or sell copies
      9  * of the Software, and to permit persons to whom the Software is
     10  * furnished to do so, subject to the following conditions:
     11  *
     12  * The above copyright notice and this permission notice shall be
     13  * included in all copies or substantial portions of the Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     22  * SOFTWARE.
     23  *
     24  **********************************************************/
     25 
     26 /*
     27  * VGPU10ShaderTokens.h --
     28  *
     29  *    VGPU10 shader token definitions.
     30  *
     31  */
     32 
     33 #ifndef VGPU10SHADERTOKENS_H
     34 #define VGPU10SHADERTOKENS_H
     35 
     36 /* Shader limits */
     37 #define VGPU10_MAX_VS_INPUTS 16
     38 #define VGPU10_MAX_VS_OUTPUTS 16
     39 #define VGPU10_MAX_GS_INPUTS 16
     40 #define VGPU10_MAX_GS_OUTPUTS 32
     41 #define VGPU10_MAX_FS_INPUTS 32
     42 #define VGPU10_MAX_FS_OUTPUTS 8
     43 #define VGPU10_MAX_TEMPS 4096
     44 #define VGPU10_MAX_CONSTANT_BUFFERS 14
     45 #define VGPU10_MAX_CONSTANT_BUFFER_ELEMENT_COUNT 4096
     46 #define VGPU10_MAX_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT 4096
     47 #define VGPU10_MAX_SAMPLERS 16
     48 #define VGPU10_MAX_RESOURCES 128
     49 #define VGPU10_MIN_TEXEL_FETCH_OFFSET -8
     50 #define VGPU10_MAX_TEXEL_FETCH_OFFSET 7
     51 
     52 typedef enum {
     53    VGPU10_PIXEL_SHADER = 0,
     54    VGPU10_VERTEX_SHADER = 1,
     55    VGPU10_GEOMETRY_SHADER = 2
     56 } VGPU10_PROGRAM_TYPE;
     57 
     58 typedef union {
     59    struct {
     60       unsigned int minorVersion  : 4;
     61       unsigned int majorVersion  : 4;
     62       unsigned int               : 8;
     63       unsigned int programType   : 16; /* VGPU10_PROGRAM_TYPE */
     64    };
     65    uint32 value;
     66 } VGPU10ProgramToken;
     67 
     68 
     69 typedef enum {
     70    VGPU10_OPCODE_ADD                               = 0,
     71    VGPU10_OPCODE_AND                               = 1,
     72    VGPU10_OPCODE_BREAK                             = 2,
     73    VGPU10_OPCODE_BREAKC                            = 3,
     74    VGPU10_OPCODE_CALL                              = 4,
     75    VGPU10_OPCODE_CALLC                             = 5,
     76    VGPU10_OPCODE_CASE                              = 6,
     77    VGPU10_OPCODE_CONTINUE                          = 7,
     78    VGPU10_OPCODE_CONTINUEC                         = 8,
     79    VGPU10_OPCODE_CUT                               = 9,
     80    VGPU10_OPCODE_DEFAULT                           = 10,
     81    VGPU10_OPCODE_DERIV_RTX                         = 11,
     82    VGPU10_OPCODE_DERIV_RTY                         = 12,
     83    VGPU10_OPCODE_DISCARD                           = 13,
     84    VGPU10_OPCODE_DIV                               = 14,
     85    VGPU10_OPCODE_DP2                               = 15,
     86    VGPU10_OPCODE_DP3                               = 16,
     87    VGPU10_OPCODE_DP4                               = 17,
     88    VGPU10_OPCODE_ELSE                              = 18,
     89    VGPU10_OPCODE_EMIT                              = 19,
     90    VGPU10_OPCODE_EMITTHENCUT                       = 20,
     91    VGPU10_OPCODE_ENDIF                             = 21,
     92    VGPU10_OPCODE_ENDLOOP                           = 22,
     93    VGPU10_OPCODE_ENDSWITCH                         = 23,
     94    VGPU10_OPCODE_EQ                                = 24,
     95    VGPU10_OPCODE_EXP                               = 25,
     96    VGPU10_OPCODE_FRC                               = 26,
     97    VGPU10_OPCODE_FTOI                              = 27,
     98    VGPU10_OPCODE_FTOU                              = 28,
     99    VGPU10_OPCODE_GE                                = 29,
    100    VGPU10_OPCODE_IADD                              = 30,
    101    VGPU10_OPCODE_IF                                = 31,
    102    VGPU10_OPCODE_IEQ                               = 32,
    103    VGPU10_OPCODE_IGE                               = 33,
    104    VGPU10_OPCODE_ILT                               = 34,
    105    VGPU10_OPCODE_IMAD                              = 35,
    106    VGPU10_OPCODE_IMAX                              = 36,
    107    VGPU10_OPCODE_IMIN                              = 37,
    108    VGPU10_OPCODE_IMUL                              = 38,
    109    VGPU10_OPCODE_INE                               = 39,
    110    VGPU10_OPCODE_INEG                              = 40,
    111    VGPU10_OPCODE_ISHL                              = 41,
    112    VGPU10_OPCODE_ISHR                              = 42,
    113    VGPU10_OPCODE_ITOF                              = 43,
    114    VGPU10_OPCODE_LABEL                             = 44,
    115    VGPU10_OPCODE_LD                                = 45,
    116    VGPU10_OPCODE_LD_MS                             = 46,
    117    VGPU10_OPCODE_LOG                               = 47,
    118    VGPU10_OPCODE_LOOP                              = 48,
    119    VGPU10_OPCODE_LT                                = 49,
    120    VGPU10_OPCODE_MAD                               = 50,
    121    VGPU10_OPCODE_MIN                               = 51,
    122    VGPU10_OPCODE_MAX                               = 52,
    123    VGPU10_OPCODE_CUSTOMDATA                        = 53,
    124    VGPU10_OPCODE_MOV                               = 54,
    125    VGPU10_OPCODE_MOVC                              = 55,
    126    VGPU10_OPCODE_MUL                               = 56,
    127    VGPU10_OPCODE_NE                                = 57,
    128    VGPU10_OPCODE_NOP                               = 58,
    129    VGPU10_OPCODE_NOT                               = 59,
    130    VGPU10_OPCODE_OR                                = 60,
    131    VGPU10_OPCODE_RESINFO                           = 61,
    132    VGPU10_OPCODE_RET                               = 62,
    133    VGPU10_OPCODE_RETC                              = 63,
    134    VGPU10_OPCODE_ROUND_NE                          = 64,
    135    VGPU10_OPCODE_ROUND_NI                          = 65,
    136    VGPU10_OPCODE_ROUND_PI                          = 66,
    137    VGPU10_OPCODE_ROUND_Z                           = 67,
    138    VGPU10_OPCODE_RSQ                               = 68,
    139    VGPU10_OPCODE_SAMPLE                            = 69,
    140    VGPU10_OPCODE_SAMPLE_C                          = 70,
    141    VGPU10_OPCODE_SAMPLE_C_LZ                       = 71,
    142    VGPU10_OPCODE_SAMPLE_L                          = 72,
    143    VGPU10_OPCODE_SAMPLE_D                          = 73,
    144    VGPU10_OPCODE_SAMPLE_B                          = 74,
    145    VGPU10_OPCODE_SQRT                              = 75,
    146    VGPU10_OPCODE_SWITCH                            = 76,
    147    VGPU10_OPCODE_SINCOS                            = 77,
    148    VGPU10_OPCODE_UDIV                              = 78,
    149    VGPU10_OPCODE_ULT                               = 79,
    150    VGPU10_OPCODE_UGE                               = 80,
    151    VGPU10_OPCODE_UMUL                              = 81,
    152    VGPU10_OPCODE_UMAD                              = 82,
    153    VGPU10_OPCODE_UMAX                              = 83,
    154    VGPU10_OPCODE_UMIN                              = 84,
    155    VGPU10_OPCODE_USHR                              = 85,
    156    VGPU10_OPCODE_UTOF                              = 86,
    157    VGPU10_OPCODE_XOR                               = 87,
    158    VGPU10_OPCODE_DCL_RESOURCE                      = 88,
    159    VGPU10_OPCODE_DCL_CONSTANT_BUFFER               = 89,
    160    VGPU10_OPCODE_DCL_SAMPLER                       = 90,
    161    VGPU10_OPCODE_DCL_INDEX_RANGE                   = 91,
    162    VGPU10_OPCODE_DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY  = 92,
    163    VGPU10_OPCODE_DCL_GS_INPUT_PRIMITIVE            = 93,
    164    VGPU10_OPCODE_DCL_MAX_OUTPUT_VERTEX_COUNT       = 94,
    165    VGPU10_OPCODE_DCL_INPUT                         = 95,
    166    VGPU10_OPCODE_DCL_INPUT_SGV                     = 96,
    167    VGPU10_OPCODE_DCL_INPUT_SIV                     = 97,
    168    VGPU10_OPCODE_DCL_INPUT_PS                      = 98,
    169    VGPU10_OPCODE_DCL_INPUT_PS_SGV                  = 99,
    170    VGPU10_OPCODE_DCL_INPUT_PS_SIV                  = 100,
    171    VGPU10_OPCODE_DCL_OUTPUT                        = 101,
    172    VGPU10_OPCODE_DCL_OUTPUT_SGV                    = 102,
    173    VGPU10_OPCODE_DCL_OUTPUT_SIV                    = 103,
    174    VGPU10_OPCODE_DCL_TEMPS                         = 104,
    175    VGPU10_OPCODE_DCL_INDEXABLE_TEMP                = 105,
    176    VGPU10_OPCODE_DCL_GLOBAL_FLAGS                  = 106,
    177    VGPU10_OPCODE_IDIV                              = 107,
    178    VGPU10_NUM_OPCODES                  /* Should be the last entry. */
    179 } VGPU10_OPCODE_TYPE;
    180 
    181 typedef enum {
    182    VGPU10_INTERPOLATION_UNDEFINED = 0,
    183    VGPU10_INTERPOLATION_CONSTANT = 1,
    184    VGPU10_INTERPOLATION_LINEAR = 2,
    185    VGPU10_INTERPOLATION_LINEAR_CENTROID = 3,
    186    VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE = 4,
    187    VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID = 5,
    188    VGPU10_INTERPOLATION_LINEAR_SAMPLE = 6,                  /* DX10.1 */
    189    VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE = 7     /* DX10.1 */
    190 } VGPU10_INTERPOLATION_MODE;
    191 
    192 typedef enum {
    193    VGPU10_RESOURCE_DIMENSION_UNKNOWN = 0,
    194    VGPU10_RESOURCE_DIMENSION_BUFFER = 1,
    195    VGPU10_RESOURCE_DIMENSION_TEXTURE1D = 2,
    196    VGPU10_RESOURCE_DIMENSION_TEXTURE2D = 3,
    197    VGPU10_RESOURCE_DIMENSION_TEXTURE2DMS = 4,
    198    VGPU10_RESOURCE_DIMENSION_TEXTURE3D = 5,
    199    VGPU10_RESOURCE_DIMENSION_TEXTURECUBE = 6,
    200    VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY = 7,
    201    VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY = 8,
    202    VGPU10_RESOURCE_DIMENSION_TEXTURE2DMSARRAY = 9,
    203    VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY = 10
    204 } VGPU10_RESOURCE_DIMENSION;
    205 
    206 typedef enum {
    207    VGPU10_SAMPLER_MODE_DEFAULT = 0,
    208    VGPU10_SAMPLER_MODE_COMPARISON = 1,
    209    VGPU10_SAMPLER_MODE_MONO = 2
    210 } VGPU10_SAMPLER_MODE;
    211 
    212 typedef enum {
    213    VGPU10_INSTRUCTION_TEST_ZERO     = 0,
    214    VGPU10_INSTRUCTION_TEST_NONZERO  = 1
    215 } VGPU10_INSTRUCTION_TEST_BOOLEAN;
    216 
    217 typedef enum {
    218    VGPU10_CB_IMMEDIATE_INDEXED   = 0,
    219    VGPU10_CB_DYNAMIC_INDEXED     = 1
    220 } VGPU10_CB_ACCESS_PATTERN;
    221 
    222 typedef enum {
    223    VGPU10_PRIMITIVE_UNDEFINED    = 0,
    224    VGPU10_PRIMITIVE_POINT        = 1,
    225    VGPU10_PRIMITIVE_LINE         = 2,
    226    VGPU10_PRIMITIVE_TRIANGLE     = 3,
    227    VGPU10_PRIMITIVE_LINE_ADJ     = 6,
    228    VGPU10_PRIMITIVE_TRIANGLE_ADJ = 7
    229 } VGPU10_PRIMITIVE;
    230 
    231 typedef enum {
    232    VGPU10_PRIMITIVE_TOPOLOGY_UNDEFINED          = 0,
    233    VGPU10_PRIMITIVE_TOPOLOGY_POINTLIST          = 1,
    234    VGPU10_PRIMITIVE_TOPOLOGY_LINELIST           = 2,
    235    VGPU10_PRIMITIVE_TOPOLOGY_LINESTRIP          = 3,
    236    VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLELIST       = 4,
    237    VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP      = 5,
    238    VGPU10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ       = 10,
    239    VGPU10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ      = 11,
    240    VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ   = 12,
    241    VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ  = 13
    242 } VGPU10_PRIMITIVE_TOPOLOGY;
    243 
    244 typedef enum {
    245    VGPU10_CUSTOMDATA_COMMENT                       = 0,
    246    VGPU10_CUSTOMDATA_DEBUGINFO                     = 1,
    247    VGPU10_CUSTOMDATA_OPAQUE                        = 2,
    248    VGPU10_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER = 3
    249 } VGPU10_CUSTOMDATA_CLASS;
    250 
    251 typedef enum {
    252    VGPU10_RESINFO_RETURN_FLOAT      = 0,
    253    VGPU10_RESINFO_RETURN_RCPFLOAT   = 1,
    254    VGPU10_RESINFO_RETURN_UINT       = 2
    255 } VGPU10_RESINFO_RETURN_TYPE;
    256 
    257 typedef union {
    258    struct {
    259       unsigned int opcodeType          : 11; /* VGPU10_OPCODE_TYPE */
    260       unsigned int interpolationMode   : 4;  /* VGPU10_INTERPOLATION_MODE */
    261       unsigned int                     : 3;
    262       unsigned int testBoolean         : 1;  /* VGPU10_INSTRUCTION_TEST_BOOLEAN */
    263       unsigned int                     : 5;
    264       unsigned int instructionLength   : 7;
    265       unsigned int extended            : 1;
    266    };
    267    struct {
    268       unsigned int                     : 11;
    269       unsigned int resourceDimension   : 5;  /* VGPU10_RESOURCE_DIMENSION */
    270    };
    271    struct {
    272       unsigned int                     : 11;
    273       unsigned int samplerMode         : 4;  /* VGPU10_SAMPLER_MODE */
    274    };
    275    struct {
    276       unsigned int                     : 11;
    277       unsigned int accessPattern       : 1;  /* VGPU10_CB_ACCESS_PATTERN */
    278    };
    279    struct {
    280       unsigned int                     : 11;
    281       unsigned int primitive           : 6;  /* VGPU10_PRIMITIVE */
    282    };
    283    struct {
    284       unsigned int                     : 11;
    285       unsigned int primitiveTopology   : 6;  /* VGPU10_PRIMITIVE_TOPOLOGY */
    286    };
    287    struct {
    288       unsigned int                     : 11;
    289       unsigned int customDataClass     : 21; /* VGPU10_CUSTOMDATA_CLASS */
    290    };
    291    struct {
    292       unsigned int                     : 11;
    293       unsigned int resinfoReturnType   : 2;  /* VGPU10_RESINFO_RETURN_TYPE */
    294       unsigned int saturate            : 1;
    295    };
    296    struct {
    297       unsigned int                     : 11;
    298       unsigned int refactoringAllowed  : 1;
    299    };
    300    uint32 value;
    301 } VGPU10OpcodeToken0;
    302 
    303 
    304 typedef enum {
    305    VGPU10_EXTENDED_OPCODE_EMPTY = 0,
    306    VGPU10_EXTENDED_OPCODE_SAMPLE_CONTROLS
    307 } VGPU10_EXTENDED_OPCODE_TYPE;
    308 
    309 typedef union {
    310    struct {
    311       unsigned int opcodeType : 6;  /* VGPU10_EXTENDED_OPCODE_TYPE */
    312       unsigned int            : 3;
    313       unsigned int offsetU    : 4;  /* Two's complement. */
    314       unsigned int offsetV    : 4;  /* Two's complement. */
    315       unsigned int offsetW    : 4;  /* Two's complement. */
    316       unsigned int            : 10;
    317       unsigned int extended   : 1;
    318    };
    319    uint32 value;
    320 } VGPU10OpcodeToken1;
    321 
    322 
    323 typedef enum {
    324    VGPU10_OPERAND_0_COMPONENT = 0,
    325    VGPU10_OPERAND_1_COMPONENT = 1,
    326    VGPU10_OPERAND_4_COMPONENT = 2,
    327    VGPU10_OPERAND_N_COMPONENT = 3   /* Unused for now. */
    328 } VGPU10_OPERAND_NUM_COMPONENTS;
    329 
    330 typedef enum {
    331    VGPU10_OPERAND_4_COMPONENT_MASK_MODE = 0,
    332    VGPU10_OPERAND_4_COMPONENT_SWIZZLE_MODE = 1,
    333    VGPU10_OPERAND_4_COMPONENT_SELECT_1_MODE = 2
    334 } VGPU10_OPERAND_4_COMPONENT_SELECTION_MODE;
    335 
    336 #define VGPU10_OPERAND_4_COMPONENT_MASK_X    0x1
    337 #define VGPU10_OPERAND_4_COMPONENT_MASK_Y    0x2
    338 #define VGPU10_OPERAND_4_COMPONENT_MASK_Z    0x4
    339 #define VGPU10_OPERAND_4_COMPONENT_MASK_W    0x8
    340 
    341 #define VGPU10_OPERAND_4_COMPONENT_MASK_XY   (VGPU10_OPERAND_4_COMPONENT_MASK_X   | VGPU10_OPERAND_4_COMPONENT_MASK_Y)
    342 #define VGPU10_OPERAND_4_COMPONENT_MASK_XZ   (VGPU10_OPERAND_4_COMPONENT_MASK_X   | VGPU10_OPERAND_4_COMPONENT_MASK_Z)
    343 #define VGPU10_OPERAND_4_COMPONENT_MASK_XW   (VGPU10_OPERAND_4_COMPONENT_MASK_X   | VGPU10_OPERAND_4_COMPONENT_MASK_W)
    344 #define VGPU10_OPERAND_4_COMPONENT_MASK_YZ   (VGPU10_OPERAND_4_COMPONENT_MASK_Y   | VGPU10_OPERAND_4_COMPONENT_MASK_Z)
    345 #define VGPU10_OPERAND_4_COMPONENT_MASK_YW   (VGPU10_OPERAND_4_COMPONENT_MASK_Y   | VGPU10_OPERAND_4_COMPONENT_MASK_W)
    346 #define VGPU10_OPERAND_4_COMPONENT_MASK_ZW   (VGPU10_OPERAND_4_COMPONENT_MASK_Z   | VGPU10_OPERAND_4_COMPONENT_MASK_W)
    347 #define VGPU10_OPERAND_4_COMPONENT_MASK_XYZ  (VGPU10_OPERAND_4_COMPONENT_MASK_XY  | VGPU10_OPERAND_4_COMPONENT_MASK_Z)
    348 #define VGPU10_OPERAND_4_COMPONENT_MASK_XYW  (VGPU10_OPERAND_4_COMPONENT_MASK_XY  | VGPU10_OPERAND_4_COMPONENT_MASK_W)
    349 #define VGPU10_OPERAND_4_COMPONENT_MASK_XZW  (VGPU10_OPERAND_4_COMPONENT_MASK_XZ  | VGPU10_OPERAND_4_COMPONENT_MASK_W)
    350 #define VGPU10_OPERAND_4_COMPONENT_MASK_YZW  (VGPU10_OPERAND_4_COMPONENT_MASK_YZ  | VGPU10_OPERAND_4_COMPONENT_MASK_W)
    351 #define VGPU10_OPERAND_4_COMPONENT_MASK_XYZW (VGPU10_OPERAND_4_COMPONENT_MASK_XYZ | VGPU10_OPERAND_4_COMPONENT_MASK_W)
    352 #define VGPU10_OPERAND_4_COMPONENT_MASK_ALL  VGPU10_OPERAND_4_COMPONENT_MASK_XYZW
    353 
    354 #define VGPU10_REGISTER_INDEX_FROM_SEMANTIC  0xffffffff
    355 
    356 typedef enum {
    357    VGPU10_COMPONENT_X = 0,
    358    VGPU10_COMPONENT_Y = 1,
    359    VGPU10_COMPONENT_Z = 2,
    360    VGPU10_COMPONENT_W = 3
    361 } VGPU10_COMPONENT_NAME;
    362 
    363 typedef enum {
    364    VGPU10_OPERAND_TYPE_TEMP = 0,
    365    VGPU10_OPERAND_TYPE_INPUT = 1,
    366    VGPU10_OPERAND_TYPE_OUTPUT = 2,
    367    VGPU10_OPERAND_TYPE_INDEXABLE_TEMP = 3,
    368    VGPU10_OPERAND_TYPE_IMMEDIATE32 = 4,
    369    VGPU10_OPERAND_TYPE_IMMEDIATE64 = 5,
    370    VGPU10_OPERAND_TYPE_SAMPLER = 6,
    371    VGPU10_OPERAND_TYPE_RESOURCE = 7,
    372    VGPU10_OPERAND_TYPE_CONSTANT_BUFFER = 8,
    373    VGPU10_OPERAND_TYPE_IMMEDIATE_CONSTANT_BUFFER = 9,
    374    VGPU10_OPERAND_TYPE_LABEL = 10,
    375    VGPU10_OPERAND_TYPE_INPUT_PRIMITIVEID = 11,
    376    VGPU10_OPERAND_TYPE_OUTPUT_DEPTH = 12,
    377    VGPU10_OPERAND_TYPE_NULL = 13,
    378    VGPU10_OPERAND_TYPE_RASTERIZER = 14,            /* DX10.1 */
    379    VGPU10_OPERAND_TYPE_OUTPUT_COVERAGE_MASK = 15   /* DX10.1 */
    380 } VGPU10_OPERAND_TYPE;
    381 
    382 typedef enum {
    383    VGPU10_OPERAND_INDEX_0D = 0,
    384    VGPU10_OPERAND_INDEX_1D = 1,
    385    VGPU10_OPERAND_INDEX_2D = 2,
    386    VGPU10_OPERAND_INDEX_3D = 3
    387 } VGPU10_OPERAND_INDEX_DIMENSION;
    388 
    389 typedef enum {
    390    VGPU10_OPERAND_INDEX_IMMEDIATE32 = 0,
    391    VGPU10_OPERAND_INDEX_IMMEDIATE64 = 1,
    392    VGPU10_OPERAND_INDEX_RELATIVE = 2,
    393    VGPU10_OPERAND_INDEX_IMMEDIATE32_PLUS_RELATIVE = 3,
    394    VGPU10_OPERAND_INDEX_IMMEDIATE64_PLUS_RELATIVE = 4
    395 } VGPU10_OPERAND_INDEX_REPRESENTATION;
    396 
    397 typedef union {
    398    struct {
    399       unsigned int numComponents          : 2;  /* VGPU10_OPERAND_NUM_COMPONENTS */
    400       unsigned int selectionMode          : 2;  /* VGPU10_OPERAND_4_COMPONENT_SELECTION_MODE */
    401       unsigned int mask                   : 4;  /* D3D10_SB_OPERAND_4_COMPONENT_MASK_* */
    402       unsigned int                        : 4;
    403       unsigned int operandType            : 8;  /* VGPU10_OPERAND_TYPE */
    404       unsigned int indexDimension         : 2;  /* VGPU10_OPERAND_INDEX_DIMENSION */
    405       unsigned int index0Representation   : 3;  /* VGPU10_OPERAND_INDEX_REPRESENTATION */
    406       unsigned int index1Representation   : 3;  /* VGPU10_OPERAND_INDEX_REPRESENTATION */
    407       unsigned int                        : 3;
    408       unsigned int extended               : 1;
    409    };
    410    struct {
    411       unsigned int                        : 4;
    412       unsigned int swizzleX               : 2;  /* VGPU10_COMPONENT_NAME */
    413       unsigned int swizzleY               : 2;  /* VGPU10_COMPONENT_NAME */
    414       unsigned int swizzleZ               : 2;  /* VGPU10_COMPONENT_NAME */
    415       unsigned int swizzleW               : 2;  /* VGPU10_COMPONENT_NAME */
    416    };
    417    struct {
    418       unsigned int                        : 4;
    419       unsigned int selectMask             : 2;  /* VGPU10_COMPONENT_NAME */
    420    };
    421    uint32 value;
    422 } VGPU10OperandToken0;
    423 
    424 
    425 typedef enum {
    426    VGPU10_EXTENDED_OPERAND_EMPTY = 0,
    427    VGPU10_EXTENDED_OPERAND_MODIFIER = 1
    428 } VGPU10_EXTENDED_OPERAND_TYPE;
    429 
    430 typedef enum {
    431    VGPU10_OPERAND_MODIFIER_NONE = 0,
    432    VGPU10_OPERAND_MODIFIER_NEG = 1,
    433    VGPU10_OPERAND_MODIFIER_ABS = 2,
    434    VGPU10_OPERAND_MODIFIER_ABSNEG = 3
    435 } VGPU10_OPERAND_MODIFIER;
    436 
    437 typedef union {
    438    struct {
    439       unsigned int extendedOperandType : 6;  /* VGPU10_EXTENDED_OPERAND_TYPE */
    440       unsigned int operandModifier     : 8;  /* VGPU10_OPERAND_MODIFIER */
    441       unsigned int                     : 17;
    442       unsigned int extended            : 1;
    443    };
    444    uint32 value;
    445 } VGPU10OperandToken1;
    446 
    447 
    448 typedef enum {
    449    VGPU10_RETURN_TYPE_UNORM = 1,
    450    VGPU10_RETURN_TYPE_SNORM = 2,
    451    VGPU10_RETURN_TYPE_SINT = 3,
    452    VGPU10_RETURN_TYPE_UINT = 4,
    453    VGPU10_RETURN_TYPE_FLOAT = 5,
    454    VGPU10_RETURN_TYPE_MIXED = 6
    455 } VGPU10_RESOURCE_RETURN_TYPE;
    456 
    457 typedef union {
    458    struct {
    459       unsigned int component0 : 4;  /* VGPU10_RESOURCE_RETURN_TYPE */
    460       unsigned int component1 : 4;  /* VGPU10_RESOURCE_RETURN_TYPE */
    461       unsigned int component2 : 4;  /* VGPU10_RESOURCE_RETURN_TYPE */
    462       unsigned int component3 : 4;  /* VGPU10_RESOURCE_RETURN_TYPE */
    463    };
    464    uint32 value;
    465 } VGPU10ResourceReturnTypeToken;
    466 
    467 
    468 typedef enum {
    469    VGPU10_NAME_UNDEFINED = 0,
    470    VGPU10_NAME_POSITION = 1,
    471    VGPU10_NAME_CLIP_DISTANCE = 2,
    472    VGPU10_NAME_CULL_DISTANCE = 3,
    473    VGPU10_NAME_RENDER_TARGET_ARRAY_INDEX = 4,
    474    VGPU10_NAME_VIEWPORT_ARRAY_INDEX = 5,
    475    VGPU10_NAME_VERTEX_ID = 6,
    476    VGPU10_NAME_PRIMITIVE_ID = 7,
    477    VGPU10_NAME_INSTANCE_ID = 8,
    478    VGPU10_NAME_IS_FRONT_FACE = 9,
    479    VGPU10_NAME_SAMPLE_INDEX = 10,
    480 } VGPU10_SYSTEM_NAME;
    481 
    482 typedef union {
    483    struct {
    484       unsigned int name : 16; /* VGPU10_SYSTEM_NAME */
    485    };
    486    uint32 value;
    487 } VGPU10NameToken;
    488 
    489 #endif
    490