2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Native DirectDraw implementation
5 * FILE: subsys/win32k/ntddraw/ddraw.c
6 * PROGRAMER: Peter Bajusz (hyp-x@stormregion.com)
8 * 25-10-2003 PB Created
16 /************************************************************************/
17 /* DIRECT DRAW OBJECT */
18 /************************************************************************/
21 DD_Cleanup(PVOID ObjectBody
)
23 PDD_DIRECTDRAW pDD
= (PDD_DIRECTDRAW
)ObjectBody
;
24 pDD
->DrvDisableDirectDraw(pDD
->Global
.dhpdev
);
28 HANDLE STDCALL
NtGdiDdCreateDirectDrawObject(
32 DD_CALLBACKS callbacks
;
33 DD_SURFACECALLBACKS surface_callbacks
;
34 DD_PALETTECALLBACKS palette_callbacks
;
36 RtlZeroMemory(&callbacks
, sizeof(callbacks
));
37 callbacks
.dwSize
= sizeof(callbacks
);
38 RtlZeroMemory(&surface_callbacks
, sizeof(surface_callbacks
));
39 surface_callbacks
.dwSize
= sizeof(surface_callbacks
);
40 RtlZeroMemory(&palette_callbacks
, sizeof(palette_callbacks
));
41 palette_callbacks
.dwSize
= sizeof(palette_callbacks
);
43 DC
*pDC
= DC_LockDc(hdc
);
47 if (!pDC
->DriverFunctions
.EnableDirectDraw
)
49 // Driver doesn't support DirectDraw
54 BOOL success
= pDC
->DriverFunctions
.EnableDirectDraw(
55 pDC
->PDev
, &callbacks
, &surface_callbacks
, &palette_callbacks
);
59 // DirectDraw creation failed
64 HANDLE hDirectDraw
= GDIOBJ_AllocObj(GDI_OBJECT_TYPE_DIRECTDRAW
);
72 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDraw
, GDI_OBJECT_TYPE_DIRECTDRAW
);
81 pDirectDraw
->Global
.dhpdev
= pDC
->PDev
;
82 pDirectDraw
->Local
.lpGbl
= &pDirectDraw
->Global
;
84 pDirectDraw
->DrvGetDirectDrawInfo
= pDC
->DriverFunctions
.GetDirectDrawInfo
;
85 pDirectDraw
->DrvDisableDirectDraw
= pDC
->DriverFunctions
.DisableDirectDraw
;
87 /* DD_CALLBACKS setup */
88 pDirectDraw
->DD
.dwFlags
= callbacks
.dwFlags
;
90 /* DestroyDriver Unsuse in win2k or higher */
91 if (callbacks
.dwFlags
& DDHAL_CB32_DESTROYDRIVER
)
92 pDirectDraw
->DD
.DestroyDriver
= callbacks
.DestroyDriver
;
93 if (callbacks
.dwFlags
& DDHAL_CB32_CREATESURFACE
)
94 pDirectDraw
->DD
.CreateSurface
= callbacks
.CreateSurface
;
95 if (callbacks
.dwFlags
& DDHAL_CB32_SETCOLORKEY
)
96 pDirectDraw
->DD
.SetColorKey
= callbacks
.SetColorKey
;
97 if (callbacks
.dwFlags
& DDHAL_CB32_SETMODE
)
98 pDirectDraw
->DD
.SetMode
= callbacks
.SetMode
;
99 if (callbacks
.dwFlags
& DDHAL_CB32_WAITFORVERTICALBLANK
)
100 pDirectDraw
->DD
.WaitForVerticalBlank
= callbacks
.WaitForVerticalBlank
;
101 if (callbacks
.dwFlags
& DDHAL_CB32_CANCREATESURFACE
)
102 pDirectDraw
->DD
.CanCreateSurface
= callbacks
.CanCreateSurface
;
103 if (callbacks
.dwFlags
& DDHAL_CB32_CREATEPALETTE
)
104 pDirectDraw
->DD
.CreatePalette
= callbacks
.CreatePalette
;
105 if (callbacks
.dwFlags
& DDHAL_CB32_GETSCANLINE
)
106 pDirectDraw
->DD
.GetScanLine
= callbacks
.GetScanLine
;
107 if (callbacks
.dwFlags
& DDHAL_CB32_MAPMEMORY
)
108 pDirectDraw
->DD
.MapMemory
= callbacks
.MapMemory
;
110 /* Surface Callbacks */
111 pDirectDraw
->Surf
.dwFlags
= surface_callbacks
.dwFlags
;
113 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_DESTROYSURFACE
)
114 pDirectDraw
->Surf
.DestroySurface
= surface_callbacks
.DestroySurface
;
115 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_FLIP
)
116 pDirectDraw
->Surf
.Flip
= surface_callbacks
.Flip
;
117 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_SETCLIPLIST
)
118 pDirectDraw
->Surf
.SetClipList
= surface_callbacks
.SetClipList
;
119 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_LOCK
)
120 pDirectDraw
->Surf
.Lock
= surface_callbacks
.Lock
;
121 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_UNLOCK
)
122 pDirectDraw
->Surf
.Unlock
= surface_callbacks
.Unlock
;
123 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_BLT
)
124 pDirectDraw
->Surf
.Blt
= surface_callbacks
.Blt
;
125 /* DD Callbacks SetColorKey is same as Surface callback SetColorKey */
126 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_SETCOLORKEY
)
127 pDirectDraw
->Surf
.SetColorKey
= surface_callbacks
.SetColorKey
;
128 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_ADDATTACHEDSURFACE
)
129 pDirectDraw
->Surf
.AddAttachedSurface
= surface_callbacks
.AddAttachedSurface
;
130 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_GETBLTSTATUS
)
131 pDirectDraw
->Surf
.GetBltStatus
= surface_callbacks
.GetBltStatus
;
132 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_GETFLIPSTATUS
)
133 pDirectDraw
->Surf
.GetFlipStatus
= surface_callbacks
.GetFlipStatus
;
134 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_UPDATEOVERLAY
)
135 pDirectDraw
->Surf
.UpdateOverlay
= surface_callbacks
.UpdateOverlay
;
136 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_SETOVERLAYPOSITION
)
137 pDirectDraw
->Surf
.SetOverlayPosition
= surface_callbacks
.SetOverlayPosition
;
138 if (surface_callbacks
.dwFlags
& DDHAL_SURFCB32_SETPALETTE
)
139 pDirectDraw
->Surf
.SetPalette
= surface_callbacks
.SetPalette
;
141 /* Palette Callbacks */
142 pDirectDraw
->Pal
.dwFlags
= palette_callbacks
.dwFlags
;
143 if (palette_callbacks
.dwFlags
& DDHAL_PALCB32_DESTROYPALETTE
)
144 pDirectDraw
->Pal
.DestroyPalette
= palette_callbacks
.DestroyPalette
;
145 if (palette_callbacks
.dwFlags
& DDHAL_PALCB32_SETENTRIES
)
146 pDirectDraw
->Pal
.SetEntries
= palette_callbacks
.SetEntries
;
148 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
154 BOOL STDCALL
NtGdiDdDeleteDirectDrawObject(
155 HANDLE hDirectDrawLocal
158 return GDIOBJ_FreeObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
161 BOOL STDCALL
NtGdiDdQueryDirectDrawObject(
162 HANDLE hDirectDrawLocal
,
163 DD_HALINFO
*pHalInfo
,
164 DWORD
*pCallBackFlags
,
165 PD3DNTHAL_CALLBACKS puD3dCallbacks
,
166 PD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData
,
167 PDD_D3DBUFCALLBACKS puD3dBufferCallbacks
,
168 LPDDSURFACEDESC puD3dTextureFormats
,
170 VIDEOMEMORY
*puvmList
,
175 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
179 BOOL success
= pDirectDraw
->DrvGetDirectDrawInfo(
180 pDirectDraw
->Global
.dhpdev
,
189 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
193 if (pHalInfo
->lpD3DHALCallbacks
)
195 RtlMoveMemory(puD3dCallbacks
, pHalInfo
->lpD3DHALCallbacks
, sizeof(D3DNTHAL_CALLBACKS
));
196 pDirectDraw
->D3dContextCreate
= puD3dCallbacks
->ContextCreate
;
197 pDirectDraw
->D3dContextDestroy
= puD3dCallbacks
->ContextDestroy
;
200 if (pHalInfo
->lpD3DGlobalDriverData
)
202 RtlMoveMemory(puD3dDriverData
, pHalInfo
->lpD3DGlobalDriverData
, sizeof(D3DNTHAL_GLOBALDRIVERDATA
));
205 if (pHalInfo
->lpD3DBufCallbacks
)
207 RtlMoveMemory(puD3dBufferCallbacks
, pHalInfo
->lpD3DBufCallbacks
, sizeof(DD_D3DBUFCALLBACKS
));
208 pDirectDraw
->DdCanCreateD3DBuffer
= puD3dBufferCallbacks
->CanCreateD3DBuffer
;
209 pDirectDraw
->DdCreateD3DBuffer
= puD3dBufferCallbacks
->CreateD3DBuffer
;
210 pDirectDraw
->DdDestroyD3DBuffer
= puD3dBufferCallbacks
->DestroyD3DBuffer
;
211 pDirectDraw
->DdLockD3DBuffer
= puD3dBufferCallbacks
->LockD3DBuffer
;
212 pDirectDraw
->DdUnlockD3DBuffer
= puD3dBufferCallbacks
->UnlockD3DBuffer
;
216 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
222 /************************************************************************/
224 /* FIXME NtGdiDdCreateSurface we do not call to ddCreateSurface */
225 /************************************************************************/
227 DWORD STDCALL
NtGdiDdCreateSurface(
228 HANDLE hDirectDrawLocal
,
230 DDSURFACEDESC
*puSurfaceDescription
,
231 DD_SURFACE_GLOBAL
*puSurfaceGlobalData
,
232 DD_SURFACE_LOCAL
*puSurfaceLocalData
,
233 DD_SURFACE_MORE
*puSurfaceMoreData
,
234 PDD_CREATESURFACEDATA puCreateSurfaceData
,
238 DWORD ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
239 /* DD_CREATESURFACEDATA surf; */
241 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
242 if (pDirectDraw
== NULL
)
243 return DDHAL_DRIVER_NOTHANDLED
;
245 if (!(pDirectDraw
->DD
.dwFlags
& DDHAL_CB32_CANCREATESURFACE
))
246 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
251 ddRVal = pDirectDraw->DD.CreateSurface(&surf);
255 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
259 DWORD STDCALL
NtGdiDdWaitForVerticalBlank(
260 HANDLE hDirectDrawLocal
,
261 PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData
265 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
266 if (pDirectDraw
== NULL
)
267 return DDHAL_DRIVER_NOTHANDLED
;
269 if (!(pDirectDraw
->DD
.dwFlags
& DDHAL_CB32_WAITFORVERTICALBLANK
))
270 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
272 ddRVal
= pDirectDraw
->DD
.WaitForVerticalBlank(puWaitForVerticalBlankData
);
274 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
278 DWORD STDCALL
NtGdiDdCanCreateSurface(
279 HANDLE hDirectDrawLocal
,
280 PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
285 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
286 if (pDirectDraw
== NULL
)
287 return DDHAL_DRIVER_NOTHANDLED
;
289 if (!(pDirectDraw
->DD
.dwFlags
& DDHAL_CB32_CANCREATESURFACE
))
290 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
292 ddRVal
= pDirectDraw
->DD
.CanCreateSurface(puCanCreateSurfaceData
);
294 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
298 DWORD STDCALL
NtGdiDdGetScanLine(
299 HANDLE hDirectDrawLocal
,
300 PDD_GETSCANLINEDATA puGetScanLineData
305 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
306 if (pDirectDraw
== NULL
)
307 return DDHAL_DRIVER_NOTHANDLED
;
309 if (!(pDirectDraw
->DD
.dwFlags
& DDHAL_CB32_GETSCANLINE
))
310 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
312 ddRVal
= pDirectDraw
->DD
.GetScanLine(puGetScanLineData
);
314 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
320 /************************************************************************/
321 /* Surface CALLBACKS */
323 /* NtGdiDdDestroySurface */
324 /************************************************************************/
326 DWORD STDCALL
NtGdiDdDestroySurface(
333 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hSurface
, GDI_OBJECT_TYPE_DIRECTDRAW
);
334 if (pDirectDraw
== NULL
)
335 return DDHAL_DRIVER_NOTHANDLED
;
337 if (!(pDirectDraw
->Surf
.dwFlags
& DDHAL_SURFCB32_DESTROYSURFACE
))
338 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
341 /* DD_DESTROYSURFACEDATA DestroySurf; */
343 /* ddRVal = pDirectDraw->Surf.DestroySurface(DestroySurf); */
346 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
350 DWORD STDCALL
NtGdiDdFlip(
351 HANDLE hSurfaceCurrent
,
352 HANDLE hSurfaceTarget
,
353 HANDLE hSurfaceCurrentLeft
,
354 HANDLE hSurfaceTargetLeft
,
355 PDD_FLIPDATA puFlipData
360 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hSurfaceTarget
, GDI_OBJECT_TYPE_DIRECTDRAW
);
361 if (pDirectDraw
== NULL
)
362 return DDHAL_DRIVER_NOTHANDLED
;
364 if (!(pDirectDraw
->Surf
.dwFlags
& DDHAL_SURFCB32_FLIP
))
365 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
367 ddRVal
= pDirectDraw
->Surf
.Flip(puFlipData
);
369 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
373 DWORD STDCALL
NtGdiDdLock(
375 PDD_LOCKDATA puLockData
,
381 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hSurface
, GDI_OBJECT_TYPE_DIRECTDRAW
);
382 if (pDirectDraw
== NULL
)
383 return DDHAL_DRIVER_NOTHANDLED
;
385 if (!(pDirectDraw
->Surf
.dwFlags
& DDHAL_SURFCB32_LOCK
))
386 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
388 ddRVal
= pDirectDraw
->Surf
.Lock(puLockData
);
390 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
395 DWORD STDCALL
NtGdiDdSetColorKey(
397 PDD_SETCOLORKEYDATA puSetColorKeyData
402 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hSurface
, GDI_OBJECT_TYPE_DIRECTDRAW
);
403 if (pDirectDraw
== NULL
)
404 return DDHAL_DRIVER_NOTHANDLED
;
406 if (!(pDirectDraw
->Surf
.dwFlags
& DDHAL_SURFCB32_SETCOLORKEY
))
407 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
409 ddRVal
= pDirectDraw
->Surf
.SetColorKey(puSetColorKeyData
);
411 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
415 DWORD STDCALL
NtGdiDdBlt(
418 PDD_BLTDATA puBltData
423 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hSurfaceDest
, GDI_OBJECT_TYPE_DIRECTDRAW
);
424 if (pDirectDraw
== NULL
)
425 return DDHAL_DRIVER_NOTHANDLED
;
427 if (!(pDirectDraw
->Surf
.dwFlags
& DDHAL_SURFCB32_BLT
))
428 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
430 ddRVal
= pDirectDraw
->Surf
.Blt(puBltData
);
432 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
437 DWORD STDCALL
NtGdiDdUpdateOverlay(
438 HANDLE hSurfaceDestination
,
439 HANDLE hSurfaceSource
,
440 PDD_UPDATEOVERLAYDATA puUpdateOverlayData
445 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hSurfaceDestination
, GDI_OBJECT_TYPE_DIRECTDRAW
);
446 if (pDirectDraw
== NULL
)
447 return DDHAL_DRIVER_NOTHANDLED
;
449 if (!(pDirectDraw
->Surf
.dwFlags
& DDHAL_SURFCB32_UPDATEOVERLAY
))
450 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
452 ddRVal
= pDirectDraw
->Surf
.UpdateOverlay(puUpdateOverlayData
);
454 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
458 DWORD STDCALL
NtGdiDdUnlock(
460 PDD_UNLOCKDATA puUnlockData
465 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hSurface
, GDI_OBJECT_TYPE_DIRECTDRAW
);
466 if (pDirectDraw
== NULL
)
467 return DDHAL_DRIVER_NOTHANDLED
;
469 if (!(pDirectDraw
->Surf
.dwFlags
& DDHAL_SURFCB32_UPDATEOVERLAY
))
470 ddRVal
= DDHAL_DRIVER_NOTHANDLED
;
472 ddRVal
= pDirectDraw
->Surf
.Unlock(puUnlockData
);
474 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
479 /************************************************************************/
481 /************************************************************************/
484 DDSURF_Cleanup(PVOID pDDSurf
)
487 * PDD_SURFACE pDDSurf = PVOID pDDSurf
492 HANDLE STDCALL
NtGdiDdCreateSurfaceObject(
493 HANDLE hDirectDrawLocal
,
495 PDD_SURFACE_LOCAL puSurfaceLocal
,
496 PDD_SURFACE_MORE puSurfaceMore
,
497 PDD_SURFACE_GLOBAL puSurfaceGlobal
,
501 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
506 hSurface
= GDIOBJ_AllocObj(GDI_OBJECT_TYPE_DD_SURFACE
);
508 PDD_SURFACE pSurface
= GDIOBJ_LockObj(hSurface
, GDI_OBJECT_TYPE_DD_SURFACE
);
509 /* FIXME - Handle pSurface == NULL!!!! */
511 RtlMoveMemory(&pSurface
->Local
, puSurfaceLocal
, sizeof(DD_SURFACE_LOCAL
));
512 RtlMoveMemory(&pSurface
->More
, puSurfaceMore
, sizeof(DD_SURFACE_MORE
));
513 RtlMoveMemory(&pSurface
->Global
, puSurfaceGlobal
, sizeof(DD_SURFACE_GLOBAL
));
514 pSurface
->Local
.lpGbl
= &pSurface
->Global
;
515 pSurface
->Local
.lpSurfMore
= &pSurface
->More
;
516 pSurface
->Local
.lpAttachList
= NULL
;
517 pSurface
->Local
.lpAttachListFrom
= NULL
;
518 pSurface
->More
.lpVideoPort
= NULL
;
519 // FIXME: figure out how to use this
520 pSurface
->bComplete
= bComplete
;
522 GDIOBJ_UnlockObjByPtr(pSurface
);
523 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
528 BOOL STDCALL
NtGdiDdDeleteSurfaceObject(
532 return GDIOBJ_FreeObj(hSurface
, GDI_OBJECT_TYPE_DD_SURFACE
);
537 /************************************************************************/
538 /* DIRECT DRAW SURFACR END */
539 /************************************************************************/
543 BOOL STDCALL NtGdiDdAttachSurface(
548 PDD_SURFACE pSurfaceFrom = GDIOBJ_LockObj(hSurfaceFrom, GDI_OBJECT_TYPE_DD_SURFACE);
551 PDD_SURFACE pSurfaceTo = GDIOBJ_LockObj(hSurfaceTo, GDI_OBJECT_TYPE_DD_SURFACE);
554 GDIOBJ_UnlockObjByPtr(pSurfaceFrom);
558 if (pSurfaceFrom->Local.lpAttachListFrom)
560 pSurfaceFrom->Local.lpAttachListFrom = pSurfaceFrom->AttachListFrom;
563 GDIOBJ_UnlockObjByPtr(pSurfaceFrom);
564 GDIOBJ_UnlockObjByPtr(pSurfaceTo);
571 DWORD STDCALL
NtGdiDdGetDriverInfo(
572 HANDLE hDirectDrawLocal
,
573 PDD_GETDRIVERINFODATA puGetDriverInfoData
)
578 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
580 ddRVal
= pDirectDraw
->DdGetDriverInfo(puGetDriverInfoData
);
582 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
598 DWORD STDCALL
NtGdiDdGetAvailDriverMemory(
599 HANDLE hDirectDrawLocal
,
600 PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData
605 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDrawLocal
, GDI_OBJECT_TYPE_DIRECTDRAW
);
607 ddRVal
= pDirectDraw
->DdGetAvailDriverMemory(puGetAvailDriverMemoryData
);
609 GDIOBJ_UnlockObjByPtr(pDirectDraw
);
617 DWORD STDCALL
NtGdiDdSetExclusiveMode(
619 PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData
624 PDD_DIRECTDRAW pDirectDraw
= GDIOBJ_LockObj(hDirectDraw
, GDI_OBJECT_TYPE_DIRECTDRAW
);
626 ddRVal
= pDirectDraw
->DdSetExclusiveMode(puSetExclusiveModeData
);
628 GDIOBJ_UnlockObjByPtr(pDirectDraw
);