13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/**********************************************************
23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2007-2009 VMware, Inc.  All rights reserved.
33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person
53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * obtaining a copy of this software and associated documentation
63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * files (the "Software"), to deal in the Software without
73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * restriction, including without limitation the rights to use, copy,
83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * modify, merge, publish, distribute, sublicense, and/or sell copies
93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software, and to permit persons to whom the Software is
103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * furnished to do so, subject to the following conditions:
113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice shall be
133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * included in all copies or substantial portions of the Software.
143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE.
233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **********************************************************/
253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*
273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * svga3d_shaderdefs.h --
283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SVGA3D byte code format and limit definitions.
303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The format of the byte code directly corresponds to that defined
323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * by Microsoft DirectX SDK 9.0c (file d3d9types.h). The format can
333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * also be extended so that different shader formats can be supported
343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * for example GLSL, ARB vp/fp, NV/ATI shader formats, etc.
353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef __SVGA3D_SHADER_DEFS__
393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define __SVGA3D_SHADER_DEFS__
403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D shader hardware limits. */
423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_INPUTREG_MAX            16
443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_OUTPUTREG_MAX           12
453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_VERTEX_SAMPLERREG_MAX   4
463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PIXEL_SAMPLERREG_MAX    16
473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_SAMPLERREG_MAX          (SVGA3D_PIXEL_SAMPLERREG_MAX+\
483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                                        SVGA3D_VERTEX_SAMPLERREG_MAX)
493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_TEMPREG_MAX             32
503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_CONSTREG_MAX            256
513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_CONSTINTREG_MAX         16
523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_CONSTBOOLREG_MAX        16
533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_ADDRREG_MAX             1
543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PREDREG_MAX             1
553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D byte code specific limits */
573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_MAX_SRC_REGS      4
593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_MAX_NESTING_LEVEL 32
603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D version information. */
623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_VS_TYPE  0xFFFE
643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_TYPE  0xFFFF
653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef struct {
673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union {
683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct {
693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 minor : 8;
703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 major : 8;
713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 type : 16;
723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      };
733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      uint32 value;
753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   };
763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderVersion;
773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_VS_10 ((SVGA3D_VS_TYPE << 16) | 1 << 8)
793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_VS_11 (SVGA3D_VS_10 | 1)
803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_VS_20 ((SVGA3D_VS_TYPE << 16) | 2 << 8)
813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_VS_30 ((SVGA3D_VS_TYPE << 16) | 3 << 8)
823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_10 ((SVGA3D_PS_TYPE << 16) | 1 << 8)
843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_11 (SVGA3D_PS_10 | 1)
853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_12 (SVGA3D_PS_10 | 2)
863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_13 (SVGA3D_PS_10 | 3)
873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_14 (SVGA3D_PS_10 | 4)
883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_20 ((SVGA3D_PS_TYPE << 16) | 2 << 8)
893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3D_PS_30 ((SVGA3D_PS_TYPE << 16) | 3 << 8)
903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* The *_ENABLED are for backwards compatibility with old drivers */
923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_NONE = 0,
943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_ENABLED = 1,
953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_11 = 3,
963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_12 = 5,
973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_13 = 7,
983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_14 = 9,
993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_20 = 11,
1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_30 = 13,
1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_40 = 15,
1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DPSVERSION_MAX
1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dPixelShaderVersion;
1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DVSVERSION_NONE = 0,
1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DVSVERSION_ENABLED = 1,
1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DVSVERSION_11 = 3,
1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DVSVERSION_20 = 5,
1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DVSVERSION_30 = 7,
1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DVSVERSION_40 = 9,
1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DVSVERSION_MAX
1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dVertexShaderVersion;
1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D instruction op codes. */
1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_NOP = 0,
1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_MOV,
1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_ADD,
1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_SUB,
1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_MAD,
1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_MUL,
1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_RCP,
1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_RSQ,
1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DP3,
1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DP4,
1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_MIN,
1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_MAX,
1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_SLT,
1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_SGE,
1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_EXP,
1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_LOG,
1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_LIT,
1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DST,
1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_LRP,
1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_FRC,
1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_M4x4,
1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_M4x3,
1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_M3x4,
1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_M3x3,
1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_M3x2,
1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_CALL,
1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_CALLNZ,
1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_LOOP,
1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_RET,
1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_ENDLOOP,
1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_LABEL,
1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DCL,
1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_POW,
1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_CRS,
1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_SGN,
1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_ABS,
1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_NRM,
1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_SINCOS,
1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_REP,
1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_ENDREP,
1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_IF,
1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_IFC,
1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_ELSE,
1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_ENDIF,
1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_BREAK,
1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_BREAKC,
1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_MOVA,
1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DEFB,
1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DEFI,
1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXCOORD = 64,
1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXKILL,
1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEX,
1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXBEM,
1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXBEML,
1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXREG2AR,
1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXREG2GB = 70,
1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x2PAD,
1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x2TEX,
1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x3PAD,
1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x3TEX,
1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_RESERVED0,
1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x3SPEC,
1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x3VSPEC,
1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_EXPP,
1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_LOGP,
1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_CND = 80,
1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DEF,
1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXREG2RGB,
1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXDP3TEX,
1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x2DEPTH,
1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXDP3,
1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXM3x3,
1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXDEPTH,
1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_CMP,
1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_BEM,
1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DP2ADD = 90,
1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DSX,
1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_DSY,
1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXLDD,
1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_SETP,
1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_TEXLDL,
1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_BREAKP = 96,
2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_LAST_INST,
2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_PHASE = 0xFFFD,
2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_COMMENT = 0xFFFE,
2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOP_END = 0xFFFF,
2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderOpCodeType;
2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D operation control/comparison function types */
2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCONT_NONE,
2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCONT_PROJECT,   /* Projective texturing */
2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCONT_BIAS,      /* Texturing with a LOD bias */
2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderOpCodeControlFnType;
2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMP_RESERVED0 = 0,
2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMP_GT,
2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMP_EQ,
2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMP_GE,
2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMP_LT,
2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMPC_NE,
2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMP_LE,
2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DOPCOMP_RESERVED1
2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderOpCodeCompFnType;
2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D register types */
2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_TEMP = 0,       /* Temporary register file */
2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_INPUT,          /* Input register file */
2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_CONST,          /* Constant register file */
2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_ADDR,           /* Address register for VS */
2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_TEXTURE = 3,    /* Texture register file for PS */
2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_RASTOUT,        /* Rasterizer register file */
2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_ATTROUT,        /* Attribute output register file */
2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_TEXCRDOUT,      /* Texture coordinate output register file */
2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_OUTPUT = 6,     /* Output register file for VS 3.0+ */
2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_CONSTINT,       /* Constant integer vector register file */
2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_COLOROUT,       /* Color output register file */
2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_DEPTHOUT,       /* Depth output register file */
2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_SAMPLER,        /* Sampler state register file */
2413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_CONST2,         /* Constant register file 2048 - 4095 */
2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_CONST3,         /* Constant register file 4096 - 6143 */
2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_CONST4,         /* Constant register file 6144 - 8191 */
2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_CONSTBOOL,      /* Constant boolean register file */
2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_LOOP,           /* Loop counter register file */
2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_TEMPFLOAT16,    /* 16-bit float temp register file */
2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_MISCTYPE,       /* Miscellaneous (single) registers */
2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_LABEL,          /* Label */
2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DREG_PREDICATE,      /* Predicate register */
2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderRegType;
2513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D rasterizer output register types */
2533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
2553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DRASTOUT_POSITION = 0,
2563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DRASTOUT_FOG,
2573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DRASTOUT_PSIZE
2583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderRastOutRegType;
2593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D miscellaneous register types */
2613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
2633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DMISCREG_POSITION = 0,   /* Input position x,y,z,rhw (PS) */
2643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DMISCREG_FACE            /* Floating point primitive area (PS) */
2653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3DShaderMiscRegType;
2663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D sampler types */
2683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
2703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMP_UNKNOWN = 0, /* Uninitialized value */
2713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMP_2D = 2,      /* dcl_2d s# (for declaring a 2-D texture) */
2723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMP_CUBE,        /* dcl_cube s# (for declaring a cube texture) */
2733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMP_VOLUME,      /* dcl_volume s# (for declaring a volume texture) */
2743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderSamplerType;
2753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D sampler format classes */
2773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
2793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_ARGB,        /* ARGB formats */
2803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_V8U8,        /* Sign and normalize (SNORM) V & U */
2813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_Q8W8V8U8,    /* SNORM all */
2823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_CxV8U8,      /* SNORM V & U, C=SQRT(1-U^2-V^2) */
2833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_X8L8V8U8,    /* SNORM V & U */
2843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_A2W10V10U10, /* SNORM W, V & U */
2853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_DXT_PMA,     /* DXT pre-multiplied alpha */
2863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_YUV,         /* YUV video format */
2873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_UYVY,        /* UYVY video format */
2883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_Rx,          /* R16F/32F */
2893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_RxGx,        /* R16FG16F, R32FG32F */
2903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3DSAMPFORMAT_V16U16,      /* SNORM all */
2913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3DShaderSamplerFormatClass;
2923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D write mask */
2943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
2953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DWRITEMASK_0    1 /* Component 0 (X;Red) */
2963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DWRITEMASK_1    2 /* Component 1 (Y;Green) */
2973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DWRITEMASK_2    4 /* Component 2 (Z;Blue) */
2983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DWRITEMASK_3    8 /* Component 3 (W;Alpha) */
2993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DWRITEMASK_ALL 15 /* All components */
3003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D destination modifiers */
3023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DDSTMOD_NONE              0 /* nop */
3043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DDSTMOD_SATURATE          1 /* clamp to [0, 1] */
3053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DDSTMOD_PARTIALPRECISION  2 /* Partial precision hint */
3063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*
3083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Relevant to multisampling only:
3093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * When the pixel center is not covered, sample
3103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * attribute or compute gradients/LOD
3113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * using multisample "centroid" location.
3123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Centroid" is some location within the covered
3133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * region of the pixel.
3143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
3153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DDSTMOD_MSAMPCENTROID     4
3173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D source swizzle */
3193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_REPLICATEX 0x00
3213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_REPLICATEY 0x55
3223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_REPLICATEZ 0xAA
3233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_REPLICATEW 0xFF
3243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_NONE       0xE4
3253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_YZXW       0xC9
3263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_ZXYW       0xD2
3273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define SVGA3DSWIZZLE_WXYZ       0x1B
3283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D source modifiers */
3303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef enum {
3323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_NONE = 0, /* nop */
3333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_NEG,      /* negate */
3343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_BIAS,     /* bias */
3353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_BIASNEG,  /* bias and negate */
3363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_SIGN,     /* sign */
3373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_SIGNNEG,  /* sign and negate */
3383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_COMP,     /* complement */
3393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_X2,       /* x2 */
3403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_X2NEG,    /* x2 and negate */
3413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_DZ,       /* divide through by z component */
3423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_DW,       /* divide through by w component */
3433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_ABS,      /* abs() */
3443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_ABSNEG,   /* -abs() */
3453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    SVGA3DSRCMOD_NOT,      /* ! (for predicate register) */
3463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderSrcModType;
3473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D instruction token */
3493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef struct {
3513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union {
3523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct {
3533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 comment_op : 16;
3543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 comment_size : 16;
3553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      };
3563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct {
3583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 op : 16;
3593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 control : 3;
3603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 reserved2 : 5;
3613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 size : 4;
3623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 predicated : 1;
3633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 reserved1 : 1;
3643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 coissue : 1;
3653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 reserved0 : 1;
3663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      };
3673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      uint32 value;
3693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   };
3703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderInstToken;
3713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D destination parameter token */
3733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef struct {
3753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union {
3763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct {
3773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 num : 11;
3783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 type_upper : 2;
3793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 relAddr : 1;
3803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 reserved1 : 2;
3813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 mask : 4;
3823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 dstMod : 4;
3833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 shfScale : 4;
3843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 type_lower : 3;
3853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 reserved0 : 1;
3863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      };
3873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      uint32 value;
3893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   };
3903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderDestToken;
3913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D source parameter token */
3933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
3943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef struct {
3953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union {
3963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct {
3973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 num : 11;
3983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 type_upper : 2;
3993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 relAddr : 1;
4003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 reserved1 : 2;
4013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 swizzle : 8;
4023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 srcMod : 4;
4033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 type_lower : 3;
4043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         uint32 reserved0 : 1;
4053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      };
4063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      uint32 value;
4083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   };
4093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderSrcToken;
4103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3DOP_DCL parameter tokens */
4123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef struct {
4143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union {
4153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct {
4163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         union {
4173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org            struct {
4183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org               uint32 usage : 5;
4193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org               uint32 reserved1 : 11;
4203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org               uint32 index : 4;
4213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org               uint32 reserved0 : 12;
4223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org            }; /* input / output declaration */
4233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org            struct {
4253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org               uint32 reserved3 : 27;
4263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org               uint32 type : 4;
4273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org               uint32 reserved2 : 1;
4283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org            }; /* sampler declaration */
4293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         };
4303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         SVGA3dShaderDestToken dst;
4323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      };
4333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      uint32 values[2];
4353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   };
4363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3DOpDclArgs;
4373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3DOP_DEF parameter tokens */
4393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef struct {
4413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   union {
4423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      struct {
4433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         SVGA3dShaderDestToken dst;
4443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         union {
4463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org            float constValues[4];
4473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org            int constIValues[4];
4483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org            Bool constBValue;
4493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org         };
4503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      };
4513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      uint32 values[5];
4533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   };
4543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3DOpDefArgs;
4553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D shader token */
4573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef union {
4593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   uint32 value;
4603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3dShaderInstToken inst;
4613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3dShaderDestToken dest;
4623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3dShaderSrcToken src;
4633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderToken;
4643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D shader program */
4663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtypedef struct {
4683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3dShaderVersion version;
4693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   /* SVGA3dShaderToken stream */
4703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} SVGA3dShaderProgram;
4713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* SVGA3D version specific register assignments */
4733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_POSITION_VS11 = 0;
4753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_PSIZE_VS11 = 1;
4763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_FOG_VS11 = 3;
4773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_FOG_MASK_VS11 = SVGA3DWRITEMASK_3;
4783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_COLOR_BASE_VS11 = 2;
4793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_TEXCOORD_BASE_VS11 = 4;
4803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_COLOR_BASE_PS11 = 0;
4823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_TEXCOORD_BASE_PS11 = 2;
4833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_OUTPUT_REG_DEPTH_PS11 = 0;
4843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_OUTPUT_REG_COLOR_PS11 = 1;
4853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_COLOR_BASE_PS20 = 0;
4873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_COLOR_NUM_PS20 = 2;
4883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_TEXCOORD_BASE_PS20 = 2;
4893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_INPUT_REG_TEXCOORD_NUM_PS20 = 8;
4903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_OUTPUT_REG_COLOR_BASE_PS20 = 1;
4913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_OUTPUT_REG_COLOR_NUM_PS20 = 4;
4923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_OUTPUT_REG_DEPTH_BASE_PS20 = 0;
4933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic const uint32 SVGA3D_OUTPUT_REG_DEPTH_NUM_PS20 = 1;
4943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
4953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*
4963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *----------------------------------------------------------------------
4973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
4983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SVGA3dShaderGetRegType --
4993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
5003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *      As the register type is split into two non sequential fields,
5013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *      this function provides an useful way of accessing the actual
5023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *      register type without having to manually concatenate the
5033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *      type_upper and type_lower fields.
5043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
5053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Results:
5063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *      Returns the register type.
5073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
5083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *----------------------------------------------------------------------
5093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
5103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
5113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic INLINE SVGA3dShaderRegType
5123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgSVGA3dShaderGetRegType(uint32 token)
5133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
5143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   SVGA3dShaderSrcToken src;
5153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   src.value = token;
5163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   return (SVGA3dShaderRegType)(src.type_upper << 3 | src.type_lower);
5173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
5183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
5193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif /* __SVGA3D_SHADER_DEFS__ */
520