Ada计算机图形DirectX之d3d9types

----------------------------------------
-- File : d3d9types.ads               --
-- Translator:Dongfeng.Gu,2018/10/12  --
-- Mail: [email protected]                --
-- Progress:100%                      --
----------------------------------------

with Interfaces.C;

with win32;                        use win32;
with win32.winnt;                  use win32.winnt;
with win32.windef;                 use win32.windef;
with win32.rpcdce;                 use win32.rpcdce;
with win32.Objbase;                use win32.Objbase;

with Ada.Unchecked_Conversion;

package d3d9types is

   use type Interfaces.C.unsigned_long;

   function Shift_Left(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Lsh(A:dword;B:Natural) return dword is (Shift_Left(A,B));
   
   function Shift_Right(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Rsh(A:dword;B:Natural) return dword is (Shift_Right(A,B));
   
   type UINT64 is mod 2**64;
   
   

   -- d3d9types begin

   DIRECT3D_VERSION : constant := 16#0900#;

   subtype D3DCOLOR is DWORD;
   
   --
   -- Macro functions
   --
   function D3DCOLOR_ARGB(a,r,g,b:uchar) return D3DCOLOR is (Lsh(D3DCOLOR(a),24) or Lsh(D3DCOLOR(r),16) or Lsh(D3DCOLOR(g),8) or D3DCOLOR(a));
   function D3DCOLOR_ARGB(a,r,g,b:D3DCOLOR) return D3DCOLOR is (Lsh(a and 16#ff#,24) or Lsh(r and 16#ff#,16) or Lsh(g and 16#ff#,8) or (b and 16#ff#));
   function D3DCOLOR_RGBA(r,g,b,a:D3DCOLOR) return D3DCOLOR is (D3DCOLOR_ARGB(a,r,g,b));
   function D3DCOLOR_XRGB(r,g,b:D3DCOLOR) return D3DCOLOR is (D3DCOLOR_ARGB(16#ff#,r,g,b));
   function D3DCOLOR_XYUV(y,u,v:D3DCOLOR) return D3DCOLOR is (D3DCOLOR_ARGB(16#ff#,y,u,v));
   function D3DCOLOR_AYUV(a,y,u,v:D3DCOLOR) return D3DCOLOR is (D3DCOLOR_ARGB(a,y,u,v));
   
   -- #define D3DCOLOR_COLORVALUE(r,g,b,a)        D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
   function D3DCOLOR_COLORVALUE(r,g,b,a:float) return D3DCOLOR is (D3DCOLOR_RGBA(DWORD(r*255.0),DWORD(g*255.0),DWORD(b*255.0),DWORD(a*255.0)));

   
   -- This defined in d3d9math.h D3DXVECTOR2
   type tagD3DVECTOR2 is record
      x,y:float;
   end record;
   subtype D3DVECTOR2 is tagD3DVECTOR2;


   type tagD3DVECTOR3 is record
      x:float;
      y:float;
      z:float;
   end record;

   subtype D3DVECTOR is tagD3DVECTOR3;
   subtype D3DVECTOR3 is tagD3DVECTOR3;
   
   type tagD3DXVECTOR4 is record
      x,y,z,w:float;
   end record;
   subtype D3DXVECTOR4 is tagD3DXVECTOR4;

   type tagD3DCOLORVALUE is record
      r:float;
      g:float;
      b:float;
      a:float;
   end record;

   subtype D3DCOLORVALUE is tagD3DCOLORVALUE;

   type tagD3DRECT is record
      x1:LONG;
      y1:LONG;
      x2:LONG;
      y2:LONG;
   end record;

   subtype D3DRECT is tagD3DRECT;


   type float_Array_4_4 is array(natural range<>,natural range<>) of float;
   
   type tagD3DMATRIX(B:Boolean:=True) is record
      case B is
      when True=>
         m11:float;
         m12:float;
         m13:float;
         m14:float;
         m21:float;
         m22:float;
         m23:float;
         m24:float;
         m31:float;
         m32:float;
         m33:float;
         m34:float;
         m41:float;
         m42:float;
         m43:float;
         m44:float;
      when False=>
         m:float_Array_4_4(0..3,0..3);
      end case;
   end record;
   subtype D3DMATRIX is tagD3DMATRIX;
   type LPD3DMATRIX is access all D3DMATRIX;

   type tagD3DVIEWPORT9 is record
      X:DWORD;
      Y:DWORD;
      Width:DWORD;
      Height:DWORD;
      MinZ:float;
      MaxZ:float;
   end record;

   subtype D3DVIEWPORT9 is tagD3DVIEWPORT9;

   D3DMAXUSERCLIPPLANES : constant := 32;

   D3DCLIPPLANE0 : constant := (1);

   D3DCLIPPLANE1 : constant := (2);

   D3DCLIPPLANE2 : constant := (4);

   D3DCLIPPLANE3 : constant := (8);

   D3DCLIPPLANE4 : constant := (16);

   D3DCLIPPLANE5 : constant := (32);

   D3DCS_LEFT : constant := 16#00000001#;

   D3DCS_RIGHT : constant := 16#00000002#;

   D3DCS_TOP : constant := 16#00000004#;

   D3DCS_BOTTOM : constant := 16#00000008#;

   D3DCS_FRONT : constant := 16#00000010#;

   D3DCS_BACK : constant := 16#00000020#;

   D3DCS_PLANE0 : constant := 16#00000040#;

   D3DCS_PLANE1 : constant := 16#00000080#;

   D3DCS_PLANE2 : constant := 16#00000100#;

   D3DCS_PLANE3 : constant := 16#00000200#;

   D3DCS_PLANE4 : constant := 16#00000400#;

   D3DCS_PLANE5 : constant := 16#00000800#;

   use type Interfaces.C.unsigned_long;
   D3DCS_ALL : constant dword:= (D3DCS_LEFT   or 
                                   D3DCS_RIGHT  or 
                                     D3DCS_TOP    or 
                                       D3DCS_BOTTOM or 
                                         D3DCS_FRONT  or 
                                           D3DCS_BACK   or 
                                             D3DCS_PLANE0 or 
                                               D3DCS_PLANE1 or 
                                                 D3DCS_PLANE2 or 
                                                   D3DCS_PLANE3 or 
                                                     D3DCS_PLANE4 or 
                                                       D3DCS_PLANE5);

   type tagD3DCLIPSTATUS9 is record
      ClipUnion:DWORD;
      ClipIntersection:DWORD;
   end record;

   subtype D3DCLIPSTATUS9 is tagD3DCLIPSTATUS9;

   type tagD3DMATERIAL9 is record
      Diffuse:D3DCOLORVALUE;
      Ambient:D3DCOLORVALUE;
      Specular:D3DCOLORVALUE;
      Emissive:D3DCOLORVALUE;
      Power:float;
   end record;

   subtype D3DMATERIAL9 is tagD3DMATERIAL9;

   type tagD3DLIGHTTYPE is (D3DLIGHT_POINT,
                            D3DLIGHT_SPOT,
                            D3DLIGHT_DIRECTIONAL,
                            D3DLIGHT_FORCE_DWORD);
   for tagD3DLIGHTTYPE use (D3DLIGHT_POINT=>1,
                            D3DLIGHT_SPOT=>2,
                            D3DLIGHT_DIRECTIONAL=>3,
                            D3DLIGHT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DLIGHTTYPE is tagD3DLIGHTTYPE;

   type tagD3DLIGHT9 is record
      Typ:D3DLIGHTTYPE;
      Diffuse:D3DCOLORVALUE;
      Specular:D3DCOLORVALUE;
      Ambient:D3DCOLORVALUE;
      Position:D3DVECTOR;
      Direction:D3DVECTOR;
      Rang:float;
      Falloff:float;
      Attenuation0:float;
      Attenuation1:float;
      Attenuation2:float;
      Theta:float;
      Phi:float;
   end record;

   subtype D3DLIGHT9 is tagD3DLIGHT9;

   D3DCLEAR_TARGET : constant := 16#00000001#;  -- /* Clear target surface */

   D3DCLEAR_ZBUFFER : constant := 16#00000002#; -- /* Clear target z buffer */

   D3DCLEAR_STENCIL : constant := 16#00000004#; -- /* Clear stencil planes */

   type tagD3DSHADEMODE is (D3DSHADE_FLAT,
                            D3DSHADE_GOURAUD,
                            D3DSHADE_PHONG,
                            D3DSHADE_FORCE_DWORD);
   for tagD3DSHADEMODE use (D3DSHADE_FLAT=>1,
                            D3DSHADE_GOURAUD=>2,
                            D3DSHADE_PHONG=>3,
                            D3DSHADE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSHADEMODE is tagD3DSHADEMODE;

   type tagD3DFILLMODE is (D3DFILL_POINT,
                           D3DFILL_WIREFRAME,
                           D3DFILL_SOLID,
                           D3DFILL_FORCE_DWORD);
   for tagD3DFILLMODE use (D3DFILL_POINT=>1,
                           D3DFILL_WIREFRAME=>2,
                           D3DFILL_SOLID=>3,
                           D3DFILL_FORCE_DWORD=>16#7fffffff#);

   subtype D3DFILLMODE is tagD3DFILLMODE;

   type tagD3DBLEND is (D3DBLEND_ZERO,
                        D3DBLEND_ONE,
                        D3DBLEND_SRCCOLOR,
                        D3DBLEND_INVSRCCOLOR,
                        D3DBLEND_SRCALPHA,
                        D3DBLEND_INVSRCALPHA,
                        D3DBLEND_DESTALPHA,
                        D3DBLEND_INVDESTALPHA,
                        D3DBLEND_DESTCOLOR,
                        D3DBLEND_INVDESTCOLOR,
                        D3DBLEND_SRCALPHASAT,
                        D3DBLEND_BOTHSRCALPHA,
                        D3DBLEND_BOTHINVSRCALPHA,
                        D3DBLEND_BLENDFACTOR,
                        D3DBLEND_INVBLENDFACTOR,
                        D3DBLEND_SRCCOLOR2,
                        D3DBLEND_INVSRCCOLOR2,
                        D3DBLEND_FORCE_DWORD);
   for tagD3DBLEND use (D3DBLEND_ZERO=>1,
                        D3DBLEND_ONE=>2,
                        D3DBLEND_SRCCOLOR=>3,
                        D3DBLEND_INVSRCCOLOR=>4,
                        D3DBLEND_SRCALPHA=>5,
                        D3DBLEND_INVSRCALPHA=>6,
                        D3DBLEND_DESTALPHA=>7,
                        D3DBLEND_INVDESTALPHA=>8,
                        D3DBLEND_DESTCOLOR=>9,
                        D3DBLEND_INVDESTCOLOR=>10,
                        D3DBLEND_SRCALPHASAT=>11,
                        D3DBLEND_BOTHSRCALPHA=>12,
                        D3DBLEND_BOTHINVSRCALPHA=>13,
                        D3DBLEND_BLENDFACTOR=>14,
                        D3DBLEND_INVBLENDFACTOR=>15,
                        D3DBLEND_SRCCOLOR2=>16,
                        D3DBLEND_INVSRCCOLOR2=>17,
                        D3DBLEND_FORCE_DWORD=>16#7fffffff#);

   subtype D3DBLEND is tagD3DBLEND;

   type tagD3DBLENDOP is (D3DBLENDOP_ADD,
                          D3DBLENDOP_SUBTRACT,
                          D3DBLENDOP_REVSUBTRACT,
                          D3DBLENDOP_MIN,
                          D3DBLENDOP_MAX,
                          D3DBLENDOP_FORCE_DWORD);
   for tagD3DBLENDOP use (D3DBLENDOP_ADD=>1,
                          D3DBLENDOP_SUBTRACT=>2,
                          D3DBLENDOP_REVSUBTRACT=>3,
                          D3DBLENDOP_MIN=>4,
                          D3DBLENDOP_MAX=>5,
                          D3DBLENDOP_FORCE_DWORD=>16#7fffffff#);

   subtype D3DBLENDOP is tagD3DBLENDOP;

   type tagD3DTEXTUREADDRESS is (D3DTADDRESS_WRAP,
                                 D3DTADDRESS_MIRROR,
                                 D3DTADDRESS_CLAMP,
                                 D3DTADDRESS_BORDER,
                                 D3DTADDRESS_MIRRORONCE,
                                 D3DTADDRESS_FORCE_DWORD);
   for tagD3DTEXTUREADDRESS use (D3DTADDRESS_WRAP=>1,
                                 D3DTADDRESS_MIRROR=>2,
                                 D3DTADDRESS_CLAMP=>3,
                                 D3DTADDRESS_BORDER=>4,
                                 D3DTADDRESS_MIRRORONCE=>5,
                                 D3DTADDRESS_FORCE_DWORD=>16#7fffffff#);

   subtype D3DTEXTUREADDRESS is tagD3DTEXTUREADDRESS;

   type tagD3DCULL is (D3DCULL_NONE,
                       D3DCULL_CW,
                       D3DCULL_CCW,
                       D3DCULL_FORCE_DWORD);
   for tagD3DCULL use (D3DCULL_NONE=>1,
                       D3DCULL_CW=>2,
                       D3DCULL_CCW=>3,
                       D3DCULL_FORCE_DWORD=>16#7fffffff#);

   subtype D3DCULL is tagD3DCULL;

   type tagD3DCMPFUNC is (D3DCMP_NEVER,
                          D3DCMP_LESS,
                          D3DCMP_EQUAL,
                          D3DCMP_LESSEQUAL,
                          D3DCMP_GREATER,
                          D3DCMP_NOTEQUAL,
                          D3DCMP_GREATEREQUAL,
                          D3DCMP_ALWAYS,
                          D3DCMP_FORCE_DWORD);
   for tagD3DCMPFUNC use (D3DCMP_NEVER=>1,
                          D3DCMP_LESS=>2,
                          D3DCMP_EQUAL=>3,
                          D3DCMP_LESSEQUAL=>4,
                          D3DCMP_GREATER=>5,
                          D3DCMP_NOTEQUAL=>6,
                          D3DCMP_GREATEREQUAL=>7,
                          D3DCMP_ALWAYS=>8,
                          D3DCMP_FORCE_DWORD=>16#7fffffff#);

   subtype D3DCMPFUNC is tagD3DCMPFUNC;

   type tagD3DSTENCILOP is (D3DSTENCILOP_KEEP,
                            D3DSTENCILOP_ZERO,
                            D3DSTENCILOP_REPLACE,
                            D3DSTENCILOP_INCRSAT,
                            D3DSTENCILOP_DECRSAT,
                            D3DSTENCILOP_INVERT,
                            D3DSTENCILOP_INCR,
                            D3DSTENCILOP_DECR,
                            D3DSTENCILOP_FORCE_DWORD);
   for tagD3DSTENCILOP use (D3DSTENCILOP_KEEP=>1,
                            D3DSTENCILOP_ZERO=>2,
                            D3DSTENCILOP_REPLACE=>3,
                            D3DSTENCILOP_INCRSAT=>4,
                            D3DSTENCILOP_DECRSAT=>5,
                            D3DSTENCILOP_INVERT=>6,
                            D3DSTENCILOP_INCR=>7,
                            D3DSTENCILOP_DECR=>8,
                            D3DSTENCILOP_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSTENCILOP is tagD3DSTENCILOP;

   type tagD3DFOGMODE is (D3DFOG_NONE,
                          D3DFOG_EXP,
                          D3DFOG_EXP2,
                          D3DFOG_LINEAR,
                          D3DFOG_FORCE_DWORD);
   for tagD3DFOGMODE use (D3DFOG_NONE=>0,
                          D3DFOG_EXP=>1,
                          D3DFOG_EXP2=>2,
                          D3DFOG_LINEAR=>3,
                          D3DFOG_FORCE_DWORD=>16#7fffffff#);

   subtype D3DFOGMODE is tagD3DFOGMODE;

   type tagD3DZBUFFERTYPE is (D3DZB_FALSE,
                              D3DZB_TRUE,
                              D3DZB_USEW,
                              D3DZB_FORCE_DWORD);
   for tagD3DZBUFFERTYPE use (D3DZB_FALSE=>0,
                              D3DZB_TRUE=>1,
                              D3DZB_USEW=>2,
                              D3DZB_FORCE_DWORD=>16#7fffffff#);

   subtype D3DZBUFFERTYPE is tagD3DZBUFFERTYPE;

   type tagD3DPRIMITIVETYPE is (D3DPT_POINTLIST,
                                D3DPT_LINELIST,
                                D3DPT_LINESTRIP,
                                D3DPT_TRIANGLELIST,
                                D3DPT_TRIANGLESTRIP,
                                D3DPT_TRIANGLEFAN,
                                D3DPT_FORCE_DWORD);
   for tagD3DPRIMITIVETYPE use (D3DPT_POINTLIST=>1,
                                D3DPT_LINELIST=>2,
                                D3DPT_LINESTRIP=>3,
                                D3DPT_TRIANGLELIST=>4,
                                D3DPT_TRIANGLESTRIP=>5,
                                D3DPT_TRIANGLEFAN=>6,
                                D3DPT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DPRIMITIVETYPE is tagD3DPRIMITIVETYPE;

   type tagD3DTRANSFORMSTATETYPE is (D3DTS_VIEW,
                                     D3DTS_PROJECTION,
                                     D3DTS_TEXTURE0,
                                     D3DTS_TEXTURE1,
                                     D3DTS_TEXTURE2,
                                     D3DTS_TEXTURE3,
                                     D3DTS_TEXTURE4,
                                     D3DTS_TEXTURE5,
                                     D3DTS_TEXTURE6,
                                     D3DTS_TEXTURE7,
                                     D3DTS_FORCE_DWORD);
   for tagD3DTRANSFORMSTATETYPE use (D3DTS_VIEW=>2,
                                     D3DTS_PROJECTION=>3,
                                     D3DTS_TEXTURE0=>16,
                                     D3DTS_TEXTURE1=>17,
                                     D3DTS_TEXTURE2=>18,
                                     D3DTS_TEXTURE3=>19,
                                     D3DTS_TEXTURE4=>20,
                                     D3DTS_TEXTURE5=>21,
                                     D3DTS_TEXTURE6=>22,
                                     D3DTS_TEXTURE7=>23,
                                     D3DTS_FORCE_DWORD=>16#7fffffff#);

   subtype D3DTRANSFORMSTATETYPE is tagD3DTRANSFORMSTATETYPE;

   -- #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
   function D3DTS_WORLDMATRIX(index:dword) return dword is (index + 256);


   D3DTS_WORLD : constant dword:= D3DTS_WORLDMATRIX(0);

   D3DTS_WORLD1 : constant dword:= D3DTS_WORLDMATRIX(1);

   D3DTS_WORLD2 : constant dword:= D3DTS_WORLDMATRIX(2);

   D3DTS_WORLD3 : constant dword:= D3DTS_WORLDMATRIX(3);

   type tagD3DRENDERSTATETYPE is (D3DRS_ZENABLE,
                                  D3DRS_FILLMODE,
                                  D3DRS_SHADEMODE,
                                  D3DRS_ZWRITEENABLE,
                                  D3DRS_ALPHATESTENABLE,
                                  D3DRS_LASTPIXEL,
                                  D3DRS_SRCBLEND,
                                  D3DRS_DESTBLEND,
                                  D3DRS_CULLMODE,
                                  D3DRS_ZFUNC,
                                  D3DRS_ALPHAREF,
                                  D3DRS_ALPHAFUNC,
                                  D3DRS_DITHERENABLE,
                                  D3DRS_ALPHABLENDENABLE,
                                  D3DRS_FOGENABLE,
                                  D3DRS_SPECULARENABLE,
                                  D3DRS_FOGCOLOR,
                                  D3DRS_FOGTABLEMODE,
                                  D3DRS_FOGSTART,
                                  D3DRS_FOGEND,
                                  D3DRS_FOGDENSITY,
                                  D3DRS_RANGEFOGENABLE,
                                  D3DRS_STENCILENABLE,
                                  D3DRS_STENCILFAIL,
                                  D3DRS_STENCILZFAIL,
                                  D3DRS_STENCILPASS,
                                  D3DRS_STENCILFUNC,
                                  D3DRS_STENCILREF,
                                  D3DRS_STENCILMASK,
                                  D3DRS_STENCILWRITEMASK,
                                  D3DRS_TEXTUREFACTOR,
                                  D3DRS_WRAP0,
                                  D3DRS_WRAP1,
                                  D3DRS_WRAP2,
                                  D3DRS_WRAP3,
                                  D3DRS_WRAP4,
                                  D3DRS_WRAP5,
                                  D3DRS_WRAP6,
                                  D3DRS_WRAP7,
                                  D3DRS_CLIPPING,
                                  D3DRS_LIGHTING,
                                  D3DRS_AMBIENT,
                                  D3DRS_FOGVERTEXMODE,
                                  D3DRS_COLORVERTEX,
                                  D3DRS_LOCALVIEWER,
                                  D3DRS_NORMALIZENORMALS,
                                  D3DRS_DIFFUSEMATERIALSOURCE,
                                  D3DRS_SPECULARMATERIALSOURCE,
                                  D3DRS_AMBIENTMATERIALSOURCE,
                                  D3DRS_EMISSIVEMATERIALSOURCE,
                                  D3DRS_VERTEXBLEND,
                                  D3DRS_CLIPPLANEENABLE,
                                  D3DRS_POINTSIZE,
                                  D3DRS_POINTSIZE_MIN,
                                  D3DRS_POINTSPRITEENABLE,
                                  D3DRS_POINTSCALEENABLE,
                                  D3DRS_POINTSCALE_A,
                                  D3DRS_POINTSCALE_B,
                                  D3DRS_POINTSCALE_C,
                                  D3DRS_MULTISAMPLEANTIALIAS,
                                  D3DRS_MULTISAMPLEMASK,
                                  D3DRS_PATCHEDGESTYLE,
                                  D3DRS_DEBUGMONITORTOKEN,
                                  D3DRS_POINTSIZE_MAX,
                                  D3DRS_INDEXEDVERTEXBLENDENABLE,
                                  D3DRS_COLORWRITEENABLE,
                                  D3DRS_TWEENFACTOR,
                                  D3DRS_BLENDOP,
                                  D3DRS_POSITIONDEGREE,
                                  D3DRS_NORMALDEGREE,
                                  D3DRS_SCISSORTESTENABLE,
                                  D3DRS_SLOPESCALEDEPTHBIAS,
                                  D3DRS_ANTIALIASEDLINEENABLE,
                                  D3DRS_MINTESSELLATIONLEVEL,
                                  D3DRS_MAXTESSELLATIONLEVEL,
                                  D3DRS_ADAPTIVETESS_X,
                                  D3DRS_ADAPTIVETESS_Y,
                                  D3DRS_ADAPTIVETESS_Z,
                                  D3DRS_ADAPTIVETESS_W,
                                  D3DRS_ENABLEADAPTIVETESSELLATION,
                                  D3DRS_TWOSIDEDSTENCILMODE,
                                  D3DRS_CCW_STENCILFAIL,
                                  D3DRS_CCW_STENCILZFAIL,
                                  D3DRS_CCW_STENCILPASS,
                                  D3DRS_CCW_STENCILFUNC,
                                  D3DRS_COLORWRITEENABLE1,
                                  D3DRS_COLORWRITEENABLE2,
                                  D3DRS_COLORWRITEENABLE3,
                                  D3DRS_BLENDFACTOR,
                                  D3DRS_SRGBWRITEENABLE,
                                  D3DRS_DEPTHBIAS,
                                  D3DRS_WRAP8,
                                  D3DRS_WRAP9,
                                  D3DRS_WRAP10,
                                  D3DRS_WRAP11,
                                  D3DRS_WRAP12,
                                  D3DRS_WRAP13,
                                  D3DRS_WRAP14,
                                  D3DRS_WRAP15,
                                  D3DRS_SEPARATEALPHABLENDENABLE,
                                  D3DRS_SRCBLENDALPHA,
                                  D3DRS_DESTBLENDALPHA,
                                  D3DRS_BLENDOPALPHA,
                                  D3DRS_FORCE_DWORD);
   for tagD3DRENDERSTATETYPE use (D3DRS_ZENABLE=>7,
                                  D3DRS_FILLMODE=>8,
                                  D3DRS_SHADEMODE=>9,
                                  D3DRS_ZWRITEENABLE=>14,
                                  D3DRS_ALPHATESTENABLE=>15,
                                  D3DRS_LASTPIXEL=>16,
                                  D3DRS_SRCBLEND=>19,
                                  D3DRS_DESTBLEND=>20,
                                  D3DRS_CULLMODE=>22,
                                  D3DRS_ZFUNC=>23,
                                  D3DRS_ALPHAREF=>24,
                                  D3DRS_ALPHAFUNC=>25,
                                  D3DRS_DITHERENABLE=>26,
                                  D3DRS_ALPHABLENDENABLE=>27,
                                  D3DRS_FOGENABLE=>28,
                                  D3DRS_SPECULARENABLE=>29,
                                  D3DRS_FOGCOLOR=>34,
                                  D3DRS_FOGTABLEMODE=>35,
                                  D3DRS_FOGSTART=>36,
                                  D3DRS_FOGEND=>37,
                                  D3DRS_FOGDENSITY=>38,
                                  D3DRS_RANGEFOGENABLE=>48,
                                  D3DRS_STENCILENABLE=>52,
                                  D3DRS_STENCILFAIL=>53,
                                  D3DRS_STENCILZFAIL=>54,
                                  D3DRS_STENCILPASS=>55,
                                  D3DRS_STENCILFUNC=>56,
                                  D3DRS_STENCILREF=>57,
                                  D3DRS_STENCILMASK=>58,
                                  D3DRS_STENCILWRITEMASK=>59,
                                  D3DRS_TEXTUREFACTOR=>60,
                                  D3DRS_WRAP0=>128,
                                  D3DRS_WRAP1=>129,
                                  D3DRS_WRAP2=>130,
                                  D3DRS_WRAP3=>131,
                                  D3DRS_WRAP4=>132,
                                  D3DRS_WRAP5=>133,
                                  D3DRS_WRAP6=>134,
                                  D3DRS_WRAP7=>135,
                                  D3DRS_CLIPPING=>136,
                                  D3DRS_LIGHTING=>137,
                                  D3DRS_AMBIENT=>139,
                                  D3DRS_FOGVERTEXMODE=>140,
                                  D3DRS_COLORVERTEX=>141,
                                  D3DRS_LOCALVIEWER=>142,
                                  D3DRS_NORMALIZENORMALS=>143,
                                  D3DRS_DIFFUSEMATERIALSOURCE=>145,
                                  D3DRS_SPECULARMATERIALSOURCE=>146,
                                  D3DRS_AMBIENTMATERIALSOURCE=>147,
                                  D3DRS_EMISSIVEMATERIALSOURCE=>148,
                                  D3DRS_VERTEXBLEND=>151,
                                  D3DRS_CLIPPLANEENABLE=>152,
                                  D3DRS_POINTSIZE=>154,
                                  D3DRS_POINTSIZE_MIN=>155,
                                  D3DRS_POINTSPRITEENABLE=>156,
                                  D3DRS_POINTSCALEENABLE=>157,
                                  D3DRS_POINTSCALE_A=>158,
                                  D3DRS_POINTSCALE_B=>159,
                                  D3DRS_POINTSCALE_C=>160,
                                  D3DRS_MULTISAMPLEANTIALIAS=>161,
                                  D3DRS_MULTISAMPLEMASK=>162,
                                  D3DRS_PATCHEDGESTYLE=>163,
                                  D3DRS_DEBUGMONITORTOKEN=>165,
                                  D3DRS_POINTSIZE_MAX=>166,
                                  D3DRS_INDEXEDVERTEXBLENDENABLE=>167,
                                  D3DRS_COLORWRITEENABLE=>168,
                                  D3DRS_TWEENFACTOR=>170,
                                  D3DRS_BLENDOP=>171,
                                  D3DRS_POSITIONDEGREE=>172,
                                  D3DRS_NORMALDEGREE=>173,
                                  D3DRS_SCISSORTESTENABLE=>174,
                                  D3DRS_SLOPESCALEDEPTHBIAS=>175,
                                  D3DRS_ANTIALIASEDLINEENABLE=>176,
                                  D3DRS_MINTESSELLATIONLEVEL=>178,
                                  D3DRS_MAXTESSELLATIONLEVEL=>179,
                                  D3DRS_ADAPTIVETESS_X=>180,
                                  D3DRS_ADAPTIVETESS_Y=>181,
                                  D3DRS_ADAPTIVETESS_Z=>182,
                                  D3DRS_ADAPTIVETESS_W=>183,
                                  D3DRS_ENABLEADAPTIVETESSELLATION=>184,
                                  D3DRS_TWOSIDEDSTENCILMODE=>185,
                                  D3DRS_CCW_STENCILFAIL=>186,
                                  D3DRS_CCW_STENCILZFAIL=>187,
                                  D3DRS_CCW_STENCILPASS=>188,
                                  D3DRS_CCW_STENCILFUNC=>189,
                                  D3DRS_COLORWRITEENABLE1=>190,
                                  D3DRS_COLORWRITEENABLE2=>191,
                                  D3DRS_COLORWRITEENABLE3=>192,
                                  D3DRS_BLENDFACTOR=>193,
                                  D3DRS_SRGBWRITEENABLE=>194,
                                  D3DRS_DEPTHBIAS=>195,
                                  D3DRS_WRAP8=>198,
                                  D3DRS_WRAP9=>199,
                                  D3DRS_WRAP10=>200,
                                  D3DRS_WRAP11=>201,
                                  D3DRS_WRAP12=>202,
                                  D3DRS_WRAP13=>203,
                                  D3DRS_WRAP14=>204,
                                  D3DRS_WRAP15=>205,
                                  D3DRS_SEPARATEALPHABLENDENABLE=>206,
                                  D3DRS_SRCBLENDALPHA=>207,
                                  D3DRS_DESTBLENDALPHA=>208,
                                  D3DRS_BLENDOPALPHA=>209,
                                  D3DRS_FORCE_DWORD=>16#7fffffff#);

   subtype D3DRENDERSTATETYPE is tagD3DRENDERSTATETYPE;

   D3D_MAX_SIMULTANEOUS_RENDERTARGETS : constant := 4;

   type tagD3DMATERIALCOLORSOURCE is (D3DMCS_MATERIAL,
                                      D3DMCS_COLOR1,
                                      D3DMCS_COLOR2,
                                      D3DMCS_FORCE_DWORD);
   for tagD3DMATERIALCOLORSOURCE use (D3DMCS_MATERIAL=>0,
                                      D3DMCS_COLOR1=>1,
                                      D3DMCS_COLOR2=>2,
                                      D3DMCS_FORCE_DWORD=>16#7fffffff#);

   subtype D3DMATERIALCOLORSOURCE is tagD3DMATERIALCOLORSOURCE;

   D3DRENDERSTATE_WRAPBIAS : constant := 128;

   D3DWRAP_U : constant := 16#00000001#;

   D3DWRAP_V : constant := 16#00000002#;

   D3DWRAP_W : constant := 16#00000004#;

   D3DWRAPCOORD_0 : constant := 16#00000001#;    -- same as D3DWRAP_U;

   D3DWRAPCOORD_1 : constant := 16#00000002#;    -- same as D3DWRAP_V;

   D3DWRAPCOORD_2 : constant := 16#00000004#;    -- same as D3DWRAP_W;

   D3DWRAPCOORD_3 : constant := 16#00000008#;

   D3DCOLORWRITEENABLE_RED : constant := (1);

   D3DCOLORWRITEENABLE_GREEN : constant := (2);

   D3DCOLORWRITEENABLE_BLUE : constant := (4);

   D3DCOLORWRITEENABLE_ALPHA : constant := (8);

   type tagD3DTEXTURESTAGESTATETYPE is (D3DTSS_COLOROP,
                                        D3DTSS_COLORARG1,
                                        D3DTSS_COLORARG2,
                                        D3DTSS_ALPHAOP,
                                        D3DTSS_ALPHAARG1,
                                        D3DTSS_ALPHAARG2,
                                        D3DTSS_BUMPENVMAT00,
                                        D3DTSS_BUMPENVMAT01,
                                        D3DTSS_BUMPENVMAT10,
                                        D3DTSS_BUMPENVMAT11,
                                        D3DTSS_TEXCOORDINDEX,
                                        D3DTSS_BUMPENVLSCALE,
                                        D3DTSS_BUMPENVLOFFSET,
                                        D3DTSS_TEXTURETRANSFORMFLAGS,
                                        D3DTSS_COLORARG0,
                                        D3DTSS_ALPHAARG0,
                                        D3DTSS_RESULTARG,
                                        D3DTSS_CONSTANT,
                                        D3DTSS_FORCE_DWORD);
   for tagD3DTEXTURESTAGESTATETYPE use (D3DTSS_COLOROP=>1,
                                        D3DTSS_COLORARG1=>2,
                                        D3DTSS_COLORARG2=>3,
                                        D3DTSS_ALPHAOP=>4,
                                        D3DTSS_ALPHAARG1=>5,
                                        D3DTSS_ALPHAARG2=>6,
                                        D3DTSS_BUMPENVMAT00=>7,
                                        D3DTSS_BUMPENVMAT01=>8,
                                        D3DTSS_BUMPENVMAT10=>9,
                                        D3DTSS_BUMPENVMAT11=>10,
                                        D3DTSS_TEXCOORDINDEX=>11,
                                        D3DTSS_BUMPENVLSCALE=>22,
                                        D3DTSS_BUMPENVLOFFSET=>23,
                                        D3DTSS_TEXTURETRANSFORMFLAGS=>24,
                                        D3DTSS_COLORARG0=>26,
                                        D3DTSS_ALPHAARG0=>27,
                                        D3DTSS_RESULTARG=>28,
                                        D3DTSS_CONSTANT=>32,
                                        D3DTSS_FORCE_DWORD=>16#7fffffff#);

   subtype D3DTEXTURESTAGESTATETYPE is tagD3DTEXTURESTAGESTATETYPE;

   type tagD3DSAMPLERSTATETYPE is (D3DSAMP_ADDRESSU,
                                   D3DSAMP_ADDRESSV,
                                   D3DSAMP_ADDRESSW,
                                   D3DSAMP_BORDERCOLOR,
                                   D3DSAMP_MAGFILTER,
                                   D3DSAMP_MINFILTER,
                                   D3DSAMP_MIPFILTER,
                                   D3DSAMP_MIPMAPLODBIAS,
                                   D3DSAMP_MAXMIPLEVEL,
                                   D3DSAMP_MAXANISOTROPY,
                                   D3DSAMP_SRGBTEXTURE,
                                   D3DSAMP_ELEMENTINDEX,
                                   D3DSAMP_DMAPOFFSET,
                                   D3DSAMP_FORCE_DWORD);
   for tagD3DSAMPLERSTATETYPE use (D3DSAMP_ADDRESSU=>1,
                                   D3DSAMP_ADDRESSV=>2,
                                   D3DSAMP_ADDRESSW=>3,
                                   D3DSAMP_BORDERCOLOR=>4,
                                   D3DSAMP_MAGFILTER=>5,
                                   D3DSAMP_MINFILTER=>6,
                                   D3DSAMP_MIPFILTER=>7,
                                   D3DSAMP_MIPMAPLODBIAS=>8,
                                   D3DSAMP_MAXMIPLEVEL=>9,
                                   D3DSAMP_MAXANISOTROPY=>10,
                                   D3DSAMP_SRGBTEXTURE=>11,
                                   D3DSAMP_ELEMENTINDEX=>12,
                                   D3DSAMP_DMAPOFFSET=>13,
                                   D3DSAMP_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSAMPLERSTATETYPE is tagD3DSAMPLERSTATETYPE;

   D3DDMAPSAMPLER : constant := 256;

   D3DVERTEXTEXTURESAMPLER0 : constant := (D3DDMAPSAMPLER+1);

   D3DVERTEXTEXTURESAMPLER1 : constant := (D3DDMAPSAMPLER+2);

   D3DVERTEXTEXTURESAMPLER2 : constant := (D3DDMAPSAMPLER+3);

   D3DVERTEXTEXTURESAMPLER3 : constant := (D3DDMAPSAMPLER+4);

   D3DTSS_TCI_PASSTHRU : constant := 16#00000000#;

   D3DTSS_TCI_CAMERASPACENORMAL : constant := 16#00010000#;

   D3DTSS_TCI_CAMERASPACEPOSITION : constant := 16#00020000#;

   D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR : constant := 16#00030000#;

   D3DTSS_TCI_SPHEREMAP : constant := 16#00040000#;

   type tagD3DTEXTUREOP is (D3DTOP_DISABLE,
                            D3DTOP_SELECTARG1,
                            D3DTOP_SELECTARG2,
                            D3DTOP_MODULATE,
                            D3DTOP_MODULATE2X,
                            D3DTOP_MODULATE4X,
                            D3DTOP_ADD,
                            D3DTOP_ADDSIGNED,
                            D3DTOP_ADDSIGNED2X,
                            D3DTOP_SUBTRACT,
                            D3DTOP_ADDSMOOTH,
                            D3DTOP_BLENDDIFFUSEALPHA,
                            D3DTOP_BLENDTEXTUREALPHA,
                            D3DTOP_BLENDFACTORALPHA,
                            D3DTOP_BLENDTEXTUREALPHAPM,
                            D3DTOP_BLENDCURRENTALPHA,
                            D3DTOP_PREMODULATE,
                            D3DTOP_MODULATEALPHA_ADDCOLOR,
                            D3DTOP_MODULATECOLOR_ADDALPHA,
                            D3DTOP_MODULATEINVALPHA_ADDCOLOR,
                            D3DTOP_MODULATEINVCOLOR_ADDALPHA,
                            D3DTOP_BUMPENVMAP,
                            D3DTOP_BUMPENVMAPLUMINANCE,
                            D3DTOP_DOTPRODUCT3,
                            D3DTOP_MULTIPLYADD,
                            D3DTOP_LERP,
                            D3DTOP_FORCE_DWORD);
   for tagD3DTEXTUREOP use (D3DTOP_DISABLE=>1,
                            D3DTOP_SELECTARG1=>2,
                            D3DTOP_SELECTARG2=>3,
                            D3DTOP_MODULATE=>4,
                            D3DTOP_MODULATE2X=>5,
                            D3DTOP_MODULATE4X=>6,
                            D3DTOP_ADD=>7,
                            D3DTOP_ADDSIGNED=>8,
                            D3DTOP_ADDSIGNED2X=>9,
                            D3DTOP_SUBTRACT=>10,
                            D3DTOP_ADDSMOOTH=>11,
                            D3DTOP_BLENDDIFFUSEALPHA=>12,
                            D3DTOP_BLENDTEXTUREALPHA=>13,
                            D3DTOP_BLENDFACTORALPHA=>14,
                            D3DTOP_BLENDTEXTUREALPHAPM=>15,
                            D3DTOP_BLENDCURRENTALPHA=>16,
                            D3DTOP_PREMODULATE=>17,
                            D3DTOP_MODULATEALPHA_ADDCOLOR=>18,
                            D3DTOP_MODULATECOLOR_ADDALPHA=>19,
                            D3DTOP_MODULATEINVALPHA_ADDCOLOR=>20,
                            D3DTOP_MODULATEINVCOLOR_ADDALPHA=>21,
                            D3DTOP_BUMPENVMAP=>22,
                            D3DTOP_BUMPENVMAPLUMINANCE=>23,
                            D3DTOP_DOTPRODUCT3=>24,
                            D3DTOP_MULTIPLYADD=>25,
                            D3DTOP_LERP=>26,
                            D3DTOP_FORCE_DWORD=>16#7fffffff#);

   subtype D3DTEXTUREOP is tagD3DTEXTUREOP;

   D3DTA_SELECTMASK : constant := 16#0000000f#;  -- mask for arg selector

   D3DTA_DIFFUSE : constant := 16#00000000#;  -- select diffuse color (read only);

   D3DTA_CURRENT : constant := 16#00000001#;  -- select stage destination register (read/write);

   D3DTA_TEXTURE : constant := 16#00000002#;  -- select texture color (read only);

   D3DTA_TFACTOR : constant := 16#00000003#;  -- select D3DRS_TEXTUREFACTOR (read only);

   D3DTA_SPECULAR : constant := 16#00000004#;  -- select specular color (read only);

   D3DTA_TEMP : constant := 16#00000005#;  -- select temporary register color (read/write);

   D3DTA_CONSTANT : constant := 16#00000006#;  -- select texture stage constant;

   D3DTA_COMPLEMENT : constant := 16#00000010#;  -- take 1.0 - x (read modifier);

   D3DTA_ALPHAREPLICATE : constant := 16#00000020#;  -- replicate alpha to color components (read modifier);

   type tagD3DTEXTUREFILTERTYPE is (D3DTEXF_NONE,
                                    D3DTEXF_POINT,
                                    D3DTEXF_LINEAR,
                                    D3DTEXF_ANISOTROPIC,
                                    D3DTEXF_PYRAMIDALQUAD,
                                    D3DTEXF_GAUSSIANQUAD,
                                    D3DTEXF_CONVOLUTIONMONO,
                                    D3DTEXF_FORCE_DWORD);
   for tagD3DTEXTUREFILTERTYPE use (D3DTEXF_NONE=>0,
                                    D3DTEXF_POINT=>1,
                                    D3DTEXF_LINEAR=>2,
                                    D3DTEXF_ANISOTROPIC=>3,
                                    D3DTEXF_PYRAMIDALQUAD=>6,
                                    D3DTEXF_GAUSSIANQUAD=>7,
                                    D3DTEXF_CONVOLUTIONMONO=>8,
                                    D3DTEXF_FORCE_DWORD=>16#7fffffff#);

   subtype D3DTEXTUREFILTERTYPE is tagD3DTEXTUREFILTERTYPE;

   D3DPV_DONOTCOPYDATA : constant := (1);

   D3DFVF_RESERVED0 : constant := 16#001#;

   D3DFVF_POSITION_MASK : constant := 16#400E#;

   D3DFVF_XYZ : constant := 16#002#;

   D3DFVF_XYZRHW : constant := 16#004#;

   D3DFVF_XYZB1 : constant := 16#006#;

   D3DFVF_XYZB2 : constant := 16#008#;

   D3DFVF_XYZB3 : constant := 16#00a#;

   D3DFVF_XYZB4 : constant := 16#00c#;

   D3DFVF_XYZB5 : constant := 16#00e#;

   D3DFVF_XYZW : constant := 16#4002#;

   D3DFVF_NORMAL : constant := 16#010#;

   D3DFVF_PSIZE : constant := 16#020#;

   D3DFVF_DIFFUSE : constant := 16#040#;

   D3DFVF_SPECULAR : constant := 16#080#;

   D3DFVF_TEXCOUNT_MASK : constant := 16#f00#;

   D3DFVF_TEXCOUNT_SHIFT : constant := 8;

   D3DFVF_TEX0 : constant := 16#000#;

   D3DFVF_TEX1 : constant := 16#100#;

   D3DFVF_TEX2 : constant := 16#200#;

   D3DFVF_TEX3 : constant := 16#300#;

   D3DFVF_TEX4 : constant := 16#400#;

   D3DFVF_TEX5 : constant := 16#500#;

   D3DFVF_TEX6 : constant := 16#600#;

   D3DFVF_TEX7 : constant := 16#700#;

   D3DFVF_TEX8 : constant := 16#800#;

   D3DFVF_LASTBETA_UBYTE4 : constant := 16#1000#;

   D3DFVF_LASTBETAtagD3DCOLOR : constant := 16#8000#;

   D3DFVF_RESERVED2 : constant := 16#6000#;  -- 2 reserved bits;

   type tagD3DDECLUSAGE is (D3DDECLUSAGE_POSITION,
                            D3DDECLUSAGE_BLENDWEIGHT,
                            D3DDECLUSAGE_BLENDINDICES,
                            D3DDECLUSAGE_NORMAL,
                            D3DDECLUSAGE_PSIZE,
                            D3DDECLUSAGE_TEXCOORD,
                            D3DDECLUSAGE_TANGENT,
                            D3DDECLUSAGE_BINORMAL,
                            D3DDECLUSAGE_TESSFACTOR,
                            D3DDECLUSAGE_POSITIONT,
                            D3DDECLUSAGE_COLOR,
                            D3DDECLUSAGE_FOG,
                            D3DDECLUSAGE_DEPTH,
                            D3DDECLUSAGE_SAMPLE);
   for tagD3DDECLUSAGE use (D3DDECLUSAGE_POSITION=>0,
                            D3DDECLUSAGE_BLENDWEIGHT=>1,
                            D3DDECLUSAGE_BLENDINDICES=>2,
                            D3DDECLUSAGE_NORMAL=>3,
                            D3DDECLUSAGE_PSIZE=>4,
                            D3DDECLUSAGE_TEXCOORD=>5,
                            D3DDECLUSAGE_TANGENT=>6,
                            D3DDECLUSAGE_BINORMAL=>7,
                            D3DDECLUSAGE_TESSFACTOR=>8,
                            D3DDECLUSAGE_POSITIONT=>9,
                            D3DDECLUSAGE_COLOR=>10,
                            D3DDECLUSAGE_FOG=>11,
                            D3DDECLUSAGE_DEPTH=>12,
                            D3DDECLUSAGE_SAMPLE=>13);

   subtype D3DDECLUSAGE is tagD3DDECLUSAGE;

   -- MAXD3DDECLUSAGE : constant := D3DDECLUSAGE_SAMPLE;

   MAXD3DDECLUSAGEINDEX : constant := 15;

   MAXD3DDECLLENGTH : constant := 64; -- does not include "end" marker vertex element;

   type tagD3DDECLMETHOD is (D3DDECLMETHOD_DEFAULT,
                             D3DDECLMETHOD_PARTIALU,
                             D3DDECLMETHOD_PARTIALV,
                             D3DDECLMETHOD_CROSSUV,
                             D3DDECLMETHOD_UV,
                             D3DDECLMETHOD_LOOKUP,
                             D3DDECLMETHOD_LOOKUPPRESAMPLED);
   for tagD3DDECLMETHOD use (D3DDECLMETHOD_DEFAULT=>0,
                             D3DDECLMETHOD_PARTIALU=>1,
                             D3DDECLMETHOD_PARTIALV=>2,
                             D3DDECLMETHOD_CROSSUV=>3,
                             D3DDECLMETHOD_UV=>4,
                             D3DDECLMETHOD_LOOKUP=>5,
                             D3DDECLMETHOD_LOOKUPPRESAMPLED=>6);

   subtype D3DDECLMETHOD is tagD3DDECLMETHOD;

   -- MAXD3DDECLMETHOD : constant := D3DDECLMETHOD_LOOKUPPRESAMPLED;

   type tagD3DDECLTYPE is (D3DDECLTYPE_FLOAT1,
                           D3DDECLTYPE_FLOAT2,
                           D3DDECLTYPE_FLOAT3,
                           D3DDECLTYPE_FLOAT4,
                           D3DDECLTYPEtagD3DCOLOR,
                           D3DDECLTYPE_UBYTE4,
                           D3DDECLTYPE_SHORT2,
                           D3DDECLTYPE_SHORT4,
                           D3DDECLTYPE_UBYTE4N,
                           D3DDECLTYPE_SHORT2N,
                           D3DDECLTYPE_SHORT4N,
                           D3DDECLTYPE_USHORT2N,
                           D3DDECLTYPE_USHORT4N,
                           D3DDECLTYPE_UDEC3,
                           D3DDECLTYPE_DEC3N,
                           D3DDECLTYPE_FLOAT16_2,
                           D3DDECLTYPE_FLOAT16_4,
                           D3DDECLTYPE_UNUSED);
   for tagD3DDECLTYPE use (D3DDECLTYPE_FLOAT1=>0,
                           D3DDECLTYPE_FLOAT2=>1,
                           D3DDECLTYPE_FLOAT3=>2,
                           D3DDECLTYPE_FLOAT4=>3,
                           D3DDECLTYPEtagD3DCOLOR=>4,
                           D3DDECLTYPE_UBYTE4=>5,
                           D3DDECLTYPE_SHORT2=>6,
                           D3DDECLTYPE_SHORT4=>7,
                           D3DDECLTYPE_UBYTE4N=>8,
                           D3DDECLTYPE_SHORT2N=>9,
                           D3DDECLTYPE_SHORT4N=>10,
                           D3DDECLTYPE_USHORT2N=>11,
                           D3DDECLTYPE_USHORT4N=>12,
                           D3DDECLTYPE_UDEC3=>13,
                           D3DDECLTYPE_DEC3N=>14,
                           D3DDECLTYPE_FLOAT16_2=>15,
                           D3DDECLTYPE_FLOAT16_4=>16,
                           D3DDECLTYPE_UNUSED=>17);

   subtype D3DDECLTYPE is tagD3DDECLTYPE;

   -- MAXD3DDECLTYPE : constant := D3DDECLTYPE_UNUSED;

   type tagD3DVERTEXELEMENT9 is record
      Stream:WORD;
      Offset:WORD;
      Typ:BYTE;
      Method:BYTE;
      Usage:BYTE;
      UsageIndex:BYTE;
   end record;

   subtype D3DVERTEXELEMENT9 is tagD3DVERTEXELEMENT9;

   type LPD3DVERTEXELEMENT9 is access all tagD3DVERTEXELEMENT9;

   -- #define D3DDECL_END() {16#FF,0,D3DDECLTYPE_UNUSED,0,0,0}


   D3DDP_MAXTEXCOORD : constant := 8;

   D3DSTREAMSOURCE_INDEXEDDATA  : constant := (16#4000_0000#);

   D3DSTREAMSOURCE_INSTANCEDATA : constant := (16#8000_0000#);

   D3DSI_OPCODE_MASK            : constant := 16#0000FFFF#;

   D3DSI_INSTLENGTH_MASK        : constant := 16#0F000000#;

   D3DSI_INSTLENGTH_SHIFT       : constant := 24;

   type tagD3DSHADER_INSTRUCTION_OPCODE_TYPE is (D3DSIO_NOP,
                                                 D3DSIO_MOV,
                                                 D3DSIO_ADD,
                                                 D3DSIO_SUB,
                                                 D3DSIO_MAD,
                                                 D3DSIO_MUL,
                                                 D3DSIO_RCP,
                                                 D3DSIO_RSQ,
                                                 D3DSIO_DP3,
                                                 D3DSIO_DP4,
                                                 D3DSIO_MIN,
                                                 D3DSIO_MAX,
                                                 D3DSIO_SLT,
                                                 D3DSIO_SGE,
                                                 D3DSIO_EXP,
                                                 D3DSIO_LOG,
                                                 D3DSIO_LIT,
                                                 D3DSIO_DST,
                                                 D3DSIO_LRP,
                                                 D3DSIO_FRC,
                                                 D3DSIO_M4x4,
                                                 D3DSIO_M4x3,
                                                 D3DSIO_M3x4,
                                                 D3DSIO_M3x3,
                                                 D3DSIO_M3x2,
                                                 D3DSIO_CALL,
                                                 D3DSIO_CALLNZ,
                                                 D3DSIO_LOOP,
                                                 D3DSIO_RET,
                                                 D3DSIO_ENDLOOP,
                                                 D3DSIO_LABEL,
                                                 D3DSIO_DCL,
                                                 D3DSIO_POW,
                                                 D3DSIO_CRS,
                                                 D3DSIO_SGN,
                                                 D3DSIO_ABS,
                                                 D3DSIO_NRM,
                                                 D3DSIO_SINCOS,
                                                 D3DSIO_REP,
                                                 D3DSIO_ENDREP,
                                                 D3DSIO_IF,
                                                 D3DSIO_IFC,
                                                 D3DSIO_ELSE,
                                                 D3DSIO_ENDIF,
                                                 D3DSIO_BREAK,
                                                 D3DSIO_BREAKC,
                                                 D3DSIO_MOVA,
                                                 D3DSIO_DEFB,
                                                 D3DSIO_DEFI,
                                                 D3DSIO_TEXCOORD,
                                                 D3DSIO_TEXKILL,
                                                 D3DSIO_TEX,
                                                 D3DSIO_TEXBEM,
                                                 D3DSIO_TEXBEML,
                                                 D3DSIO_TEXREG2AR,
                                                 D3DSIO_TEXREG2GB,
                                                 D3DSIO_TEXM3x2PAD,
                                                 D3DSIO_TEXM3x2TEX,
                                                 D3DSIO_TEXM3x3PAD,
                                                 D3DSIO_TEXM3x3TEX,
                                                 D3DSIO_RESERVED0,
                                                 D3DSIO_TEXM3x3SPEC,
                                                 D3DSIO_TEXM3x3VSPEC,
                                                 D3DSIO_EXPP,
                                                 D3DSIO_LOGP,
                                                 D3DSIO_CND,
                                                 D3DSIO_DEF,
                                                 D3DSIO_TEXREG2RGB,
                                                 D3DSIO_TEXDP3TEX,
                                                 D3DSIO_TEXM3x2DEPTH,
                                                 D3DSIO_TEXDP3,
                                                 D3DSIO_TEXM3x3,
                                                 D3DSIO_TEXDEPTH,
                                                 D3DSIO_CMP,
                                                 D3DSIO_BEM,
                                                 D3DSIO_DP2ADD,
                                                 D3DSIO_DSX,
                                                 D3DSIO_DSY,
                                                 D3DSIO_TEXLDD,
                                                 D3DSIO_SETP,
                                                 D3DSIO_TEXLDL,
                                                 D3DSIO_BREAKP,
                                                 D3DSIO_PHASE,
                                                 D3DSIO_COMMENT,
                                                 D3DSIO_END,
                                                 D3DSIO_FORCE_DWORD);
   for tagD3DSHADER_INSTRUCTION_OPCODE_TYPE use (D3DSIO_NOP=>0,
                                                 D3DSIO_MOV=>1,
                                                 D3DSIO_ADD=>2,
                                                 D3DSIO_SUB=>3,
                                                 D3DSIO_MAD=>4,
                                                 D3DSIO_MUL=>5,
                                                 D3DSIO_RCP=>6,
                                                 D3DSIO_RSQ=>7,
                                                 D3DSIO_DP3=>8,
                                                 D3DSIO_DP4=>9,
                                                 D3DSIO_MIN=>10,
                                                 D3DSIO_MAX=>11,
                                                 D3DSIO_SLT=>12,
                                                 D3DSIO_SGE=>13,
                                                 D3DSIO_EXP=>14,
                                                 D3DSIO_LOG=>15,
                                                 D3DSIO_LIT=>16,
                                                 D3DSIO_DST=>17,
                                                 D3DSIO_LRP=>18,
                                                 D3DSIO_FRC=>19,
                                                 D3DSIO_M4x4=>20,
                                                 D3DSIO_M4x3=>21,
                                                 D3DSIO_M3x4=>22,
                                                 D3DSIO_M3x3=>23,
                                                 D3DSIO_M3x2=>24,
                                                 D3DSIO_CALL=>25,
                                                 D3DSIO_CALLNZ=>26,
                                                 D3DSIO_LOOP=>27,
                                                 D3DSIO_RET=>28,
                                                 D3DSIO_ENDLOOP=>29,
                                                 D3DSIO_LABEL=>30,
                                                 D3DSIO_DCL=>31,
                                                 D3DSIO_POW=>32,
                                                 D3DSIO_CRS=>33,
                                                 D3DSIO_SGN=>34,
                                                 D3DSIO_ABS=>35,
                                                 D3DSIO_NRM=>36,
                                                 D3DSIO_SINCOS=>37,
                                                 D3DSIO_REP=>38,
                                                 D3DSIO_ENDREP=>39,
                                                 D3DSIO_IF=>40,
                                                 D3DSIO_IFC=>41,
                                                 D3DSIO_ELSE=>42,
                                                 D3DSIO_ENDIF=>43,
                                                 D3DSIO_BREAK=>44,
                                                 D3DSIO_BREAKC=>45,
                                                 D3DSIO_MOVA=>46,
                                                 D3DSIO_DEFB=>47,
                                                 D3DSIO_DEFI=>48,
                                                 D3DSIO_TEXCOORD=>64,
                                                 D3DSIO_TEXKILL=>65,
                                                 D3DSIO_TEX=>66,
                                                 D3DSIO_TEXBEM=>67,
                                                 D3DSIO_TEXBEML=>68,
                                                 D3DSIO_TEXREG2AR=>69,
                                                 D3DSIO_TEXREG2GB=>70,
                                                 D3DSIO_TEXM3x2PAD=>71,
                                                 D3DSIO_TEXM3x2TEX=>72,
                                                 D3DSIO_TEXM3x3PAD=>73,
                                                 D3DSIO_TEXM3x3TEX=>74,
                                                 D3DSIO_RESERVED0=>75,
                                                 D3DSIO_TEXM3x3SPEC=>76,
                                                 D3DSIO_TEXM3x3VSPEC=>77,
                                                 D3DSIO_EXPP=>78,
                                                 D3DSIO_LOGP=>79,
                                                 D3DSIO_CND=>80,
                                                 D3DSIO_DEF=>81,
                                                 D3DSIO_TEXREG2RGB=>82,
                                                 D3DSIO_TEXDP3TEX=>83,
                                                 D3DSIO_TEXM3x2DEPTH=>84,
                                                 D3DSIO_TEXDP3=>85,
                                                 D3DSIO_TEXM3x3=>86,
                                                 D3DSIO_TEXDEPTH=>87,
                                                 D3DSIO_CMP=>88,
                                                 D3DSIO_BEM=>89,
                                                 D3DSIO_DP2ADD=>90,
                                                 D3DSIO_DSX=>91,
                                                 D3DSIO_DSY=>92,
                                                 D3DSIO_TEXLDD=>93,
                                                 D3DSIO_SETP=>94,
                                                 D3DSIO_TEXLDL=>95,
                                                 D3DSIO_BREAKP=>96,
                                                 D3DSIO_PHASE=>16#FFFD#,
                                                 D3DSIO_COMMENT=>16#FFFE#,
                                                 D3DSIO_END=>16#FFFF#,
                                                 D3DSIO_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSHADER_INSTRUCTION_OPCODE_TYPE is tagD3DSHADER_INSTRUCTION_OPCODE_TYPE;

   -- D3DSINCOSCONST1 : constant := -1.5500992e-006f, -2.1701389e-005f,  0.0026041667f, 0.00026041668f;

   -- D3DSINCOSCONST2 : constant := -0.020833334f, -0.12500000f, 1.0f, 0.50000000f;

   D3DSI_COISSUE : constant := 16#40000000#;

   D3DSP_OPCODESPECIFICCONTROL_MASK : constant := 16#00ff0000#;

   D3DSP_OPCODESPECIFICCONTROL_SHIFT : constant := 16;

   D3DSI_TEXLD_PROJECT : constant := (16#1000_0#);

   D3DSI_TEXLD_BIAS    : constant := (16#2000_0#);

   type tagD3DSHADER_COMPARISON is (D3DSPC_RESERVED0,
                                    D3DSPC_GT,
                                    D3DSPC_EQ,
                                    D3DSPC_GE,
                                    D3DSPC_LT,
                                    D3DSPC_NE,
                                    D3DSPC_LE,
                                    D3DSPC_RESERVED1);
   for tagD3DSHADER_COMPARISON use (D3DSPC_RESERVED0=>0,
                                    D3DSPC_GT=>1,
                                    D3DSPC_EQ=>2,
                                    D3DSPC_GE=>3,
                                    D3DSPC_LT=>4,
                                    D3DSPC_NE=>5,
                                    D3DSPC_LE=>6,
                                    D3DSPC_RESERVED1=>7);

   subtype D3DSHADER_COMPARISON is tagD3DSHADER_COMPARISON;

   D3DSHADER_COMPARISON_SHIFT : constant := D3DSP_OPCODESPECIFICCONTROL_SHIFT;

   D3DSHADER_COMPARISON_MASK : constant := (16#70000#);

   D3DSHADER_INSTRUCTION_PREDICATED : constant := (16#1000_0000#);

   D3DSP_DCL_USAGE_SHIFT : constant := 0;

   D3DSP_DCL_USAGE_MASK : constant := 16#0000000f#;

   D3DSP_DCL_USAGEINDEX_SHIFT : constant := 16;

   D3DSP_DCL_USAGEINDEX_MASK : constant := 16#000f0000#;

   D3DSP_TEXTURETYPE_SHIFT : constant := 27;

   D3DSP_TEXTURETYPE_MASK : constant := 16#78000000#;

   type tagD3DSAMPLER_TEXTURE_TYPE is (D3DSTT_UNKNOWN,
                                       D3DSTT_2D,
                                       D3DSTT_CUBE,
                                       D3DSTT_VOLUME,
                                       D3DSTT_FORCE_DWORD);
   for tagD3DSAMPLER_TEXTURE_TYPE use (D3DSTT_UNKNOWN=>0,
                                       D3DSTT_2D=>16#1000_0000#,
                                       D3DSTT_CUBE=>16#1800_0000#,
                                       D3DSTT_VOLUME=>16#2000_0000#,
                                       D3DSTT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSAMPLER_TEXTURE_TYPE is tagD3DSAMPLER_TEXTURE_TYPE;

   D3DSP_REGNUM_MASK  : constant := 16#000007FF#;

   D3DSP_WRITEMASK_0  : constant := 16#00010000#;  -- Component 0 (X;Red);

   D3DSP_WRITEMASK_1  : constant := 16#00020000#;  -- Component 1 (Y;Green);

   D3DSP_WRITEMASK_2  : constant := 16#00040000#;  -- Component 2 (Z;Blue);

   D3DSP_WRITEMASK_3  : constant := 16#00080000#;  -- Component 3 (W;Alpha);

   D3DSP_WRITEMASK_ALL : constant := 16#000F0000#;  -- All Components;

   D3DSP_DSTMOD_SHIFT : constant := 20;

   D3DSP_DSTMOD_MASK : constant := 16#00F00000#;

   D3DSPDM_NONE : constant := (0); -- nop;

   D3DSPDM_SATURATE : constant := (16#1000_00#); -- clamp to 0. to 1. range;

   D3DSPDM_PARTIALPRECISION : constant := (16#2000_00#); -- Partial precision hint;

   D3DSPDM_MSAMPCENTROID : constant := (16#4000_00#); -- Relevant to multisampling only:;

   D3DSP_DSTSHIFT_SHIFT : constant := 24;

   D3DSP_DSTSHIFT_MASK : constant := 16#0F000000#;

   D3DSP_REGTYPE_SHIFT : constant := 28;

   D3DSP_REGTYPE_SHIFT2 : constant := 8;

   D3DSP_REGTYPE_MASK : constant := 16#70000000#;

   D3DSP_REGTYPE_MASK2 : constant := 16#00001800#;

   type tagD3DSHADER_PARAM_REGISTER_TYPE is (D3DSPR_TEMP,
                                             D3DSPR_INPUT,
                                             D3DSPR_CONST,
                                             --D3DSPR_ADDR,
                                             D3DSPR_TEXTURE,
                                             D3DSPR_RASTOUT,
                                             D3DSPR_ATTROUT,
                                             --D3DSPR_TEXCRDOUT,
                                             D3DSPR_OUTPUT,
                                             D3DSPR_CONSTINT,
                                             D3DSPR_COLOROUT,
                                             D3DSPR_DEPTHOUT,
                                             D3DSPR_SAMPLER,
                                             D3DSPR_CONST2,
                                             D3DSPR_CONST3,
                                             D3DSPR_CONST4,
                                             D3DSPR_CONSTBOOL,
                                             D3DSPR_LOOP,
                                             D3DSPR_TEMPFLOAT16,
                                             D3DSPR_MISCTYPE,
                                             D3DSPR_LABEL,
                                             D3DSPR_PREDICATE,
                                             D3DSPR_FORCE_DWORD);
   for tagD3DSHADER_PARAM_REGISTER_TYPE use (D3DSPR_TEMP=>0,
                                             D3DSPR_INPUT=>1,
                                             D3DSPR_CONST=>2,
                                             --D3DSPR_ADDR=>3,
                                             D3DSPR_TEXTURE=>3,
                                             D3DSPR_RASTOUT=>4,
                                             D3DSPR_ATTROUT=>5,
                                             --D3DSPR_TEXCRDOUT=>6,
                                             D3DSPR_OUTPUT=>6,
                                             D3DSPR_CONSTINT=>7,
                                             D3DSPR_COLOROUT=>8,
                                             D3DSPR_DEPTHOUT=>9,
                                             D3DSPR_SAMPLER=>10,
                                             D3DSPR_CONST2=>11,
                                             D3DSPR_CONST3=>12,
                                             D3DSPR_CONST4=>13,
                                             D3DSPR_CONSTBOOL=>14,
                                             D3DSPR_LOOP=>15,
                                             D3DSPR_TEMPFLOAT16=>16,
                                             D3DSPR_MISCTYPE=>17,
                                             D3DSPR_LABEL=>18,
                                             D3DSPR_PREDICATE=>19,
                                             D3DSPR_FORCE_DWORD=>16#7fffffff#);

   D3DSPR_ADDR:constant tagD3DSHADER_PARAM_REGISTER_TYPE:=D3DSPR_TEXTURE;
   D3DSPR_TEXCRDOUT:constant tagD3DSHADER_PARAM_REGISTER_TYPE:=D3DSPR_OUTPUT;
   
   subtype D3DSHADER_PARAM_REGISTER_TYPE is tagD3DSHADER_PARAM_REGISTER_TYPE;

   type tagD3DSHADER_MISCTYPE_OFFSETS is (D3DSMO_POSITION,
                                          D3DSMO_FACE);
   for tagD3DSHADER_MISCTYPE_OFFSETS use (D3DSMO_POSITION=>0,
                                          D3DSMO_FACE=>1);

   subtype D3DSHADER_MISCTYPE_OFFSETS is tagD3DSHADER_MISCTYPE_OFFSETS;

   type tagD3DVS_RASTOUT_OFFSETS is (D3DSRO_POSITION,
                                     D3DSRO_FOG,
                                     D3DSRO_POINT_SIZE,
                                     D3DSRO_FORCE_DWORD);
   for tagD3DVS_RASTOUT_OFFSETS use (D3DSRO_POSITION=>0,
                                     D3DSRO_FOG=>0+ 1,
                                     D3DSRO_POINT_SIZE=>0+ 1+ 1,
                                     D3DSRO_FORCE_DWORD=>16#7fffffff#);

   subtype D3DVS_RASTOUT_OFFSETS is tagD3DVS_RASTOUT_OFFSETS;

   D3DVS_ADDRESSMODE_SHIFT : constant := 13;

   D3DVS_ADDRESSMODE_MASK : constant := (16#2000#);

   type tagD3DVS_ADDRESSMODE_TYPE is (D3DVS_ADDRMODE_ABSOLUTE,
                                      D3DVS_ADDRMODE_RELATIVE,
                                      D3DVS_ADDRMODE_FORCE_DWORD);
   for tagD3DVS_ADDRESSMODE_TYPE use (D3DVS_ADDRMODE_ABSOLUTE=>(0),
                                      D3DVS_ADDRMODE_RELATIVE=>(16#2000#),
                                      D3DVS_ADDRMODE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DVS_ADDRESSMODE_TYPE is tagD3DVS_ADDRESSMODE_TYPE;

   D3DSHADER_ADDRESSMODE_SHIFT : constant := 13;

   D3DSHADER_ADDRESSMODE_MASK : constant := (16#2000#);

   type tagD3DSHADER_ADDRESSMODE_TYPE is (D3DSHADER_ADDRMODE_ABSOLUTE,
                                          D3DSHADER_ADDRMODE_RELATIVE,
                                          D3DSHADER_ADDRMODE_FORCE_DWORD);
   for tagD3DSHADER_ADDRESSMODE_TYPE use (D3DSHADER_ADDRMODE_ABSOLUTE=>(0),
                                          D3DSHADER_ADDRMODE_RELATIVE=>(16#2000#),
                                          D3DSHADER_ADDRMODE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSHADER_ADDRESSMODE_TYPE is tagD3DSHADER_ADDRESSMODE_TYPE;

   D3DVS_SWIZZLE_SHIFT : constant := 16;

   D3DVS_SWIZZLE_MASK : constant := 16#00FF0000#;

   D3DVS_X_X : constant dword:= Lsh(0 , D3DVS_SWIZZLE_SHIFT);

   D3DVS_X_Y : constant dword:= Lsh(1 , D3DVS_SWIZZLE_SHIFT);

   D3DVS_X_Z : constant dword:= Lsh(2 , D3DVS_SWIZZLE_SHIFT);

   D3DVS_X_W : constant dword:= Lsh(3 , D3DVS_SWIZZLE_SHIFT);

   D3DVS_Y_X : constant dword:= Lsh(0 , 18);

   D3DVS_Y_Y : constant dword:= Lsh(1 , 18);

   D3DVS_Y_Z : constant dword:= Lsh(2 , 18);

   D3DVS_Y_W : constant dword:= Lsh(3 , 18);

   D3DVS_Z_X : constant dword:= Lsh(0 , 20);

   D3DVS_Z_Y : constant dword:= Lsh(1 , 20);

   D3DVS_Z_Z : constant dword:= Lsh(2 , 20);

   D3DVS_Z_W : constant dword:= Lsh(3 , 20);

   D3DVS_W_X : constant dword:= Lsh(0 , 22);

   D3DVS_W_Y : constant dword:= Lsh(1 , 22);

   D3DVS_W_Z : constant dword:= Lsh(2 , 22);

   D3DVS_W_W : constant dword:= Lsh(3 , 22);

   D3DVS_NOSWIZZLE : constant dword:= (D3DVS_X_X or D3DVS_Y_Y or D3DVS_Z_Z or D3DVS_W_W);

   D3DSP_SWIZZLE_SHIFT : constant := 16;

   D3DSP_SWIZZLE_MASK : constant := 16#00FF0000#;

   D3DSP_SRCMOD_SHIFT : constant := 24;

   D3DSP_SRCMOD_MASK : constant := 16#0F000000#;

   type tagD3DSHADER_PARAM_SRCMOD_TYPE is (D3DSPSM_NONE,
                                           D3DSPSM_NEG,
                                           D3DSPSM_BIAS,
                                           D3DSPSM_BIASNEG,
                                           D3DSPSM_SIGN,
                                           D3DSPSM_SIGNNEG,
                                           D3DSPSM_COMP,
                                           D3DSPSM_X2,
                                           D3DSPSM_X2NEG,
                                           D3DSPSM_DZ,
                                           D3DSPSM_DW,
                                           D3DSPSM_ABS,
                                           D3DSPSM_ABSNEG,
                                           D3DSPSM_NOT,
                                           D3DSPSM_FORCE_DWORD);
   for tagD3DSHADER_PARAM_SRCMOD_TYPE use (D3DSPSM_NONE=>0,
                                           D3DSPSM_NEG=>16#1000_000#,
                                           D3DSPSM_BIAS=>16#2000_000#,
                                           D3DSPSM_BIASNEG=>16#3000_000#,
                                           D3DSPSM_SIGN=>16#4000_000#,
                                           D3DSPSM_SIGNNEG=>16#5000_000#,
                                           D3DSPSM_COMP=>16#6000_000#,
                                           D3DSPSM_X2=>16#7000_000#,
                                           D3DSPSM_X2NEG=>16#8000_000#,
                                           D3DSPSM_DZ=>16#9000_000#,
                                           D3DSPSM_DW=>16#A000_000#,
                                           D3DSPSM_ABS=>16#B000_000#,
                                           D3DSPSM_ABSNEG=>16#C000_000#,
                                           D3DSPSM_NOT=>16#D000_000#,
                                           D3DSPSM_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSHADER_PARAM_SRCMOD_TYPE is tagD3DSHADER_PARAM_SRCMOD_TYPE;

   -- #define D3DPS_VERSION(_Major,_Minor) (16#FFFF0000# or ((_Major)<<8) or (_Minor))
   function D3DPS_VERSION(Major,Minor:DWORD) return DWORD is (16#FFFF0000# or Lsh(Major,8) or Minor);


   -- #define D3DVS_VERSION(_Major,_Minor) (16#FFFE0000or((_Major),8)or(_Minor))
   function D3DVS_VERSION(Major,Minor:DWORD) return DWORD is (16#FFFE0000# or Lsh(Major,8) or Minor);


   -- #define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&16#ff#)
   function D3DSHADER_VERSION_MAJOR(Version:DWORD) return DWORD is (Rsh(Version,8) and 16#ff#);

   -- #define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&16#ff#)
   function D3DSHADER_VERSION_MINOR(Version:DWORD) return DWORD is (Rsh(Version,0) and 16#ff#);


   D3DSI_COMMENTSIZE_SHIFT : constant := 16;

   D3DSI_COMMENTSIZE_MASK : constant := 16#7FFF0000#;

   -- #define D3DSHADER_COMMENT(_DWordSize)        ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)orD3DSIO_COMMENT)
   function D3DSHADER_COMMENT(DWordSize:DWORD) return DWORD is ((Lsh(DWordSize,D3DSI_COMMENTSIZE_SHIFT) and D3DSI_COMMENTSIZE_MASK) or 16#FFFE#);


   -- #define D3DPS_END()  16#0000FFFF#
   function D3DPS_END return dword is (16#0000FFFF#);


   -- #define D3DVS_END()  16#0000FFFF#
   function D3DVS_END return dword is (16#0000FFFF#);


   type tagD3DBASISTYPE is (D3DBASIS_BEZIER,
                            D3DBASIS_BSPLINE,
                            D3DBASIS_CATMULL_ROM,
                            D3DBASIS_FORCE_DWORD);
   for tagD3DBASISTYPE use (D3DBASIS_BEZIER=>0,
                            D3DBASIS_BSPLINE=>1,
                            D3DBASIS_CATMULL_ROM=>2,
                            D3DBASIS_FORCE_DWORD=>16#7fffffff#);

   subtype D3DBASISTYPE is tagD3DBASISTYPE;

   type tagD3DDEGREETYPE is (D3DDEGREE_LINEAR,
                             D3DDEGREE_QUADRATIC,
                             D3DDEGREE_CUBIC,
                             D3DDEGREE_QUINTIC,
                             D3DDEGREE_FORCE_DWORD);
   for tagD3DDEGREETYPE use (D3DDEGREE_LINEAR=>1,
                             D3DDEGREE_QUADRATIC=>2,
                             D3DDEGREE_CUBIC=>3,
                             D3DDEGREE_QUINTIC=>5,
                             D3DDEGREE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DDEGREETYPE is tagD3DDEGREETYPE;

   type tagD3DPATCHEDGESTYLE is (D3DPATCHEDGE_DISCRETE,
                                 D3DPATCHEDGE_CONTINUOUS,
                                 D3DPATCHEDGE_FORCE_DWORD);
   for tagD3DPATCHEDGESTYLE use (D3DPATCHEDGE_DISCRETE=>0,
                                 D3DPATCHEDGE_CONTINUOUS=>1,
                                 D3DPATCHEDGE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DPATCHEDGESTYLE is tagD3DPATCHEDGESTYLE;

   type tagD3DSTATEBLOCKTYPE is (D3DSBT_ALL,
                                 D3DSBT_PIXELSTATE,
                                 D3DSBT_VERTEXSTATE,
                                 D3DSBT_FORCE_DWORD);
   for tagD3DSTATEBLOCKTYPE use (D3DSBT_ALL=>1,
                                 D3DSBT_PIXELSTATE=>2,
                                 D3DSBT_VERTEXSTATE=>3,
                                 D3DSBT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSTATEBLOCKTYPE is tagD3DSTATEBLOCKTYPE;

   type tagD3DVERTEXBLENDFLAGS is (D3DVBF_DISABLE,
                                   D3DVBF_1WEIGHTS,
                                   D3DVBF_2WEIGHTS,
                                   D3DVBF_3WEIGHTS,
                                   D3DVBF_TWEENING,
                                   D3DVBF_0WEIGHTS,
                                   D3DVBF_FORCE_DWORD);
   for tagD3DVERTEXBLENDFLAGS use (D3DVBF_DISABLE=>0,
                                   D3DVBF_1WEIGHTS=>1,
                                   D3DVBF_2WEIGHTS=>2,
                                   D3DVBF_3WEIGHTS=>3,
                                   D3DVBF_TWEENING=>255,
                                   D3DVBF_0WEIGHTS=>256,
                                   D3DVBF_FORCE_DWORD=>16#7fffffff#);

   subtype D3DVERTEXBLENDFLAGS is tagD3DVERTEXBLENDFLAGS;

   type tagD3DTEXTURETRANSFORMFLAGS is (D3DTTFF_DISABLE,
                                        D3DTTFF_COUNT1,
                                        D3DTTFF_COUNT2,
                                        D3DTTFF_COUNT3,
                                        D3DTTFF_COUNT4,
                                        D3DTTFF_PROJECTED,
                                        D3DTTFF_FORCE_DWORD);
   for tagD3DTEXTURETRANSFORMFLAGS use (D3DTTFF_DISABLE=>0,
                                        D3DTTFF_COUNT1=>1,
                                        D3DTTFF_COUNT2=>2,
                                        D3DTTFF_COUNT3=>3,
                                        D3DTTFF_COUNT4=>4,
                                        D3DTTFF_PROJECTED=>256,
                                        D3DTTFF_FORCE_DWORD=>16#7fffffff#);

   subtype D3DTEXTURETRANSFORMFLAGS is tagD3DTEXTURETRANSFORMFLAGS;

   D3DFVF_TEXTUREFORMAT2 : constant := 0;         -- Two floating point values;

   D3DFVF_TEXTUREFORMAT1 : constant := 3;         -- One floating point value;

   D3DFVF_TEXTUREFORMAT3 : constant := 1;         -- Three floating point values;

   D3DFVF_TEXTUREFORMAT4 : constant := 2;         -- Four floating point values;

   -- #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
   function D3DFVF_TEXCOORDSIZE3(CoordIndex:DWORD) return DWORD is (Lsh(D3DFVF_TEXTUREFORMAT3,integer(CoordIndex*2+16)));


   -- #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
   function D3DFVF_TEXCOORDSIZE2(CoordIndex:DWORD) return DWORD is (D3DFVF_TEXTUREFORMAT2);


   -- #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
   function D3DFVF_TEXCOORDSIZE4(CoordIndex:DWORD) return DWORD is (Lsh(D3DFVF_TEXTUREFORMAT4 , integer(CoordIndex*2 + 16)));


   -- #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
   function D3DFVF_TEXCOORDSIZE1(CoordIndex:DWORD) return DWORD is (Lsh(D3DFVF_TEXTUREFORMAT1 , integer(CoordIndex*2 + 16)));


   type tagD3DDEVTYPE is (D3DDEVTYPE_HAL,
                          D3DDEVTYPE_REF,
                          D3DDEVTYPE_SW,
                          D3DDEVTYPE_NULLREF,
                          D3DDEVTYPE_FORCE_DWORD);
   for tagD3DDEVTYPE use (D3DDEVTYPE_HAL=>1,
                          D3DDEVTYPE_REF=>2,
                          D3DDEVTYPE_SW=>3,
                          D3DDEVTYPE_NULLREF=>4,
                          D3DDEVTYPE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DDEVTYPE is tagD3DDEVTYPE;

   type tagD3DMULTISAMPLE_TYPE is (D3DMULTISAMPLE_NONE,
                                   D3DMULTISAMPLE_NONMASKABLE,
                                   D3DMULTISAMPLE_2_SAMPLES,
                                   D3DMULTISAMPLE_3_SAMPLES,
                                   D3DMULTISAMPLE_4_SAMPLES,
                                   D3DMULTISAMPLE_5_SAMPLES,
                                   D3DMULTISAMPLE_6_SAMPLES,
                                   D3DMULTISAMPLE_7_SAMPLES,
                                   D3DMULTISAMPLE_8_SAMPLES,
                                   D3DMULTISAMPLE_9_SAMPLES,
                                   D3DMULTISAMPLE_10_SAMPLES,
                                   D3DMULTISAMPLE_11_SAMPLES,
                                   D3DMULTISAMPLE_12_SAMPLES,
                                   D3DMULTISAMPLE_13_SAMPLES,
                                   D3DMULTISAMPLE_14_SAMPLES,
                                   D3DMULTISAMPLE_15_SAMPLES,
                                   D3DMULTISAMPLE_16_SAMPLES,
                                   D3DMULTISAMPLE_FORCE_DWORD);
   for tagD3DMULTISAMPLE_TYPE use (D3DMULTISAMPLE_NONE=>0,
                                   D3DMULTISAMPLE_NONMASKABLE=>1,
                                   D3DMULTISAMPLE_2_SAMPLES=>2,
                                   D3DMULTISAMPLE_3_SAMPLES=>3,
                                   D3DMULTISAMPLE_4_SAMPLES=>4,
                                   D3DMULTISAMPLE_5_SAMPLES=>5,
                                   D3DMULTISAMPLE_6_SAMPLES=>6,
                                   D3DMULTISAMPLE_7_SAMPLES=>7,
                                   D3DMULTISAMPLE_8_SAMPLES=>8,
                                   D3DMULTISAMPLE_9_SAMPLES=>9,
                                   D3DMULTISAMPLE_10_SAMPLES=>10,
                                   D3DMULTISAMPLE_11_SAMPLES=>11,
                                   D3DMULTISAMPLE_12_SAMPLES=>12,
                                   D3DMULTISAMPLE_13_SAMPLES=>13,
                                   D3DMULTISAMPLE_14_SAMPLES=>14,
                                   D3DMULTISAMPLE_15_SAMPLES=>15,
                                   D3DMULTISAMPLE_16_SAMPLES=>16,
                                   D3DMULTISAMPLE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DMULTISAMPLE_TYPE is tagD3DMULTISAMPLE_TYPE;

   -- #define MAKEFOURCC(ch0, ch1, ch2, ch3) ((DWORD)(BYTE)(ch0) or ((DWORD)(BYTE)(ch1) << 8) or ((DWORD)(BYTE)(ch2) << 16) or ((DWORD)(BYTE)(ch3) << 24 ))
   function AsDWORD is new Ada.Unchecked_Conversion(char,DWORD);pragma Warnings(off,AsDWORD);
   function MAKEFOURCC(ch0,ch1,ch2,ch3:char) return dword is (AsDWORD(ch0) or Lsh(AsDWORD(ch1),8) or Lsh(AsDWORD(ch2),16) or Lsh(AsDWORD(ch3),24));
   
   
   
   --     type FOURCC(B:Boolean:=True) is record
   --        case B  is
   --           when True=>
   --              ch0,ch1,ch2,ch3:char;
   --           when False=>
   --              dw:dword;
   --        end case;
   --     end record with Unchecked_Union;
   --     
   --     UYVY:constant FOURCC:=(True,'U', 'Y', 'V', 'Y');
   --     RGBG:constant FOURCC:=(True,'R', 'G', 'B', 'G');
   --     YUY2:constant FOURCC:=(True,'Y', 'U', 'Y', '2');
   --     GRGB:constant FOURCC:=(True,'G', 'R', 'G', 'B');
   --     DXT1:constant FOURCC:=(True,'D', 'X', 'T', '1');
   --     DXT2:constant FOURCC:=(True,'D', 'X', 'T', '2');
   --     DXT3:constant FOURCC:=(True,'D', 'X', 'T', '3');
   --     DXT4:constant FOURCC:=(True,'D', 'X', 'T', '4');
   --     DXT5:constant FOURCC:=(True,'D', 'X', 'T', '5');


   type tagD3DFORMAT is (D3DFMT_UNKNOWN,
                         D3DFMT_R8G8B8,
                         D3DFMT_A8R8G8B8,
                         D3DFMT_X8R8G8B8,
                         D3DFMT_R5G6B5,
                         D3DFMT_X1R5G5B5,
                         D3DFMT_A1R5G5B5,
                         D3DFMT_A4R4G4B4,
                         D3DFMT_R3G3B2,
                         D3DFMT_A8,
                         D3DFMT_A8R3G3B2,
                         D3DFMT_X4R4G4B4,
                         D3DFMT_A2B10G10R10,
                         D3DFMT_A8B8G8R8,
                         D3DFMT_X8B8G8R8,
                         D3DFMT_G16R16,
                         D3DFMT_A2R10G10B10,
                         D3DFMT_A16B16G16R16,
                         D3DFMT_A8P8,
                         D3DFMT_P8,
                         D3DFMT_L8,
                         D3DFMT_A8L8,
                         D3DFMT_A4L4,
                         D3DFMT_V8U8,
                         D3DFMT_L6V5U5,
                         D3DFMT_X8L8V8U8,
                         D3DFMT_Q8W8V8U8,
                         D3DFMT_V16U16,
                         D3DFMT_A2W10V10U10,
                         
                         
                         
                         
                         D3DFMT_D16_LOCKABLE,
                         D3DFMT_D32,
                         D3DFMT_D15S1,
                         D3DFMT_D24S8,
                         D3DFMT_D24X8,
                         D3DFMT_D24X4S4,
                         D3DFMT_D16,
                         D3DFMT_L16,
                         D3DFMT_D32F_LOCKABLE,
                         D3DFMT_D24FS8,
                         D3DFMT_D32_LOCKABLE,
                         D3DFMT_S8_LOCKABLE,
                         
                         D3DFMT_VERTEXDATA,
                         D3DFMT_INDEX16,
                         D3DFMT_INDEX32,
                         D3DFMT_Q16W16V16U16,
                         
                         D3DFMT_R16F,
                         D3DFMT_G16R16F,
                         D3DFMT_A16B16G16R16F,
                         D3DFMT_R32F,
                         D3DFMT_G32R32F,
                         D3DFMT_A32B32G32R32F,
                         D3DFMT_CxV8U8,
                         D3DFMT_A1,
                         D3DFMT_A2B10G10R10_XR_BIAS,
                         D3DFMT_BINARYBUFFER,
                         
                         
                         
                         D3DFMT_MULTI2_ARGB8,
                         D3DFMT_DXT1,
                         D3DFMT_DXT2,
                         D3DFMT_YUY2,
                         D3DFMT_DXT3,
                         D3DFMT_DXT4,
                         D3DFMT_DXT5,
                         D3DFMT_G8R8_G8B8,
                         D3DFMT_R8G8_B8G8,
                         
                         D3DFMT_UYVY,
                         
                         
                         D3DFMT_FORCE_DWORD);
   for tagD3DFORMAT use (D3DFMT_UNKNOWN=>0,
                         D3DFMT_R8G8B8=>20,
                         D3DFMT_A8R8G8B8=>21,
                         D3DFMT_X8R8G8B8=>22,
                         D3DFMT_R5G6B5=>23,
                         D3DFMT_X1R5G5B5=>24,
                         D3DFMT_A1R5G5B5=>25,
                         D3DFMT_A4R4G4B4=>26,
                         D3DFMT_R3G3B2=>27,
                         D3DFMT_A8=>28,
                         D3DFMT_A8R3G3B2=>29,
                         D3DFMT_X4R4G4B4=>30,
                         D3DFMT_A2B10G10R10=>31,
                         D3DFMT_A8B8G8R8=>32,
                         D3DFMT_X8B8G8R8=>33,
                         D3DFMT_G16R16=>34,
                         D3DFMT_A2R10G10B10=>35,
                         D3DFMT_A16B16G16R16=>36,
                         D3DFMT_A8P8=>40,
                         D3DFMT_P8=>41,
                         D3DFMT_L8=>50,
                         D3DFMT_A8L8=>51,
                         D3DFMT_A4L4=>52,
                         D3DFMT_V8U8=>60,
                         D3DFMT_L6V5U5=>61,
                         D3DFMT_X8L8V8U8=>62,
                         D3DFMT_Q8W8V8U8=>63,
                         D3DFMT_V16U16=>64,
                         D3DFMT_A2W10V10U10=>67,
                         
                         
                         
                         
                         D3DFMT_D16_LOCKABLE=>70,
                         D3DFMT_D32=>71,
                         D3DFMT_D15S1=>73,
                         D3DFMT_D24S8=>75,
                         D3DFMT_D24X8=>77,
                         D3DFMT_D24X4S4=>79,
                         D3DFMT_D16=>80,
                         D3DFMT_L16=>81,
                         D3DFMT_D32F_LOCKABLE=>82,
                         D3DFMT_D24FS8=>83,
                         D3DFMT_D32_LOCKABLE=>84,
                         D3DFMT_S8_LOCKABLE=>85,
                         
                         D3DFMT_VERTEXDATA=>100,
                         D3DFMT_INDEX16=>101,
                         D3DFMT_INDEX32=>102,
                         D3DFMT_Q16W16V16U16=>110,
                         
                         D3DFMT_R16F=>111,
                         D3DFMT_G16R16F=>112,
                         D3DFMT_A16B16G16R16F=>113,
                         D3DFMT_R32F=>114,
                         D3DFMT_G32R32F=>115,
                         D3DFMT_A32B32G32R32F=>116,
                         D3DFMT_CxV8U8=>117,
                         D3DFMT_A1=>118,
                         D3DFMT_A2B10G10R10_XR_BIAS=>119,
                         D3DFMT_BINARYBUFFER=>199,
                         
                         
                         
                         D3DFMT_MULTI2_ARGB8=>16#3154_454D#,
                         D3DFMT_DXT1        =>16#3154_5844#,
                         D3DFMT_DXT2        =>16#3254_5844#,
                         D3DFMT_YUY2        =>16#3259_5559#,
                         D3DFMT_DXT3        =>16#3354_5844#,
                         D3DFMT_DXT4        =>16#3454_5844#,
                         D3DFMT_DXT5        =>16#3554_5844#,
                         D3DFMT_G8R8_G8B8   =>16#4247_5247#,
                         D3DFMT_R8G8_B8G8   =>16#4742_4752#,
                         
                         D3DFMT_UYVY        =>16#5956_5955#,
                         
                         
                         D3DFMT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DFORMAT is tagD3DFORMAT;

   type tagD3DDISPLAYMODE is record
      Width:UINT;
      Height:UINT;
      RefreshRate:UINT;
      Format:D3DFORMAT;
   end record;

   subtype D3DDISPLAYMODE is tagD3DDISPLAYMODE;

   type tagD3DDEVICE_CREATION_PARAMETERS is record
      AdapterOrdinal:UINT;
      DeviceType:D3DDEVTYPE;
      hFocusWindow:win32.windef.HWND;
      BehaviorFlags:DWORD;
   end record;

   subtype D3DDEVICE_CREATION_PARAMETERS is tagD3DDEVICE_CREATION_PARAMETERS;

   type tagD3DSWAPEFFECT is (D3DSWAPEFFECT_DISCARD,
                             D3DSWAPEFFECT_FLIP,
                             D3DSWAPEFFECT_COPY,
                             D3DSWAPEFFECT_OVERLAY,
                             D3DSWAPEFFECT_FLIPEX,
                             D3DSWAPEFFECT_FORCE_DWORD);
   for tagD3DSWAPEFFECT use (D3DSWAPEFFECT_DISCARD=>1,
                             D3DSWAPEFFECT_FLIP=>2,
                             D3DSWAPEFFECT_COPY=>3,
                             D3DSWAPEFFECT_OVERLAY=>4,
                             D3DSWAPEFFECT_FLIPEX=>5,
                             D3DSWAPEFFECT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DSWAPEFFECT is tagD3DSWAPEFFECT;

   type tagD3DPOOL is (D3DPOOL_DEFAULT,
                       D3DPOOL_MANAGED,
                       D3DPOOL_SYSTEMMEM,
                       D3DPOOL_SCRATCH,
                       D3DPOOL_FORCE_DWORD);
   for tagD3DPOOL use (D3DPOOL_DEFAULT=>0,
                       D3DPOOL_MANAGED=>1,
                       D3DPOOL_SYSTEMMEM=>2,
                       D3DPOOL_SCRATCH=>3,
                       D3DPOOL_FORCE_DWORD=>16#7fffffff#);

   subtype D3DPOOL is tagD3DPOOL;

   D3DPRESENT_RATE_DEFAULT : constant := 16#00000000#;

   type tagD3DPRESENT_PARAMETERS is record
      BackBufferWidth:UINT;
      BackBufferHeight:UINT;
      BackBufferFormat:D3DFORMAT;
      BackBufferCount:UINT;
      MultiSampleType:D3DMULTISAMPLE_TYPE;
      MultiSampleQuality:DWORD;
      SwapEffect:D3DSWAPEFFECT;
      hDeviceWindow:HWND;
      Windowed:BOOL;
      EnableAutoDepthStencil:BOOL;
      AutoDepthStencilFormat:D3DFORMAT;
      Flags:DWORD;
      FullScreen_RefreshRateInHz:UINT;
      PresentationInterval:UINT;
   end record;

   subtype D3DPRESENT_PARAMETERS is tagD3DPRESENT_PARAMETERS;

   D3DPRESENTFLAG_LOCKABLE_BACKBUFFER : constant := 16#00000001#;

   D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL : constant := 16#00000002#;

   D3DPRESENTFLAG_DEVICECLIP : constant := 16#00000004#;

   D3DPRESENTFLAG_VIDEO : constant := 16#00000010#;

   D3DPRESENTFLAG_NOAUTOROTATE : constant := 16#00000020#;

   D3DPRESENTFLAG_UNPRUNEDMODE : constant := 16#00000040#;

   D3DPRESENTFLAG_OVERLAY_LIMITEDRGB : constant := 16#00000080#;

   D3DPRESENTFLAG_OVERLAY_YCbCr_BT709 : constant := 16#00000100#;

   D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC : constant := 16#00000200#;

   D3DPRESENTFLAG_RESTRICTED_CONTENT : constant := 16#00000400#;

   D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER : constant := 16#00000800#;

   type tagD3DGAMMARAMP is record
      red  :WORD_Array(0..255);
      green:WORD_Array(0..255);
      blue :WORD_Array(0..255);
   end record;

   subtype D3DGAMMARAMP is tagD3DGAMMARAMP;

   type tagD3DBACKBUFFER_TYPE is (D3DBACKBUFFER_TYPE_MONO,
                                  D3DBACKBUFFER_TYPE_LEFT,
                                  D3DBACKBUFFER_TYPE_RIGHT,
                                  D3DBACKBUFFER_TYPE_FORCE_DWORD);
   for tagD3DBACKBUFFER_TYPE use (D3DBACKBUFFER_TYPE_MONO=>0,
                                  D3DBACKBUFFER_TYPE_LEFT=>1,
                                  D3DBACKBUFFER_TYPE_RIGHT=>2,
                                  D3DBACKBUFFER_TYPE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DBACKBUFFER_TYPE is tagD3DBACKBUFFER_TYPE;

   type tagD3DRESOURCETYPE is (D3DRTYPE_SURFACE,
                               D3DRTYPE_VOLUME,
                               D3DRTYPE_TEXTURE,
                               D3DRTYPE_VOLUMETEXTURE,
                               D3DRTYPE_CUBETEXTURE,
                               D3DRTYPE_VERTEXBUFFER,
                               D3DRTYPE_INDEXBUFFER,
                               D3DRTYPE_FORCE_DWORD);
   for tagD3DRESOURCETYPE use (D3DRTYPE_SURFACE=>1,
                               D3DRTYPE_VOLUME=>2,
                               D3DRTYPE_TEXTURE=>3,
                               D3DRTYPE_VOLUMETEXTURE=>4,
                               D3DRTYPE_CUBETEXTURE=>5,
                               D3DRTYPE_VERTEXBUFFER=>6,
                               D3DRTYPE_INDEXBUFFER=>7,
                               D3DRTYPE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DRESOURCETYPE is tagD3DRESOURCETYPE;

   D3DUSAGE_RENDERTARGET : constant := (16#00000001#);

   D3DUSAGE_DEPTHSTENCIL : constant := (16#00000002#);

   D3DUSAGE_DYNAMIC : constant := (16#00000200#);

   D3DUSAGE_NONSECURE : constant := (16#00800000#);

   D3DUSAGE_AUTOGENMIPMAP : constant := (16#00000400#);

   D3DUSAGE_DMAP : constant := (16#00004000#);

   D3DUSAGE_QUERY_LEGACYBUMPMAP : constant := (16#00008000#);

   D3DUSAGE_QUERY_SRGBREAD : constant := (16#00010000#);

   D3DUSAGE_QUERY_FILTER : constant := (16#00020000#);

   D3DUSAGE_QUERY_SRGBWRITE : constant := (16#00040000#);

   D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING : constant := (16#00080000#);

   D3DUSAGE_QUERY_VERTEXTEXTURE : constant := (16#00100000#);

   D3DUSAGE_QUERY_WRAPANDMIP : constant := (16#00200000#);

   D3DUSAGE_WRITEONLY : constant := (16#00000008#);

   D3DUSAGE_SOFTWAREPROCESSING : constant := (16#00000010#);

   D3DUSAGE_DONOTCLIP : constant := (16#00000020#);

   D3DUSAGE_POINTS : constant := (16#00000040#);

   D3DUSAGE_RTPATCHES : constant := (16#00000080#);

   D3DUSAGE_NPATCHES : constant := (16#00000100#);

   D3DUSAGE_TEXTAPI : constant := (16#10000000#);

   D3DUSAGE_RESTRICTED_CONTENT : constant := (16#00000800#);

   D3DUSAGE_RESTRICT_SHARED_RESOURCE : constant := (16#00002000#);

   D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER : constant := (16#00001000#) ;

   type tagD3DCUBEMAP_FACES is (D3DCUBEMAP_FACE_POSITIVE_X,
                                D3DCUBEMAP_FACE_NEGATIVE_X,
                                D3DCUBEMAP_FACE_POSITIVE_Y,
                                D3DCUBEMAP_FACE_NEGATIVE_Y,
                                D3DCUBEMAP_FACE_POSITIVE_Z,
                                D3DCUBEMAP_FACE_NEGATIVE_Z,
                                D3DCUBEMAP_FACE_FORCE_DWORD);
   for tagD3DCUBEMAP_FACES use (D3DCUBEMAP_FACE_POSITIVE_X=>0,
                                D3DCUBEMAP_FACE_NEGATIVE_X=>1,
                                D3DCUBEMAP_FACE_POSITIVE_Y=>2,
                                D3DCUBEMAP_FACE_NEGATIVE_Y=>3,
                                D3DCUBEMAP_FACE_POSITIVE_Z=>4,
                                D3DCUBEMAP_FACE_NEGATIVE_Z=>5,
                                D3DCUBEMAP_FACE_FORCE_DWORD=>16#7fffffff#);

   subtype D3DCUBEMAP_FACES is tagD3DCUBEMAP_FACES;

   D3DLOCK_READONLY : constant := 16#00000010#;

   D3DLOCK_DISCARD : constant := 16#00002000#;

   D3DLOCK_NOOVERWRITE : constant := 16#00001000#;

   D3DLOCK_NOSYSLOCK : constant := 16#00000800#;

   D3DLOCK_DONOTWAIT : constant := 16#00004000#;

   D3DLOCK_NO_DIRTY_UPDATE : constant := 16#00008000#;

   type tagD3DVERTEXBUFFER_DESC is record
      Format:D3DFORMAT;
      Typ:D3DRESOURCETYPE;
      Usage:DWORD;
      Pool:D3DPOOL;
      Size:UINT;
      FVF:DWORD;
   end record;

   subtype D3DVERTEXBUFFER_DESC is tagD3DVERTEXBUFFER_DESC;

   type tagD3DINDEXBUFFER_DESC is record
      Format:D3DFORMAT;
      Typ:D3DRESOURCETYPE;
      Usage:DWORD;
      Pool:D3DPOOL;
      Size:UINT;
   end record;

   subtype D3DINDEXBUFFER_DESC is tagD3DINDEXBUFFER_DESC;

   type tagD3DSURFACE_DESC is record
      Format:D3DFORMAT;
      Typ:D3DRESOURCETYPE;
      Usage:DWORD;
      Pool:D3DPOOL;
      MultiSampleType:D3DMULTISAMPLE_TYPE;
      MultiSampleQuality:DWORD;
      Width:UINT;
      Height:UINT;
   end record;

   subtype D3DSURFACE_DESC is tagD3DSURFACE_DESC;

   type tagD3DVOLUME_DESC is record
      Format:D3DFORMAT;
      Typ:D3DRESOURCETYPE;
      Usage:DWORD;
      Pool:D3DPOOL;
      Width:UINT;
      Height:UINT;
      Depth:UINT;
   end record;

   subtype D3DVOLUME_DESC is tagD3DVOLUME_DESC;

   type tagD3DLOCKED_RECT is record
      Pitch:INT;
      pBits:LPvoid;
   end record;

   subtype D3DLOCKED_RECT is tagD3DLOCKED_RECT;

   type tagD3DBOX is record
      Left:UINT;
      Top:UINT;
      Right:UINT;
      Bottom:UINT;
      Front:UINT;
      Back:UINT;
   end record;

   subtype D3DBOX is tagD3DBOX;

   type tagD3DLOCKED_BOX is record
      RowPitch:INT;
      SlicePitch:INT;
      pBits:LPvoid;
   end record;

   subtype D3DLOCKED_BOX is tagD3DLOCKED_BOX;

   type tagD3DRANGE is record
      Offset:UINT;
      Size:UINT;
   end record;

   subtype D3DRANGE is tagD3DRANGE;

   type tagD3DRECTPATCH_INFO is record
      StartVertexOffsetWidth:UINT;
      StartVertexOffsetHeight:UINT;
      Width:UINT;
      Height:UINT;
      Stride:UINT;
      Basis:D3DBASISTYPE;
      Degree:D3DDEGREETYPE;
   end record;

   subtype D3DRECTPATCH_INFO is tagD3DRECTPATCH_INFO;

   type tagD3DTRIPATCH_INFO is record
      StartVertexOffset:UINT;
      NumVertices:UINT;
      Basis:D3DBASISTYPE;
      Degree:D3DDEGREETYPE;
   end record;

   subtype D3DTRIPATCH_INFO is tagD3DTRIPATCH_INFO;

   MAX_DEVICE_IDENTIFIER_STRING : constant := 512;

   type tagD3DADAPTER_IDENTIFIER9 is record
      Driver:char_Array(0..MAX_DEVICE_IDENTIFIER_STRING-1);
      Description:char_Array(0..MAX_DEVICE_IDENTIFIER_STRING-1);
      DeviceName:char_Array(0..32-1);
      DriverVersion:LARGE_INTEGER;
      DriverVersionLowPart:DWORD;
      DriverVersionHighPart:DWORD;
      VendorId:DWORD;
      DeviceId:DWORD;
      SubSysId:DWORD;
      Revision:DWORD;
      DeviceIdentifier:GUID;
      WHQLLevel:DWORD;
   end record;

   subtype D3DADAPTER_IDENTIFIER9 is tagD3DADAPTER_IDENTIFIER9;

   type tagD3DRASTER_STATUS is record
      InVBlank:BOOL;
      ScanLine:UINT;
   end record;

   subtype D3DRASTER_STATUS is tagD3DRASTER_STATUS;

   type tagD3DDEBUGMONITORTOKENS is (D3DDMT_ENABLE,
                                     D3DDMT_DISABLE,
                                     D3DDMT_FORCE_DWORD);
   for tagD3DDEBUGMONITORTOKENS use (D3DDMT_ENABLE=>0,
                                     D3DDMT_DISABLE=>1,
                                     D3DDMT_FORCE_DWORD=>16#7fffffff#);

   subtype D3DDEBUGMONITORTOKENS is tagD3DDEBUGMONITORTOKENS;

   type tagD3DQUERYTYPE is (D3DQUERYTYPE_VCACHE,
                            D3DQUERYTYPE_RESOURCEMANAGER,
                            D3DQUERYTYPE_VERTEXSTATS,
                            D3DQUERYTYPE_EVENT,
                            D3DQUERYTYPE_OCCLUSION,
                            D3DQUERYTYPE_TIMESTAMP,
                            D3DQUERYTYPE_TIMESTAMPDISJOINT,
                            D3DQUERYTYPE_TIMESTAMPFREQ,
                            D3DQUERYTYPE_PIPELINETIMINGS,
                            D3DQUERYTYPE_INTERFACETIMINGS,
                            D3DQUERYTYPE_VERTEXTIMINGS,
                            D3DQUERYTYPE_PIXELTIMINGS,
                            D3DQUERYTYPE_BANDWIDTHTIMINGS,
                            D3DQUERYTYPE_CACHEUTILIZATION,
                            D3DQUERYTYPE_MEMORYPRESSURE);
   for tagD3DQUERYTYPE use (D3DQUERYTYPE_VCACHE=>4,
                            D3DQUERYTYPE_RESOURCEMANAGER=>5,
                            D3DQUERYTYPE_VERTEXSTATS=>6,
                            D3DQUERYTYPE_EVENT=>8,
                            D3DQUERYTYPE_OCCLUSION=>9,
                            D3DQUERYTYPE_TIMESTAMP=>10,
                            D3DQUERYTYPE_TIMESTAMPDISJOINT=>11,
                            D3DQUERYTYPE_TIMESTAMPFREQ=>12,
                            D3DQUERYTYPE_PIPELINETIMINGS=>13,
                            D3DQUERYTYPE_INTERFACETIMINGS=>14,
                            D3DQUERYTYPE_VERTEXTIMINGS=>15,
                            D3DQUERYTYPE_PIXELTIMINGS=>16,
                            D3DQUERYTYPE_BANDWIDTHTIMINGS=>17,
                            D3DQUERYTYPE_CACHEUTILIZATION=>18,
                            D3DQUERYTYPE_MEMORYPRESSURE=>19);

   subtype D3DQUERYTYPE is tagD3DQUERYTYPE;

   D3DISSUE_END : constant := (1); -- Tells the runtime to issue the end of a query, changing it's state to "non-signaled".;

   D3DISSUE_BEGIN : constant := (2); -- Tells the runtime to issue the beginng of a query.;

   D3DGETDATA_FLUSH : constant := (1); -- Tells the runtime to flush if the query is outstanding.;

   type tagD3DRESOURCESTATS is record
      bThrashing:BOOL;
      ApproxBytesDownloaded:DWORD;
      NumEvicts:DWORD;
      NumVidCreates:DWORD;
      LastPri:DWORD;
      NumUsed:DWORD;
      NumUsedInVidMem:DWORD;
      WorkingSet:DWORD;
      WorkingSetBytes:DWORD;
      TotalManaged:DWORD;
      TotalBytes:DWORD;
   end record;

   subtype D3DRESOURCESTATS is tagD3DRESOURCESTATS;
                        
   type D3DRESOURCESTATS_Array is array(Natural range<>) of D3DRESOURCESTATS;

   D3DRTYPECOUNT : constant := (8);

   type tagD3DDEVINFO_RESOURCEMANAGER is record
      -- #ifndef WOW64_ENUM_WORKAROUND
      stats:D3DRESOURCESTATS_Array(0..D3DRTYPECOUNT-1);
      -- #else
      -- stats:D3DRESOURCESTATS_Array(0..7);
   end record;

   subtype D3DDEVINFO_RESOURCEMANAGER is tagD3DDEVINFO_RESOURCEMANAGER;

   type LPD3DDEVINFO_RESOURCEMANAGER is access all tagD3DDEVINFO_RESOURCEMANAGER;

   type tagD3DDEVINFOtagD3DVERTEXSTATS is record
      NumRenderedTriangles:DWORD;
      NumExtraClippingTriangles:DWORD;
   end record;

   subtype D3DDEVINFOtagD3DVERTEXSTATS is tagD3DDEVINFOtagD3DVERTEXSTATS;

   type LPD3DDEVINFOtagD3DVERTEXSTATS is access all tagD3DDEVINFOtagD3DVERTEXSTATS;

   type tagD3DDEVINFO_VCACHE is record
      Pattern:DWORD;
      OptMethod:DWORD;
      CacheSize:DWORD;
      MagicNumber:DWORD;
   end record;

   subtype D3DDEVINFO_VCACHE is tagD3DDEVINFO_VCACHE;

   type LPD3DDEVINFO_VCACHE is access all tagD3DDEVINFO_VCACHE;

   type tagD3DDEVINFOtagD3D9PIPELINETIMINGS is record
      VertexProcessingTimePercent:FLOAT;
      PixelProcessingTimePercent:FLOAT;
      OtherGPUProcessingTimePercent:FLOAT;
      GPUIdleTimePercent:FLOAT;
   end record;

   subtype D3DDEVINFOtagD3D9PIPELINETIMINGS is tagD3DDEVINFOtagD3D9PIPELINETIMINGS;

   type tagD3DDEVINFOtagD3D9INTERFACETIMINGS is record
      WaitingForGPUToUseApplicationResourceTimePercent:FLOAT;
      WaitingForGPUToAcceptMoreCommandsTimePercent:FLOAT;
      WaitingForGPUToStayWithinLatencyTimePercent:FLOAT;
      WaitingForGPUExclusiveResourceTimePercent:FLOAT;
      WaitingForGPUOtherTimePercent:FLOAT;
   end record;

   subtype D3DDEVINFOtagD3D9INTERFACETIMINGS is tagD3DDEVINFOtagD3D9INTERFACETIMINGS;

   type tagD3DDEVINFOtagD3D9STAGETIMINGS is record
      MemoryProcessingPercent:FLOAT;
      ComputationProcessingPercent:FLOAT;
   end record;

   subtype D3DDEVINFOtagD3D9STAGETIMINGS is tagD3DDEVINFOtagD3D9STAGETIMINGS;

   type tagD3DDEVINFOtagD3D9BANDWIDTHTIMINGS is record
      MaxBandwidthUtilized:FLOAT;
      FrontEndUploadMemoryUtilizedPercent:FLOAT;
      VertexRateUtilizedPercent:FLOAT;
      TriangleSetupRateUtilizedPercent:FLOAT;
      FillRateUtilizedPercent:FLOAT;
   end record;

   subtype D3DDEVINFOtagD3D9BANDWIDTHTIMINGS is tagD3DDEVINFOtagD3D9BANDWIDTHTIMINGS;

   type tagD3DDEVINFOtagD3D9CACHEUTILIZATION is record
      TextureCacheHitRate:FLOAT;
      PostTransformVertexCacheHitRate:FLOAT;
   end record;

   subtype D3DDEVINFOtagD3D9CACHEUTILIZATION is tagD3DDEVINFOtagD3D9CACHEUTILIZATION;

   type tagD3DMEMORYPRESSURE is record
      BytesEvictedFromProcess:UINT64;
      SizeOfInefficientAllocation:UINT64;
      LevelOfEfficiency:DWORD;
   end record;

   subtype D3DMEMORYPRESSURE is tagD3DMEMORYPRESSURE;

   type tagD3DCOMPOSERECTSOP is (D3DCOMPOSERECTS_COPY,
                                 D3DCOMPOSERECTS_OR,
                                 D3DCOMPOSERECTS_AND,
                                 D3DCOMPOSERECTS_NEG,
                                 D3DCOMPOSERECTS_FORCE_DWORD);
   for tagD3DCOMPOSERECTSOP use (D3DCOMPOSERECTS_COPY=>1,
                                 D3DCOMPOSERECTS_OR=>2,
                                 D3DCOMPOSERECTS_AND=>3,
                                 D3DCOMPOSERECTS_NEG=>4,
                                 D3DCOMPOSERECTS_FORCE_DWORD=>16#7fffffff#);

   subtype D3DCOMPOSERECTSOP is tagD3DCOMPOSERECTSOP;

   type tagD3DCOMPOSERECTDESC is record
      X:USHORT;
      Y:USHORT;
      Width:USHORT;
      Height:USHORT;
   end record;

   subtype D3DCOMPOSERECTDESC is tagD3DCOMPOSERECTDESC;

   type tagD3DCOMPOSERECTDESTINATION is record
      SrcRectIndex:USHORT;
      Reserved:USHORT;
      X:SHORT;
      Y:SHORT;
   end record;

   subtype D3DCOMPOSERECTDESTINATION is tagD3DCOMPOSERECTDESTINATION;

   D3DCOMPOSERECTS_MAXNUMRECTS : constant := 16#FFFF#;

   D3DCONVOLUTIONMONO_MAXWIDTH : constant := 7;

   D3DCONVOLUTIONMONO_MAXHEIGHT : constant := D3DCONVOLUTIONMONO_MAXWIDTH;

   D3DFMT_A1_SURFACE_MAXWIDTH : constant := 8192;

   D3DFMT_A1_SURFACE_MAXHEIGHT : constant := 2048;

   type tagD3DPRESENTSTATS is record
      PresentCount:UINT;
      PresentRefreshCount:UINT;
      SyncRefreshCount:UINT;
      SyncQPCTime:LARGE_INTEGER;
      SyncGPUTime:LARGE_INTEGER;
   end record;

   subtype D3DPRESENTSTATS is tagD3DPRESENTSTATS;

   type D3DSCANLINEORDERING is (D3DSCANLINEORDERING_UNKNOWN,
                                D3DSCANLINEORDERING_PROGRESSIVE,
                                D3DSCANLINEORDERING_INTERLACED);
   for D3DSCANLINEORDERING use (D3DSCANLINEORDERING_UNKNOWN=>0,
                                D3DSCANLINEORDERING_PROGRESSIVE=>1,
                                D3DSCANLINEORDERING_INTERLACED=>2);

   type tagD3DDISPLAYMODEEX is record
      Size:UINT;
      Width:UINT;
      Height:UINT;
      RefreshRate:UINT;
      Format:D3DFORMAT;
      ScanLineOrdering:D3DSCANLINEORDERING;
   end record;

   subtype D3DDISPLAYMODEEX is tagD3DDISPLAYMODEEX;

   type tagD3DDISPLAYMODEFILTER is record
      Size:UINT;
      Format:D3DFORMAT;
      ScanLineOrdering:D3DSCANLINEORDERING;
   end record;

   subtype D3DDISPLAYMODEFILTER is tagD3DDISPLAYMODEFILTER;

   type D3DDISPLAYROTATION is (D3DDISPLAYROTATION_IDENTITY,
                               D3DDISPLAYROTATION_90,
                               D3DDISPLAYROTATION_180,
                               D3DDISPLAYROTATION_270);
   for D3DDISPLAYROTATION use (D3DDISPLAYROTATION_IDENTITY=>1,
                               D3DDISPLAYROTATION_90=>2,
                               D3DDISPLAYROTATION_180=>3,
                               D3DDISPLAYROTATION_270=>4  );

   D3D9_RESOURCE_PRIORITY_MINIMUM : constant := 16#28000000#;

   D3D9_RESOURCE_PRIORITY_LOW : constant := 16#50000000#;

   D3D9_RESOURCE_PRIORITY_NORMAL : constant := 16#78000000#;

   D3D9_RESOURCE_PRIORITY_HIGH : constant := 16#a0000000#;

   D3D9_RESOURCE_PRIORITY_MAXIMUM : constant := 16#c8000000#;

   D3D_OMAC_SIZE : constant := 16;

   type tagD3D_OMAC is record
      Omac:BYTE_Array(0..D3D_OMAC_SIZE-1);
   end record;

   subtype D3D_OMAC is tagD3D_OMAC;

   type tagD3DAUTHENTICATEDCHANNELTYPE is (D3DAUTHENTICATEDCHANNELtagD3D9,
                                           D3DAUTHENTICATEDCHANNEL_DRIVER_SOFTWARE,
                                           D3DAUTHENTICATEDCHANNEL_DRIVER_HARDWARE);
   for tagD3DAUTHENTICATEDCHANNELTYPE use (D3DAUTHENTICATEDCHANNELtagD3D9=>1,
                                           D3DAUTHENTICATEDCHANNEL_DRIVER_SOFTWARE=>2,
                                           D3DAUTHENTICATEDCHANNEL_DRIVER_HARDWARE=>3);

   subtype D3DAUTHENTICATEDCHANNELTYPE is tagD3DAUTHENTICATEDCHANNELTYPE;

   type tagD3DAUTHENTICATEDCHANNEL_QUERY_INPUT is record
      QueryType:GUID;
      hChannel:HANDLE;
      SequenceNumber:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERY_INPUT is tagD3DAUTHENTICATEDCHANNEL_QUERY_INPUT;

   type tagD3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT is record
      omac:D3D_OMAC;
      QueryType:GUID;
      hChannel:HANDLE;
      SequenceNumber:UINT;
      ReturnCode:win32.Objbase.HRESULT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;

   D3DAUTHENTICATEDQUERY_PROTECTION:constant win32.rpcdce.GUID:=(16#a84eb584#,16#c495#,16#48aa#,(16#b9#,16#4d#,16#8b#,16#d2#,16#d6#,16#fb#,16#ce#,16#5#));
                        
                        
   type BIT01 is mod 2**01;
   type BIT30 is mod 2**30;

   pragma implicit_Packing;
   type tagD3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS(B:Boolean:=True) is record
      case B is
         when True=>
            ProtectionEnabled:BIT01;
            OverlayOrFullscreenRequired:BIT01;
            Reserved:BIT30;
         when False=>
            Value:UINT;
      end case;
   end record with unchecked_union;
   for tagD3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS use record
      at mod 2;
      ProtectionEnabled at 0 range 0..0;
      OverlayOrFullscreenRequired at 0 range 1..1;
      Reserved at 0 range 2..31;
      Value at 0 range 0..31;
   end record;
   for tagD3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS'size use 32;
   subtype D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS is tagD3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS;
                        

   type tagD3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      ProtectionFlags:D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT;

   D3DAUTHENTICATEDQUERY_CHANNELTYPE:constant win32.rpcdce.GUID:=(16#bc1b18a5#,16#b1fb#,16#42ab#,(16#bd#,16#94#,16#b5#,16#82#,16#8b#,16#4b#,16#f7#,16#be#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      ChannelType:D3DAUTHENTICATEDCHANNELTYPE;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT;

   D3DAUTHENTICATEDQUERY_DEVICEHANDLE:constant win32.rpcdce.GUID:=(16#ec1c539d#,16#8cff#,16#4e2a#,(16#bc#,16#c4#,16#f5#,16#69#,16#2f#,16#99#,16#f4#,16#80#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      DeviceHandle:HANDLE;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT;

   D3DAUTHENTICATEDQUERY_CRYPTOSESSION:constant win32.rpcdce.GUID:=(16#2634499e#,16#d018#,16#4d74#,(16#ac#,16#17#,16#7f#,16#72#,16#40#,16#59#,16#52#,16#8d#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT is record
      Input:D3DAUTHENTICATEDCHANNEL_QUERY_INPUT;
      DXVA2DecodeHandle:HANDLE;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT;

   type tagD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      DXVA2DecodeHandle:HANDLE;
      CryptoSessionHandle:HANDLE;
      DeviceHandle:HANDLE;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT;

   D3DAUTHENTICATEDQUERY_RESTRICTEDSHAREDRESOURCEPROCESSCOUNT:constant win32.rpcdce.GUID:=(16#db207b3#,16#9450#,16#46a6#,(16#82#,16#de#,16#1b#,16#96#,16#d4#,16#4f#,16#9c#,16#f2#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      NumRestrictedSharedResourceProcesses:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT;

   D3DAUTHENTICATEDQUERY_RESTRICTEDSHAREDRESOURCEPROCESS:constant win32.rpcdce.GUID:=(16#649bbadb#,16#f0f4#,16#4639#,(16#a1#,16#5b#,16#24#,16#39#,16#3f#,16#c3#,16#ab#,16#ac#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT is record
      Input:D3DAUTHENTICATEDCHANNEL_QUERY_INPUT;
      ProcessIndex:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT;

   type tagD3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE is (PROCESSIDTYPE_UNKNOWN,
                                                             PROCESSIDTYPE_DWM,
                                                             PROCESSIDTYPE_HANDLE);
   for tagD3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE use (PROCESSIDTYPE_UNKNOWN=>0,
                                                             PROCESSIDTYPE_DWM=>1,
                                                             PROCESSIDTYPE_HANDLE=>2);

   subtype D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE is tagD3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE;

   type tagD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      ProcessIndex:UINT;
      ProcessIdentifer:D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE;
      ProcessHandle:HANDLE;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT;

   D3DAUTHENTICATEDQUERY_UNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT:constant win32.rpcdce.GUID:=(16#12f0bd6#,16#e662#,16#4474#,(16#be#,16#fd#,16#aa#,16#53#,16#e5#,16#14#,16#3c#,16#6d#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      NumUnrestrictedProtectedSharedResources:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT;

   D3DAUTHENTICATEDQUERY_OUTPUTIDCOUNT:constant win32.rpcdce.GUID:=(16#2c042b5e#,16#8c07#,16#46d5#,(16#aa#,16#be#,16#8f#,16#75#,16#cb#,16#ad#,16#4c#,16#31#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT is record
      Input:D3DAUTHENTICATEDCHANNEL_QUERY_INPUT;
      DeviceHandle:HANDLE;
      CryptoSessionHandle:HANDLE;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT;

   type tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      DeviceHandle:HANDLE;
      CryptoSessionHandle:HANDLE;
      NumOutputIDs:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT;

   D3DAUTHENTICATEDQUERY_OUTPUTID:constant win32.rpcdce.GUID:=(16#839ddca3#,16#9b4e#,16#41e4#,(16#b0#,16#53#,16#89#,16#2b#,16#d2#,16#a1#,16#1e#,16#e7#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT is record
      Input:D3DAUTHENTICATEDCHANNEL_QUERY_INPUT;
      DeviceHandle:HANDLE;
      CryptoSessionHandle:HANDLE;
      OutputIDIndex:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT;

   type tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      DeviceHandle:HANDLE;
      CryptoSessionHandle:HANDLE;
      OutputIDIndex:UINT;
      OutputID:UINT64;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT;

   D3DAUTHENTICATEDQUERY_ACCESSIBILITYATTRIBUTES:constant win32.rpcdce.GUID:=(16#6214d9d2#,16#432c#,16#4abb#,(16#9f#,16#ce#,16#21#,16#6e#,16#ea#,16#26#,16#9e#,16#3b#));
   type tagD3DBUSTYPE is (D3DBUSTYPE_OTHER,
                          D3DBUSTYPE_PCI,
                          D3DBUSTYPE_PCIX,
                          D3DBUSTYPE_PCIEXPRESS,
                          D3DBUSTYPE_AGP,
                          D3DBUSIMPL_MODIFIER_INSIDE_OF_CHIPSET,
                          D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP,
                          D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET,
                          D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR,
                          D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE,
                          D3DBUSIMPL_MODIFIER_NON_STANDARD);
   for tagD3DBUSTYPE use (D3DBUSTYPE_OTHER=>16#00000000#,
                          D3DBUSTYPE_PCI=>16#00000001#,
                          D3DBUSTYPE_PCIX=>16#00000002#,
                          D3DBUSTYPE_PCIEXPRESS=>16#00000003#,
                          D3DBUSTYPE_AGP=>16#00000004#,
                          D3DBUSIMPL_MODIFIER_INSIDE_OF_CHIPSET=>16#00010000#,
                          D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP=>16#00020000#,
                          D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET=>16#00030000#,
                          D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR=>16#00040000#,
                          D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE=>16#00050000#,
                          D3DBUSIMPL_MODIFIER_NON_STANDARD=>16#80000000#);

   subtype D3DBUSTYPE is tagD3DBUSTYPE;

   type tagD3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      BusType:D3DBUSTYPE;
      bAccessibleInContiguousBlocks:BOOL;
      bAccessibleInNonContiguousBlocks:BOOL;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT;

   D3DAUTHENTICATEDQUERY_ENCRYPTIONWHENACCESSIBLEGUIDCOUNT:constant win32.rpcdce.GUID:=(16#b30f7066#,16#203c#,16#4b07#,(16#93#,16#fc#,16#ce#,16#aa#,16#fd#,16#61#,16#24#,16#1e#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      NumEncryptionGuids:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT;

   D3DAUTHENTICATEDQUERY_ENCRYPTIONWHENACCESSIBLEGUID:constant win32.rpcdce.GUID:=(16#f83a5958#,16#e986#,16#4bda#,(16#be#,16#b0#,16#41#,16#1f#,16#6a#,16#7a#,16#1#,16#b7#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT is record
      Input:D3DAUTHENTICATEDCHANNEL_QUERY_INPUT;
      EncryptionGuidIndex:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT;

   type tagD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      EncryptionGuidIndex:UINT;
      EncryptionGuid:GUID;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT;

   D3DAUTHENTICATEDQUERY_CURRENTENCRYPTIONWHENACCESSIBLE:constant win32.rpcdce.GUID:=(16#ec1791c7#,16#dad3#,16#4f15#,(16#9e#,16#c3#,16#fa#,16#a9#,16#3d#,16#60#,16#d4#,16#f0#));
   type tagD3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT is record
      Output:D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
      EncryptionGuid:GUID;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT;

   type tagD3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT is record
      omac:D3D_OMAC;
      ConfigureType:GUID;
      hChannel:HANDLE;
      SequenceNumber:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT is tagD3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;

   type tagD3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT is record
      omac:D3D_OMAC;
      ConfigureType:GUID;
      hChannel:HANDLE;
      SequenceNumber:UINT;
      ReturnCode:HRESULT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT is tagD3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT;

   D3DAUTHENTICATEDCONFIGURE_INITIALIZE:constant win32.rpcdce.GUID:=(16#6114bdb#,16#3523#,16#470a#,(16#8d#,16#ca#,16#fb#,16#c2#,16#84#,16#51#,16#54#,16#f0#));
   type tagD3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE is record
      Parameters:D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;
      StartSequenceQuery:UINT;
      StartSequenceConfigure:UINT;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE is tagD3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE;

   D3DAUTHENTICATEDCONFIGURE_PROTECTION:constant win32.rpcdce.GUID:=(16#50455658#,16#3f47#,16#4362#,(16#bf#,16#99#,16#bf#,16#df#,16#cd#,16#e9#,16#ed#,16#29#));
   type tagD3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION is record
      Parameters:D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;
      Protections:D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION is tagD3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION;

   D3DAUTHENTICATEDCONFIGURE_CRYPTOSESSION:constant win32.rpcdce.GUID:=(16#6346cc54#,16#2cfc#,16#4ad4#,(16#82#,16#24#,16#d1#,16#58#,16#37#,16#de#,16#77#,16#0#));
   type tagD3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION is record
      Parameters:D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;
      DXVA2DecodeHandle:HANDLE;
      CryptoSessionHandle:HANDLE;
      DeviceHandle:HANDLE;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION is tagD3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION;

   D3DAUTHENTICATEDCONFIGURE_SHAREDRESOURCE:constant win32.rpcdce.GUID:=(16#772d047#,16#1b40#,16#48e8#,(16#9c#,16#a6#,16#b5#,16#f5#,16#10#,16#de#,16#9f#,16#1#));
   type tagD3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE is record
      Parameters:D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;
      ProcessIdentiferType:D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE;
      ProcessHandle:HANDLE;
      AllowAccess:BOOL;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE is tagD3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE;

   D3DAUTHENTICATEDCONFIGURE_ENCRYPTIONWHENACCESSIBLE:constant win32.rpcdce.GUID:=(16#41fff286#,16#6ae0#,16#4d43#,(16#9d#,16#55#,16#a4#,16#6e#,16#9e#,16#fd#,16#15#,16#8a#));
   type tagD3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION is record
      Parameters:D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;
      EncryptionGuid:GUID;
   end record;

   subtype D3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION is tagD3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION;

   type tagD3DENCRYPTED_BLOCK_INFO is record
      NumEncryptedBytesAtBeginning:UINT;
      NumBytesInSkipPattern:UINT;
      NumBytesInEncryptPattern:UINT;
   end record;

   subtype D3DENCRYPTED_BLOCK_INFO is tagD3DENCRYPTED_BLOCK_INFO;

   type tagD3DAES_CTR_IV is record
      IV:UINT64;
      Count:UINT64;
   end record;

   subtype D3DAES_CTR_IV is tagD3DAES_CTR_IV;

end d3d9types;

猜你喜欢

转载自blog.csdn.net/adacore/article/details/83031366