summaryrefslogtreecommitdiffstats
path: root/public/oak/inc/ddrawint.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/oak/inc/ddrawint.h741
1 files changed, 741 insertions, 0 deletions
diff --git a/public/oak/inc/ddrawint.h b/public/oak/inc/ddrawint.h
new file mode 100644
index 000000000..a779d51fa
--- /dev/null
+++ b/public/oak/inc/ddrawint.h
@@ -0,0 +1,741 @@
+/*++
+
+Copyright (c) 1995-1996, Microsoft Corporation
+
+Module Name:
+
+ ddrawint.h
+
+Abstract:
+
+ Private entry points, defines and types for Windows NT DirectDraw
+ driver interface. Corresponds to Windows' 'ddrawi.h' file.
+
+--*/
+
+#ifndef __DD_INCLUDED__
+#define __DD_INCLUDED__
+
+#define _NO_COM
+#include "ddraw.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAKE_HRESULT(sev,fac,code) \
+ ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
+
+/*
+ * offset into video meory
+ */
+typedef unsigned long FLATPTR;
+
+/*
+ * pre-declare pointers to structs containing data for DDHAL driver fns
+ */
+typedef struct _DD_CREATEPALETTEDATA *PDD_CREATEPALETTEDATA;
+typedef struct _DD_CREATESURFACEDATA *PDD_CREATESURFACEDATA;
+typedef struct _DD_CANCREATESURFACEDATA *PDD_CANCREATESURFACEDATA;
+typedef struct _DD_WAITFORVERTICALBLANKDATA *PDD_WAITFORVERTICALBLANKDATA;
+typedef struct _DD_DESTROYDRIVERDATA *PDD_DESTROYDRIVERDATA;
+typedef struct _DD_SETMODEDATA *PDD_SETMODEDATA;
+typedef struct _DD_DRVSETCOLORKEYDATA *PDD_DRVSETCOLORKEYDATA;
+typedef struct _DD_GETSCANLINEDATA *PDD_GETSCANLINEDATA;
+typedef struct _DD_MAPMEMORYDATA *PDD_MAPMEMORYDATA;
+typedef struct _DD_DESTROYPALETTEDATA *PDD_DESTROYPALETTEDATA;
+typedef struct _DD_SETENTRIESDATA *PDD_SETENTRIESDATA;
+typedef struct _DD_BLTDATA *PDD_BLTDATA;
+typedef struct _DD_LOCKDATA *PDD_LOCKDATA;
+typedef struct _DD_UNLOCKDATA *PDD_UNLOCKDATA;
+typedef struct _DD_UPDATEOVERLAYDATA *PDD_UPDATEOVERLAYDATA;
+typedef struct _DD_SETOVERLAYPOSITIONDATA *PDD_SETOVERLAYPOSITIONDATA;
+typedef struct _DD_SETPALETTEDATA *PDD_SETPALETTEDATA;
+typedef struct _DD_FLIPDATA *PDD_FLIPDATA;
+typedef struct _DD_DESTROYSURFACEDATA *PDD_DESTROYSURFACEDATA;
+typedef struct _DD_SETCLIPLISTDATA *PDD_SETCLIPLISTDATA;
+typedef struct _DD_ADDATTACHEDSURFACEDATA *PDD_ADDATTACHEDSURFACEDATA;
+typedef struct _DD_SETCOLORKEYDATA *PDD_SETCOLORKEYDATA;
+typedef struct _DD_GETBLTSTATUSDATA *PDD_GETBLTSTATUSDATA;
+typedef struct _DD_GETFLIPSTATUSDATA *PDD_GETFLIPSTATUSDATA;
+
+/*
+ * value in the fpVidMem; indicates dwBlockSize is valid (surface object)
+ */
+#define DDHAL_PLEASEALLOC_BLOCKSIZE 0x00000002l
+#define DDHAL_PLEASEALLOC_USERMEM 0x00000004l
+
+/*
+ * video memory data structures (passed in DD_HALINFO)
+ */
+typedef struct _VIDEOMEMORY
+{
+ DWORD dwFlags; // flags
+ FLATPTR fpStart; // start of memory chunk
+ union
+ {
+ FLATPTR fpEnd; // end of memory chunk
+ DWORD dwWidth; // width of chunk (rectanglar memory)
+ };
+ DDSCAPS ddsCaps; // what this memory CANNOT be used for
+ DDSCAPS ddsCapsAlt; // what this memory CANNOT be used for if it must
+ DWORD dwHeight; // height of chunk (rectanguler memory)
+} VIDEOMEMORY;
+typedef VIDEOMEMORY *LPVIDEOMEMORY;
+
+/*
+ * flags for vidmem struct
+ */
+#define VIDMEM_ISLINEAR 0x00000001l
+#define VIDMEM_ISRECTANGULAR 0x00000002l
+#define VIDMEM_ISHEAP 0x00000004l
+
+typedef struct _VIDEOMEMORYINFO
+{
+ FLATPTR fpPrimary; // offset to primary surface
+ DWORD dwFlags; // flags
+ DWORD dwDisplayWidth; // current display width
+ DWORD dwDisplayHeight; // current display height
+ LONG lDisplayPitch; // current display pitch
+ DDPIXELFORMAT ddpfDisplay; // pixel format of display
+ DWORD dwOffscreenAlign; // byte alignment for offscreen surfaces
+ DWORD dwOverlayAlign; // byte alignment for overlays
+ DWORD dwTextureAlign; // byte alignment for textures
+ DWORD dwZBufferAlign; // byte alignment for z buffers
+ DWORD dwAlphaAlign; // byte alignment for alpha
+ PVOID pvPrimary; // kernel-mode pointer to primary surface
+} VIDEOMEMORYINFO;
+typedef VIDEOMEMORYINFO *LPVIDEOMEMORYINFO;
+
+/*
+ * These structures contain the entry points in the display driver that
+ * DDRAW will call. Entries that the display driver does not care about
+ * should be NULL. Passed to DDRAW in DD_HALINFO.
+ */
+typedef struct _DD_DIRECTDRAW_GLOBAL *PDD_DIRECTDRAW_GLOBAL;
+typedef struct _DD_SURFACE_GLOBAL *PDD_SURFACE_GLOBAL;
+typedef struct _DD_PALETTE_GLOBAL *PDD_PALETTE_GLOBAL;
+typedef struct _DD_CLIPPER_GLOBAL *PDD_CLIPPER_GLOBAL;
+typedef struct _DD_DIRECTDRAW_LOCAL *PDD_DIRECTDRAW_LOCAL;
+typedef struct _DD_SURFACE_LOCAL *PDD_SURFACE_LOCAL;
+typedef struct _DD_PALETTE_LOCAL *PDD_PALETTE_LOCAL;
+typedef struct _DD_CLIPPER_LOCAL *PDD_CLIPPER_LOCAL;
+
+/*
+ * DIRECTDRAW object callbacks
+ */
+typedef DWORD (APIENTRY *PDD_SETCOLORKEY)(PDD_DRVSETCOLORKEYDATA );
+typedef DWORD (APIENTRY *PDD_CANCREATESURFACE)(PDD_CANCREATESURFACEDATA );
+typedef DWORD (APIENTRY *PDD_WAITFORVERTICALBLANK)(PDD_WAITFORVERTICALBLANKDATA );
+typedef DWORD (APIENTRY *PDD_CREATESURFACE)(PDD_CREATESURFACEDATA);
+typedef DWORD (APIENTRY *PDD_DESTROYDRIVER)(PDD_DESTROYDRIVERDATA);
+typedef DWORD (APIENTRY *PDD_SETMODE)(PDD_SETMODEDATA);
+typedef DWORD (APIENTRY *PDD_CREATEPALETTE)(PDD_CREATEPALETTEDATA);
+typedef DWORD (APIENTRY *PDD_GETSCANLINE)(PDD_GETSCANLINEDATA);
+typedef DWORD (APIENTRY *PDD_MAPMEMORY)(PDD_MAPMEMORYDATA);
+
+typedef struct DD_CALLBACKS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ PDD_DESTROYDRIVER DestroyDriver;
+ PDD_CREATESURFACE CreateSurface;
+ PDD_SETCOLORKEY SetColorKey;
+ PDD_SETMODE SetMode;
+ PDD_WAITFORVERTICALBLANK WaitForVerticalBlank;
+ PDD_CANCREATESURFACE CanCreateSurface;
+ PDD_CREATEPALETTE CreatePalette;
+ PDD_GETSCANLINE GetScanLine;
+ PDD_MAPMEMORY MapMemory;
+} DD_CALLBACKS;
+
+typedef DD_CALLBACKS *PDD_CALLBACKS;
+
+#define DDHAL_CB32_DESTROYDRIVER 0x00000001l
+#define DDHAL_CB32_CREATESURFACE 0x00000002l
+#define DDHAL_CB32_SETCOLORKEY 0x00000004l
+#define DDHAL_CB32_SETMODE 0x00000008l
+#define DDHAL_CB32_WAITFORVERTICALBLANK 0x00000010l
+#define DDHAL_CB32_CANCREATESURFACE 0x00000020l
+#define DDHAL_CB32_CREATEPALETTE 0x00000040l
+#define DDHAL_CB32_GETSCANLINE 0x00000080l
+#define DDHAL_CB32_MAPMEMORY 0x80000000l
+
+/*
+ * DIRECTDRAWPALETTE object callbacks
+ */
+typedef DWORD (APIENTRY *PDD_PALCB_DESTROYPALETTE)(PDD_DESTROYPALETTEDATA );
+typedef DWORD (APIENTRY *PDD_PALCB_SETENTRIES)(PDD_SETENTRIESDATA );
+
+typedef struct DD_PALETTECALLBACKS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ PDD_PALCB_DESTROYPALETTE DestroyPalette;
+ PDD_PALCB_SETENTRIES SetEntries;
+} DD_PALETTECALLBACKS;
+
+typedef DD_PALETTECALLBACKS *PDD_PALETTECALLBACKS;
+
+#define DDHAL_PALCB32_DESTROYPALETTE 0x00000001l
+#define DDHAL_PALCB32_SETENTRIES 0x00000002l
+
+/*
+ * DIRECTDRAWSURFACE object callbacks
+ */
+typedef DWORD (APIENTRY *PDD_SURFCB_LOCK)(PDD_LOCKDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_UNLOCK)(PDD_UNLOCKDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_BLT)(PDD_BLTDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_UPDATEOVERLAY)(PDD_UPDATEOVERLAYDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_SETOVERLAYPOSITION)(PDD_SETOVERLAYPOSITIONDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_SETPALETTE)(PDD_SETPALETTEDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_FLIP)(PDD_FLIPDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_DESTROYSURFACE)(PDD_DESTROYSURFACEDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_SETCLIPLIST)(PDD_SETCLIPLISTDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_ADDATTACHEDSURFACE)(PDD_ADDATTACHEDSURFACEDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_SETCOLORKEY)(PDD_SETCOLORKEYDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_GETBLTSTATUS)(PDD_GETBLTSTATUSDATA);
+typedef DWORD (APIENTRY *PDD_SURFCB_GETFLIPSTATUS)(PDD_GETFLIPSTATUSDATA);
+
+
+typedef struct DD_SURFACECALLBACKS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ PDD_SURFCB_DESTROYSURFACE DestroySurface;
+ PDD_SURFCB_FLIP Flip;
+ PDD_SURFCB_SETCLIPLIST SetClipList;
+ PDD_SURFCB_LOCK Lock;
+ PDD_SURFCB_UNLOCK Unlock;
+ PDD_SURFCB_BLT Blt;
+ PDD_SURFCB_SETCOLORKEY SetColorKey;
+ PDD_SURFCB_ADDATTACHEDSURFACE AddAttachedSurface;
+ PDD_SURFCB_GETBLTSTATUS GetBltStatus;
+ PDD_SURFCB_GETFLIPSTATUS GetFlipStatus;
+ PDD_SURFCB_UPDATEOVERLAY UpdateOverlay;
+ PDD_SURFCB_SETOVERLAYPOSITION SetOverlayPosition;
+ LPVOID reserved4;
+ PDD_SURFCB_SETPALETTE SetPalette;
+} DD_SURFACECALLBACKS;
+typedef DD_SURFACECALLBACKS *PDD_SURFACECALLBACKS;
+
+#define DDHAL_SURFCB32_DESTROYSURFACE 0x00000001l
+#define DDHAL_SURFCB32_FLIP 0x00000002l
+#define DDHAL_SURFCB32_SETCLIPLIST 0x00000004l
+#define DDHAL_SURFCB32_LOCK 0x00000008l
+#define DDHAL_SURFCB32_UNLOCK 0x00000010l
+#define DDHAL_SURFCB32_BLT 0x00000020l
+#define DDHAL_SURFCB32_SETCOLORKEY 0x00000040l
+#define DDHAL_SURFCB32_ADDATTACHEDSURFACE 0x00000080l
+#define DDHAL_SURFCB32_GETBLTSTATUS 0x00000100l
+#define DDHAL_SURFCB32_GETFLIPSTATUS 0x00000200l
+#define DDHAL_SURFCB32_UPDATEOVERLAY 0x00000400l
+#define DDHAL_SURFCB32_SETOVERLAYPOSITION 0x00000800l
+#define DDHAL_SURFCB32_RESERVED4 0x00001000l
+#define DDHAL_SURFCB32_SETPALETTE 0x00002000l
+
+/*
+ * CALLBACK RETURN VALUES
+ *
+ * these are values returned by the driver from the above callback routines
+ */
+/*
+ * indicates that the display driver didn't do anything with the call
+ */
+#define DDHAL_DRIVER_NOTHANDLED 0x00000000l
+
+/*
+ * indicates that the display driver handled the call; HRESULT value is valid
+ */
+#define DDHAL_DRIVER_HANDLED 0x00000001l
+
+/*
+ * indicates that the display driver couldn't handle the call because it
+ * ran out of color key hardware resources
+ */
+#define DDHAL_DRIVER_NOCKEYHW 0x00000002l
+
+/*
+ * DDRAW internal version of DIRECTDRAWPALETTE object; it has data after the vtable
+ */
+typedef struct _DD_PALETTE_GLOBAL
+{
+ DWORD dwReserved1; // reserved for use by display driver
+} DD_PALETTE_GLOBAL;
+
+typedef struct _DD_PALETTE_LOCAL
+{
+ DWORD dwReserved0; // reserved for future expansion
+ DWORD dwReserved1; // reserved for use by display driver
+} DD_PALETTE_LOCAL;
+
+#define DDRAWIPAL_256 0x00000001l // 256 entry palette
+#define DDRAWIPAL_16 0x00000002l // 16 entry palette
+#define DDRAWIPAL_GDI 0x00000004l // palette allocated through GDI
+#define DDRAWIPAL_STORED_8 0x00000008l // palette stored as 8bpp/entry
+#define DDRAWIPAL_STORED_16 0x00000010l // palette stored as 16bpp/entry
+#define DDRAWIPAL_STORED_24 0x00000020l // palette stored as 24bpp/entry
+#define DDRAWIPAL_EXCLUSIVE 0x00000040l // palette being used in exclusive mode
+#define DDRAWIPAL_INHEL 0x00000080l // palette is done in the hel
+#define DDRAWIPAL_DIRTY 0x00000100l // gdi palette out 'o sync
+#define DDRAWIPAL_ALLOW256 0x00000200l // can fully update palette
+#define DDRAWIPAL_4 0x00000400l // 4 entry palette
+#define DDRAWIPAL_2 0x00000800l // 2 entry palette
+#define DDRAWIPAL_STORED_8INDEX 0x00001000l // palatte stored as 8-bit index into dst palette
+
+/*
+ * DDRAW internal version of DIRECTDRAWCLIPPER object; it has data after the vtable
+ */
+typedef struct _DD_CLIPPER_GLOBAL
+{
+ DWORD dwReserved1; // reserved for use by display driver
+} DD_CLIPPER_GLOBAL;
+
+typedef struct _DD_CLIPPER_LOCAL
+{
+ DWORD dwReserved1; // reserved for use by display driver
+} DD_CLIPPER_LOCAL;
+
+/*
+ * DDRAW internal version of DIRECTDRAWSURFACE struct
+ *
+ * the GBL structure is global data for all duplicate objects
+ */
+typedef struct _DD_SURFACE_GLOBAL
+{
+ DWORD dwBlockSizeY; // block size that display driver requested (return)
+ union {
+ DWORD dwBlockSizeX; // block size that display driver requested (return)
+ DWORD dwUserMemSize; // user-mode memory size that display driver requested (return)
+ };
+ FLATPTR fpVidMem; // pointer to video memory
+ LONG lPitch; // pitch of surface
+ LONG yHint; // y-coordinate of surface
+ LONG xHint; // x-coordinate of surface
+ DWORD wHeight; // height of surface
+ DWORD wWidth; // width of surface
+ DWORD dwReserved1; // reserved for use by display driver
+ DDPIXELFORMAT ddpfSurface; // pixel format of surface
+} DD_SURFACE_GLOBAL;
+
+/*
+ * the LCL structure is local data for each individual surface object
+ */
+struct _DD_SURFACE_LOCAL
+{
+ PDD_SURFACE_GLOBAL lpGbl; // pointer to surface shared data
+ DWORD dwFlags; // flags
+ DDSCAPS ddsCaps; // capabilities of surface
+ DWORD dwReserved1; // reserved for use by display driver
+ DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use
+ DDCOLORKEY ddckCKDestOverlay;// color key for destination overlay use
+};
+typedef struct _DD_SURFACE_LOCAL DD_SURFACE_LOCAL;
+
+#define DDRAWISURFGBL_MEMFREE 0x00000001L // video memory has been freed
+#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002L // surface is in system memory at request of user
+#define DDRAWISURFGBL_ISGDISURFACE 0x00000004L // This surface represents what GDI thinks is front buffer
+/*
+ * NOTE: This flag was previously DDRAWISURFGBL_INVALID. This flags has been retired
+ * and replaced by DDRAWISURF_INVALID in the local object.
+ */
+#define DDRAWISURFGBL_RESERVED0 0x80000000L // Reserved flag
+
+#define DDRAWISURF_ATTACHED 0x00000001L // surface is attached to another
+#define DDRAWISURF_IMPLICITCREATE 0x00000002L // surface implicitly created
+#define DDRAWISURF_ISFREE 0x00000004L // surface already freed (temp flag)
+#define DDRAWISURF_ATTACHED_FROM 0x00000008L // surface has others attached to it
+#define DDRAWISURF_IMPLICITROOT 0x00000010L // surface root of implicit creation
+#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020L // surface is part of primary chain
+#define DDRAWISURF_DATAISALIASED 0x00000040L // used for thunking
+#define DDRAWISURF_HASDC 0x00000080L // has a DC
+#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100L // surface has CKDestOverlay
+#define DDRAWISURF_HASCKEYDESTBLT 0x00000200L // surface has CKDestBlt
+#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400L // surface has CKSrcOverlay
+#define DDRAWISURF_HASCKEYSRCBLT 0x00000800L // surface has CKSrcBlt
+#define DDRAWISURF_xxxxxxxxxxx4 0x00001000L // spare bit
+#define DDRAWISURF_HASPIXELFORMAT 0x00002000L // surface structure has pixel format data
+#define DDRAWISURF_HASOVERLAYDATA 0x00004000L // surface structure has overlay data
+#define DDRAWISURF_xxxxxxxxxxx5 0x00008000L // spare bit
+#define DDRAWISURF_SW_CKEYDESTOVERLAY 0x00010000L // surface expects to process colorkey in software
+#define DDRAWISURF_SW_CKEYDESTBLT 0x00020000L // surface expects to process colorkey in software
+#define DDRAWISURF_SW_CKEYSRCOVERLAY 0x00040000L // surface expects to process colorkey in software
+#define DDRAWISURF_SW_CKEYSRCBLT 0x00080000L // surface expects to process colorkey in software
+#define DDRAWISURF_HW_CKEYDESTOVERLAY 0x00100000L // surface expects to process colorkey in hardware
+#define DDRAWISURF_HW_CKEYDESTBLT 0x00200000L // surface expects to process colorkey in hardware
+#define DDRAWISURF_HW_CKEYSRCOVERLAY 0x00400000L // surface expects to process colorkey in hardware
+#define DDRAWISURF_HW_CKEYSRCBLT 0x00800000L // surface expects to process colorkey in hardware
+#define DDRAWISURF_xxxxxxxxxxx6 0x01000000L // spare bit
+#define DDRAWISURF_HELCB 0x02000000L // surfac is the ddhel cb. must call hel for lock/blt.
+#define DDRAWISURF_FRONTBUFFER 0x04000000L // surface was originally a front buffer
+#define DDRAWISURF_BACKBUFFER 0x08000000L // surface was originally backbuffer
+#define DDRAWISURF_INVALID 0x10000000L // surface has been invalidated by mode set
+#define DDRAWISURF_CANTLOCK 0x20000000L // surface cannot be locked (primary created by HEL)
+
+/*
+ * rop stuff
+ */
+#define ROP_HAS_SOURCE 0x00000001l
+#define ROP_HAS_PATTERN 0x00000002l
+#define ROP_HAS_SOURCEPATTERN ROP_HAS_SOURCE | ROP_HAS_PATTERN
+
+/*
+ * structure for display driver to call DDHAL_Create with
+ */
+typedef struct _DD_HALINFO
+{
+ DWORD dwSize;
+ VIDEOMEMORYINFO vmiData; // video memory info
+ DDCAPS ddCaps; // hw specific caps
+ DWORD dwMonitorFrequency; // monitor frequency in current mode
+ DWORD dwFlags; // create flags
+} DD_HALINFO;
+typedef DD_HALINFO *PDD_HALINFO;
+
+/*
+ * DDRAW version of DirectDraw object;
+ *
+ */
+typedef struct _DD_DIRECTDRAW_GLOBAL
+{
+ VOID* dhpdev; // driver's private PDEV pointer
+ DWORD dwReserved1; // reserved for use by display driver
+ DWORD dwReserved2; // reserved for use by display driver
+} DD_DIRECTDRAW_GLOBAL;
+
+typedef struct _DD_DIRECTDRAW_LOCAL
+{
+ PDD_DIRECTDRAW_GLOBAL lpGbl; // pointer to data
+ FLATPTR fpProcess; // address of frame buffer in calling process' address space
+} DD_DIRECTDRAW_LOCAL;
+
+
+/////////////////////////////////////////////////////////////////////////////
+// NT Note:
+//
+// The following structures must match, field for field, the corresponding
+// structures as declared in 'ddrawi.h.' We cannot simply use the same
+// structures because the sub-structures such as DD_DIRECTDRAW_GLOBAL are
+// different, and have to be properly typed for the drivers.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+/****************************************************************************
+ *
+ * DDHAL structures for Surface Object callbacks
+ *
+ ***************************************************************************/
+
+/*
+ * structure for passing information to DDHAL Blt fn
+ */
+typedef struct _DD_BLTDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDDestSurface;// dest surface
+ RECTL rDest; // dest rect
+ PDD_SURFACE_LOCAL lpDDSrcSurface; // src surface
+ RECTL rSrc; // src rect
+ DWORD dwFlags; // blt flags
+ DWORD dwROPFlags; // ROP flags (valid for ROPS only)
+ DDBLTFX bltFX; // blt FX
+ HRESULT ddRVal; // return value
+ VOID* Blt; // Unused: Win95 compatibility
+ BOOL IsClipped; // clipped blt?
+ RECTL rOrigDest; // unclipped dest rect
+ // (only valid if IsClipped)
+ RECTL rOrigSrc; // unclipped src rect
+ // (only valid if IsClipped)
+ DWORD dwRectCnt; // count of dest rects
+ // (only valid if IsClipped)
+ LPRECT prDestRects; // array of dest rects
+ // (only valid if IsClipped)
+} DD_BLTDATA;
+
+/*
+ * structure for passing information to DDHAL Lock fn
+ */
+typedef struct _DD_LOCKDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ DWORD bHasRect; // rArea is valid
+ RECTL rArea; // area being locked
+ LPVOID lpSurfData; // pointer to screen memory (return value)
+ HRESULT ddRVal; // return value
+ VOID* Lock; // Unused: Win95 compatibility
+ DWORD dwFlags; // DDLOCK flags
+} DD_LOCKDATA;
+
+/*
+ * structure for passing information to DDHAL Unlock fn
+ */
+typedef struct _DD_UNLOCKDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ HRESULT ddRVal; // return value
+ VOID* Unlock; // Unused: Win95 compatibility
+} DD_UNLOCKDATA;
+
+/*
+ * structure for passing information to DDHAL UpdateOverlay fn
+ */
+typedef struct _DD_UPDATEOVERLAYDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDDestSurface;// dest surface
+ RECTL rDest; // dest rect
+ PDD_SURFACE_LOCAL lpDDSrcSurface; // src surface
+ RECTL rSrc; // src rect
+ DWORD dwFlags; // flags
+ DDOVERLAYFX overlayFX; // overlay FX
+ HRESULT ddRVal; // return value
+ VOID* UpdateOverlay; // Unused: Win95 compatibility
+} DD_UPDATEOVERLAYDATA;
+
+/*
+ * structure for passing information to DDHAL UpdateOverlay fn
+ */
+typedef struct _DD_SETOVERLAYPOSITIONDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSrcSurface; // src surface
+ PDD_SURFACE_LOCAL lpDDDestSurface;// dest surface
+ LONG lXPos; // x position
+ LONG lYPos; // y position
+ HRESULT ddRVal; // return value
+ VOID* SetOverlayPosition; // Unused: Win95 compatibility
+} DD_SETOVERLAYPOSITIONDATA;
+/*
+ * structure for passing information to DDHAL SetPalette fn
+ */
+typedef struct _DD_SETPALETTEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ PDD_PALETTE_GLOBAL lpDDPalette; // palette to set to surface
+ HRESULT ddRVal; // return value
+ VOID* SetPalette; // Unused: Win95 compatibility
+ BOOL Attach; // attach this palette?
+} DD_SETPALETTEDATA;
+
+/*
+ * structure for passing information to DDHAL Flip fn
+ */
+typedef struct _DD_FLIPDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpSurfCurr; // current surface
+ PDD_SURFACE_LOCAL lpSurfTarg; // target surface (to flip to)
+ DWORD dwFlags; // flags
+ HRESULT ddRVal; // return value
+ VOID* Flip; // Unused: Win95 compatibility
+} DD_FLIPDATA;
+
+/*
+ * structure for passing information to DDHAL DestroySurface fn
+ */
+typedef struct _DD_DESTROYSURFACEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ HRESULT ddRVal; // return value
+ VOID* DestroySurface;// Unused: Win95 compatibility
+} DD_DESTROYSURFACEDATA;
+
+/*
+ * structure for passing information to DDHAL SetClipList fn
+ */
+typedef struct _DD_SETCLIPLISTDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ HRESULT ddRVal; // return value
+ VOID* SetClipList; // Unused: Win95 compatibility
+} DD_SETCLIPLISTDATA;
+
+/*
+ * structure for passing information to DDHAL AddAttachedSurface fn
+ */
+typedef struct _DD_ADDATTACHEDSURFACEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ PDD_SURFACE_LOCAL lpSurfAttached; // surface to attach
+ HRESULT ddRVal; // return value
+ VOID* AddAttachedSurface; // Unused: Win95 compatibility
+} DD_ADDATTACHEDSURFACEDATA;
+
+/*
+ * structure for passing information to DDHAL SetColorKey fn
+ */
+typedef struct _DD_SETCOLORKEYDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ DWORD dwFlags; // flags
+ DDCOLORKEY ckNew; // new color key
+ HRESULT ddRVal; // return value
+ VOID* SetColorKey; // Unused: Win95 compatibility
+} DD_SETCOLORKEYDATA;
+
+/*
+ * structure for passing information to DDHAL GetBltStatus fn
+ */
+typedef struct _DD_GETBLTSTATUSDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ DWORD dwFlags; // flags
+ HRESULT ddRVal; // return value
+ VOID* GetBltStatus; // Unused: Win95 compatibility
+} DD_GETBLTSTATUSDATA;
+
+/*
+ * structure for passing information to DDHAL GetFlipStatus fn
+ */
+typedef struct _DD_GETFLIPSTATUSDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ DWORD dwFlags; // flags
+ HRESULT ddRVal; // return value
+ VOID* GetFlipStatus; // Unused: Win95 compatibility
+} DD_GETFLIPSTATUSDATA;
+
+/****************************************************************************
+ *
+ * DDHAL structures for Palette Object callbacks
+ *
+ ***************************************************************************/
+
+/*
+ * structure for passing information to DDHAL DestroyPalette fn
+ */
+typedef struct _DD_DESTROYPALETTEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_PALETTE_GLOBAL lpDDPalette; // palette struct
+ HRESULT ddRVal; // return value
+ VOID* DestroyPalette; // Unused: Win95 compatibility
+} DD_DESTROYPALETTEDATA;
+
+/*
+ * structure for passing information to DDHAL SetEntries fn
+ */
+typedef struct _DD_SETENTRIESDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_PALETTE_GLOBAL lpDDPalette; // palette struct
+ DWORD dwBase; // base palette index
+ DWORD dwNumEntries; // number of palette entries
+ LPPALETTEENTRY lpEntries; // color table
+ HRESULT ddRVal; // return value
+ VOID* SetEntries; // Unused: Win95 compatibility
+} DD_SETENTRIESDATA;
+
+/****************************************************************************
+ *
+ * DDHAL structures for Driver Object callbacks
+ *
+ ***************************************************************************/
+
+typedef DDSURFACEDESC* PDD_SURFACEDESC;
+
+/*
+ * structure for passing information to DDHAL CreateSurface fn
+ */
+typedef struct _DD_CREATESURFACEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACEDESC lpDDSurfaceDesc;// description of surface being created
+ PDD_SURFACE_LOCAL *lplpSList; // list of created surface objects
+ DWORD dwSCnt; // number of surfaces in SList
+ HRESULT ddRVal; // return value
+ VOID* CreateSurface; // Unused: Win95 compatibility
+} DD_CREATESURFACEDATA;
+
+/*
+ * structure for passing information to DDHAL CanCreateSurface fn
+ */
+typedef struct _DD_CANCREATESURFACEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_SURFACEDESC lpDDSurfaceDesc; // description of surface being created
+ DWORD bIsDifferentPixelFormat;// pixel format differs from primary surface
+ HRESULT ddRVal; // return value
+ VOID* CanCreateSurface; // Unused: Win95 compatibility
+} DD_CANCREATESURFACEDATA;
+
+/*
+ * structure for passing information to DDHAL CreatePalette fn
+ */
+typedef struct _DD_CREATEPALETTEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ PDD_PALETTE_GLOBAL lpDDPalette; // ddraw palette struct
+ LPPALETTEENTRY lpColorTable; // colors to go in palette
+ HRESULT ddRVal; // return value
+ VOID* CreatePalette; // Unused: Win95 compatibility
+ BOOL is_excl; // process has exclusive mode
+} DD_CREATEPALETTEDATA;
+
+/*
+ * Return if the vertical blank is in progress
+ */
+#define DDWAITVB_I_TESTVB 0x80000006l
+
+/*
+ * structure for passing information to DDHAL WaitForVerticalBlank fn
+ */
+typedef struct _DD_WAITFORVERTICALBLANKDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ DWORD dwFlags; // flags
+ DWORD bIsInVB; // is in vertical blank
+ DWORD hEvent; // event
+ HRESULT ddRVal; // return value
+ VOID* WaitForVerticalBlank; // Unused: Win95 compatibility
+} DD_WAITFORVERTICALBLANKDATA;
+
+/*
+ * structure for passing information to DDHAL driver SetColorKey fn
+ */
+typedef struct _DD_DRVSETCOLORKEYDATA
+{
+ PDD_SURFACE_LOCAL lpDDSurface; // surface struct
+ DWORD dwFlags; // flags
+ DDCOLORKEY ckNew; // new color key
+ HRESULT ddRVal; // return value
+ VOID* SetColorKey; // Unused: Win95 compatibility
+} DD_DRVSETCOLORKEYDATA;
+
+/*
+ * structure for passing information to DDHAL GetScanLine fn
+ */
+typedef struct _DD_GETSCANLINEDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ DWORD dwScanLine; // returned scan line
+ HRESULT ddRVal; // return value
+ VOID* GetScanLine; // Unused: Win95 compatibility
+} DD_GETSCANLINEDATA;
+
+/*
+ * structure for passing information to DDHAL MapMemory fn
+ */
+typedef struct _DD_MAPMEMORYDATA
+{
+ PDD_DIRECTDRAW_GLOBAL lpDD; // driver struct
+ BOOL bMap; // TRUE if map; FALSe if un-map
+ HANDLE hProcess; // process handle
+ FLATPTR fpProcess; // returned address in process' address space
+ HRESULT ddRVal; // return value
+} DD_MAPMEMORYDATA;
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif