4ee8afa9a1ac166c117f78a83446d53fe0f11261
[reactos.git] / reactos / 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 #include <windef.h>
14 #include <winerror.h>
15 #include <wingdi.h>
16 #include <winddi.h>
17
18 /* DXG treats this as opaque */
19 typedef PVOID PDC;
20 typedef PVOID PW32THREAD;
21
22 typedef struct _DD_BASEOBJECT
23 {
24 HGDIOBJ hHmgr;
25 ULONG ulShareCount;
26 USHORT cExclusiveLock;
27 USHORT BaseFlags;
28 PW32THREAD Tid;
29 } DD_BASEOBJECT, *PDD_BASEOBJECT;
30
31 #include <drivers/directx/directxint.h>
32 #include <drivers/directx/dxg.h>
33 #include <drivers/directx/dxeng.h>
34
35 #include "tags.h"
36
37 #define ObjType_DDSURFACE_TYPE 2
38 #define ObjType_DDVIDEOPORT_TYPE 4
39 #define ObjType_DDMOTIONCOMP_TYPE 5
40
41 typedef struct _DD_ENTRY
42 {
43 union
44 {
45 PDD_BASEOBJECT pobj;
46 HANDLE hFree;
47 };
48 union
49 {
50 ULONG ulObj;
51 struct
52 {
53 USHORT Count;
54 USHORT Lock;
55 HANDLE Pid;
56 };
57 } ObjectOwner;
58 USHORT FullUnique;
59 UCHAR Objt;
60 UCHAR Flags;
61 PVOID pUser;
62 } DD_ENTRY, *PDD_ENTRY;
63
64 typedef struct _EDD_SURFACE_LOCAL
65 {
66 DD_BASEOBJECT Object;
67 DD_SURFACE_LOCAL Surfacelcl;
68 } EDD_SURFACE_LOCAL, *PEDD_SURFACE_LOCAL;
69
70 /* exported functions */
71 NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2);
72 NTSTATUS NTAPI GsDriverEntry(IN PVOID Context1, IN PVOID Context2);
73 NTSTATUS APIENTRY DxDdCleanupDxGraphics(VOID);
74 BOOL NTAPI DxDdEnableDirectDraw(PVOID arg1, BOOL arg2);
75
76 /* Global pointers */
77 extern ULONG gcSizeDdHmgr;
78 extern PDD_ENTRY gpentDdHmgr;
79 extern ULONG gcMaxDdHmgr;
80 extern PDD_ENTRY gpentDdHmgrLast;
81 extern HANDLE ghFreeDdHmgr;
82 extern HSEMAPHORE ghsemHmgr;
83 extern LONG gcDummyPageRefCnt;
84 extern HSEMAPHORE ghsemDummyPage;
85 extern VOID *gpDummyPage;
86 extern PEPROCESS gpepSession;
87 extern PLARGE_INTEGER gpLockShortDelay;
88
89 /* Driver list export functions */
90 DWORD NTAPI DxDxgGenericThunk(ULONG_PTR ulIndex, ULONG_PTR ulHandle, SIZE_T *pdwSizeOfPtr1, PVOID pvPtr1, SIZE_T *pdwSizeOfPtr2, PVOID pvPtr2);
91 DWORD NTAPI DxDdIoctl(ULONG ulIoctl, PVOID pBuffer, ULONG ulBufferSize);
92 PDD_SURFACE_LOCAL NTAPI DxDdLockDirectDrawSurface(HANDLE hDdSurface);
93 BOOL NTAPI DxDdUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface);
94
95 /* Internal functions */
96 BOOL FASTCALL VerifyObjectOwner(PDD_ENTRY pEntry);
97 BOOL FASTCALL DdHmgCreate(VOID);
98 BOOL FASTCALL DdHmgDestroy(VOID);
99 PVOID FASTCALL DdHmgLock(HANDLE DdHandle, UCHAR ObjectType, BOOLEAN LockOwned);
100
101 /* define stuff */
102 #define drvDxEngLockDC gpEngFuncs[DXENG_INDEX_DxEngLockDC]
103 #define drvDxEngGetDCState gpEngFuncs[DXENG_INDEX_DxEngGetDCState]
104 #define drvDxEngGetHdevData gpEngFuncs[DXENG_INDEX_DxEngGetHdevData]
105 #define drvDxEngUnlockDC gpEngFuncs[DXENG_INDEX_DxEngUnlockDC]
106 #define drvDxEngUnlockHdev gpEngFuncs[DXENG_INDEX_DxEngUnlockHdev]
107 #define drvDxEngLockHdev gpEngFuncs[DXENG_INDEX_DxEngLockHdev]
108
109 #endif /* _DXG_PCH_ */