8 #define STARTF_USESIZE 2
9 #define STARTF_USEPOSITION 4
10 #define INTERNAL_CALL NTAPI
11 #define NT_BUILD_ENVIRONMENT
13 #define DDHMG_HANDLE_LIMIT 0x200000
14 #define DDHMG_HTOI(DdHandle) ((DWORD_PTR)DdHandle & (DDHMG_HANDLE_LIMIT-1))
27 DEFINE_GUID(GUID_NTCallbacks
, 0x6fe9ecde, 0xdf89, 0x11d1, 0x9d, 0xb0, 0x00, 0x60, 0x08, 0x27, 0x71, 0xba);
28 DEFINE_GUID(GUID_DDMoreCaps
, 0x880baf30, 0xb030, 0x11d0, 0x8e, 0xa7, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b);
29 DEFINE_GUID(GUID_NTPrivateDriverCaps
, 0xfad16a23, 0x7b66, 0x11d2, 0x83, 0xd7, 0x00, 0xc0, 0x4f, 0x7c, 0xe5, 0x8c);
31 /* DXG treats this as opaque */
33 typedef PVOID PW32THREAD
;
35 typedef struct _DD_BASEOBJECT
39 USHORT cExclusiveLock
;
42 } DD_BASEOBJECT
, *PDD_BASEOBJECT
;
44 #include <drivers/directx/directxint.h>
45 #include <drivers/directx/dxg.h>
46 #include <drivers/directx/dxeng.h>
50 #define CapOver_DisableAccel 0x1
51 #define CapOver_DisableD3DDDAccel 0x2
52 #define CapOver_DisableD3DAccel 0x4
53 #define CapOver_DisableOGL 0x8
54 #define CapOver_DisableEscapes 0x10
56 #define ObjType_DDLOCAL_TYPE 1
57 #define ObjType_DDSURFACE_TYPE 2
58 #define ObjType_DDCONTEXT_TYPE 3
59 #define ObjType_DDVIDEOPORT_TYPE 4
60 #define ObjType_DDMOTIONCOMP_TYPE 5
62 typedef struct _DD_ENTRY
72 } DD_ENTRY
, *PDD_ENTRY
;
74 typedef struct _EDD_SURFACE_LOCAL
77 DD_SURFACE_LOCAL Surfacelcl
;
78 } EDD_SURFACE_LOCAL
, *PEDD_SURFACE_LOCAL
;
81 typedef BOOLEAN (APIENTRY
* PFN_DxEngNUIsTermSrv
)(VOID
);
82 typedef DWORD (APIENTRY
* PFN_DxEngScreenAccessCheck
)(VOID
);
83 typedef BOOLEAN (APIENTRY
* PFN_DxEngRedrawDesktop
)(VOID
);
84 typedef ULONG (APIENTRY
* PFN_DxEngDispUniq
)(VOID
);
85 typedef BOOLEAN (APIENTRY
* PFN_DxEngIncDispUniq
)(VOID
);
86 typedef ULONG (APIENTRY
* PFN_DxEngVisRgnUniq
)(VOID
);
87 typedef BOOLEAN (APIENTRY
* PFN_DxEngLockShareSem
)(VOID
);
88 typedef BOOLEAN (APIENTRY
* PFN_DxEngUnlockShareSem
)(VOID
);
89 typedef HDEV
* (APIENTRY
* PFN_DxEngEnumerateHdev
)(HDEV
*);
90 typedef BOOLEAN (APIENTRY
* PFN_DxEngLockHdev
)(HDEV
);
91 typedef BOOLEAN (APIENTRY
* PFN_DxEngUnlockHdev
)(HDEV
);
92 typedef BOOLEAN (APIENTRY
* PFN_DxEngIsHdevLockedByCurrentThread
)(HDEV
);
93 typedef BOOLEAN (APIENTRY
* PFN_DxEngReferenceHdev
)(HDEV
);
94 typedef BOOLEAN (APIENTRY
* PFN_DxEngUnreferenceHdev
)(HDEV
);
95 typedef BOOL (APIENTRY
* PFN_DxEngGetDeviceGammaRamp
)(HDEV
, PGAMMARAMP
);
96 typedef BOOLEAN (APIENTRY
* PFN_DxEngSetDeviceGammaRamp
)(HDEV
, PGAMMARAMP
, BOOL
);
97 typedef DWORD (APIENTRY
* PFN_DxEngSpTearDownSprites
)(DWORD
, DWORD
, DWORD
);
98 typedef DWORD (APIENTRY
* PFN_DxEngSpUnTearDownSprites
)(DWORD
, DWORD
, DWORD
);
99 typedef DWORD (APIENTRY
* PFN_DxEngSpSpritesVisible
)(DWORD
);
100 typedef DWORD_PTR (APIENTRY
* PFN_DxEngGetHdevData
)(HDEV
, DXEGSHDEVDATA
);
101 typedef BOOLEAN (APIENTRY
* PFN_DxEngSetHdevData
)(HDEV
, DXEGSHDEVDATA
, DWORD_PTR
);
102 typedef HDC (APIENTRY
* PFN_DxEngCreateMemoryDC
)(HDEV
);
103 typedef HDC (APIENTRY
* PFN_DxEngGetDesktopDC
)(ULONG
, BOOL
, BOOL
);
104 typedef BOOLEAN (APIENTRY
* PFN_DxEngDeleteDC
)(HDC
, BOOL
);
105 typedef BOOLEAN (APIENTRY
* PFN_DxEngCleanDC
)(HDC hdc
);
106 typedef BOOL (APIENTRY
* PFN_DxEngSetDCOwner
)(HGDIOBJ
, DWORD
);
107 typedef PDC (APIENTRY
* PFN_DxEngLockDC
)(HDC
);
108 typedef BOOLEAN (APIENTRY
* PFN_DxEngUnlockDC
)(PDC
);
109 typedef BOOLEAN (APIENTRY
* PFN_DxEngSetDCState
)(HDC
, DWORD
, DWORD
);
110 typedef DWORD_PTR (APIENTRY
* PFN_DxEngGetDCState
)(HDC
, DWORD
);
111 typedef DWORD (APIENTRY
* PFN_DxEngSelectBitmap
)(DWORD
, DWORD
);
112 typedef DWORD (APIENTRY
* PFN_DxEngSetBitmapOwner
)(DWORD
, DWORD
);
113 typedef DWORD (APIENTRY
* PFN_DxEngDeleteSurface
)(DWORD
);
114 typedef DWORD (APIENTRY
* PFN_DxEngGetSurfaceData
)(DWORD
, DWORD
);
115 typedef DWORD (APIENTRY
* PFN_DxEngAltLockSurface
)(DWORD
);
116 typedef DWORD (APIENTRY
* PFN_DxEngUploadPaletteEntryToSurface
)(DWORD
, DWORD
, DWORD
, DWORD
);
117 typedef DWORD (APIENTRY
* PFN_DxEngMarkSurfaceAsDirectDraw
)(DWORD
, DWORD
);
118 typedef DWORD (APIENTRY
* PFN_DxEngSelectPaletteToSurface
)(DWORD
, DWORD
);
119 typedef DWORD (APIENTRY
* PFN_DxEngSyncPaletteTableWithDevice
)(DWORD
, DWORD
);
120 typedef DWORD (APIENTRY
* PFN_DxEngSetPaletteState
)(DWORD
, DWORD
, DWORD
);
121 typedef DWORD (APIENTRY
* PFN_DxEngGetRedirectionBitmap
)(DWORD
);
122 typedef DWORD (APIENTRY
* PFN_DxEngLoadImage
)(DWORD
, DWORD
);
125 typedef struct _DXENG_FUNCTIONS
128 PFN_DxEngNUIsTermSrv DxEngNUIsTermSrv
;
129 PFN_DxEngScreenAccessCheck DxEngScreenAccessCheck
;
130 PFN_DxEngRedrawDesktop DxEngRedrawDesktop
;
131 PFN_DxEngDispUniq DxEngDispUniq
;
132 PFN_DxEngIncDispUniq DxEngIncDispUniq
;
133 PFN_DxEngVisRgnUniq DxEngVisRgnUniq
;
134 PFN_DxEngLockShareSem DxEngLockShareSem
;
135 PFN_DxEngUnlockShareSem DxEngUnlockShareSem
;
136 PFN_DxEngEnumerateHdev DxEngEnumerateHdev
;
137 PFN_DxEngLockHdev DxEngLockHdev
;
138 PFN_DxEngUnlockHdev DxEngUnlockHdev
;
139 PFN_DxEngIsHdevLockedByCurrentThread DxEngIsHdevLockedByCurrentThread
;
140 PFN_DxEngReferenceHdev DxEngReferenceHdev
;
141 PFN_DxEngUnreferenceHdev DxEngUnreferenceHdev
;
142 PFN_DxEngGetDeviceGammaRamp DxEngGetDeviceGammaRamp
;
143 PFN_DxEngSetDeviceGammaRamp DxEngSetDeviceGammaRamp
;
144 PFN_DxEngSpTearDownSprites DxEngSpTearDownSprites
;
145 PFN_DxEngSpUnTearDownSprites DxEngSpUnTearDownSprites
;
146 PFN_DxEngSpSpritesVisible DxEngSpSpritesVisible
;
147 PFN_DxEngGetHdevData DxEngGetHdevData
;
148 PFN_DxEngSetHdevData DxEngSetHdevData
;
149 PFN_DxEngCreateMemoryDC DxEngCreateMemoryDC
;
150 PFN_DxEngGetDesktopDC DxEngGetDesktopDC
;
151 PFN_DxEngDeleteDC DxEngDeleteDC
;
152 PFN_DxEngCleanDC DxEngCleanDC
;
153 PFN_DxEngSetDCOwner DxEngSetDCOwner
;
154 PFN_DxEngLockDC DxEngLockDC
;
155 PFN_DxEngUnlockDC DxEngUnlockDC
;
156 PFN_DxEngSetDCState DxEngSetDCState
;
157 PFN_DxEngGetDCState DxEngGetDCState
;
158 PFN_DxEngSelectBitmap DxEngSelectBitmap
;
159 PFN_DxEngSetBitmapOwner DxEngSetBitmapOwner
;
160 PFN_DxEngDeleteSurface DxEngDeleteSurface
;
161 PFN_DxEngGetSurfaceData DxEngGetSurfaceData
;
162 PFN_DxEngAltLockSurface DxEngAltLockSurface
;
163 PFN_DxEngUploadPaletteEntryToSurface DxEngUploadPaletteEntryToSurface
;
164 PFN_DxEngMarkSurfaceAsDirectDraw DxEngMarkSurfaceAsDirectDraw
;
165 PFN_DxEngSelectPaletteToSurface DxEngSelectPaletteToSurface
;
166 PFN_DxEngSyncPaletteTableWithDevice DxEngSyncPaletteTableWithDevice
;
167 PFN_DxEngSetPaletteState DxEngSetPaletteState
;
168 PFN_DxEngGetRedirectionBitmap DxEngGetRedirectionBitmap
;
169 PFN_DxEngLoadImage DxEngLoadImage
;
170 } DXENG_FUNCTIONS
, *PDXENG_FUNCTIONS
;
172 /* exported functions */
173 NTSTATUS NTAPI
DriverEntry(IN PVOID Context1
, IN PVOID Context2
);
174 NTSTATUS NTAPI
GsDriverEntry(IN PVOID Context1
, IN PVOID Context2
);
175 NTSTATUS APIENTRY
DxDdCleanupDxGraphics(VOID
);
176 BOOL NTAPI
DxDdEnableDirectDraw(HANDLE hDev
, BOOL arg2
);
177 DWORD NTAPI
DxDdCreateDirectDrawObject(HDC hDC
);
179 /* Global pointers */
180 extern ULONG gcSizeDdHmgr
;
181 extern PDD_ENTRY gpentDdHmgr
;
182 extern ULONG gcMaxDdHmgr
;
183 extern PDD_ENTRY gpentDdHmgrLast
;
184 extern ULONG ghFreeDdHmgr
;
185 extern HSEMAPHORE ghsemHmgr
;
186 extern LONG gcDummyPageRefCnt
;
187 extern HSEMAPHORE ghsemDummyPage
;
188 extern VOID
*gpDummyPage
;
189 extern PEPROCESS gpepSession
;
190 extern PLARGE_INTEGER gpLockShortDelay
;
191 extern DXENG_FUNCTIONS gpEngFuncs
;
193 /* Driver list export functions */
194 DWORD NTAPI
DxDxgGenericThunk(ULONG_PTR ulIndex
, ULONG_PTR ulHandle
, SIZE_T
*pdwSizeOfPtr1
, PVOID pvPtr1
, SIZE_T
*pdwSizeOfPtr2
, PVOID pvPtr2
);
195 DWORD NTAPI
DxDdIoctl(ULONG ulIoctl
, PVOID pBuffer
, ULONG ulBufferSize
);
196 PDD_SURFACE_LOCAL NTAPI
DxDdLockDirectDrawSurface(HANDLE hDdSurface
);
197 BOOL NTAPI
DxDdUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface
);
198 DWORD NTAPI
DxDdGetDriverInfo(HANDLE DdHandle
, PDD_GETDRIVERINFODATA drvInfoData
);
199 BOOL NTAPI
DxDdQueryDirectDrawObject(HANDLE DdHandle
, DD_HALINFO
* pDdHalInfo
, DWORD
* pCallBackFlags
, LPD3DNTHAL_CALLBACKS pd3dNtHalCallbacks
,
200 LPD3DNTHAL_GLOBALDRIVERDATA pd3dNtGlobalDriverData
, PDD_D3DBUFCALLBACKS pd3dBufCallbacks
, LPDDSURFACEDESC pTextureFormats
,
201 DWORD
* p8
, VIDEOMEMORY
* p9
, DWORD
* pdwNumFourCC
, DWORD
* pdwFourCC
);
202 DWORD NTAPI
DxDdReenableDirectDrawObject(HANDLE DdHandle
, PVOID p2
);
203 DWORD NTAPI
DxDdCanCreateSurface(HANDLE DdHandle
, PDD_CANCREATESURFACEDATA SurfaceData
);
204 DWORD NTAPI
DxDdCanCreateD3DBuffer(HANDLE DdHandle
, PDD_CANCREATESURFACEDATA SurfaceData
);
205 DWORD NTAPI
DxDdCreateD3DBuffer(HANDLE hDirectDrawLocal
, PEDD_SURFACE pDdSurfList
, DDSURFACEDESC2
*a3
, DD_SURFACE_GLOBAL
*pDdSurfGlob
, DD_SURFACE_LOCAL
*pDdSurfLoc
,
206 DD_SURFACE_MORE
*pDdSurfMore
, DD_CREATESURFACEDATA
*pDdCreateSurfaceData
, PVOID Address
);
207 DWORD NTAPI
DxDdLock(HANDLE hSurface
, PDD_LOCKDATA puLockData
, HDC hdcClip
);
208 DWORD NTAPI
DxDdUnlock(HANDLE hSurface
, PDD_UNLOCKDATA puUnlockData
);
209 HANDLE NTAPI
DxDdCreateSurfaceObject(HANDLE hDirectDrawLocal
, HANDLE hSurface
, PDD_SURFACE_LOCAL puSurfaceLocal
, PDD_SURFACE_MORE puSurfaceMore
, PDD_SURFACE_GLOBAL puSurfaceGlobal
, BOOL bComplete
);
212 /* Internal functions */
213 BOOL FASTCALL
VerifyObjectOwner(PDD_ENTRY pEntry
);
214 BOOL FASTCALL
DdHmgCreate(VOID
);
215 BOOL FASTCALL
DdHmgDestroy(VOID
);
216 PVOID FASTCALL
DdHmgLock(HANDLE DdHandle
, UCHAR ObjectType
, BOOLEAN LockOwned
);
217 HANDLE FASTCALL
DdHmgAlloc(ULONG objSize
, CHAR objType
, BOOLEAN objLock
);
218 PEDD_SURFACE NTAPI
intDdCreateNewSurfaceObject(PEDD_DIRECTDRAW_LOCAL peDdL
, HANDLE hDirectDrawLocal
,
219 PDD_SURFACE_GLOBAL pDdSurfGlob
, PDD_SURFACE_LOCAL pDdSurfLoc
, PDD_SURFACE_MORE pDdSurfMore
);
221 #endif /* _DXG_PCH_ */