text: /* 
   * Direct3D NT driver interface
   */
  
  #ifndef __DDK_D3DNTHAL_H
  #define __DDK_D3DNTHAL_H
  
  #include <ddrawint.h>
  #include <d3dtypes.h>
  #include <d3dcaps.h>
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  DEFINE_GUID(GUID_D3DCallbacks,                   0x7BF06990, 0x8794, 0x11D0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xD2, 0xEF, 0x02);
  DEFINE_GUID(GUID_D3DCallbacks3,                  0xDDF41230, 0xEC0A, 0x11D0, 0xA9, 0xB6, 0x00, 0xAA, 0x00, 0xC0, 0x99, 0x3E);
  DEFINE_GUID(GUID_D3DExtendedCaps,                0x7DE41F80, 0x9D93, 0x11D0, 0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29);
  DEFINE_GUID(GUID_D3DParseUnknownCommandCallback, 0x2E04FFA0, 0x98E4, 0x11D1, 0x8C, 0xE1, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8);
  DEFINE_GUID(GUID_ZPixelFormats,                  0x93869880, 0x36CF, 0x11D1, 0x9B, 0x1B, 0x00, 0xAA, 0x00, 0xBB, 0xB8, 0xAE);
  DEFINE_GUID(GUID_DDStereoMode,                   0xF828169C, 0xA8E8, 0x11D2, 0xA1, 0xF2, 0x00, 0xA0, 0xC9, 0x83, 0xEA, 0xF6);
  
  typedef struct _D3DNTHAL_CONTEXTCREATEDATA
  {
      union
      {
          PDD_DIRECTDRAW_GLOBAL lpDDGbl;
          PDD_DIRECTDRAW_LOCAL lpDDLcl;
      };
      union
      {
          PDD_SURFACE_LOCAL lpDDS;
          PDD_SURFACE_LOCAL lpDDSLcl;
      };
      union
      {
          PDD_SURFACE_LOCAL lpDDSZ;
          PDD_SURFACE_LOCAL lpDDSZLcl;
      };
      DWORD dwPID;
      ULONG_PTR dwhContext;
      HRESULT ddrval;
  } D3DNTHAL_CONTEXTCREATEDATA, *LPD3DNTHAL_CONTEXTCREATEDATA;
  
  typedef struct _D3DNTHAL_CONTEXTDESTROYDATA
  {
      ULONG_PTR dwhContext;
      HRESULT ddrval;
  } D3DNTHAL_CONTEXTDESTROYDATA, *LPD3DNTHAL_CONTEXTDESTROYDATA;
  
  typedef struct _D3DNTHAL_CONTEXTDESTROYALLDATA
  {
      DWORD dwPID;
      HRESULT ddrval;
  } D3DNTHAL_CONTEXTDESTROYALLDATA, *LPD3DNTHAL_CONTEXTDESTROYALLDATA;
  
  typedef struct _D3DNTHAL_SCENECAPTUREDATA
  {
      ULONG_PTR dwhContext;
      DWORD dwFlag;
      HRESULT ddrval;
  } D3DNTHAL_SCENECAPTUREDATA, *LPD3DNTHAL_SCENECAPTUREDATA;
  
  typedef struct _D3DNTHAL_TEXTURECREATEDATA
  {
      ULONG_PTR dwhContext;
      HANDLE hDDS;
      ULONG_PTR dwHandle;
      HRESULT ddrval;
  } D3DNTHAL_TEXTURECREATEDATA, *LPD3DNTHAL_TEXTURECREATEDATA;
  
  typedef struct _D3DNTHAL_TEXTUREDESTROYDATA
  {
      ULONG_PTR dwhContext;
      ULONG_PTR dwHandle;
      HRESULT ddrval;
  } D3DNTHAL_TEXTUREDESTROYDATA, *LPD3DNTHAL_TEXTUREDESTROYDATA;
  
  typedef struct _D3DNTHAL_TEXTURESWAPDATA
  {
      ULONG_PTR dwhContext;
      ULONG_PTR dwHandle1;
      ULONG_PTR dwHandle2;
      HRESULT ddrval;
  } D3DNTHAL_TEXTURESWAPDATA, *LPD3DNTHAL_TEXTURESWAPDATA;
  
  typedef struct _D3DNTHAL_TEXTUREGETSURFDATA
  {
      ULONG_PTR dwhContext;
      HANDLE hDDS;
      ULONG_PTR dwHandle;
      HRESULT ddrval;
  } D3DNTHAL_TEXTUREGETSURFDATA, *LPD3DNTHAL_TEXTUREGETSURFDATA;
  
  typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTCREATECB)(LPD3DNTHAL_CONTEXTCREATEDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYCB)(LPD3DNTHAL_CONTEXTDESTROYDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYALLCB)(LPD3DNTHAL_CONTEXTDESTROYALLDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_SCENECAPTURECB)(LPD3DNTHAL_SCENECAPTUREDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURECREATECB)(LPD3DNTHAL_TEXTURECREATEDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREDESTROYCB)(LPD3DNTHAL_TEXTUREDESTROYDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURESWAPCB)(LPD3DNTHAL_TEXTURESWAPDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREGETSURFCB)(LPD3DNTHAL_TEXTUREGETSURFDATA);
  
  typedef struct _D3DNTHALDeviceDesc_V1
  {
  	DWORD            dwSize;
  	DWORD            dwFlags;
  	D3DCOLORMODEL    dcmColorModel;
  	DWORD            dwDevCaps;
  	D3DTRANSFORMCAPS dtcTransformCaps;
  	BOOL             bClipping;
  	D3DLIGHTINGCAPS  dlcLightingCaps;
  	D3DPRIMCAPS      dpcLineCaps;
  	D3DPRIMCAPS      dpcTriCaps;
  	DWORD            dwDeviceRenderBitDepth;
  	DWORD            dwDeviceZBufferBitDepth;
  	DWORD            dwMaxBufferSize;
  	DWORD            dwMaxVertexCount;
  } D3DNTHALDEVICEDESC_V1, *LPD3DNTHALDEVICEDESC_V1;
  
  typedef struct _D3DNTHAL_GLOBALDRIVERDATA
  {
  	DWORD               dwSize;
      D3DNTHALDEVICEDESC_V1 hwCaps;
  	DWORD               dwNumVertices;
  	DWORD               dwNumClipVertices;
  	DWORD               dwNumTextureFormats;
  	LPDDSURFACEDESC     lpTextureFormats;
  } D3DNTHAL_GLOBALDRIVERDATA, *LPD3DNTHAL_GLOBALDRIVERDATA;
  
  typedef struct _D3DNTHAL_CALLBACKS
  {
      DWORD dwSize;
      LPD3DNTHAL_CONTEXTCREATECB ContextCreate;
      LPD3DNTHAL_CONTEXTDESTROYCB ContextDestroy;
      LPD3DNTHAL_CONTEXTDESTROYALLCB ContextDestroyAll;
      LPD3DNTHAL_SCENECAPTURECB SceneCapture;
      LPVOID dwReserved10;
      LPVOID dwReserved11;
      LPVOID dwReserved22;
      LPVOID dwReserved23;
      ULONG_PTR dwReserved;
      LPD3DNTHAL_TEXTURECREATECB TextureCreate;
      LPD3DNTHAL_TEXTUREDESTROYCB TextureDestroy;
      LPD3DNTHAL_TEXTURESWAPCB TextureSwap;
      LPD3DNTHAL_TEXTUREGETSURFCB TextureGetSurf;
      LPVOID dwReserved12;
      LPVOID dwReserved13;
      LPVOID dwReserved14;
      LPVOID dwReserved15;
      LPVOID dwReserved16;
      LPVOID dwReserved17;
      LPVOID dwReserved18;
      LPVOID dwReserved19;
      LPVOID dwReserved20;
      LPVOID dwReserved21;
      LPVOID dwReserved24;
      ULONG_PTR dwReserved0;
      ULONG_PTR dwReserved1;
      ULONG_PTR dwReserved2;
      ULONG_PTR dwReserved3;
      ULONG_PTR dwReserved4;
      ULONG_PTR dwReserved5;
      ULONG_PTR dwReserved6;
      ULONG_PTR dwReserved7;
      ULONG_PTR dwReserved8;
      ULONG_PTR dwReserved9;
  } D3DNTHAL_CALLBACKS, *LPD3DNTHAL_CALLBACKS;
  
  
  typedef struct _D3DNTHAL_SETRENDERTARGETDATA
  {
      ULONG_PTR dwhContext;
      PDD_SURFACE_LOCAL lpDDS;
      PDD_SURFACE_LOCAL lpDDSZ;
      HRESULT ddrval;
  } D3DNTHAL_SETRENDERTARGETDATA;
  typedef D3DNTHAL_SETRENDERTARGETDATA *LPD3DNTHAL_SETRENDERTARGETDATA;
  
  typedef DWORD (APIENTRY *LPD3DNTHAL_SETRENDERTARGETCB)(LPD3DNTHAL_SETRENDERTARGETDATA);
  
  
  typedef struct _D3DNTHAL_CALLBACKS2
  {
      DWORD dwSize;
      DWORD dwFlags;
  
      LPD3DNTHAL_SETRENDERTARGETCB SetRenderTarget;
      LPVOID dwReserved1;
      LPVOID dwReserved2;
      LPVOID dwReserved3;
      LPVOID dwReserved4;
  } D3DNTHAL_CALLBACKS2, *LPD3DNTHAL_CALLBACKS2;
  
  
  typedef struct _D3DNTHAL_CLEAR2DATA
  {
      ULONG_PTR dwhContext;
      DWORD dwFlags;
      DWORD dwFillColor;
      D3DVALUE dvFillDepth;
      DWORD dwFillStencil;
      LPD3DRECT lpRects;
      DWORD dwNumRects;
      HRESULT ddrval;
  } D3DNTHAL_CLEAR2DATA;
  typedef D3DNTHAL_CLEAR2DATA FAR *LPD3DNTHAL_CLEAR2DATA;
  
  typedef struct _D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA
  {
      ULONG_PTR dwhContext;
      DWORD dwFlags;
      ULONG_PTR dwReserved;
      DWORD dwNumPasses;
      HRESULT ddrval;
  } D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA, FAR *LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA;
  
  typedef struct _D3DNTHAL_DRAWPRIMITIVES2DATA
  {
      ULONG_PTR dwhContext;
      DWORD dwFlags;
      DWORD dwVertexType;
      PDD_SURFACE_LOCAL lpDDCommands;
      DWORD dwCommandOffset;
      DWORD dwCommandLength;
      union
      {
          PDD_SURFACE_LOCAL lpDDVertex;
          LPVOID lpVertices;
      };
      DWORD dwVertexOffset;
      DWORD dwVertexLength;
      DWORD dwReqVertexBufSize;
      DWORD dwReqCommandBufSize;
      LPDWORD lpdwRStates;
      union
      {
          DWORD dwVertexSize;
          HRESULT ddrval;
      };
      DWORD dwErrorOffset;
  } D3DNTHAL_DRAWPRIMITIVES2DATA, FAR *LPD3DNTHAL_DRAWPRIMITIVES2DATA;
  
  typedef DWORD (APIENTRY *LPD3DNTHAL_CLEAR2CB)(LPD3DNTHAL_CLEAR2DATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA);
  typedef DWORD (APIENTRY *LPD3DNTHAL_DRAWPRIMITIVES2CB)(LPD3DNTHAL_DRAWPRIMITIVES2DATA);
  
  typedef struct _D3DNTHAL_CALLBACKS3
  {
      DWORD dwSize; 
      DWORD dwFlags;
  
      LPD3DNTHAL_CLEAR2CB Clear2;
      LPVOID lpvReserved;
      LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState;
      LPD3DNTHAL_DRAWPRIMITIVES2CB DrawPrimitives2;
  } D3DNTHAL_CALLBACKS3, *LPD3DNTHAL_CALLBACKS3;
  
  #ifdef __cplusplus
  } /* extern "C" */
  #endif
  
  #endif /* __DDK_D3DNTHAL_H */
  