From a4aca0de8cb06085aefd5dc4699979327482d120 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sun, 30 Dec 2007 23:12:59 +0000 Subject: [PATCH] Implement DxDdUnlockDirectDrawSurface Fixed smaller typo in DxDdLockDirectDrawSurface sorry svn path=/trunk/; revision=31509 --- reactos/drivers/directx/dxg/dxg_driver.h | 2 +- reactos/drivers/directx/dxg/dxg_int.h | 1 + reactos/drivers/directx/dxg/eng.c | 24 +++++++++++++++---- reactos/include/reactos/drivers/directx/dxg.h | 2 +- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/reactos/drivers/directx/dxg/dxg_driver.h b/reactos/drivers/directx/dxg/dxg_driver.h index aae813c378e..fa9b447e8b2 100644 --- a/reactos/drivers/directx/dxg/dxg_driver.h +++ b/reactos/drivers/directx/dxg/dxg_driver.h @@ -89,7 +89,7 @@ DRVFN gaDxgFuncs [] = //{DXG_INDEX_DxDdAllocPrivateUserMem, (PFN)DxDdAllocPrivateUserMem}, //{DXG_INDEX_DxDdFreePrivateUserMem, (PFN)DxDdFreePrivateUserMem}, {DXG_INDEX_DxDdLockDirectDrawSurface, (PFN)DxDdLockDirectDrawSurface}, - //{DXG_INDEX_DxDdUnlockDirectDrawSurface, (PFN)DxDdUnlockDirectDrawSurface}, + {DXG_INDEX_DxDdUnlockDirectDrawSurface, (PFN)DxDdUnlockDirectDrawSurface}, //{DXG_INDEX_DxDdSetAccelLevel, (PFN)DxDdSetAccelLevel}, //{DXG_INDEX_DxDdGetSurfaceLock, (PFN)DxDdGetSurfaceLock}, //{DXG_INDEX_DxDdEnumLockedSurfaceRect, (PFN)DxDdEnumLockedSurfaceRect}, diff --git a/reactos/drivers/directx/dxg/dxg_int.h b/reactos/drivers/directx/dxg/dxg_int.h index ae67758114f..0c375b0d697 100644 --- a/reactos/drivers/directx/dxg/dxg_int.h +++ b/reactos/drivers/directx/dxg/dxg_int.h @@ -89,6 +89,7 @@ extern PLARGE_INTEGER gpLockShortDelay; DWORD STDCALL DxDxgGenericThunk(ULONG_PTR ulIndex, ULONG_PTR ulHandle, SIZE_T *pdwSizeOfPtr1, PVOID pvPtr1, SIZE_T *pdwSizeOfPtr2, PVOID pvPtr2); DWORD STDCALL DxDdIoctl(ULONG ulIoctl, PVOID pBuffer, ULONG ulBufferSize); PDD_SURFACE_LOCAL STDCALL DxDdLockDirectDrawSurface(HANDLE hDdSurface); +BOOL STDCALL DxDdUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface); /* Internel functions */ BOOL FASTCALL VerifyObjectOwner(PDD_ENTRY pEntry); diff --git a/reactos/drivers/directx/dxg/eng.c b/reactos/drivers/directx/dxg/eng.c index 75ac177b3ec..b27790623fd 100644 --- a/reactos/drivers/directx/dxg/eng.c +++ b/reactos/drivers/directx/dxg/eng.c @@ -16,16 +16,32 @@ PDD_SURFACE_LOCAL STDCALL DxDdLockDirectDrawSurface(HANDLE hDdSurface) { - PDD_ENTRY pObject; PDD_SURFACE_LOCAL pSurfacelcl = NULL; - pObject = DdHmgLock(hDdSurface, 2, 0); - if (pObject != NULL) + pSurfacelcl = DdHmgLock(hDdSurface, 2, FALSE); + if (pSurfacelcl != NULL) { - pSurfacelcl = (PDD_SURFACE_LOCAL)((PBYTE)pObject + sizeof(PDD_ENTRY)); + pSurfacelcl = (PDD_SURFACE_LOCAL)(((PBYTE)&pSurfacelcl) + sizeof(DD_BASEOBJECT)); } return pSurfacelcl; } +BOOL +STDCALL +DxDdUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface) +{ + BOOL retVal = FALSE; + PDD_BASEOBJECT pObject = NULL; + + if (pSurface) + { + pObject = (PDD_BASEOBJECT)( ((PBYTE)&pSurface) - sizeof(DD_BASEOBJECT)); + InterlockedDecrement(&pObject->cExclusiveLock); + retVal = TRUE; + } + + return retVal; +} + diff --git a/reactos/include/reactos/drivers/directx/dxg.h b/reactos/include/reactos/drivers/directx/dxg.h index ae1b844dd61..31d83aa0978 100644 --- a/reactos/include/reactos/drivers/directx/dxg.h +++ b/reactos/include/reactos/drivers/directx/dxg.h @@ -207,7 +207,7 @@ typedef DWORD (NTAPI *PGD_DXGENERICTRUNK)(ULONG_PTR, ULONG_PTR, SIZE_T*, PVOID, //typedef x (NTAPI *PGD_DxDdAllocPrivateUserMem)( //typedef x (NTAPI *PGD_DxDdFreePrivateUserMem)( typedef PDD_SURFACE_LOCAL (NTAPI *PGD_DxDdLockDirectDrawSurface)(HANDLE hDdSurface); -//typedef x (NTAPI *PGD_DxDdUnlockDirectDrawSurface)( +typedef BOOL (NTAPI *PGD_DxDdUnlockDirectDrawSurface)(HANDLE hDdSurface); //typedef x (NTAPI *PGD_DxDdSetAccelLevel)( //typedef x (NTAPI *PGD_DxDdGetSurfaceLock)( //typedef x (NTAPI *PGD_DxDdEnumLockedSurfaceRect)(