mirror of
https://github.com/reactos/reactos.git
synced 2024-07-29 23:58:44 +00:00
[WIN32K]
Exchange fields individually in PDEVOBJ_vSwitchPdev() instead of duplicating a full PDEV structure on the stack. This saves a lot of stack space. svn path=/trunk/; revision=58081
This commit is contained in:
parent
febbf7f603
commit
46da747829
|
@ -341,52 +341,68 @@ EngpCreatePDEV(
|
||||||
return ppdev;
|
return ppdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
FORCEINLINE
|
||||||
|
SwitchPointer(
|
||||||
|
_Inout_ PVOID pvPointer1,
|
||||||
|
_Inout_ PVOID pvPointer2)
|
||||||
|
{
|
||||||
|
PVOID *ppvPointer1 = pvPointer1;
|
||||||
|
PVOID *ppvPointer2 = pvPointer2;
|
||||||
|
PVOID pvTemp;
|
||||||
|
|
||||||
|
pvTemp = *ppvPointer1;
|
||||||
|
*ppvPointer1 = *ppvPointer2;
|
||||||
|
*ppvPointer2 = pvTemp;
|
||||||
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
PDEVOBJ_vSwitchPdev(
|
PDEVOBJ_vSwitchPdev(
|
||||||
PPDEVOBJ ppdev,
|
PPDEVOBJ ppdev,
|
||||||
PPDEVOBJ ppdev2)
|
PPDEVOBJ ppdev2)
|
||||||
{
|
{
|
||||||
PDEVOBJ pdevTmp;
|
union
|
||||||
DWORD tmpStateFlags;
|
{
|
||||||
|
DRIVER_FUNCTIONS pfn;
|
||||||
/* Exchange data */
|
GDIINFO gdiinfo;
|
||||||
pdevTmp = *ppdev;
|
DEVINFO devinfo;
|
||||||
|
DWORD StateFlags;
|
||||||
|
} temp;
|
||||||
|
|
||||||
/* Exchange driver functions */
|
/* Exchange driver functions */
|
||||||
|
temp.pfn = ppdev->pfn;
|
||||||
ppdev->pfn = ppdev2->pfn;
|
ppdev->pfn = ppdev2->pfn;
|
||||||
ppdev2->pfn = pdevTmp.pfn;
|
ppdev2->pfn = temp.pfn;
|
||||||
|
|
||||||
/* Exchange LDEVs */
|
/* Exchange LDEVs */
|
||||||
ppdev->pldev = ppdev2->pldev;
|
SwitchPointer(&ppdev->pldev, &ppdev2->pldev);
|
||||||
ppdev2->pldev = pdevTmp.pldev;
|
|
||||||
|
|
||||||
/* Exchange DHPDEV */
|
/* Exchange DHPDEV */
|
||||||
ppdev->dhpdev = ppdev2->dhpdev;
|
SwitchPointer(&ppdev->dhpdev, &ppdev2->dhpdev);
|
||||||
ppdev2->dhpdev = pdevTmp.dhpdev;
|
|
||||||
|
|
||||||
/* Exchange surfaces and associate them with their new PDEV */
|
/* Exchange surfaces and associate them with their new PDEV */
|
||||||
ppdev->pSurface = ppdev2->pSurface;
|
SwitchPointer(&ppdev->pSurface, &ppdev2->pSurface);
|
||||||
ppdev2->pSurface = pdevTmp.pSurface;
|
|
||||||
ppdev->pSurface->SurfObj.hdev = (HDEV)ppdev;
|
ppdev->pSurface->SurfObj.hdev = (HDEV)ppdev;
|
||||||
ppdev2->pSurface->SurfObj.hdev = (HDEV)ppdev2;
|
ppdev2->pSurface->SurfObj.hdev = (HDEV)ppdev2;
|
||||||
|
|
||||||
/* Exchange devinfo */
|
/* Exchange devinfo */
|
||||||
|
temp.devinfo = ppdev->devinfo;
|
||||||
ppdev->devinfo = ppdev2->devinfo;
|
ppdev->devinfo = ppdev2->devinfo;
|
||||||
ppdev2->devinfo = pdevTmp.devinfo;
|
ppdev2->devinfo = temp.devinfo;
|
||||||
|
|
||||||
/* Exchange gdiinfo */
|
/* Exchange gdiinfo */
|
||||||
|
temp.gdiinfo = ppdev->gdiinfo;
|
||||||
ppdev->gdiinfo = ppdev2->gdiinfo;
|
ppdev->gdiinfo = ppdev2->gdiinfo;
|
||||||
ppdev2->gdiinfo = pdevTmp.gdiinfo;
|
ppdev2->gdiinfo = temp.gdiinfo;
|
||||||
|
|
||||||
/* Exchange DEVMODE */
|
/* Exchange DEVMODE */
|
||||||
ppdev->pdmwDev = ppdev2->pdmwDev;
|
SwitchPointer(&ppdev->pdmwDev, &ppdev2->pdmwDev);
|
||||||
ppdev2->pdmwDev = pdevTmp.pdmwDev;
|
|
||||||
|
|
||||||
/* Exchange state flags */
|
/* Exchange state flags */
|
||||||
tmpStateFlags = ppdev->pGraphicsDevice->StateFlags;
|
temp.StateFlags = ppdev->pGraphicsDevice->StateFlags;
|
||||||
ppdev->pGraphicsDevice->StateFlags = ppdev2->pGraphicsDevice->StateFlags;
|
ppdev->pGraphicsDevice->StateFlags = ppdev2->pGraphicsDevice->StateFlags;
|
||||||
ppdev2->pGraphicsDevice->StateFlags = tmpStateFlags;
|
ppdev2->pGraphicsDevice->StateFlags = temp.StateFlags;
|
||||||
|
|
||||||
/* Notify each driver instance of its new HDEV association */
|
/* Notify each driver instance of its new HDEV association */
|
||||||
ppdev->pfn.CompletePDEV(ppdev->dhpdev, (HDEV)ppdev);
|
ppdev->pfn.CompletePDEV(ppdev->dhpdev, (HDEV)ppdev);
|
||||||
|
@ -407,6 +423,7 @@ PDEVOBJ_bSwitchMode(
|
||||||
|
|
||||||
/* Lock the PDEV */
|
/* Lock the PDEV */
|
||||||
EngAcquireSemaphore(ppdev->hsemDevLock);
|
EngAcquireSemaphore(ppdev->hsemDevLock);
|
||||||
|
|
||||||
/* And everything else */
|
/* And everything else */
|
||||||
EngAcquireSemaphore(ghsemPDEV);
|
EngAcquireSemaphore(ghsemPDEV);
|
||||||
|
|
||||||
|
@ -613,9 +630,10 @@ PDEVOBJ_vGetDeviceCaps(
|
||||||
|
|
||||||
/** Exported functions ********************************************************/
|
/** Exported functions ********************************************************/
|
||||||
|
|
||||||
|
_Must_inspect_result_ _Ret_z_
|
||||||
LPWSTR
|
LPWSTR
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngGetDriverName(IN HDEV hdev)
|
EngGetDriverName(_In_ HDEV hdev)
|
||||||
{
|
{
|
||||||
PPDEVOBJ ppdev = (PPDEVOBJ)hdev;
|
PPDEVOBJ ppdev = (PPDEVOBJ)hdev;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue