mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 10:23:32 +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);
|
(PDD_CANCREATESURFACEDATA)CanCreateSurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* TODO : finish all fixme */
|
/* TODO : finish all fixme */
|
||||||
DWORD
|
DWORD
|
||||||
WINAPI
|
WINAPI
|
||||||
|
@ -287,7 +291,6 @@ DdCreateSurface(LPDDHAL_CREATESURFACEDATA pCreateSurface)
|
||||||
|
|
||||||
HANDLE hPrevSurface, hSurface;
|
HANDLE hPrevSurface, hSurface;
|
||||||
|
|
||||||
|
|
||||||
PDD_SURFACE_LOCAL pDdSurfaceLocal = NULL;
|
PDD_SURFACE_LOCAL pDdSurfaceLocal = NULL;
|
||||||
PDD_SURFACE_MORE pDdSurfaceMore = NULL;
|
PDD_SURFACE_MORE pDdSurfaceMore = NULL;
|
||||||
PDD_SURFACE_GLOBAL pDdSurfaceGlobal = NULL;
|
PDD_SURFACE_GLOBAL pDdSurfaceGlobal = NULL;
|
||||||
|
@ -302,8 +305,40 @@ DdCreateSurface(LPDDHAL_CREATESURFACEDATA pCreateSurface)
|
||||||
/* Check how many surfaces there are */
|
/* Check how many surfaces there are */
|
||||||
if (SurfaceCount != 1)
|
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
|
else
|
||||||
{
|
{
|
||||||
|
@ -455,7 +490,25 @@ DdCreateSurface(LPDDHAL_CREATESURFACEDATA pCreateSurface)
|
||||||
/* Check if we have to free all our local allocations */
|
/* Check if we have to free all our local allocations */
|
||||||
if (SurfaceCount > 1)
|
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 */
|
/* Return */
|
||||||
|
@ -1095,8 +1148,6 @@ DdGetDriverInfo(LPDDHAL_GETDRIVERINFODATA pData)
|
||||||
* Windows XP
|
* Windows XP
|
||||||
*/
|
*/
|
||||||
pData->ddRVal = retValue;
|
pData->ddRVal = retValue;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* D3D Callbacks version 2 check and setup for DirectX/ ReactX */
|
/* D3D Callbacks version 2 check and setup for DirectX/ ReactX */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue