1st Sort out gdi device mess.
[reactos.git] / reactos / subsystems / win32 / win32k / ntddraw / dxeng.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Native driver enumate of dxeng implementation
5 * FILE: subsys/win32k/ntddraw/dxeng.c
6 * PROGRAMER: Magnus olsen (magnus@greatlord.com)
7 * REVISION HISTORY:
8 * 15/10-2007 Magnus Olsen
9 */
10
11 #include <w32k.h>
12 #include <debug.h>
13
14
15
16 ULONG gcEngFuncs = DXENG_INDEX_DxEngLoadImage + 1;
17 DRVFN gaEngFuncs [] =
18 {
19 {0, (PFN) NULL},
20 {DXENG_INDEX_DxEngNUIsTermSrv, (PFN)DxEngNUIsTermSrv},
21 {DXENG_INDEX_DxEngScreenAccessCheck, (PFN)DxEngScreenAccessCheck},
22 {DXENG_INDEX_DxEngRedrawDesktop, (PFN)DxEngRedrawDesktop},
23 {DXENG_INDEX_DxEngDispUniq, (PFN)DxEngDispUniq},
24 {DXENG_INDEX_DxEngIncDispUniq, (PFN)DxEngIncDispUniq},
25 {DXENG_INDEX_DxEngVisRgnUniq, (PFN)DxEngVisRgnUniq},
26 {DXENG_INDEX_DxEngLockShareSem, (PFN)DxEngLockShareSem},
27 {DXENG_INDEX_DxEngUnlockShareSem, (PFN)DxEngUnlockShareSem},
28 {DXENG_INDEX_DxEngEnumerateHdev, (PFN)DxEngEnumerateHdev},
29 {DXENG_INDEX_DxEngLockHdev, (PFN)DxEngLockHdev},
30 {DXENG_INDEX_DxEngUnlockHdev, (PFN)DxEngUnlockHdev},
31 {DXENG_INDEX_DxEngIsHdevLockedByCurrentThread, (PFN)DxEngIsHdevLockedByCurrentThread},
32 {DXENG_INDEX_DxEngReferenceHdev, (PFN)DxEngReferenceHdev},
33 {DXENG_INDEX_DxEngUnreferenceHdev, (PFN)DxEngUnreferenceHdev},
34 {DXENG_INDEX_DxEngGetDeviceGammaRamp, (PFN)DxEngGetDeviceGammaRamp},
35 {DXENG_INDEX_DxEngSetDeviceGammaRamp, (PFN)DxEngSetDeviceGammaRamp},
36 {DXENG_INDEX_DxEngSpTearDownSprites, (PFN)DxEngSpTearDownSprites},
37 {DXENG_INDEX_DxEngSpUnTearDownSprites, (PFN)DxEngSpUnTearDownSprites},
38 {DXENG_INDEX_DxEngSpSpritesVisible, (PFN)DxEngSpSpritesVisible},
39 {DXENG_INDEX_DxEngGetHdevData, (PFN)DxEngGetHdevData},
40 {DXENG_INDEX_DxEngSetHdevData, (PFN)DxEngSetHdevData},
41 {DXENG_INDEX_DxEngCreateMemoryDC, (PFN)DxEngCreateMemoryDC},
42 {DXENG_INDEX_DxEngGetDesktopDC, (PFN)DxEngGetDesktopDC},
43 {DXENG_INDEX_DxEngDeleteDC, (PFN)DxEngDeleteDC},
44 {DXENG_INDEX_DxEngCleanDC, (PFN)DxEngCleanDC},
45 {DXENG_INDEX_DxEngSetDCOwner, (PFN)DxEngSetDCOwner},
46 {DXENG_INDEX_DxEngLockDC, (PFN)DxEngLockDC},
47 {DXENG_INDEX_DxEngUnlockDC, (PFN)DxEngUnlockDC},
48 {DXENG_INDEX_DxEngSetDCState, (PFN)DxEngGetDCState},
49 {DXENG_INDEX_DxEngGetDCState, (PFN)DxEngGetDCState},
50 {DXENG_INDEX_DxEngSelectBitmap, (PFN)DxEngSelectBitmap},
51 {DXENG_INDEX_DxEngSetBitmapOwner, (PFN)DxEngSetBitmapOwner},
52 {DXENG_INDEX_DxEngDeleteSurface, (PFN)DxEngDeleteSurface},
53 {DXENG_INDEX_DxEngGetSurfaceData, (PFN)DxEngGetSurfaceData},
54 {DXENG_INDEX_DxEngAltLockSurface, (PFN)DxEngAltLockSurface},
55 {DXENG_INDEX_DxEngUploadPaletteEntryToSurface, (PFN)DxEngUploadPaletteEntryToSurface},
56 {DXENG_INDEX_DxEngMarkSurfaceAsDirectDraw, (PFN)DxEngMarkSurfaceAsDirectDraw},
57 {DXENG_INDEX_DxEngSelectPaletteToSurface, (PFN)DxEngSelectPaletteToSurface},
58 {DXENG_INDEX_DxEngSyncPaletteTableWithDevice, (PFN)DxEngSyncPaletteTableWithDevice},
59 {DXENG_INDEX_DxEngSetPaletteState, (PFN)DxEngSetPaletteState},
60 {DXENG_INDEX_DxEngGetRedirectionBitmap, (PFN)DxEngGetRedirectionBitmap},
61 {DXENG_INDEX_DxEngLoadImage, (PFN)DxEngLoadImage}
62 };
63
64 /************************************************************************/
65 /* DxEngNUIsTermSrv */
66 /************************************************************************/
67
68 /* Notes : Check see if termal server got a connections or not */
69 BOOL
70 DxEngNUIsTermSrv()
71 {
72 /* FIXME ReactOS does not suport terminal server yet, we can not check if we got a connections or not */
73 UNIMPLEMENTED;
74 return FALSE;
75 }
76
77 /************************************************************************/
78 /* DxEngRedrawDesktop */
79 /************************************************************************/
80
81 /* Notes : it always return TRUE, and it update whole the screen (redaw current desktop) */
82 BOOL
83 DxEngRedrawDesktop()
84 {
85 /* FIXME add redraw code */
86 UNIMPLEMENTED;
87 return TRUE;
88 }
89
90
91 /************************************************************************/
92 /* DxEngDispUniq */
93 /************************************************************************/
94
95 /* Notes : return the DisplayUniqVisrgn counter from gdishare memory */
96 ULONG
97 DxEngDispUniq()
98 {
99 /* FIXME DisplayUniqVisrgn from gdishare memory */
100 UNIMPLEMENTED;
101 return FALSE;
102 }
103
104 /************************************************************************/
105 /* DxEngVisRgnUniq */
106 /************************************************************************/
107 /* Notes : return the VisRgnUniq counter for win32k */
108 ULONG
109 DxEngVisRgnUniq()
110 {
111 /* FIXME DisplayUniqVisrgn from gdishare memory */
112 UNIMPLEMENTED;
113 return FALSE;
114 }
115
116 /************************************************************************/
117 /* DxEngEnumerateHdev */
118 /************************************************************************/
119 /* Enumate all drivers in win32k */
120 HDEV *
121 DxEngEnumerateHdev(HDEV *hdev)
122 {
123 /* FIXME Enumate all drivers in win32k */
124 UNIMPLEMENTED;
125 return FALSE;
126 }
127
128 /************************************************************************/
129 /* DxEngGetDeviceGammaRamp */
130 /************************************************************************/
131 /* same protypes NtGdiEngGetDeviceGammaRamp, diffent is we skipp the user mode checks and seh */
132 BOOL
133 DxEngGetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)
134 {
135 /* FIXME redirect it to NtGdiEngGetDeviceGammaRamp internal call */
136 UNIMPLEMENTED;
137 return FALSE;
138 }
139
140
141 /*++
142 * @name DxEngLockDC
143 * @implemented
144 *
145 * The function DxEngLockDC lock a hdc from dxg.sys
146 *
147 * @param HDC hDC
148 * The handle we need want lock
149 *
150 * @return
151 * This api return PDC or NULL depns if it sussess lock the hdc or not
152 *
153 * @remarks.
154 * none
155 *
156 *--*/
157 PDC
158 DxEngLockDC(HDC hDC)
159 {
160 return DC_LockDc(hDC);
161 }
162
163
164 /*++
165 * @name DxEngUnlockDC
166 * @implemented
167 *
168 * The function DxEngUnlockDC Unlock a pDC (hdc) from dxg.sys
169
170 * @param PDC pDC
171 * The handle we need unlock
172 *
173 * @return
174 * This api always return TRUE if it sussess or not
175 *
176 * @remarks.
177 * none
178 *
179 *--*/
180 BOOL
181 DxEngUnlockDC(PDC pDC)
182 {
183 DC_UnlockDc(pDC);
184 return TRUE;
185 }
186
187
188 /************************************************************************/
189 /* DxEngCreateMemoryDC */
190 /************************************************************************/
191 DWORD DxEngCreateMemoryDC(DWORD x1)
192 {
193 UNIMPLEMENTED;
194 return FALSE;
195 }
196
197 /************************************************************************/
198 /* DxEngScreenAccessCheck */
199 /************************************************************************/
200 DWORD DxEngScreenAccessCheck()
201 {
202 UNIMPLEMENTED;
203 return FALSE;
204 }
205
206 /************************************************************************/
207 /* DxEngLockShareSem */
208 /************************************************************************/
209 DWORD DxEngLockShareSem()
210 {
211 UNIMPLEMENTED;
212 return FALSE;
213 }
214
215 /************************************************************************/
216 /* DxEngUnlockShareSem */
217 /************************************************************************/
218 DWORD DxEngUnlockShareSem()
219 {
220 UNIMPLEMENTED;
221 return FALSE;
222 }
223
224 /************************************************************************/
225 /* DxEngLockHdev */
226 /************************************************************************/
227 DWORD DxEngLockHdev(DWORD x1)
228 {
229 UNIMPLEMENTED;
230 return FALSE;
231 }
232
233 /************************************************************************/
234 /* DxEngUnlockHdev */
235 /************************************************************************/
236 DWORD DxEngUnlockHdev(DWORD x1)
237 {
238 UNIMPLEMENTED;
239 return FALSE;
240 }
241
242 /************************************************************************/
243 /* DxEngReferenceHdev */
244 /************************************************************************/
245 DWORD DxEngReferenceHdev(DWORD x1)
246 {
247 UNIMPLEMENTED;
248 return FALSE;
249 }
250
251 /************************************************************************/
252 /* DxEngIsHdevLockedByCurrentThread */
253 /************************************************************************/
254 DWORD DxEngIsHdevLockedByCurrentThread(DWORD x1)
255 {
256 UNIMPLEMENTED;
257 return FALSE;
258 }
259
260
261 /************************************************************************/
262 /* DxEngUnreferenceHdev */
263 /************************************************************************/
264 DWORD DxEngUnreferenceHdev(DWORD x1)
265 {
266 UNIMPLEMENTED;
267 return FALSE;
268 }
269
270 /************************************************************************/
271 /* DxEngSetDeviceGammaRamp */
272 /************************************************************************/
273 DWORD DxEngSetDeviceGammaRamp(DWORD x1, DWORD x2, DWORD x3)
274 {
275 UNIMPLEMENTED;
276 return FALSE;
277 }
278
279 /************************************************************************/
280 /* DxEngSpTearDownSprites */
281 /************************************************************************/
282 DWORD DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
283 {
284 UNIMPLEMENTED;
285 return FALSE;
286 }
287
288 /************************************************************************/
289 /* DxEngSpUnTearDownSprites */
290 /************************************************************************/
291 DWORD DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
292 {
293 UNIMPLEMENTED;
294 return FALSE;
295 }
296
297 /************************************************************************/
298 /* DxEngSpSpritesVisible */
299 /************************************************************************/
300 DWORD DxEngSpSpritesVisible(DWORD x1)
301 {
302 UNIMPLEMENTED;
303 return FALSE;
304 }
305
306 /************************************************************************/
307 /* DxEngGetHdevData */
308 /************************************************************************/
309 DWORD
310 DxEngGetHdevData(PEDD_DIRECTDRAW_GLOBAL pEDDgpl,
311 DWORD Index)
312 {
313 UNIMPLEMENTED;
314 return 0;
315 }
316
317 /************************************************************************/
318 /* DxEngSetHdevData */
319 /************************************************************************/
320 DWORD DxEngSetHdevData(DWORD x1, DWORD x2, DWORD x3)
321 {
322 UNIMPLEMENTED;
323 return FALSE;
324 }
325
326 /************************************************************************/
327 /* DxEngGetDesktopDC */
328 /************************************************************************/
329 DWORD DxEngGetDesktopDC(DWORD x1, DWORD x2, DWORD x3)
330 {
331 UNIMPLEMENTED;
332 return FALSE;
333 }
334
335 /************************************************************************/
336 /* DxEngDeleteDC */
337 /************************************************************************/
338 DWORD DxEngDeleteDC(DWORD x1, DWORD x2)
339 {
340 UNIMPLEMENTED;
341 return FALSE;
342 }
343
344 /************************************************************************/
345 /* DxEngCleanDC */
346 /************************************************************************/
347 DWORD DxEngCleanDC(DWORD x1)
348 {
349 UNIMPLEMENTED;
350 return FALSE;
351 }
352
353 /************************************************************************/
354 /* DxEngSetDCOwner */
355 /************************************************************************/
356 DWORD DxEngSetDCOwner(DWORD x1, DWORD x2)
357 {
358 UNIMPLEMENTED;
359 return FALSE;
360 }
361
362 /************************************************************************/
363 /* DxEngSetDCState */
364 /************************************************************************/
365 DWORD DxEngSetDCState(DWORD x1, DWORD x2, DWORD x3)
366 {
367 UNIMPLEMENTED;
368 return FALSE;
369 }
370
371 /************************************************************************/
372 /* DxEngGetDCState */
373 /************************************************************************/
374 DWORD
375 DxEngGetDCState(HDC hDC,
376 DWORD type)
377 {
378 PEDD_DIRECTDRAW_GLOBAL pEDDgpl = NULL;
379 PDC pDC = DC_LockDc(hDC);
380 if (pDC)
381 {
382 switch (type)
383 {
384 case 1:
385 UNIMPLEMENTED;
386 return 0;
387 case 2:
388 UNIMPLEMENTED;
389 return 0;
390 case 3:
391 {
392 /* PGDIDEVICE GDIDevice = (PGDIDEVICE)pDC->PDev; //This one is right,, we have two.*/
393 PGDIDEVICE GDIDevice = (PGDIDEVICE)pDC->GDIDevice; //Until now noone noticed.
394 pEDDgpl = GDIDevice->pEDDgpl;
395 DC_UnlockDc(pDC);
396 return (DWORD)pEDDgpl;
397 }
398 default:
399 UNIMPLEMENTED;
400 break;
401 }
402 }
403
404 return 0;
405 }
406
407 /************************************************************************/
408 /* DxEngSelectBitmap */
409 /************************************************************************/
410 DWORD DxEngSelectBitmap(DWORD x1, DWORD x2)
411 {
412 UNIMPLEMENTED;
413 return FALSE;
414 }
415
416 /************************************************************************/
417 /* DxEngSetBitmapOwner */
418 /************************************************************************/
419 DWORD DxEngSetBitmapOwner(DWORD x1, DWORD x2)
420 {
421 UNIMPLEMENTED;
422 return FALSE;
423 }
424
425 /************************************************************************/
426 /* DxEngDeleteSurface */
427 /************************************************************************/
428 DWORD DxEngDeleteSurface(DWORD x1)
429 {
430 UNIMPLEMENTED;
431 return FALSE;
432 }
433
434 /************************************************************************/
435 /* DxEngGetSurfaceData */
436 /************************************************************************/
437 DWORD DxEngGetSurfaceData(DWORD x1, DWORD x2)
438 {
439 UNIMPLEMENTED;
440 return FALSE;
441 }
442
443 /************************************************************************/
444 /* DxEngAltLockSurface */
445 /************************************************************************/
446 DWORD DxEngAltLockSurface(DWORD x1)
447 {
448 UNIMPLEMENTED;
449 return FALSE;
450 }
451
452 /************************************************************************/
453 /* DxEngUploadPaletteEntryToSurface */
454 /************************************************************************/
455 DWORD DxEngUploadPaletteEntryToSurface(DWORD x1, DWORD x2,DWORD x3, DWORD x4)
456 {
457 UNIMPLEMENTED;
458 return FALSE;
459 }
460
461 /************************************************************************/
462 /* DxEngMarkSurfaceAsDirectDraw */
463 /************************************************************************/
464 DWORD DxEngMarkSurfaceAsDirectDraw(DWORD x1, DWORD x2)
465 {
466 UNIMPLEMENTED;
467 return FALSE;
468 }
469
470 /************************************************************************/
471 /* DxEngSelectPaletteToSurface */
472 /************************************************************************/
473 DWORD DxEngSelectPaletteToSurface(DWORD x1, DWORD x2)
474 {
475 UNIMPLEMENTED;
476 return FALSE;
477 }
478
479 /************************************************************************/
480 /* DxEngSyncPaletteTableWithDevice */
481 /************************************************************************/
482 DWORD DxEngSyncPaletteTableWithDevice(DWORD x1, DWORD x2)
483 {
484 UNIMPLEMENTED;
485 return FALSE;
486 }
487
488 /************************************************************************/
489 /* DxEngSetPaletteState */
490 /************************************************************************/
491 DWORD DxEngSetPaletteState(DWORD x1, DWORD x2, DWORD x3)
492 {
493 UNIMPLEMENTED;
494 return FALSE;
495 }
496
497 /************************************************************************/
498 /* DxEngGetRedirectionBitmap */
499 /************************************************************************/
500 DWORD DxEngGetRedirectionBitmap(DWORD x1)
501 {
502 UNIMPLEMENTED;
503 return FALSE;
504 }
505
506 /************************************************************************/
507 /* DxEngLoadImage */
508 /************************************************************************/
509 DWORD DxEngLoadImage(DWORD x1,DWORD x2)
510 {
511 UNIMPLEMENTED;
512 return FALSE;
513 }
514
515 /************************************************************************/
516 /* DxEngIncDispUniq */
517 /************************************************************************/
518 DWORD DxEngIncDispUniq()
519 {
520 UNIMPLEMENTED;
521 return FALSE;
522 }
523
524