ddrawi.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065
  1. /*
  2. * DirectDraw driver interface
  3. * (DirectX 7 version)
  4. *
  5. * Copyright (C) 2001 Ove Kaaven
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  20. */
  21. #ifndef __DDRAWI_INCLUDED__
  22. #define __DDRAWI_INCLUDED__
  23. #include <_mingw_dxhelper.h>
  24. #include <ddraw.h>
  25. #include <dciddi.h> /* the DD HAL is layered onto DCI escapes */
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */
  30. typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */
  31. typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */
  32. #define DDAPI WINAPI
  33. /* the DirectDraw versions */
  34. #define DD_VERSION 0x0200 /* compatibility version */
  35. #define DD_RUNTIME_VERSION 0x0700 /* actual version */
  36. /* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
  37. #define DD_HAL_VERSION 0x0100
  38. /* more DCICOMMAND escapes */
  39. #define DDCREATEDRIVEROBJECT 10
  40. #define DDGET32BITDRIVERNAME 11
  41. #define DDNEWCALLBACKFNS 12
  42. #define DDVERSIONINFO 13
  43. #define MAX_DRIVER_NAME CCHDEVICENAME
  44. /*****************************************************************************
  45. * Initialization stuff
  46. */
  47. typedef struct {
  48. char szName[260];
  49. char szEntryPoint[64];
  50. DWORD dwContext;
  51. } DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;
  52. typedef struct {
  53. DWORD dwHALVersion;
  54. ULONG_PTR dwReserved1;
  55. ULONG_PTR dwReserved2;
  56. } DDVERSIONDATA,*LPDDVERSIONDATA;
  57. typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext);
  58. /* pointer to video memory */
  59. typedef ULONG_PTR FLATPTR;
  60. /* predeclare some structures */
  61. typedef struct _DDHALINFO *LPDDHALINFO;
  62. typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;
  63. typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
  64. typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
  65. typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;
  66. typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;
  67. typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;
  68. typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;
  69. typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;
  70. typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT;
  71. typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL;
  72. typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL;
  73. typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT;
  74. typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL;
  75. typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL;
  76. typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT;
  77. typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL;
  78. typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT;
  79. typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL;
  80. /* structure GUIDs for GetDriverInfo */
  81. DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );
  82. /* ...videport stuff here... */
  83. DEFINE_GUID( GUID_D3DCallbacks2, 0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );
  84. DEFINE_GUID( GUID_D3DCallbacks3, 0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E );
  85. DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 );
  86. /* ...kernel stuff here... */
  87. DEFINE_GUID( GUID_D3DExtendedCaps, 0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 );
  88. DEFINE_GUID( GUID_ZPixelFormats, 0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE );
  89. DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
  90. DEFINE_GUID( GUID_DDStereoMode, 0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 );
  91. /* ...more stuff here... */
  92. DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 );
  93. /* ...motioncomp stuff here... */
  94. DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A );
  95. /*****************************************************************************
  96. * driver->ddraw callbacks
  97. */
  98. typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset);
  99. typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);
  100. typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem);
  101. typedef struct {
  102. DWORD dwSize;
  103. LPDDHAL_SETINFO lpSetInfo;
  104. LPDDHAL_VIDMEMALLOC lpVidMemAlloc;
  105. LPDDHAL_VIDMEMFREE lpVidMemFree;
  106. } DDHALDDRAWFNS,*LPDDHALDDRAWFNS;
  107. /*****************************************************************************
  108. * mode info structure
  109. */
  110. typedef struct _DDHALMODEINFO {
  111. DWORD dwWidth;
  112. DWORD dwHeight;
  113. LONG lPitch;
  114. DWORD dwBPP;
  115. WORD wFlags;
  116. WORD wRefreshRate;
  117. DWORD dwRBitMask;
  118. DWORD dwGBitMask;
  119. DWORD dwBBitMask;
  120. DWORD dwAlphaBitMask;
  121. } DDHALMODEINFO,*LPDDHALMODEINFO;
  122. #define DDMODEINFO_PALETTIZED 0x0001
  123. #define DDMODEINFO_MODEX 0x0002
  124. #define DDMODEINFO_UNSUPPORTED 0x0004
  125. #define DDMODEINFO_STANDARDVGA 0x0008
  126. #define DDMODEINFO_MAXREFRESH 0x0010
  127. #define DDMODEINFO_STEREO 0x0020
  128. /*****************************************************************************
  129. * video memory info structure
  130. */
  131. typedef struct _VIDMEM {
  132. DWORD dwFlags;
  133. FLATPTR fpStart;
  134. union {
  135. FLATPTR fpEnd;
  136. DWORD dwWidth;
  137. } DUMMYUNIONNAME1;
  138. DDSCAPS ddsCaps;
  139. DDSCAPS ddsCapsAlt;
  140. union {
  141. LPVMEMHEAP lpHeap;
  142. DWORD dwHeight;
  143. } DUMMYUNIONNAME2;
  144. } VIDMEM,*LPVIDMEM;
  145. #define VIDMEM_ISLINEAR 0x00000001
  146. #define VIDMEM_ISRECTANGULAR 0x00000002
  147. #define VIDMEM_ISHEAP 0x00000004
  148. #define VIDMEM_ISNONLOCAL 0x00000008
  149. #define VIDMEM_ISWC 0x00000010
  150. #define VIDMEM_HEAPDISABLED 0x00000020
  151. typedef struct _VIDMEMINFO {
  152. FLATPTR fpPrimary;
  153. DWORD dwFlags;
  154. DWORD dwDisplayWidth;
  155. DWORD dwDisplayHeight;
  156. LONG lDisplayPitch;
  157. DDPIXELFORMAT ddpfDisplay;
  158. DWORD dwOffscreenAlign;
  159. DWORD dwOverlayAlign;
  160. DWORD dwTextureAlign;
  161. DWORD dwZBufferAlign;
  162. DWORD dwAlphaAlign;
  163. DWORD dwNumHeaps;
  164. LPVIDMEM pvmList;
  165. } VIDMEMINFO,*LPVIDMEMINFO;
  166. typedef struct _HEAPALIAS {
  167. FLATPTR fpVidMem;
  168. LPVOID lpAlias;
  169. DWORD dwAliasSize;
  170. } HEAPALIAS,*LPHEAPALIAS;
  171. typedef struct _HEAPALIASINFO {
  172. DWORD dwRefCnt;
  173. DWORD dwFlags;
  174. DWORD dwNumHeaps;
  175. LPHEAPALIAS lpAliases;
  176. } HEAPALIASINFO,*LPHEAPALIASINFO;
  177. #define HEAPALIASINFO_MAPPEDREAL 0x00000001
  178. #define HEAPALIASINFO_MAPPEDDUMMY 0x00000002
  179. /*****************************************************************************
  180. * capabilities structures
  181. */
  182. typedef struct _DDCORECAPS {
  183. DWORD dwSize;
  184. DWORD dwCaps;
  185. DWORD dwCaps2;
  186. DWORD dwCKeyCaps;
  187. DWORD dwFXCaps;
  188. DWORD dwFXAlphaCaps;
  189. DWORD dwPalCaps;
  190. DWORD dwSVCaps;
  191. DWORD dwAlphaBltConstBitDepths;
  192. DWORD dwAlphaBltPixelBitDepths;
  193. DWORD dwAlphaBltSurfaceBitDepths;
  194. DWORD dwAlphaOverlayConstBitDepths;
  195. DWORD dwAlphaOverlayPixelBitDepths;
  196. DWORD dwAlphaOverlaySurfaceBitDepths;
  197. DWORD dwZBufferBitDepths;
  198. DWORD dwVidMemTotal;
  199. DWORD dwVidMemFree;
  200. DWORD dwMaxVisibleOverlays;
  201. DWORD dwCurrVisibleOverlays;
  202. DWORD dwNumFourCCCodes;
  203. DWORD dwAlignBoundarySrc;
  204. DWORD dwAlignSizeSrc;
  205. DWORD dwAlignBoundaryDest;
  206. DWORD dwAlignSizeDest;
  207. DWORD dwAlignStrideAlign;
  208. DWORD dwRops[DD_ROP_SPACE];
  209. DDSCAPS ddsCaps;
  210. DWORD dwMinOverlayStretch;
  211. DWORD dwMaxOverlayStretch;
  212. DWORD dwMinLiveVideoStretch;
  213. DWORD dwMaxLiveVideoStretch;
  214. DWORD dwMinHwCodecStretch;
  215. DWORD dwMaxHwCodecStretch;
  216. DWORD dwReserved1;
  217. DWORD dwReserved2;
  218. DWORD dwReserved3;
  219. DWORD dwSVBCaps;
  220. DWORD dwSVBCKeyCaps;
  221. DWORD dwSVBFXCaps;
  222. DWORD dwSVBRops[DD_ROP_SPACE];
  223. DWORD dwVSBCaps;
  224. DWORD dwVSBCKeyCaps;
  225. DWORD dwVSBFXCaps;
  226. DWORD dwVSBRops[DD_ROP_SPACE];
  227. DWORD dwSSBCaps;
  228. DWORD dwSSBCKeyCaps;
  229. DWORD dwSSBFXCaps;
  230. DWORD dwSSBRops[DD_ROP_SPACE];
  231. DWORD dwMaxVideoPorts;
  232. DWORD dwCurrVideoPorts;
  233. DWORD dwSVBCaps2;
  234. } DDCORECAPS,*LPDDCORECAPS;
  235. typedef struct _DDNONLOCALVIDMEMCAPS {
  236. DWORD dwSize;
  237. DWORD dwNLVBCaps;
  238. DWORD dwNLVBCaps2;
  239. DWORD dwNLVBCKeyCaps;
  240. DWORD dwNLVBFXCaps;
  241. DWORD dwNLVBRops[DD_ROP_SPACE];
  242. } DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS;
  243. #define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2
  244. #define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1
  245. #define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2
  246. /*****************************************************************************
  247. * ddraw->driver callbacks
  248. */
  249. #define DDHAL_DRIVER_NOTHANDLED 0
  250. #define DDHAL_DRIVER_HANDLED 1
  251. #define DDHAL_DRIVER_NOCKEYHW 2
  252. typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA;
  253. typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA;
  254. typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA;
  255. typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA;
  256. typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA;
  257. typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA;
  258. typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA;
  259. typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA;
  260. typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA;
  261. typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA;
  262. typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA);
  263. typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA);
  264. typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA);
  265. typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA);
  266. typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA);
  267. typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA );
  268. typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA);
  269. typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA);
  270. typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA);
  271. typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA);
  272. typedef struct _DDHAL_DDCALLBACKS {
  273. DWORD dwSize;
  274. DWORD dwFlags;
  275. LPDDHAL_DESTROYDRIVER DestroyDriver;
  276. LPDDHAL_CREATESURFACE CreateSurface;
  277. LPDDHAL_SETCOLORKEY SetColorKey;
  278. LPDDHAL_SETMODE SetMode;
  279. LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank;
  280. LPDDHAL_CANCREATESURFACE CanCreateSurface;
  281. LPDDHAL_CREATEPALETTE CreatePalette;
  282. LPDDHAL_GETSCANLINE GetScanLine;
  283. /* DirectX 2 */
  284. LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
  285. LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface;
  286. } DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS;
  287. typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA;
  288. typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA;
  289. typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA;
  290. typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA;
  291. typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA;
  292. typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA;
  293. typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA;
  294. typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA;
  295. typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA;
  296. typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA;
  297. typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA;
  298. typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA;
  299. typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA;
  300. typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA);
  301. typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA);
  302. typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA);
  303. typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA);
  304. typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA);
  305. typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA);
  306. typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA);
  307. typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);
  308. typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA);
  309. typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA);
  310. typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA);
  311. typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);
  312. typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA);
  313. typedef struct _DDHAL_DDSURFACECALLBACKS {
  314. DWORD dwSize;
  315. DWORD dwFlags;
  316. LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
  317. LPDDHALSURFCB_FLIP Flip;
  318. LPDDHALSURFCB_SETCLIPLIST SetClipList;
  319. LPDDHALSURFCB_LOCK Lock;
  320. LPDDHALSURFCB_UNLOCK Unlock;
  321. LPDDHALSURFCB_BLT Blt;
  322. LPDDHALSURFCB_SETCOLORKEY SetColorKey;
  323. LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface;
  324. LPDDHALSURFCB_GETBLTSTATUS GetBltStatus;
  325. LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus;
  326. LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
  327. LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition;
  328. LPVOID reserved4;
  329. LPDDHALSURFCB_SETPALETTE SetPalette;
  330. } DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;
  331. typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA;
  332. typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA;
  333. typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);
  334. typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA);
  335. typedef struct _DDHAL_DDPALETTECALLBACKS {
  336. DWORD dwSize;
  337. DWORD dwFlags;
  338. LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
  339. LPDDHALPALCB_SETENTRIES SetEntries;
  340. } DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;
  341. typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA);
  342. typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA);
  343. typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA);
  344. typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA);
  345. typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA);
  346. typedef struct _DDHAL_DDEXEBUFCALLBACKS {
  347. DWORD dwSize;
  348. DWORD dwFlags;
  349. LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer;
  350. LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer;
  351. LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer;
  352. LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer;
  353. LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer;
  354. } DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;
  355. typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA;
  356. typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA;
  357. typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA;
  358. typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA);
  359. typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA);
  360. typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA);
  361. typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS {
  362. DWORD dwSize;
  363. DWORD dwFlags;
  364. LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory;
  365. LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap;
  366. LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment;
  367. LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus;
  368. } DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS;
  369. typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA;
  370. typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA;
  371. typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA;
  372. typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA);
  373. typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA);
  374. typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA);
  375. typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {
  376. DWORD dwSize;
  377. DWORD dwFlags;
  378. LPVOID Reserved;
  379. LPDDHAL_CREATESURFACEEX CreateSurfaceEx;
  380. LPDDHAL_GETDRIVERSTATE GetDriverState;
  381. LPDDHAL_DESTROYDDLOCAL DestroyDDLocal;
  382. } DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS;
  383. typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE);
  384. /*****************************************************************************
  385. * driver info structure
  386. *
  387. * The HAL is queried for additional callbacks via the GetDriverInfo callback.
  388. */
  389. typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
  390. typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
  391. typedef struct _DDHALINFO {
  392. DWORD dwSize;
  393. LPDDHAL_DDCALLBACKS lpDDCallbacks;
  394. LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks;
  395. LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks;
  396. VIDMEMINFO vmiData;
  397. DDCORECAPS ddCaps;
  398. DWORD dwMonitorFrequency;
  399. LPDDHAL_GETDRIVERINFO GetDriverInfo;
  400. DWORD dwModeIndex;
  401. LPDWORD lpdwFourCC;
  402. DWORD dwNumModes;
  403. LPDDHALMODEINFO lpModeInfo;
  404. DWORD dwFlags;
  405. LPVOID lpPDevice;
  406. DWORD hInstance;
  407. /* DirectX 2 */
  408. ULONG_PTR lpD3DGlobalDriverData;
  409. ULONG_PTR lpD3DHALCallbacks;
  410. LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks;
  411. } DDHALINFO;
  412. #define DDHALINFO_ISPRIMARYDISPLAY 0x00000001
  413. #define DDHALINFO_MODEXILLEGAL 0x00000002
  414. #define DDHALINFO_GETDRIVERINFOSET 0x00000004
  415. /* where the high-level ddraw implementation stores the callbacks */
  416. typedef struct _DDHAL_CALLBACKS {
  417. DDHAL_DDCALLBACKS cbDDCallbacks;
  418. DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks;
  419. DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks;
  420. DDHAL_DDCALLBACKS HALDD;
  421. DDHAL_DDSURFACECALLBACKS HALDDSurface;
  422. DDHAL_DDPALETTECALLBACKS HALDDPalette;
  423. DDHAL_DDCALLBACKS HELDD;
  424. DDHAL_DDSURFACECALLBACKS HELDDSurface;
  425. DDHAL_DDPALETTECALLBACKS HELDDPalette;
  426. DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks;
  427. DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf;
  428. DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf;
  429. /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */
  430. } DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS;
  431. /*****************************************************************************
  432. * parameter structures
  433. */
  434. typedef struct _DDHAL_DESTROYDRIVERDATA {
  435. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  436. HRESULT ddRVal;
  437. LPDDHAL_DESTROYDRIVER DestroyDriver;
  438. } DDHAL_DESTROYDRIVERDATA;
  439. typedef struct _DDHAL_SETMODEDATA {
  440. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  441. DWORD dwModeIndex;
  442. HRESULT ddRVal;
  443. LPDDHAL_SETMODE SetMode;
  444. BOOL inexcl;
  445. BOOL useRefreshRate;
  446. } DDHAL_SETMODEDATA;
  447. typedef struct _DDHAL_CREATESURFACEDATA {
  448. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  449. LPDDSURFACEDESC lpDDSurfaceDesc;
  450. LPDDRAWI_DDRAWSURFACE_LCL * lplpSList;
  451. DWORD dwSCnt;
  452. HRESULT ddRVal;
  453. LPDDHAL_CREATESURFACE CreateSurface;
  454. } DDHAL_CREATESURFACEDATA;
  455. typedef struct _DDHAL_CANCREATESURFACEDATA {
  456. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  457. LPDDSURFACEDESC lpDDSurfaceDesc;
  458. DWORD bIsDifferentPixelFormat;
  459. HRESULT ddRVal;
  460. LPDDHAL_CANCREATESURFACE CanCreateSurface;
  461. } DDHAL_CANCREATESURFACEDATA;
  462. typedef struct _DDHAL_CREATEPALETTEDATA {
  463. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  464. LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
  465. LPPALETTEENTRY lpColorTable;
  466. HRESULT ddRVal;
  467. LPDDHAL_CREATEPALETTE CreatePalette;
  468. BOOL is_excl;
  469. } DDHAL_CREATEPALETTEDATA;
  470. typedef struct _DDHAL_SETEXCLUSIVEMODEDATA {
  471. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  472. DWORD dwEnterExcl;
  473. DWORD dwReserved;
  474. HRESULT ddRVal;
  475. LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
  476. } DDHAL_SETEXCLUSIVEMODEDATA;
  477. /* surfaces */
  478. typedef struct _DDHAL_DESTROYSURFACEDATA {
  479. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  480. LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
  481. HRESULT ddRVal;
  482. LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
  483. } DDHAL_DESTROYSURFACEDATA;
  484. typedef struct _DDHAL_FLIPDATA {
  485. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  486. LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr;
  487. LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg;
  488. DWORD dwFlags;
  489. HRESULT ddRVal;
  490. LPDDHALSURFCB_FLIP Flip;
  491. LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft;
  492. LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft;
  493. } DDHAL_FLIPDATA;
  494. typedef struct _DDHAL_LOCKDATA {
  495. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  496. LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
  497. DWORD bHasRect;
  498. RECTL rArea;
  499. LPVOID lpSurfData;
  500. HRESULT ddRVal;
  501. LPDDHALSURFCB_LOCK Lock;
  502. DWORD dwFlags;
  503. } DDHAL_LOCKDATA;
  504. typedef struct _DDHAL_UNLOCKDATA {
  505. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  506. LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
  507. HRESULT ddRVal;
  508. LPDDHALSURFCB_UNLOCK Unlock;
  509. } DDHAL_UNLOCKDATA;
  510. typedef struct _DDHAL_BLTDATA {
  511. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  512. LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;
  513. RECTL rDest;
  514. LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;
  515. RECTL rSrc;
  516. DWORD dwFlags;
  517. DWORD dwROPFlags;
  518. DDBLTFX bltFX;
  519. HRESULT ddRVal;
  520. LPDDHALSURFCB_BLT Blt;
  521. BOOL IsClipped;
  522. RECTL rOrigDest;
  523. RECTL rOrigSrc;
  524. DWORD dwRectCnt;
  525. LPRECT prDestRects;
  526. } DDHAL_BLTDATA;
  527. typedef struct _DDHAL_UPDATEOVERLAYDATA {
  528. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  529. LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;
  530. RECTL rDest;
  531. LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;
  532. RECTL rSrc;
  533. DWORD dwFlags;
  534. DDOVERLAYFX overlayFX;
  535. HRESULT ddRVal;
  536. LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
  537. } DDHAL_UPDATEOVERLAYDATA;
  538. typedef struct _DDHAL_SETPALETTEDATA {
  539. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  540. LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
  541. LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
  542. HRESULT ddRVal;
  543. LPDDHALSURFCB_SETPALETTE SetPalette;
  544. BOOL Attach;
  545. } DDHAL_SETPALETTEDATA;
  546. /* palettes */
  547. typedef struct _DDHAL_DESTROYPALETTEDATA {
  548. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  549. LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
  550. HRESULT ddRVal;
  551. LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
  552. } DDHAL_DESTROYPALETTEDATA;
  553. typedef struct _DDHAL_SETENTRIESDATA {
  554. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  555. LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
  556. DWORD dwBase;
  557. DWORD dwNumEntries;
  558. LPPALETTEENTRY lpEntries;
  559. HRESULT ddRVal;
  560. LPDDHALPALCB_SETENTRIES SetEntries;
  561. } DDHAL_SETENTRIESDATA;
  562. typedef struct _DDHAL_GETDRIVERINFODATA {
  563. DWORD dwSize;
  564. DWORD dwFlags;
  565. GUID guidInfo;
  566. DWORD dwExpectedSize;
  567. LPVOID lpvData;
  568. DWORD dwActualSize;
  569. HRESULT ddRVal;
  570. ULONG_PTR dwContext;
  571. } DDHAL_GETDRIVERINFODATA;
  572. /*****************************************************************************
  573. * high-level ddraw implementation structures
  574. */
  575. typedef struct _IUNKNOWN_LIST {
  576. struct _IUNKNOWN_LIST * lpLink;
  577. LPGUID lpGuid;
  578. IUnknown * lpIUnknown;
  579. } IUNKNOWN_LIST,*LPIUNKNOWN_LIST;
  580. typedef struct _PROCESS_LIST {
  581. struct _PROCESS_LIST * lpLink;
  582. DWORD dwProcessId;
  583. DWORD dwRefCnt;
  584. DWORD dwAlphaDepth;
  585. DWORD dwZDepth;
  586. } PROCESS_LIST,*LPPROCESS_LIST;
  587. typedef struct _ATTACHLIST {
  588. DWORD dwFlags;
  589. struct _ATTACHLIST * lpLink;
  590. LPDDRAWI_DDRAWSURFACE_LCL lpAttached;
  591. LPDDRAWI_DDRAWSURFACE_INT lpIAttached;
  592. } ATTACHLIST,*LPATTACHLIST;
  593. #define DDAL_IMPLICIT 0x00000001
  594. typedef struct _ACCESSRECTLIST {
  595. struct _ACCESSRECTLIST * lpLink;
  596. RECT rDest;
  597. LPDDRAWI_DIRECTDRAW_LCL lpOwner;
  598. LPVOID lpSurfaceData;
  599. DWORD dwFlags;
  600. LPHEAPALIASINFO lpHeapAliasInfo;
  601. } ACCESSRECTLIST,*LPACCESSRECTLIST;
  602. #define ACCESSRECT_VRAMSTYLE 0x00000001
  603. #define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002
  604. #define ACCESSRECT_BROKEN 0x00000004
  605. typedef struct _DBLNODE {
  606. struct _DBLNODE * next;
  607. struct _DBLNODE * prev;
  608. LPDDRAWI_DDRAWSURFACE_LCL object;
  609. LPDDRAWI_DDRAWSURFACE_INT object_int;
  610. } DBLNODE,*LPDBLNODE;
  611. typedef struct _DDRAWI_DIRECTDRAW_INT {
  612. LPVOID lpVtbl;
  613. LPDDRAWI_DIRECTDRAW_LCL lpLcl;
  614. LPDDRAWI_DIRECTDRAW_INT lpLink;
  615. DWORD dwIntRefCnt;
  616. } DDRAWI_DIRECTDRAW_INT;
  617. typedef struct _DDRAWI_DIRECTDRAW_LCL {
  618. DWORD lpDDMore;
  619. LPDDRAWI_DIRECTDRAW_GBL lpGbl;
  620. DWORD dwUnused0;
  621. DWORD dwLocalFlags;
  622. DWORD dwLocalRefCnt;
  623. DWORD dwProcessId;
  624. IUnknown * pUnkOuter;
  625. DWORD dwObsolete1;
  626. ULONG_PTR hWnd;
  627. ULONG_PTR hDC;
  628. DWORD dwErrorMode;
  629. LPDDRAWI_DDRAWSURFACE_INT lpPrimary;
  630. LPDDRAWI_DDRAWSURFACE_INT lpCB;
  631. DWORD dwPreferredMode;
  632. /* DirectX 2 */
  633. HINSTANCE hD3DInstance;
  634. IUnknown * pD3DIUnknown;
  635. LPDDHAL_CALLBACKS lpDDCB;
  636. ULONG_PTR hDDVxd;
  637. /* DirectX 5.0 */
  638. DWORD dwAppHackFlags;
  639. /* DirectX 5.0A */
  640. ULONG_PTR hFocusWnd;
  641. DWORD dwHotTracking;
  642. DWORD dwIMEState;
  643. /* DirectX 6.0 */
  644. ULONG_PTR hWndPopup;
  645. ULONG_PTR hDD;
  646. ULONG_PTR hGammaCalibrator;
  647. LPDDGAMMACALIBRATORPROC lpGammaCalibrator;
  648. } DDRAWI_DIRECTDRAW_LCL;
  649. #define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001
  650. #define DDRAWILCL_ISFULLSCREEN 0x00000002
  651. #define DDRAWILCL_SETCOOPCALLED 0x00000004
  652. #define DDRAWILCL_ACTIVEYES 0x00000008
  653. #define DDRAWILCL_ACTIVENO 0x00000010
  654. #define DDRAWILCL_HOOKEDHWND 0x00000020
  655. #define DDRAWILCL_ALLOWMODEX 0x00000040
  656. #define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080
  657. #define DDRAWILCL_MODEHASBEENCHANGED 0x00000100
  658. #define DDRAWILCL_CREATEDWINDOW 0x00000200
  659. #define DDRAWILCL_DIRTYDC 0x00000400
  660. #define DDRAWILCL_DISABLEINACTIVATE 0x00000800
  661. #define DDRAWILCL_CURSORCLIPPED 0x00001000
  662. #define DDRAWILCL_EXPLICITMONITOR 0x00002000
  663. #define DDRAWILCL_MULTITHREADED 0x00004000
  664. #define DDRAWILCL_FPUSETUP 0x00008000
  665. #define DDRAWILCL_POWEREDDOWN 0x00010000
  666. #define DDRAWILCL_DIRECTDRAW7 0x00020000
  667. #define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000
  668. #define DDRAWILCL_FPUPRESERVE 0x00080000
  669. typedef struct _DDRAWI_DIRECTDRAW_GBL {
  670. DWORD dwRefCnt;
  671. DWORD dwFlags;
  672. FLATPTR fpPrimaryOrig;
  673. DDCORECAPS ddCaps;
  674. DWORD dwInternal1;
  675. DWORD dwUnused1[9];
  676. LPDDHAL_CALLBACKS lpDDCBtmp;
  677. LPDDRAWI_DDRAWSURFACE_INT dsList;
  678. LPDDRAWI_DDRAWPALETTE_INT palList;
  679. LPDDRAWI_DDRAWCLIPPER_INT clipperList;
  680. LPDDRAWI_DIRECTDRAW_GBL lp16DD;
  681. DWORD dwMaxOverlays;
  682. DWORD dwCurrOverlays;
  683. DWORD dwMonitorFrequency;
  684. DDCORECAPS ddHELCaps;
  685. DWORD dwUnused2[50];
  686. DDCOLORKEY ddckCKDestOverlay;
  687. DDCOLORKEY ddckCKSrcOverlay;
  688. VIDMEMINFO vmiData;
  689. LPVOID lpDriverHandle;
  690. LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner;
  691. DWORD dwModeIndex;
  692. DWORD dwModeIndexOrig;
  693. DWORD dwNumFourCC;
  694. LPDWORD lpdwFourCC;
  695. DWORD dwNumModes;
  696. LPDDHALMODEINFO lpModeInfo;
  697. PROCESS_LIST plProcessList;
  698. DWORD dwSurfaceLockCount;
  699. DWORD dwAliasedLockCnt;
  700. ULONG_PTR dwReserved3;
  701. ULONG_PTR hDD;
  702. char cObsolete[12];
  703. DWORD dwReserved1;
  704. DWORD dwReserved2;
  705. DBLNODE dbnOverlayRoot;
  706. volatile LPWORD lpwPDeviceFlags;
  707. DWORD dwPDevice;
  708. DWORD dwWin16LockCnt;
  709. DWORD dwUnused3;
  710. DWORD hInstance;
  711. DWORD dwEvent16;
  712. DWORD dwSaveNumModes;
  713. /* DirectX 2 */
  714. ULONG_PTR lpD3DGlobalDriverData;
  715. ULONG_PTR lpD3DHALCallbacks;
  716. DDCORECAPS ddBothCaps;
  717. /* DirectX 5.0 */
  718. LPDDVIDEOPORTCAPS lpDDVideoPortCaps;
  719. LPDDRAWI_DDVIDEOPORT_INT dvpList;
  720. ULONG_PTR lpD3DHALCallbacks2;
  721. RECT rectDevice;
  722. DWORD cMonitors;
  723. LPVOID gpbmiSrc;
  724. LPVOID gpbmiDest;
  725. LPHEAPALIASINFO phaiHeapAliases;
  726. ULONG_PTR hKernelHandle;
  727. ULONG_PTR pfnNotifyProc;
  728. LPDDKERNELCAPS lpDDKernelCaps;
  729. LPDDNONLOCALVIDMEMCAPS lpddNLVCaps;
  730. LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps;
  731. LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps;
  732. ULONG_PTR lpD3DExtendedCaps;
  733. /* DirectX 5.0A */
  734. DWORD dwDOSBoxEvent;
  735. RECT rectDesktop;
  736. char cDriverName[MAX_DRIVER_NAME];
  737. /* DirectX 6.0 */
  738. ULONG_PTR lpD3DHALCallbacks3;
  739. DWORD dwNumZPixelFormats;
  740. LPDDPIXELFORMAT lpZPixelFormats;
  741. LPDDRAWI_DDMOTIONCOMP_INT mcList;
  742. DWORD hDDVxd;
  743. DDSCAPSEX ddsCapsMore;
  744. } DDRAWI_DIRECTDRAW_GBL;
  745. #define DDRAWI_VIRTUALDESKTOP 0x00000008
  746. #define DDRAWI_MODEX 0x00000010
  747. #define DDRAWI_DISPLAYDRV 0x00000020
  748. #define DDRAWI_FULLSCREEN 0x00000040
  749. #define DDRAWI_MODECHANGED 0x00000080
  750. #define DDRAWI_NOHARDWARE 0x00000100
  751. #define DDRAWI_PALETTEINIT 0x00000200
  752. #define DDRAWI_NOEMULATION 0x00000400
  753. /* more... */
  754. /* surfaces */
  755. typedef struct _DDRAWI_DDRAWSURFACE_INT {
  756. LPVOID lpVtbl;
  757. LPDDRAWI_DDRAWSURFACE_LCL lpLcl;
  758. LPDDRAWI_DDRAWSURFACE_INT lpLink;
  759. DWORD dwIntRefCnt;
  760. } DDRAWI_DDRAWSURFACE_INT;
  761. typedef struct _DDRAWI_DDRAWSURFACE_GBL {
  762. DWORD dwRefCnt;
  763. DWORD dwGlobalFlags;
  764. union {
  765. LPACCESSRECTLIST lpRectList;
  766. DWORD dwBlockSizeY;
  767. } DUMMYUNIONNAME1;
  768. union {
  769. LPVMEMHEAP lpVidMemHeap;
  770. DWORD dwBlockSizeX;
  771. } DUMMYUNIONNAME2;
  772. union {
  773. LPDDRAWI_DIRECTDRAW_GBL lpDD;
  774. LPVOID lpDDHandle;
  775. } DUMMYUNIONNAME3;
  776. FLATPTR fpVidMem;
  777. union {
  778. LONG lPitch;
  779. DWORD dwLinearSize;
  780. } DUMMYUNIONNAME4;
  781. WORD wHeight;
  782. WORD wWidth;
  783. DWORD dwUsageCount;
  784. ULONG_PTR dwReserved1; /* for display driver use */
  785. /* optional (defaults to primary surface pixelformat) */
  786. DDPIXELFORMAT ddpfSurface;
  787. } DDRAWI_DDRAWSURFACE_GBL;
  788. #define DDRAWISURFGBL_MEMFREE 0x00000001
  789. #define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002
  790. #define DDRAWISURFGBL_ISGDISURFACE 0x00000004
  791. #define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008
  792. #define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010
  793. #define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020
  794. #define DDRAWISURFGBL_LOCKBROKEN 0x00000040
  795. #define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080
  796. #define DDRAWISURFGBL_ISCLIENTMEM 0x00000100
  797. #define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200
  798. #define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400
  799. #define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600
  800. #define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800
  801. #define DDRAWISURFGBL_VPORTDATA 0x00001000
  802. #define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000
  803. #define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000
  804. #define DDRAWISURFGBL_FASTLOCKHELD 0x00008000
  805. #define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000
  806. typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {
  807. DWORD dwSize;
  808. union {
  809. DWORD dwPhysicalPageTable;
  810. FLATPTR fpPhysicalVidMem;
  811. } DUMMYUNIONNAME1;
  812. LPDWORD pPageTable;
  813. DWORD cPages;
  814. ULONG_PTR dwSavedDCContext;
  815. FLATPTR fpAliasedVidMem;
  816. ULONG_PTR dwDriverReserved;
  817. ULONG_PTR dwHELReserved;
  818. DWORD cPageUnlocks;
  819. ULONG_PTR hKernelSurface;
  820. DWORD dwKernelRefCnt;
  821. LPDDCOLORCONTROL lpColorInfo;
  822. FLATPTR fpNTAlias;
  823. DWORD dwContentsStamp;
  824. LPVOID lpvUnswappedDriverReserved;
  825. LPVOID lpDDRAWReserved2;
  826. DWORD dwDDRAWReserved1;
  827. DWORD dwDDRAWReserved2;
  828. FLATPTR fpAliasOfVidMem;
  829. } DDRAWI_DDRAWSURFACE_GBL_MORE;
  830. /* the MS version of this macro was somewhat obfuscated and unreadable
  831. * (possibly because of mediocre MS coders)... so I simplified it...
  832. * (and so I commit no copyright violations either, hah) */
  833. #define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
  834. (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))
  835. typedef struct _DDRAWI_DDRAWSURFACE_MORE {
  836. DWORD dwSize;
  837. IUNKNOWN_LIST * lpIUnknowns;
  838. LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
  839. DWORD dwPageLockCount;
  840. DWORD dwBytesAllocated;
  841. LPDDRAWI_DIRECTDRAW_INT lpDD_int;
  842. DWORD dwMipMapCount;
  843. LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper;
  844. /* DirectX 5.0 */
  845. LPHEAPALIASINFO lpHeapAliasInfo;
  846. DWORD dwOverlayFlags;
  847. VOID *rgjunc;
  848. LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort;
  849. LPDDOVERLAYFX lpddOverlayFX;
  850. DDSCAPSEX ddsCapsEx;
  851. DWORD dwTextureStage;
  852. LPVOID lpDDRAWReserved;
  853. LPVOID lpDDRAWReserved2;
  854. LPVOID lpDDrawReserved3;
  855. DWORD dwDDrawReserved4;
  856. LPVOID lpDDrawReserved5;
  857. LPDWORD lpGammaRamp;
  858. LPDWORD lpOriginalGammaRamp;
  859. LPVOID lpDDrawReserved6;
  860. DWORD dwSurfaceHandle;
  861. DWORD qwDDrawReserved8[2];
  862. LPVOID lpDDrawReserved9;
  863. DWORD cSurfaces;
  864. LPDDSURFACEDESC2 pCreatedDDSurfaceDesc2;
  865. LPDDRAWI_DDRAWSURFACE_LCL *slist;
  866. DWORD dwFVF;
  867. LPVOID lpVB;
  868. } DDRAWI_DDRAWSURFACE_MORE;
  869. typedef struct _DDRAWI_DDRAWSURFACE_LCL {
  870. LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore;
  871. LPDDRAWI_DDRAWSURFACE_GBL lpGbl;
  872. ULONG_PTR hDDSurface;
  873. LPATTACHLIST lpAttachList;
  874. LPATTACHLIST lpAttachListFrom;
  875. DWORD dwLocalRefCnt;
  876. DWORD dwProcessId;
  877. DWORD dwFlags;
  878. DDSCAPS ddsCaps;
  879. LPDDRAWI_DDRAWPALETTE_INT lpDDPalette;
  880. LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper;
  881. DWORD dwModeCreatedIn;
  882. DWORD dwBackBufferCount;
  883. DDCOLORKEY ddckCKDestBlt;
  884. DDCOLORKEY ddckCKSrcBlt;
  885. ULONG_PTR hDC;
  886. ULONG_PTR dwReserved1; /* for display driver use */
  887. /* overlays only */
  888. DDCOLORKEY ddckCKSrcOverlay;
  889. DDCOLORKEY ddckCKDestOverlay;
  890. LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying;
  891. DBLNODE dbnOverlayNode;
  892. RECT rcOverlaySrc;
  893. RECT rcOverlayDest;
  894. DWORD dwClrXparent;
  895. DWORD dwAlpha;
  896. LONG lOverlayX;
  897. LONG lOverlayY;
  898. } DDRAWI_DDRAWSURFACE_LCL;
  899. #define DDRAWISURF_ATTACHED 0x00000001
  900. #define DDRAWISURF_IMPLICITCREATE 0x00000002
  901. #define DDRAWISURF_ISFREE 0x00000004
  902. #define DDRAWISURF_ATTACHED_FROM 0x00000008
  903. #define DDRAWISURF_IMPLICITROOT 0x00000010
  904. #define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020
  905. #define DDRAWISURF_DATAISALIASED 0x00000040
  906. #define DDRAWISURF_HASDC 0x00000080
  907. #define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100
  908. #define DDRAWISURF_HASCKEYDESTBLT 0x00000200
  909. #define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400
  910. #define DDRAWISURF_HASCKEYSRCBLT 0x00000800
  911. #define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000
  912. #define DDRAWISURF_HASPIXELFORMAT 0x00002000
  913. #define DDRAWISURF_HASOVERLAYDATA 0x00004000
  914. #define DDRAWISURF_SETGAMMA 0x00008000
  915. /* more... */
  916. #define DDRAWISURF_INVALID 0x10000000
  917. /* palettes */
  918. typedef struct _DDRAWI_DDRAWPALETTE_INT {
  919. LPVOID lpVtbl;
  920. LPDDRAWI_DDRAWPALETTE_LCL lpLcl;
  921. LPDDRAWI_DDRAWPALETTE_INT lpLink;
  922. DWORD dwIntRefCnt;
  923. } DDRAWI_DDRAWPALETTE_INT;
  924. typedef struct _DDRAWI_DDRAWPALETTE_GBL {
  925. DWORD dwRefCnt;
  926. DWORD dwFlags;
  927. LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
  928. DWORD dwProcessId;
  929. LPPALETTEENTRY lpColorTable;
  930. union {
  931. ULONG_PTR dwReserved1; /* for display driver use */
  932. HPALETTE hHELGDIPalette;
  933. } DUMMYUNIONNAME1;
  934. /* DirectX 5.0 */
  935. DWORD dwDriverReserved;
  936. DWORD dwContentsStamp;
  937. /* DirectX 6.0 */
  938. DWORD dwSaveStamp;
  939. /* DirectX 7.0 */
  940. DWORD dwHandle;
  941. } DDRAWI_DDRAWPALETTE_GBL;
  942. #define DDRAWIPAL_256 0x00000001
  943. #define DDRAWIPAL_16 0x00000002
  944. #define DDRAWIPAL_GDI 0x00000004
  945. #define DDRAWIPAL_STORED_8 0x00000008
  946. #define DDRAWIPAL_STORED_16 0x00000010
  947. #define DDRAWIPAL_STORED_24 0x00000020
  948. #define DDRAWIPAL_EXCLUSIVE 0x00000040
  949. #define DDRAWIPAL_INHEL 0x00000080
  950. #define DDRAWIPAL_DIRTY 0x00000100
  951. #define DDRAWIPAL_ALLOW256 0x00000200
  952. #define DDRAWIPAL_4 0x00000400
  953. #define DDRAWIPAL_2 0x00000800
  954. #define DDRAWIPAL_STORED_8INDEX 0x00001000
  955. #define DDRAWIPAL_ALPHA 0x00002000
  956. typedef struct _DDRAWI_DDRAWPALETTE_LCL {
  957. DWORD lpPalMore;
  958. LPDDRAWI_DDRAWPALETTE_GBL lpGbl;
  959. ULONG_PTR dwUnused0;
  960. DWORD dwLocalRefCnt;
  961. IUnknown * pUnkOuter;
  962. LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
  963. ULONG_PTR dwReserved1;
  964. /* DirectX 6.0 */
  965. ULONG_PTR dwDDRAWReserved1;
  966. ULONG_PTR dwDDRAWReserved2;
  967. ULONG_PTR dwDDRAWReserved3;
  968. } DDRAWI_DDRAWPALETTE_LCL;
  969. #ifdef __cplusplus
  970. } /* extern "C" */
  971. #endif
  972. #endif /* __DDRAWI_INCLUDED__ */