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