ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

dxeng.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:          ReactOS Win32 Subsystem
00003  * LICENSE:          GPL - See COPYING in the top level directory
00004  * FILE:             subsystems/win32/win32k/ntddraw/dxeng.c
00005  * PURPOSE:          Implementation of DxEng functions
00006  * PROGRAMMERS:      Magnus Olsen (magnus@greatlord.com)
00007  */
00008 
00009 #include <win32k.h>
00010 #include <debug.h>
00011 
00012 HSEMAPHORE  ghsemShareDevLock = NULL;
00013 
00014 ULONG gcEngFuncs = DXENG_INDEX_DxEngLoadImage + 1;
00015 DRVFN gaEngFuncs [] =
00016 {
00017     {0, (PFN) NULL},
00018     {DXENG_INDEX_DxEngNUIsTermSrv, (PFN)DxEngNUIsTermSrv},
00019     {DXENG_INDEX_DxEngScreenAccessCheck, (PFN)DxEngScreenAccessCheck},
00020     {DXENG_INDEX_DxEngRedrawDesktop, (PFN)DxEngRedrawDesktop},
00021     {DXENG_INDEX_DxEngDispUniq, (PFN)DxEngDispUniq},
00022     {DXENG_INDEX_DxEngIncDispUniq, (PFN)DxEngIncDispUniq},
00023     {DXENG_INDEX_DxEngVisRgnUniq, (PFN)DxEngVisRgnUniq},
00024     {DXENG_INDEX_DxEngLockShareSem, (PFN)DxEngLockShareSem},
00025     {DXENG_INDEX_DxEngUnlockShareSem, (PFN)DxEngUnlockShareSem},
00026     {DXENG_INDEX_DxEngEnumerateHdev, (PFN)DxEngEnumerateHdev},
00027     {DXENG_INDEX_DxEngLockHdev, (PFN)DxEngLockHdev},
00028     {DXENG_INDEX_DxEngUnlockHdev, (PFN)DxEngUnlockHdev},
00029     {DXENG_INDEX_DxEngIsHdevLockedByCurrentThread, (PFN)DxEngIsHdevLockedByCurrentThread},
00030     {DXENG_INDEX_DxEngReferenceHdev, (PFN)DxEngReferenceHdev},
00031     {DXENG_INDEX_DxEngUnreferenceHdev, (PFN)DxEngUnreferenceHdev},
00032     {DXENG_INDEX_DxEngGetDeviceGammaRamp, (PFN)DxEngGetDeviceGammaRamp},
00033     {DXENG_INDEX_DxEngSetDeviceGammaRamp, (PFN)DxEngSetDeviceGammaRamp},
00034     {DXENG_INDEX_DxEngSpTearDownSprites, (PFN)DxEngSpTearDownSprites},
00035     {DXENG_INDEX_DxEngSpUnTearDownSprites, (PFN)DxEngSpUnTearDownSprites},
00036     {DXENG_INDEX_DxEngSpSpritesVisible, (PFN)DxEngSpSpritesVisible},
00037     {DXENG_INDEX_DxEngGetHdevData, (PFN)DxEngGetHdevData},
00038     {DXENG_INDEX_DxEngSetHdevData, (PFN)DxEngSetHdevData},
00039     {DXENG_INDEX_DxEngCreateMemoryDC, (PFN)DxEngCreateMemoryDC},
00040     {DXENG_INDEX_DxEngGetDesktopDC, (PFN)DxEngGetDesktopDC},
00041     {DXENG_INDEX_DxEngDeleteDC, (PFN)DxEngDeleteDC},
00042     {DXENG_INDEX_DxEngCleanDC, (PFN)DxEngCleanDC},
00043     {DXENG_INDEX_DxEngSetDCOwner, (PFN)DxEngSetDCOwner},
00044     {DXENG_INDEX_DxEngLockDC, (PFN)DxEngLockDC},
00045     {DXENG_INDEX_DxEngUnlockDC, (PFN)DxEngUnlockDC},
00046     {DXENG_INDEX_DxEngSetDCState, (PFN)DxEngSetDCState},
00047     {DXENG_INDEX_DxEngGetDCState, (PFN)DxEngGetDCState},
00048     {DXENG_INDEX_DxEngSelectBitmap, (PFN)DxEngSelectBitmap},
00049     {DXENG_INDEX_DxEngSetBitmapOwner, (PFN)DxEngSetBitmapOwner},
00050     {DXENG_INDEX_DxEngDeleteSurface, (PFN)DxEngDeleteSurface},
00051     {DXENG_INDEX_DxEngGetSurfaceData, (PFN)DxEngGetSurfaceData},
00052     {DXENG_INDEX_DxEngAltLockSurface, (PFN)DxEngAltLockSurface},
00053     {DXENG_INDEX_DxEngUploadPaletteEntryToSurface, (PFN)DxEngUploadPaletteEntryToSurface},
00054     {DXENG_INDEX_DxEngMarkSurfaceAsDirectDraw, (PFN)DxEngMarkSurfaceAsDirectDraw},
00055     {DXENG_INDEX_DxEngSelectPaletteToSurface, (PFN)DxEngSelectPaletteToSurface},
00056     {DXENG_INDEX_DxEngSyncPaletteTableWithDevice, (PFN)DxEngSyncPaletteTableWithDevice},
00057     {DXENG_INDEX_DxEngSetPaletteState, (PFN)DxEngSetPaletteState},
00058     {DXENG_INDEX_DxEngGetRedirectionBitmap, (PFN)DxEngGetRedirectionBitmap},
00059     {DXENG_INDEX_DxEngLoadImage, (PFN)DxEngLoadImage}
00060 };
00061 
00062 
00063 /*++
00064 * @name DxEngDispUniq
00065 * @implemented
00066 *
00067 * The function DxEngDispUniq returns the DisplayUniqVisrgn counter value from GDI shared memory
00068 *
00069 * @return
00070 * Returns the DisplayUniqVisrgn counter value from GDI shared memory
00071 *
00072 * @remarks.
00073 * none
00074 *
00075 *--*/
00076 ULONG
00077 APIENTRY
00078 DxEngDispUniq()
00079 {
00080     DPRINT1("ReactX Calling : DxEngDispUniq\n");
00081     return GdiHandleTable->flDeviceUniq;
00082 }
00083 
00084 /*++
00085 * @name DxEngGetDeviceGammaRamp
00086 * @implemented
00087 *
00088 * The function DxEngGetDeviceGammaRamp gets the gamma ramp to dxg.sys.
00089 
00090 * @param HDEV hPDev
00091 * The hdev.
00092 *
00093 * @param PGAMMARAMP Ramp
00094 * Pointer to store the gamma ramp value in.
00095 *
00096 * @return
00097 *Returns TRUE for success, FALSE for failure
00098 *
00099 * @remarks.
00100 * None
00101 *
00102 *--*/
00103 BOOL
00104 APIENTRY
00105 DxEngGetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp)
00106 {
00107     DPRINT1("ReactX Calling : DxEngGetDeviceGammaRamp\n");
00108     return IntGetDeviceGammaRamp(hPDev, Ramp);
00109 }
00110 
00111 
00112 /*++
00113 * @name DxEngLockDC
00114 * @implemented
00115 *
00116 * The function DxEngLockDC locks a hdc from dxg.sys
00117 *
00118 * @param HDC hDC
00119 * The handle we want to lock
00120 *
00121 * @return
00122 * Returns PDC if lock succeeded or NULL if it failed.
00123 *
00124 * @remarks.
00125 * none
00126 *
00127 *--*/
00128 PDC
00129 APIENTRY
00130 DxEngLockDC(HDC hDC)
00131 {
00132     DPRINT1("ReactX Calling : DxEngLockDC\n");
00133     return DC_LockDc(hDC);
00134 }
00135 
00136 
00137 /*++
00138 * @name DxEngUnlockDC
00139 * @implemented
00140 *
00141 * The function DxEngUnlockDC unlocks a pDC (hdc) from dxg.sys.
00142 
00143 * @param PDC pDC
00144 * The handle we want to unlock.
00145 *
00146 * @return
00147 * This function returns TRUE no matter what.
00148 *
00149 * @remarks.
00150 * none
00151 *
00152 *--*/
00153 BOOLEAN
00154 APIENTRY
00155 DxEngUnlockDC(PDC pDC)
00156 {
00157     DPRINT1("ReactX Calling : DxEngUnlockDC\n");
00158     DC_UnlockDc(pDC);
00159     return TRUE;
00160 }
00161 
00162 /*++
00163 * @name DxEngLockShareSem
00164 * @implemented
00165 *
00166 * The function DxEngLockShareSem locks a struct of type ghsemShareDevLock that can be shared.
00167 *
00168 * @return
00169 * This function returns TRUE for success and FALSE for failure.
00170 * FALSE must mean the struct has already been locked.
00171 *
00172 * @remarks.
00173 * It is being used in various ntuser* functions and ntgdi*
00174 * ReactOS specific: It is not in use yet?
00175 *SystemResourcesList
00176 *--*/
00177 BOOLEAN
00178 APIENTRY
00179 DxEngLockShareSem()
00180 {
00181     DPRINT1("ReactX Calling : DxEngLockShareSem\n");
00182     if(!ghsemShareDevLock) ghsemShareDevLock = EngCreateSemaphore(); // Hax, should be in dllmain.c
00183     IntGdiAcquireSemaphore(ghsemShareDevLock);
00184     return TRUE;
00185 }
00186 
00187 /*++
00188 * @name DxEngUnlockShareSem
00189 * @implemented
00190 *
00191 * The function DxEngUnlockShareSem unlocks the struct of type ghsemShareDevLock.
00192 *
00193 * @return
00194 * This function returns TRUE no matter what.
00195 *
00196 * @remarks.
00197 * ReactOS specific: It is not in use yet?
00198 *
00199 *--*/
00200 BOOLEAN
00201 APIENTRY
00202 DxEngUnlockShareSem()
00203 {
00204     DPRINT1("ReactX Calling : DxEngUnlockShareSem\n");
00205     IntGdiReleaseSemaphore(ghsemShareDevLock);
00206     return TRUE;
00207 }
00208 
00209 /*++
00210 * @name DxEngSetDeviceGammaRamp
00211 * @implemented
00212 *
00213 * The function DxEngSetDeviceGammaRamp sets gamma ramp from dxg.sys
00214 
00215 * @param HDEV hPDev
00216 * The hdev
00217 *
00218 * @param PGAMMARAMP Ramp
00219 * Value to change gamma ramp to.
00220 *
00221 * @param BOOL Test
00222 * Whether gamma should be tested. TRUE to test, FALSE to not test.
00223 *
00224 * @return
00225 *Returns TRUE for success, FALSE for failure.
00226 *
00227 * @remarks.
00228 * None
00229 *
00230 *--*/
00231 BOOLEAN
00232 APIENTRY
00233 DxEngSetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp, BOOL Test)
00234 {
00235     DPRINT1("ReactX Calling : DxEngSetDeviceGammaRamp\n");
00236     return IntSetDeviceGammaRamp(hPDev, Ramp, Test);
00237 }
00238 
00239 /*++
00240 * @name DxEngGetHdevData
00241 * @implemented
00242 *
00243 * The function DxEngGetHdevData retrieves a value from the HDEV
00244 
00245 * @param HDEV hPDev
00246 * The HDEV
00247 *
00248 * @param DXEGSHDEVDATA Type
00249 * The following typs are supported
00250 * Type                                            Purpose
00251 * DxEGShDevData_Surface      Retrieve pointer to Surface handle.
00252 * DxEGShDevData_hSpooler     See if the device is a spooler driver.
00253 * DxEGShDevData_DitherFmt    Retrieve the device iDitherFormat
00254 * DxEGShDevData_FxCaps       Retrieve the device flGraphicsCaps
00255 * DxEGShDevData_FxCaps2      Retrieve the device flGraphicsCaps2
00256 * DxEGShDevData_DrvFuncs     Retrieve the device DriverFunctions function table
00257 * DxEGShDevData_dhpdev       Retrieve the device hPDev, the real DHPDEV
00258 * DxEGShDevData_eddg         Retrieve the device pEDDgpl
00259 * DxEGShDevData_dd_nCount    Retrieve the device DxDd_nCount
00260 * DxEGShDevData_dd_flags     Retrieve the device DxDd_Flags
00261 * DxEGShDevData_disable      See if the device pdev is disabled
00262 * DxEGShDevData_metadev      See if the device pdev is a meta device
00263 * DxEGShDevData_display      See if the device is the primary display driver
00264 * DxEGShDevData_Parent       Retrieve the ppdevParent
00265 * DxEGShDevData_OpenRefs     Retrieve the pdevOpenRefs counter
00266 * DxEGShDevData_palette      See if the device RC_PALETTE is set
00267 * DxEGShDevData_ldev         ATM we do not support the Loader Device driver structure
00268 * DxEGShDevData_GDev         Retrieve the device pGraphicsDevice
00269 * DxEGShDevData_clonedev     Retrieve the device PDEV_CLONE_DEVICE flag is set or not
00270 *
00271 * @return
00272 * Returns the data we requested
00273 *
00274 * @remarks.
00275 * ReactOS specific: Implementation is incomplete, I do not save the value into the hdev yet.
00276 *
00277 *--*/
00278 DWORD_PTR
00279 APIENTRY
00280 DxEngGetHdevData(HDEV hDev,
00281                  DXEGSHDEVDATA Type)
00282 {
00283     DWORD_PTR retVal = 0;
00284     PPDEVOBJ PDev = (PPDEVOBJ)hDev;
00285 
00286     DPRINT1("ReactX Calling : DxEngGetHdevData DXEGSHDEVDATA : %ld\n", Type);
00287 
00288 #if 1
00289     DPRINT1("HDEV hDev %08lx\n", hDev);
00290 #endif
00291 
00292     switch ( Type )
00293     {
00294       case DxEGShDevData_Surface:
00295         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_Surface\n");
00296         retVal = (DWORD_PTR) PDev->pSurface; // ptr to Surface handle.
00297         break;
00298       case DxEGShDevData_hSpooler:
00299         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_hSpooler\n");
00300         retVal = 0; // (DWORD_PTR) PDev->hSpooler; // If the device is a spooler driver.
00301         break;
00302       case DxEGShDevData_DitherFmt:
00303         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_DitherFmt\n");
00304         retVal = (DWORD_PTR) PDev->devinfo.iDitherFormat;
00305         break;
00306       case DxEGShDevData_FxCaps:
00307         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_FxCaps\n");
00308         retVal = (DWORD_PTR) PDev->devinfo.flGraphicsCaps;
00309         break;
00310       case DxEGShDevData_FxCaps2:
00311         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_FxCaps2\n");
00312         retVal = (DWORD_PTR) PDev->devinfo.flGraphicsCaps2;
00313         break;
00314       case DxEGShDevData_DrvFuncs:
00315         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_DrvFuncs\n");
00316         retVal = (DWORD_PTR) &PDev->DriverFunctions;
00317         break;
00318       case DxEGShDevData_dhpdev:
00319         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dhpdev\n");
00320         retVal = (DWORD_PTR) PDev->dhpdev; // DHPDEV
00321         break;
00322       case DxEGShDevData_eddg:
00323         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_eddg\n");
00324         retVal = (DWORD_PTR) PDev->pEDDgpl;
00325         break;
00326       case DxEGShDevData_dd_nCount:
00327         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dd_nCount\n");
00328         retVal = (DWORD_PTR) PDev->DxDd_nCount;
00329         break;
00330       case DxEGShDevData_dd_flags:
00331         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dd_flags\n");
00332         retVal = (DWORD_PTR) PDev->DxDd_Flags;
00333         break;
00334       case DxEGShDevData_disable:
00335         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_disable\n");
00336         retVal = (DWORD_PTR) PDev->flFlags & PDEV_DISABLED;
00337         break;
00338       case DxEGShDevData_metadev:
00339         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_metadev\n");
00340         retVal = (DWORD_PTR) PDev->flFlags & PDEV_META_DEVICE;
00341         break;
00342       case DxEGShDevData_display:
00343         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_display\n");
00344         retVal = (DWORD_PTR) PDev->flFlags & PDEV_DISPLAY;
00345         break;
00346       case DxEGShDevData_Parent:
00347         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_Parent\n");
00348         retVal = (DWORD_PTR) PDev->ppdevParent;
00349         break;
00350       case DxEGShDevData_OpenRefs:
00351         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_OpenRefs\n");
00352         retVal = (DWORD_PTR) PDev->cPdevOpenRefs != 0;
00353         break;
00354       case DxEGShDevData_palette:
00355         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_palette\n");
00356         retVal = (DWORD_PTR) PDev->gdiinfo.flRaster & RC_PALETTE;
00357         break;
00358       case DxEGShDevData_ldev:
00359           DPRINT1("DxEGShDevData_ldev not supported yet\n");
00360       // ATM we do not support the Loader Device driver structure.
00361 //        retVal = (DWORD) PDev->pldev;
00362         break;
00363       case DxEGShDevData_GDev:
00364         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_GDev\n");
00365         retVal = (DWORD_PTR) PDev->pGraphicsDevice; // P"GRAPHICS_DEVICE"
00366         break;
00367       case DxEGShDevData_clonedev:
00368         DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_clonedev\n");
00369         retVal = (DWORD_PTR) PDev->flFlags & PDEV_CLONE_DEVICE;
00370         break;
00371 
00372       default:
00373         break;
00374     }
00375 
00376 #if 1
00377     DPRINT1("return value %08lx\n", retVal);
00378 #endif
00379 
00380     return retVal;
00381 
00382 }
00383 
00384 /*++
00385 * @name DxEngSetHdevData
00386 * @implemented
00387 *
00388 * The function DxEngSetHdevData sets a value in hdev
00389 
00390 * @param HDEV hPDev
00391 * The hdev
00392 *
00393 * @param DXEGSHDEVDATA Type
00394 * Supports only DxEGShDevData_dd_nCount. It is an internal counter on how many times hdev has been locked and unlocked
00395 *
00396 * @param DWORD Data
00397 * The value to be saved to hdev's internal counter.
00398 *
00399 * @return
00400 * Returns TRUE for success, FALSE for failure
00401 *
00402 * @remarks.
00403 * none
00404 *
00405 *--*/
00406 BOOLEAN
00407 APIENTRY
00408 DxEngSetHdevData(HDEV hDev,
00409                  DXEGSHDEVDATA Type,
00410                  DWORD_PTR Data)
00411 {
00412     BOOLEAN retVal = FALSE; // Default, no set.
00413 
00414     DPRINT1("ReactX Calling : DxEngSetHdevData DXEGSHDEVDATA : %ld\n", Type);
00415 
00416     if ( Type == DxEGShDevData_dd_nCount )
00417     {
00418         ((PPDEVOBJ)hDev)->DxDd_nCount = Data;
00419         retVal = TRUE; // Set
00420     }
00421     return retVal;
00422 }
00423 
00424 /*++
00425 * @name DxEngGetDCState
00426 * @implemented
00427 *
00428 * The function DxEngGetDCState is capable of returning three
00429 * DC states depending on what value is passed in its second parameter:
00430 * 1. If the DC is full screen
00431 * 2. Get Complexity of visible region
00432 * 3. Get Driver hdev, which is ppdev
00433 *
00434 * @param HDC hdc
00435 * The DC handle
00436 *
00437 * @param DWORD type
00438 * value 1 = Is DC fullscreen
00439 * value 2 = Get Complexity of visible region.
00440 * value 3 = Get Driver hdev, which is a ppdev.
00441 *
00442 * @return
00443 * Return one of the type values
00444 *
00445 * @remarks.
00446 * We do not have type 2 implemented yet
00447 *
00448 *--*/
00449 DWORD_PTR
00450 APIENTRY
00451 DxEngGetDCState(HDC hDC,
00452                 DWORD type)
00453 {
00454     PDC pDC = DC_LockDc(hDC);
00455     DWORD_PTR retVal = 0;
00456 
00457     DPRINT1("ReactX Calling : DxEngGetDCState type : %ld\n", type);
00458 
00459     if (pDC)
00460     {
00461         switch (type)
00462         {
00463             case 1:
00464                 retVal = (DWORD_PTR) pDC->fs & DC_FLAG_FULLSCREEN;
00465                 break;
00466             case 2:
00467                 UNIMPLEMENTED;
00468                 break;
00469             case 3:
00470             {
00471                 /* Return the HDEV of this DC. */
00472                 retVal = (DWORD_PTR) pDC->ppdev;
00473                 break;
00474             }
00475             default:
00476                 /* If a valid type is not found, zero is returned */
00477                 DPRINT1("Warning: did not find type %d\n",type);
00478                 break;
00479         }
00480         DC_UnlockDc(pDC);
00481     }
00482 
00483     return retVal;
00484 }
00485 
00486 /*++
00487 * @name DxEngIncDispUniq
00488 * @implemented
00489 *
00490 * The function DxEngIncDispUniq increments the DisplayUniqVisrgn counter from GDI shared memory.
00491 *
00492 * @return
00493 * This function returns TRUE no matter what.
00494 *
00495 * @remarks.
00496 * none
00497 *
00498 *--*/
00499 BOOLEAN
00500 APIENTRY
00501 DxEngIncDispUniq()
00502 {
00503     DPRINT1("ReactX Calling : DxEngIncDispUniq \n");
00504 
00505     InterlockedIncrement((LONG*)&GdiHandleTable->flDeviceUniq);
00506     return TRUE;
00507 }
00508 
00509 /*++
00510 * @name DxEngLockHdev
00511 * @implemented
00512 *
00513 * The function DxEngLockHdev lock the internal PDEV
00514 *
00515 * @param HDEV type
00516 * it is a pointer to win32k internal pdev struct known as PPDEVOBJ
00517 
00518 * @return
00519 * This function returns TRUE no matter what.
00520 *
00521 * @remarks.
00522 * none
00523 *
00524 *--*/
00525 BOOLEAN
00526 APIENTRY
00527 DxEngLockHdev(HDEV hDev)
00528 {
00529     PPDEVOBJ ppdev = (PPDEVOBJ)hDev;
00530     PERESOURCE Resource;
00531 
00532     DPRINT1("ReactX Calling : DxEngLockHdev \n");
00533 
00534     DPRINT1("hDev                   : 0x%08lx\n",hDev);
00535 
00536     Resource = (PERESOURCE)ppdev->hsemDevLock;
00537 
00538     if (Resource)
00539     {
00540         KeEnterCriticalRegion();
00541         ExAcquireResourceExclusiveLite( Resource , TRUE); // Lock monitor.
00542     }
00543     return TRUE;
00544 }
00545 
00546 /*++
00547 * @name DxEngUnlockHdev
00548 * @implemented
00549 *
00550 * The function DxEngUnlockHdev unlock the internal PDEV
00551 *
00552 * @param HDEV type
00553 * it is a pointer to win32k internal pdev struct known as PPDEVOBJ
00554 
00555 * @return
00556 * This function returns TRUE no matter what.
00557 *
00558 * @remarks.
00559 * none
00560 *
00561 *--*/
00562 BOOLEAN
00563 APIENTRY
00564 DxEngUnlockHdev(HDEV hDev)
00565 {
00566     PPDEVOBJ ppdev = (PPDEVOBJ)hDev;
00567     PERESOURCE Resource = (PERESOURCE)ppdev->hsemDevLock;
00568 
00569     DPRINT1("ReactX Calling : DxEngUnlockHdev \n");
00570 
00571     if (Resource)
00572     {
00573         ExReleaseResourceLite( Resource );
00574         KeLeaveCriticalRegion();
00575     }
00576     return TRUE;
00577 }
00578 
00579 
00580 /************************************************************************/
00581 /* DxEngReferenceHdev                                                   */
00582 /************************************************************************/
00583 BOOLEAN
00584 APIENTRY
00585 DxEngReferenceHdev(HDEV hDev)
00586 {
00587     IntGdiReferencePdev((PPDEVOBJ) hDev);
00588     /* ALWAYS return true */
00589     return TRUE;
00590 }
00591 
00592 /************************************************************************/
00593 /* DxEngNUIsTermSrv                                                     */
00594 /************************************************************************/
00595 
00596 /* Notes: Check if terminal server got connections or not */
00597 BOOLEAN
00598 APIENTRY
00599 DxEngNUIsTermSrv()
00600 {
00601     /* FIXME: ReactOS does not suport terminal server yet, we can not check if we got connections or not */
00602     UNIMPLEMENTED;
00603     return FALSE;
00604 }
00605 
00606 /************************************************************************/
00607 /* DxEngRedrawDesktop                                                   */
00608 /************************************************************************/
00609 
00610 /* Notes: it always returns TRUE, and it updates whole screen
00611    (redraws current desktop) */
00612 BOOLEAN
00613 APIENTRY
00614 DxEngRedrawDesktop()
00615 {
00616     UserRedrawDesktop();
00617     return TRUE;
00618 }
00619 
00620 
00621 ULONG gulVisRgnUniqueness; // Increase count everytime client region is updated.
00622 
00623 /************************************************************************/
00624 /* DxEngVisRgnUniq                                                      */
00625 /************************************************************************/
00626 /* Notes: returns the VisRgnUniq counter for win32k */
00627 ULONG
00628 APIENTRY
00629 DxEngVisRgnUniq()
00630 {
00631     DPRINT1("ReactX Calling : DxEngVisRgnUniq \n");
00632 
00633     return gulVisRgnUniqueness;
00634 }
00635 
00636 /************************************************************************/
00637 /* DxEngEnumerateHdev                                                   */
00638 /************************************************************************/
00639 /* Enumerate all drivers in win32k */
00640 HDEV *
00641 APIENTRY
00642 DxEngEnumerateHdev(HDEV *hdev)
00643 {
00644     /* FIXME: Enumerate all drivers in win32k */
00645     UNIMPLEMENTED;
00646     return FALSE;
00647 }
00648 
00649 /************************************************************************/
00650 /* DxEngCreateMemoryDC                                                  */
00651 /************************************************************************/
00652 HDC
00653 APIENTRY
00654 DxEngCreateMemoryDC(HDEV hDev)
00655 {
00656     return IntGdiCreateDisplayDC(hDev, DC_TYPE_MEMORY, FALSE);
00657 }
00658 
00659 /************************************************************************/
00660 /* DxEngScreenAccessCheck                                               */
00661 /************************************************************************/
00662 DWORD APIENTRY DxEngScreenAccessCheck()
00663 {
00664     UNIMPLEMENTED;
00665 
00666     /* We're cheating here and telling dxg.sys it has always had permissions to access the screen */
00667     return TRUE;
00668 }
00669 
00670 /************************************************************************/
00671 /* DxEngIsHdevLockedByCurrentThread                                     */
00672 /************************************************************************/
00673 BOOLEAN
00674 APIENTRY
00675 DxEngIsHdevLockedByCurrentThread(HDEV hDev)
00676 {   // Based on EngIsSemaphoreOwnedByCurrentThread w/o the Ex call.
00677     PERESOURCE pSem = (PERESOURCE)(((PPDEVOBJ)hDev)->hsemDevLock);
00678     return pSem->OwnerEntry.OwnerThread == (ERESOURCE_THREAD)PsGetCurrentThread();
00679 }
00680 
00681 
00682 /************************************************************************/
00683 /* DxEngUnreferenceHdev                                                 */
00684 /************************************************************************/
00685 BOOLEAN
00686 APIENTRY
00687 DxEngUnreferenceHdev(HDEV hDev)
00688 {
00689     IntGdiUnreferencePdev((PPDEVOBJ) hDev, 0);
00690     return TRUE; // Always true.
00691 }
00692 
00693 /************************************************************************/
00694 /* DxEngGetDesktopDC                                                    */
00695 /************************************************************************/
00696 HDC
00697 APIENTRY
00698 DxEngGetDesktopDC(ULONG DcType, BOOL EmptyDC, BOOL ValidatehWnd)
00699 {
00700     return UserGetDesktopDC(DcType, EmptyDC, ValidatehWnd);
00701 }
00702 
00703 /************************************************************************/
00704 /* DxEngDeleteDC                                                        */
00705 /************************************************************************/
00706 BOOLEAN
00707 APIENTRY
00708 DxEngDeleteDC(HDC hdc, BOOL Force)
00709 {
00710    return IntGdiDeleteDC(hdc, Force);
00711 }
00712 
00713 /************************************************************************/
00714 /* DxEngCleanDC                                                         */
00715 /************************************************************************/
00716 BOOLEAN
00717 APIENTRY
00718 DxEngCleanDC(HDC hdc)
00719 {
00720     return IntGdiCleanDC(hdc);
00721 }
00722 
00723 /************************************************************************/
00724 /* DxEngSetDCOwner                                                      */
00725 /************************************************************************/
00726 BOOL APIENTRY DxEngSetDCOwner(HGDIOBJ hObject, DWORD OwnerMask)
00727 {
00728     DPRINT1("ReactX Calling : DxEngSetDCOwner \n");
00729 
00730     return GreSetDCOwner(hObject, OwnerMask);
00731 }
00732 
00733 /************************************************************************/
00734 /* DxEngSetDCState                                                      */
00735 /************************************************************************/
00736 BOOLEAN
00737 APIENTRY
00738 DxEngSetDCState(HDC hDC, DWORD SetType, DWORD Set)
00739 {
00740    BOOLEAN Ret = FALSE;
00741    PDC pDC = DC_LockDc(hDC);
00742 
00743    if (pDC)
00744    {
00745       if (SetType == 1)
00746       {
00747         if ( Set )
00748             pDC->fs |= DC_FLAG_FULLSCREEN;
00749         else
00750             pDC->fs &= ~DC_FLAG_FULLSCREEN;
00751         Ret = TRUE;
00752       }
00753       DC_UnlockDc(pDC);
00754       return Ret; // Everything else returns FALSE.
00755    }
00756    return Ret;
00757 }
00758 
00759 /************************************************************************/
00760 /* DxEngSelectBitmap                                                    */
00761 /************************************************************************/
00762 DWORD APIENTRY DxEngSelectBitmap(DWORD x1, DWORD x2)
00763 {
00764     UNIMPLEMENTED;
00765     return FALSE;
00766 }
00767 
00768 /************************************************************************/
00769 /* DxEngSetBitmapOwner                                                  */
00770 /************************************************************************/
00771 DWORD APIENTRY DxEngSetBitmapOwner(DWORD x1, DWORD x2)
00772 {
00773     UNIMPLEMENTED;
00774     return FALSE;
00775 }
00776 
00777 /************************************************************************/
00778 /* DxEngDeleteSurface                                                   */
00779 /************************************************************************/
00780 DWORD APIENTRY DxEngDeleteSurface(DWORD x1)
00781 {
00782     UNIMPLEMENTED;
00783     return FALSE;
00784 }
00785 
00786 /************************************************************************/
00787 /* DxEngGetSurfaceData                                                  */
00788 /************************************************************************/
00789 DWORD APIENTRY DxEngGetSurfaceData(DWORD x1, DWORD x2)
00790 {
00791     UNIMPLEMENTED;
00792     return FALSE;
00793 }
00794 
00795 /************************************************************************/
00796 /* DxEngAltLockSurface                                                  */
00797 /************************************************************************/
00798 DWORD APIENTRY DxEngAltLockSurface(DWORD x1)
00799 {
00800     UNIMPLEMENTED;
00801     return FALSE;
00802 }
00803 
00804 /************************************************************************/
00805 /* DxEngUploadPaletteEntryToSurface                                     */
00806 /************************************************************************/
00807 DWORD APIENTRY DxEngUploadPaletteEntryToSurface(DWORD x1, DWORD x2,DWORD x3, DWORD x4)
00808 {
00809     UNIMPLEMENTED;
00810     return FALSE;
00811 }
00812 
00813 /************************************************************************/
00814 /* DxEngMarkSurfaceAsDirectDraw                                         */
00815 /************************************************************************/
00816 DWORD APIENTRY DxEngMarkSurfaceAsDirectDraw(DWORD x1, DWORD x2)
00817 {
00818     UNIMPLEMENTED;
00819     return FALSE;
00820 }
00821 
00822 /************************************************************************/
00823 /* DxEngSelectPaletteToSurface                                          */
00824 /************************************************************************/
00825 DWORD APIENTRY DxEngSelectPaletteToSurface(DWORD x1, DWORD x2)
00826 {
00827     UNIMPLEMENTED;
00828     return FALSE;
00829 }
00830 
00831 /************************************************************************/
00832 /* DxEngSyncPaletteTableWithDevice                                      */
00833 /************************************************************************/
00834 DWORD APIENTRY DxEngSyncPaletteTableWithDevice(DWORD x1, DWORD x2)
00835 {
00836     UNIMPLEMENTED;
00837     return FALSE;
00838 }
00839 
00840 /************************************************************************/
00841 /* DxEngSetPaletteState                                                 */
00842 /************************************************************************/
00843 DWORD APIENTRY DxEngSetPaletteState(DWORD x1, DWORD x2, DWORD x3)
00844 {
00845     UNIMPLEMENTED;
00846     return FALSE;
00847 }
00848 
00849 /************************************************************************/
00850 /* DxEngGetRedirectionBitmap                                            */
00851 /************************************************************************/
00852 DWORD
00853 APIENTRY
00854 DxEngGetRedirectionBitmap(DWORD x1)
00855 {
00856     return FALSE; // Normal return.
00857 }
00858 
00859 /************************************************************************/
00860 /* DxEngLoadImage                                                       */
00861 /************************************************************************/
00862 DWORD APIENTRY DxEngLoadImage(DWORD x1,DWORD x2)
00863 {
00864     UNIMPLEMENTED;
00865     return FALSE;
00866 }
00867 
00868 /************************************************************************/
00869 /* DxEngSpTearDownSprites                                               */
00870 /************************************************************************/
00871 DWORD APIENTRY DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
00872 {
00873     UNIMPLEMENTED;
00874     return FALSE;
00875 }
00876 
00877 /************************************************************************/
00878 /* DxEngSpUnTearDownSprites                                             */
00879 /************************************************************************/
00880 DWORD APIENTRY DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
00881 {
00882     UNIMPLEMENTED;
00883     return FALSE;
00884 }
00885 
00886 /************************************************************************/
00887 /* DxEngSpSpritesVisible                                                */
00888 /************************************************************************/
00889 DWORD APIENTRY DxEngSpSpritesVisible(DWORD x1)
00890 {
00891     UNIMPLEMENTED;
00892     return FALSE;
00893 }

Generated on Sun May 27 2012 04:38:29 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.