ddrawi.h 35 KB

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