mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 22:46:17 +00:00
started adding support for more that one surface in DdCreateSurface
svn path=/trunk/; revision=32543
This commit is contained in:
parent
a6791bac5d
commit
934349678c
1 changed files with 57 additions and 6 deletions
|
@ -274,6 +274,10 @@ DdCanCreateSurface(LPDDHAL_CANCREATESURFACEDATA CanCreateSurface)
|
|||
(PDD_CANCREATESURFACEDATA)CanCreateSurface);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* TODO : finish all fixme */
|
||||
DWORD
|
||||
WINAPI
|
||||
|
@ -287,7 +291,6 @@ DdCreateSurface(LPDDHAL_CREATESURFACEDATA pCreateSurface)
|
|||
|
||||
HANDLE hPrevSurface, hSurface;
|
||||
|
||||
|
||||
PDD_SURFACE_LOCAL pDdSurfaceLocal = NULL;
|
||||
PDD_SURFACE_MORE pDdSurfaceMore = NULL;
|
||||
PDD_SURFACE_GLOBAL pDdSurfaceGlobal = NULL;
|
||||
|
@ -302,8 +305,40 @@ DdCreateSurface(LPDDHAL_CREATESURFACEDATA pCreateSurface)
|
|||
/* Check how many surfaces there are */
|
||||
if (SurfaceCount != 1)
|
||||
{
|
||||
/* We'll have to allocate more data, our stack isn't big enough */
|
||||
/* We got more that one surface so we need alloc memory for them */
|
||||
pDdSurfaceLocal = (PDD_SURFACE_LOCAL) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (sizeof(DD_SURFACE_LOCAL) * SurfaceCount ));
|
||||
pDdSurfaceMore = (PDD_SURFACE_MORE) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (sizeof(DD_SURFACE_MORE) * SurfaceCount ));
|
||||
pDdSurfaceGlobal = (PDD_SURFACE_GLOBAL) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (sizeof(DD_SURFACE_GLOBAL) * SurfaceCount ));
|
||||
phSurface = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (sizeof(HANDLE) * SurfaceCount ));
|
||||
puhSurface = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (sizeof(HANDLE) * SurfaceCount ));
|
||||
|
||||
/* check if we sueese alloc all memory we need */
|
||||
if ((pDdSurfaceLocal == NULL) || (pDdSurfaceMore == NULL) || (pDdSurfaceGlobal == NULL) || (phSurface == NULL) || (puhSurface == NULL))
|
||||
{
|
||||
pCreateSurface->ddRVal = DDERR_OUTOFMEMORY;
|
||||
|
||||
if ( pDdSurfaceLocal != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, pDdSurfaceLocal);
|
||||
}
|
||||
|
||||
if ( pDdSurfaceMore != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, pDdSurfaceMore);
|
||||
}
|
||||
|
||||
if ( phSurface != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, phSurface);
|
||||
}
|
||||
|
||||
if ( puhSurface != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, puhSurface);
|
||||
}
|
||||
|
||||
return DDHAL_DRIVER_HANDLED;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -455,7 +490,25 @@ DdCreateSurface(LPDDHAL_CREATESURFACEDATA pCreateSurface)
|
|||
/* Check if we have to free all our local allocations */
|
||||
if (SurfaceCount > 1)
|
||||
{
|
||||
/* FIXME: */
|
||||
if ( pDdSurfaceLocal != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, pDdSurfaceLocal);
|
||||
}
|
||||
|
||||
if ( pDdSurfaceMore != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, pDdSurfaceMore);
|
||||
}
|
||||
|
||||
if ( phSurface != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, phSurface);
|
||||
}
|
||||
|
||||
if ( puhSurface != NULL )
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, puhSurface);
|
||||
}
|
||||
}
|
||||
|
||||
/* Return */
|
||||
|
@ -1094,9 +1147,7 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
|||
* ReactOS keep this behoir to be compatible with
|
||||
* Windows XP
|
||||
*/
|
||||
pData->ddRVal = retValue;
|
||||
|
||||
|
||||
pData->ddRVal = retValue;
|
||||
}
|
||||
|
||||
/* D3D Callbacks version 2 check and setup for DirectX/ ReactX */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue