Use new share handle table info.
[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 return GdiHandleTable->flDeviceUniq;
100 }
101
102 ULONG gulVisRgnUniqueness; // Inc count everytime client region is updated.
103
104 /************************************************************************/
105 /* DxEngVisRgnUniq */
106 /************************************************************************/
107 /* Notes : return the VisRgnUniq counter for win32k */
108 ULONG
109 DxEngVisRgnUniq()
110 {
111 return gulVisRgnUniqueness;
112 }
113
114 /************************************************************************/
115 /* DxEngEnumerateHdev */
116 /************************************************************************/
117 /* Enumate all drivers in win32k */
118 HDEV *
119 DxEngEnumerateHdev(HDEV *hdev)
120 {
121 /* FIXME Enumate all drivers in win32k */
122 UNIMPLEMENTED;
123 return FALSE;
124 }
125
126 /************************************************************************/
127 /* DxEngGetDeviceGammaRamp */
128 /************************************************************************/
129 /* same protypes NtGdiEngGetDeviceGammaRamp, diffent is we skipp the user mode checks and seh */
130 BOOL
131 DxEngGetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)
132 {
133 /* FIXME redirect it to NtGdiEngGetDeviceGammaRamp internal call */
134 UNIMPLEMENTED;
135 return FALSE;
136 }
137
138
139 /*++
140 * @name DxEngLockDC
141 * @implemented
142 *
143 * The function DxEngLockDC lock a hdc from dxg.sys
144 *
145 * @param HDC hDC
146 * The handle we need want lock
147 *
148 * @return
149 * This api return PDC or NULL depns if it sussess lock the hdc or not
150 *
151 * @remarks.
152 * none
153 *
154 *--*/
155 PDC
156 DxEngLockDC(HDC hDC)
157 {
158 return DC_LockDc(hDC);
159 }
160
161
162 /*++
163 * @name DxEngUnlockDC
164 * @implemented
165 *
166 * The function DxEngUnlockDC Unlock a pDC (hdc) from dxg.sys
167
168 * @param PDC pDC
169 * The handle we need unlock
170 *
171 * @return
172 * This api always return TRUE if it sussess or not
173 *
174 * @remarks.
175 * none
176 *
177 *--*/
178 BOOL
179 DxEngUnlockDC(PDC pDC)
180 {
181 DC_UnlockDc(pDC);
182 return TRUE;
183 }
184
185
186 /************************************************************************/
187 /* DxEngCreateMemoryDC */
188 /************************************************************************/
189 DWORD DxEngCreateMemoryDC(DWORD x1)
190 {
191 UNIMPLEMENTED;
192 return FALSE;
193 }
194
195 /************************************************************************/
196 /* DxEngScreenAccessCheck */
197 /************************************************************************/
198 DWORD DxEngScreenAccessCheck()
199 {
200 UNIMPLEMENTED;
201 return FALSE;
202 }
203
204 /************************************************************************/
205 /* DxEngLockShareSem */
206 /************************************************************************/
207 DWORD DxEngLockShareSem()
208 {
209 UNIMPLEMENTED;
210 return FALSE;
211 }
212
213 /************************************************************************/
214 /* DxEngUnlockShareSem */
215 /************************************************************************/
216 DWORD DxEngUnlockShareSem()
217 {
218 UNIMPLEMENTED;
219 return FALSE;
220 }
221
222 /************************************************************************/
223 /* DxEngLockHdev */
224 /************************************************************************/
225 DWORD DxEngLockHdev(DWORD x1)
226 {
227 UNIMPLEMENTED;
228 return FALSE;
229 }
230
231 /************************************************************************/
232 /* DxEngUnlockHdev */
233 /************************************************************************/
234 DWORD DxEngUnlockHdev(DWORD x1)
235 {
236 UNIMPLEMENTED;
237 return FALSE;
238 }
239
240 /************************************************************************/
241 /* DxEngReferenceHdev */
242 /************************************************************************/
243 DWORD DxEngReferenceHdev(DWORD x1)
244 {
245 UNIMPLEMENTED;
246 return FALSE;
247 }
248
249 /************************************************************************/
250 /* DxEngIsHdevLockedByCurrentThread */
251 /************************************************************************/
252 DWORD DxEngIsHdevLockedByCurrentThread(DWORD x1)
253 {
254 UNIMPLEMENTED;
255 return FALSE;
256 }
257
258
259 /************************************************************************/
260 /* DxEngUnreferenceHdev */
261 /************************************************************************/
262 DWORD DxEngUnreferenceHdev(DWORD x1)
263 {
264 UNIMPLEMENTED;
265 return FALSE;
266 }
267
268 /************************************************************************/
269 /* DxEngSetDeviceGammaRamp */
270 /************************************************************************/
271 DWORD DxEngSetDeviceGammaRamp(DWORD x1, DWORD x2, DWORD x3)
272 {
273 UNIMPLEMENTED;
274 return FALSE;
275 }
276
277 /************************************************************************/
278 /* DxEngSpTearDownSprites */
279 /************************************************************************/
280 DWORD DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
281 {
282 UNIMPLEMENTED;
283 return FALSE;
284 }
285
286 /************************************************************************/
287 /* DxEngSpUnTearDownSprites */
288 /************************************************************************/
289 DWORD DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
290 {
291 UNIMPLEMENTED;
292 return FALSE;
293 }
294
295 /************************************************************************/
296 /* DxEngSpSpritesVisible */
297 /************************************************************************/
298 DWORD DxEngSpSpritesVisible(DWORD x1)
299 {
300 UNIMPLEMENTED;
301 return FALSE;
302 }
303
304 /************************************************************************/
305 /* DxEngGetHdevData */
306 /************************************************************************/
307 DWORD
308 DxEngGetHdevData(PEDD_DIRECTDRAW_GLOBAL pEDDgpl,
309 DWORD Index)
310 {
311 UNIMPLEMENTED;
312 return 0;
313 }
314
315 /************************************************************************/
316 /* DxEngSetHdevData */
317 /************************************************************************/
318 DWORD DxEngSetHdevData(DWORD x1, DWORD x2, DWORD x3)
319 {
320 UNIMPLEMENTED;
321 return FALSE;
322 }
323
324 /************************************************************************/
325 /* DxEngGetDesktopDC */
326 /************************************************************************/
327 DWORD DxEngGetDesktopDC(DWORD x1, DWORD x2, DWORD x3)
328 {
329 UNIMPLEMENTED;
330 return FALSE;
331 }
332
333 /************************************************************************/
334 /* DxEngDeleteDC */
335 /************************************************************************/
336 DWORD DxEngDeleteDC(DWORD x1, DWORD x2)
337 {
338 UNIMPLEMENTED;
339 return FALSE;
340 }
341
342 /************************************************************************/
343 /* DxEngCleanDC */
344 /************************************************************************/
345 DWORD DxEngCleanDC(DWORD x1)
346 {
347 UNIMPLEMENTED;
348 return FALSE;
349 }
350
351 /************************************************************************/
352 /* DxEngSetDCOwner */
353 /************************************************************************/
354 DWORD DxEngSetDCOwner(DWORD x1, DWORD x2)
355 {
356 UNIMPLEMENTED;
357 return FALSE;
358 }
359
360 /************************************************************************/
361 /* DxEngSetDCState */
362 /************************************************************************/
363 DWORD DxEngSetDCState(DWORD x1, DWORD x2, DWORD x3)
364 {
365 UNIMPLEMENTED;
366 return FALSE;
367 }
368
369 /************************************************************************/
370 /* DxEngGetDCState */
371 /************************************************************************/
372 DWORD
373 DxEngGetDCState(HDC hDC,
374 DWORD type)
375 {
376 PEDD_DIRECTDRAW_GLOBAL pEDDgpl = NULL;
377 PDC pDC = DC_LockDc(hDC);
378 if (pDC)
379 {
380 switch (type)
381 {
382 case 1:
383 UNIMPLEMENTED;
384 return 0;
385 case 2:
386 UNIMPLEMENTED;
387 return 0;
388 case 3:
389 {
390 PGDIDEVICE GDIDevice = (PGDIDEVICE)pDC->pPDev;
391 pEDDgpl = GDIDevice->pEDDgpl;
392 DC_UnlockDc(pDC);
393 return (DWORD)pEDDgpl;
394 }
395 default:
396 UNIMPLEMENTED;
397 break;
398 }
399 }
400
401 return 0;
402 }
403
404 /************************************************************************/
405 /* DxEngSelectBitmap */
406 /************************************************************************/
407 DWORD DxEngSelectBitmap(DWORD x1, DWORD x2)
408 {
409 UNIMPLEMENTED;
410 return FALSE;
411 }
412
413 /************************************************************************/
414 /* DxEngSetBitmapOwner */
415 /************************************************************************/
416 DWORD DxEngSetBitmapOwner(DWORD x1, DWORD x2)
417 {
418 UNIMPLEMENTED;
419 return FALSE;
420 }
421
422 /************************************************************************/
423 /* DxEngDeleteSurface */
424 /************************************************************************/
425 DWORD DxEngDeleteSurface(DWORD x1)
426 {
427 UNIMPLEMENTED;
428 return FALSE;
429 }
430
431 /************************************************************************/
432 /* DxEngGetSurfaceData */
433 /************************************************************************/
434 DWORD DxEngGetSurfaceData(DWORD x1, DWORD x2)
435 {
436 UNIMPLEMENTED;
437 return FALSE;
438 }
439
440 /************************************************************************/
441 /* DxEngAltLockSurface */
442 /************************************************************************/
443 DWORD DxEngAltLockSurface(DWORD x1)
444 {
445 UNIMPLEMENTED;
446 return FALSE;
447 }
448
449 /************************************************************************/
450 /* DxEngUploadPaletteEntryToSurface */
451 /************************************************************************/
452 DWORD DxEngUploadPaletteEntryToSurface(DWORD x1, DWORD x2,DWORD x3, DWORD x4)
453 {
454 UNIMPLEMENTED;
455 return FALSE;
456 }
457
458 /************************************************************************/
459 /* DxEngMarkSurfaceAsDirectDraw */
460 /************************************************************************/
461 DWORD DxEngMarkSurfaceAsDirectDraw(DWORD x1, DWORD x2)
462 {
463 UNIMPLEMENTED;
464 return FALSE;
465 }
466
467 /************************************************************************/
468 /* DxEngSelectPaletteToSurface */
469 /************************************************************************/
470 DWORD DxEngSelectPaletteToSurface(DWORD x1, DWORD x2)
471 {
472 UNIMPLEMENTED;
473 return FALSE;
474 }
475
476 /************************************************************************/
477 /* DxEngSyncPaletteTableWithDevice */
478 /************************************************************************/
479 DWORD DxEngSyncPaletteTableWithDevice(DWORD x1, DWORD x2)
480 {
481 UNIMPLEMENTED;
482 return FALSE;
483 }
484
485 /************************************************************************/
486 /* DxEngSetPaletteState */
487 /************************************************************************/
488 DWORD DxEngSetPaletteState(DWORD x1, DWORD x2, DWORD x3)
489 {
490 UNIMPLEMENTED;
491 return FALSE;
492 }
493
494 /************************************************************************/
495 /* DxEngGetRedirectionBitmap */
496 /************************************************************************/
497 DWORD DxEngGetRedirectionBitmap(DWORD x1)
498 {
499 UNIMPLEMENTED;
500 return FALSE;
501 }
502
503 /************************************************************************/
504 /* DxEngLoadImage */
505 /************************************************************************/
506 DWORD DxEngLoadImage(DWORD x1,DWORD x2)
507 {
508 UNIMPLEMENTED;
509 return FALSE;
510 }
511
512 /************************************************************************/
513 /* DxEngIncDispUniq */
514 /************************************************************************/
515 DWORD DxEngIncDispUniq()
516 {
517 UNIMPLEMENTED;
518 return FALSE;
519 }
520
521