[REACTX] Fix 64 bit issues
[reactos.git] / win32ss / reactx / dxg / dxg_int.h
1 #ifndef _DXG_PCH_
2 #define _DXG_PCH_
3
4 #include <ntifs.h>
5
6 /* Win32 Headers */
7 #define WINBASEAPI
8 #define STARTF_USESIZE 2
9 #define STARTF_USEPOSITION 4
10 #define INTERNAL_CALL NTAPI
11 #define NT_BUILD_ENVIRONMENT
12
13 #define DDHMG_HANDLE_LIMIT 0x200000
14 #define DDHMG_HTOI(DdHandle) ((DWORD_PTR)DdHandle & (DDHMG_HANDLE_LIMIT-1))
15
16
17 #include <windef.h>
18 #include <winerror.h>
19 #include <wingdi.h>
20 #include <winddi.h>
21 #include <ddkernel.h>
22 #include <initguid.h>
23 #include <ddrawi.h>
24 #include <ntgdityp.h>
25 #include <psfuncs.h>
26
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);
30
31 /* DXG treats this as opaque */
32 typedef PVOID PDC;
33 typedef PVOID PW32THREAD;
34
35 typedef struct _DD_BASEOBJECT
36 {
37 HGDIOBJ hHmgr;
38 ULONG ulShareCount;
39 USHORT cExclusiveLock;
40 USHORT BaseFlags;
41 PW32THREAD Tid;
42 } DD_BASEOBJECT, *PDD_BASEOBJECT;
43
44 #include <drivers/directx/directxint.h>
45 #include <drivers/directx/dxg.h>
46 #include <drivers/directx/dxeng.h>
47
48 #include "tags.h"
49
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
55
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
61
62 typedef struct _DD_ENTRY
63 {
64 union
65 {
66 PDD_BASEOBJECT pobj;
67 ULONG NextFree;
68 };
69 HANDLE Pid;
70 USHORT FullUnique;
71 UCHAR Objt;
72 } DD_ENTRY, *PDD_ENTRY;
73
74 typedef struct _EDD_SURFACE_LOCAL
75 {
76 DD_BASEOBJECT Object;
77 DD_SURFACE_LOCAL Surfacelcl;
78 } EDD_SURFACE_LOCAL, *PEDD_SURFACE_LOCAL;
79
80
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);
123
124
125 typedef struct _DXENG_FUNCTIONS
126 {
127 PVOID Reserved;
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;
171
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);
178
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;
192
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);
210
211
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);
220
221 #endif /* _DXG_PCH_ */