#ifndef __STARTDX_HPP__
#define __STARTDX_HPP__

#define XO_PS0101        0xffff0101  // shader version
#define XO_PS0103        0xffff0103
#define XO_PS0104        0xffff0104
#define XO_PS0200        0xffff0200

#define XO_VS0101        0xfffe0101
#define XO_VS0200        0xfffe0200

/****************************************************************************/

#define XO_NOP            0x00000000    // shader ops
#define XO_MOV            0x02000001
#define XO_ADD            0x03000002
#define XO_SUB            0x03000003
#define XO_MAD            0x04000004
#define XO_MUL            0x03000005
#define XO_RCP            0x02000006
#define XO_RSQ            0x02000007
#define XO_DP3            0x03000008
#define XO_DP4            0x03000009
#define XO_MIN            0x0300000a
#define XO_MAX            0x0300000b
#define XO_SLT            0x0300000c
#define XO_SGE            0x0300000d
#define XO_EXP            0x0200000e
#define XO_LOG            0x0200000f

#define XO_LIT            0x02000010
#define XO_DST            0x03000011
#define XO_LRP            0x04000012
#define XO_FRC            0x02000013
#define XO_M4x4           0x03000014
#define XO_M4x3           0x03000015
#define XO_M3x4           0x03000016
#define XO_M3x3           0x03000017

#define XO_M3x2           0x03000018
//#define XO_CALL           0x00000019
//#define XO_CALLNZ         0x0000001a
//#define XO_LOOP           0x0000001b
//#define XO_RET            0x0000001c
//#define XO_ENDLOOP        0x0000001d
//#define XO_LABEL          0x0000001e
#define XO_DCL            0x0200001f  // declare vertes shader input

#define XO_POW            0x03000020
#define XO_CRS            0x03000021
#define XO_SGN            0x02000022
#define XO_ABS            0x02000023
#define XO_NRM            0x02000024
#define XO_SINCOS         0x03000025
//#define XO_REP            0x00000026
//#define XO_ENDREP         0x00000027
//#define XO_IF             0x00000028
//#define XO_IFC            0x00000029
//#define XO_ELSE           0x0000002a
//#define XO_ENDIF          0x0000002b
//#define XO_BREAK          0x0000002c
//#define XO_BREAKC         0x0000002d
#define XO_MOVA           0x0200002e
//#define XO_DEFB           0x0000002f

//#define XO_DEFI           0x00000030


#define XO_TEXCOORD       0x01000040
#define XO_TEXKILL        0x01000041
#define XO_TEX13          0x01000042  // ps1.3
#define XO_TEX14          0x02000042  // ps1.4
#define XO_TEXLD          0x03000042  // ps2.0
#define XO_TEXLDP         0x03010042  // ps2.0
#define XO_TEXLDB         0x03020042  // ps2.0
#define XO_TEXBEM         0x02000043
#define XO_TEXBEML        0x02000044
#define XO_TEXREG2AR      0x02000045
#define XO_TEXREG2GB      0x02000046
#define XO_TEXM3x2PAD     0x02000047
#define XO_TEXM3x2TEX     0x02000048
#define XO_TEXM3x3PAD     0x02000049
#define XO_TEXM3x3TEX     0x0200004a
#define XO_RESERVED0      0x0000004b
#define XO_TEXM3x3SPEC    0x0300004c
#define XO_TEXM3x3VSPEC   0x0200004d
#define XO_EXPP           0x0200004e
#define XO_LOGP           0x0200004f

#define XO_CND            0x04000050
#define XO_DEF            0x05000051
#define XO_TEXREG2RGB     0x02000052
#define XO_TEXDP3TEX      0x02000053
#define XO_TEXM3x2DEPTH   0x02000054
#define XO_TEXDP3         0x02000055
#define XO_TEXM3x3        0x02000056
#define XO_TEXDEPTH       0x01000057
#define XO_CMP            0x04000058
#define XO_BEM            0x03000059
#define XO_DP2ADD         0x0400005a
//#define XO_DSX            0x0000005b
//#define XO_DSY            0x0000005c
//#define XO_TEXLDD         0x0000005d
//#define XO_SETP           0x0000005e
//#define XO_TEXLDL         0x0000005f

#define XO_BREAKP         0x00000060

#define XO_EXT_IF         0x0100e000
#define XO_EXT_ELSE       0x0000e001
#define XO_EXT_ELIF       0x0100e002
#define XO_EXT_END        0x0000e003
#define XO_EXT_WHILE      0x0100e004
#define XO_EXT_VMOV       0x0200e005
#define XO_EXT_INDEXED    0x0100e006
#define XO_EXT_IADD       0x0100e007
#define XO_EXT_ERROR      0x0000e008
#define XO_EXT_FREE       0x0100e009

#define XO_PHASE          0x0000fffd
#define XO_COMMENT        0x0000fffe
#define XO_END            0x0000ffff
#define XO_CO             0x40000000

/****************************************************************************/

#define XD_X              0x00010000  // Dest Write Mask
#define XD_Y              0x00020000
#define XD_Z              0x00040000
#define XD_W              0x00080000
#define XD_XY             0x00030000
#define XD_XYZ            0x00070000
#define XD_XYZW           0x000f0000
#define XDALL             0x000f0000

#define XD_SAT            0x00100000  // Dest Modifier
#define XD_PP             0x00200000
#define XD_MSAMP          0x00400000
#define XD_2X             0x01000000  // Dest Shift, PS1.x only
#define XD_4X             0x02000000
#define XD_8X             0x03000000

#define XS_X              0x00000000  // Source Swizzle
#define XS_Y              0x00550000
#define XS_Z              0x00aa0000
#define XS_W              0x00ff0000
#define XS_XYZW           0x00e40000
#define XS_WZYX           0x001b0000
#define XS_YZXW           0x00c90000
#define XS_ZXYW           0x00d20000
#define XS_SWIZZLE(a,b,c,d) (((a)<<16)|((b)<<18)|((c)<<20)|((d)<<22))
#define XSALL             0x00e40000

#define XS_NEG            0x01000000  // -x      Source Modifier
#define XS_BIAS           0x02000000  // x-0.5      (0101)
#define XS_BIASNEG        0x03000000  // -(x-0.5)   (0101)
#define XS_SIGN           0x04000000  // (x-0.5)*2  (0101)
#define XS_SIGNNEG        0x05000000  // -(x-0.5)*2 (0101)
#define XS_COMP           0x06000000  // 1-x        (0101)
#define XS_X2             0x07000000  // x*2        (0104)
#define XS_X2NEG          0x08000000  // -x*2       (0104)
#define XS_DZ             0x09000000  // _dz        (0104)
#define XS_DW             0x0a000000  // _dw        (0104)
#define XS_ABS            0x0b000000  // abs(x)
#define XS_ABSNEG         0x0c000000  // -abs(x)
#define XS_NOT            0x0d000000  // !bool      (0300)

#define X_R               0x80000000  // Temp Register
#define X_C               0xa0000000  // Constant Register

#define X_V               0x90000000  // PS Input from 
#define X_T               0xb0000000  // PS Texure Register
#define X_COLOR           0x80000800  // PS Color Output
#define X_DEPTH           0x90000800  // PS Depth Output
#define X_S               0xa0000800  // PS Sampler Specifier

#define X_OCOLOR          0xd0000000  // VS Output Color
#define X_OUV             0xe0000000  // VS UV Color
#define X_OPOS            0xc0000000  // VS Position Output
#define X_OFOG            0xc0000001  // VS Fog Output
#define X_PSIZE           0xc0000002  // VS PSize Output

/****************************************************************************/

#define XD_POSITION       0x80000000
#define XD_NORMAL         0x80000003
#define XD_PSIZE          0x80000004
#define XD_TEXCOORD0      0x80000005
#define XD_TEXCOORD1      0x80010005
#define XD_TEXCOORD2      0x80020005
#define XD_TEXCOORD3      0x80030005
#define XD_TEXCOORD4      0x80040005
#define XD_TEXCOORD5      0x80050005
#define XD_TEXCOORD6      0x80060005
#define XD_TEXCOORD7      0x80070005
#define XD_TANGENT        0x80000006
#define XD_BINORMAL       0x80000007
#define XD_COLOR0         0x8000000a
#define XD_COLOR1         0x8001000a
#define XD_COLOR2         0x8002000a
#define XD_COLOR3         0x8003000a
#define XD_FOG            0x8000000b

#define XD_REG            0x80000000
#define XD_TEX2D          0x90000000
#define XD_TEXVOLUME      0xa0000000

/****************************************************************************/

#endif



