Getting the pain in the ass api DxDdCreateDirectDrawObject inside ms dxg.sys working...
[reactos.git] / reactos / include / reactos / drivers / directx / directxint.h
1
2 #ifndef _DXINTERNEL_
3 #define _DXINTERNEL_
4
5 #define PDD_BASEOBJECT POBJ
6 #define DD_BASEOBJECT BASEOBJECT
7
8 /* _EDD_DIRECTDRAW_LOCAL is 0x54 byte big on windows xp */
9 typedef struct _EDD_DIRECTDRAW_LOCAL
10 {
11 //
12 // GDI Object Header
13 //
14 /* 0x00 */ DD_BASEOBJECT pobj; // verify it match windows xp
15 /* 0x10 */ struct _EDD_DIRECTDRAW_GLOBAL * peDirectDrawGlobal; // verify it match windows xp
16 /* 0x14 */ struct _EDD_SURFACE * peSurface_DdList;
17 /* 0x18 */ ULONG unk_018;
18 /* 0x1C */ ULONG unk_01c;
19 /* 0x20 */ ULONG unk_020;
20 /* 0x24 */ struct _EDD_DIRECTDRAW_GLOBAL * peDirectDrawGlobal2; // verify it match windows xp
21 /* 0x28 */ FLATPTR fpProcess;
22 /* 0x2C */ FLONG fl;
23 /* 0x30 */ struct _EDD_DIRECTDRAW_LOCAL *peDirectDrawLocal_prev; // verify it match windows xp, to old lcl store here when new handle are create.
24 /* 0x34 */ PEPROCESS Process;
25 /* 0x38 */ ULONG unk_038;
26 /* 0x3C */ HANDLE UniqueProcess;
27 /* 0x40 */ VOID *unk_040;
28 /* 0x44 */ VOID *unk_044;
29 /* 0x48 */ ULONG unk_048;
30 /* 0x4C */ ULONG unk_04C;
31 /* 0x50 */ ULONG unk_050;
32 } EDD_DIRECTDRAW_LOCAL, *PEDD_DIRECTDRAW_LOCAL;
33
34
35 //
36 // Surface Object
37 //
38 typedef struct _EDD_SURFACE
39 {
40 //
41 // GDI Object Header
42 //
43 DD_BASEOBJECT pobj;
44
45 //
46 // Direct Draw Surface Data
47 //
48 DD_SURFACE_LOCAL ddsSurfaceLocal;
49 DD_SURFACE_MORE ddsSurfaceMore;
50 DD_SURFACE_GLOBAL ddsSurfaceGlobal;
51 DD_SURFACE_INT ddsSurfaceInt;
52
53 //
54 // Surface pointers
55 //
56 struct _EDD_SURFACE *peSurface_DdNext;
57 struct _EDD_SURFACE *peSurface_LockNext;
58
59 //
60 // Unknown
61 //
62 ULONG field_C0;
63
64 //
65 // Private Direct Draw Data
66 //
67 struct _EDD_DIRECTDRAW_GLOBAL* peDirectDrawGlobal;
68 struct _EDD_DIRECTDRAW_LOCAL* peDirectDrawLocal;
69
70 //
71 // Flags
72 //
73 FLONG fl;
74
75 //
76 // Surface Attributes
77 //
78 ULONG cLocks;
79 ULONG iVisRgnUniqueness;
80 BOOL bLost;
81 HANDLE hSecure;
82 HANDLE hdc;
83 HBITMAP hbmGdi;
84
85 //
86 // Unknown
87 //
88 ULONG field_E8;
89
90 //
91 // Surface Lock
92 //
93 RECTL rclLock;
94 ULONG field_FC[2];
95 } EDD_SURFACE, *PEDD_SURFACE;
96
97
98 /* NOTE :
99 * if these been set in struct EDD_DIRECTDRAW_GLOBAL member dwCallbackFlags,
100 * it mean that the callback member for it have been fill in from the graphic drv
101 */
102 #define EDDDGBL_MISCCALLBACKS 0x01 // ddMiscellanousCallbacks
103 #define EDDDGBL_VIDEOPORTCALLBACKS 0x02 // ddVideoPortCallback
104 #define EDDDGBL_MISC2CALLBACKS 0x80 // ddMiscellanous2Callbacks
105
106 typedef struct _EDD_DIRECTDRAW_GLOBAL
107 {
108 /* 0x000 */ PVOID dhpdev;
109 /* 0x004 */ DWORD dwReserved1;
110 /* 0x008 */ DWORD dwReserved2;
111 /* 0x00C */ ULONG unk_000c[3];
112 /* 0x018 */ LONG cDriverReferences;
113 /* 0x01C */ ULONG unk_01c;
114 /* 0x020 */ DWORD dwCallbackFlags; /* <-- verify it match windows xp, dwCallbackFlags
115 Flags value
116 0x0002 = ddVideoPortCallback and GUID_VideoPortCaps
117 0x0004 = GUID_ColorControlCallbacks
118 0x0040 = GUID_MotionCompCallbacks
119 0x0080 = GUID_Miscellaneous2Callbacks
120 0x0100 = GUID_DDMoreCaps
121 0x0200 = GUID_D3DCallbacks3
122 0x0400 = GUID_NTCallbacks
123 */
124
125 /* 0x024 */ ULONG unk_024;
126 #ifdef _WIN32
127 /* 0x028 */ LARGE_INTEGER llAssertModeTimeout; // 0x028 <-- verify it match windows xp, llAssertModeTimeout
128 #else
129 /* 0x028 */ DWORD llAssertModeTimeoutLowPart;
130 /* 0x02C */ DWORD llAssertModeTimeoutHighPart;
131 #endif
132 /* 0x030 */ DWORD dwNumHeaps; // 0x030 <-- verify it match windows xp, dwNumHeaps
133 /* 0x034 */ VIDEOMEMORY *pvmList; // 0x034 <-- verify it match windows xp, pvmList
134 /* 0x038 */ DWORD dwNumFourCC;
135 /* 0x03C */ PDWORD pdwFourCC;
136 /* 0x040 */ DD_HALINFO ddHalInfo;
137 /* 0x1E0 */ ULONG unk_1e0[46];
138 /* 0x298 */ DD_CALLBACKS ddCallbacks; // 0x298 <-- verify it match windows xp, ddCallbacks
139 /* 0x2C0 */ DD_SURFACECALLBACKS ddSurfaceCallbacks; // 0x2C4 <-- verify it match windows xp, ddSurfaceCallbacks
140 /* 0x300 */ DD_PALETTECALLBACKS ddPaletteCallbacks; // 0x300 <-- verify it match windows xp, ddPaletteCallbacks
141 /* 0x314 */ ULONG unk_314[46];
142 /* 0x3D4 */ D3DNTHAL_CALLBACKS d3dNtHalCallbacks;
143 /* 0x460 */ ULONG unk_460[7];
144 /* 0x47C */ D3DNTHAL_CALLBACKS2 d3dNtHalCallbacks2;
145 /* 0x498 */ DD_VIDEOPORTCALLBACKS ddVideoPortCallback; // 0x498 <-- verify it match windows xp, ddVideoPortCallback
146 /* 0x4E0 */ DD_MISCELLANEOUSCALLBACKS ddMiscellanousCallbacks; // 0x4E0 <-- verify it match windows xp, ddMiscellanousCallbacks
147 /* 0x4EC */ DD_MISCELLANEOUS2CALLBACKS ddMiscellanous2Callbacks; // 0x4EC <-- verify it match windows xp, ddMiscellanous2Callbacks
148 /* 0x504 */ ULONG unk_504[12];
149 /* 0x534 */ D3DNTHAL_CALLBACKS3 d3dNtHalCallbacks3;
150 /* 0x5A4 */ ULONG unk_544;
151 /* 0x5A8 */ ULONG unk_548;
152 /* 0x54C */ ULONG unk_54c[23];
153 /* 0x5A8 */ EDD_DIRECTDRAW_LOCAL* peDirectDrawLocalList; // 0x5A8 <-- verify it match windows xp, comment it is current local struct not a list, peDirectDrawLocalList Current
154 /* 0x5ac */ EDD_SURFACE* peSurface_LockList;
155 /* 0x5B0 */ FLONG fl;
156 /* 0x5B4 */ ULONG cSurfaceLocks;
157 /* 0x5B8 */ PKEVENT pAssertModeEvent;
158 /* 0x5Bc */ EDD_SURFACE *peSurfaceCurrent;
159 /* 0x5C0 */ EDD_SURFACE *peSurfacePrimary;
160 /* 0x5C4 */ BOOL bSuspended; // 0x5C4 <-- verify it match windows xp, tells to dxg to use the drv own api or return error code instead
161 /* 0x5C8 */ ULONG unk_5c8[12];
162 /* 0x5F8 */ RECTL rcbounds;
163 /* 0x608 */ ULONG unk_608;
164 /* 0x60c */ HDEV hDev; // 0x60c <-- verify it match windows xp, The real Pdev, hDev
165
166 /* Windows XP and higher */
167 /* 0x610 */ ULONG unk_610[63];
168 /* 0x70C */ ULONG unk_70C;
169 } EDD_DIRECTDRAW_GLOBAL, *PEDD_DIRECTDRAW_GLOBAL;
170
171 #endif