mirror of
https://github.com/reactos/reactos.git
synced 2025-06-12 09:08:31 +00:00
50% are implmene in DD->GetCaps now
svn path=/trunk/; revision=27213
This commit is contained in:
parent
b51c13f0a3
commit
d68da75a83
1 changed files with 107 additions and 46 deletions
|
@ -455,96 +455,157 @@ HRESULT WINAPI
|
||||||
Main_DirectDraw_GetCaps( LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
|
Main_DirectDraw_GetCaps( LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
|
||||||
LPDDCAPS pHELCaps)
|
LPDDCAPS pHELCaps)
|
||||||
{
|
{
|
||||||
HRESULT retVal = DD_OK;
|
HRESULT retVal = DDERR_INVALIDPARAMS;
|
||||||
|
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
||||||
|
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
if (!(IsBadWritePtr(pDriverCaps,sizeof(LPDDCAPS))))
|
|
||||||
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
if (!(IsBadWritePtr(pHELCaps,sizeof(LPDDCAPS))))
|
if ((!pDriverCaps) && (!pHELCaps))
|
||||||
{
|
{
|
||||||
return DDERR_INVALIDPARAMS;
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
|
_SEH_LEAVE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((IsBadWritePtr(pDriverCaps,sizeof(LPDDCAPS))))
|
if (pDriverCaps)
|
||||||
{
|
|
||||||
DDSCAPS2 ddscaps = { 0 };
|
|
||||||
DWORD dwTotal = 0;
|
|
||||||
DWORD dwFree = 0;
|
|
||||||
/* Setup hardware caps */
|
|
||||||
|
|
||||||
Main_DirectDraw_GetAvailableVidMem4(iface, &ddscaps, &dwTotal, &dwFree);
|
|
||||||
|
|
||||||
|
|
||||||
switch (pDriverCaps->dwSize)
|
|
||||||
{
|
{
|
||||||
case sizeof(DDCAPS_DX1):
|
/* Setup hardware caps */
|
||||||
|
DDSCAPS2 ddscaps = { 0 };
|
||||||
|
LPDDCORECAPS CoreCaps = (LPDDCORECAPS)&This->lpLcl->lpGbl->ddCaps;
|
||||||
|
|
||||||
|
DWORD dwTotal = 0;
|
||||||
|
DWORD dwFree = 0;
|
||||||
|
|
||||||
|
Main_DirectDraw_GetAvailableVidMem4(iface, &ddscaps, &dwTotal, &dwFree);
|
||||||
|
|
||||||
|
switch (pDriverCaps->dwSize)
|
||||||
|
{
|
||||||
|
case sizeof(DDCAPS_DX1):
|
||||||
{
|
{
|
||||||
LPDDCAPS_DX1 myCaps = (LPDDCAPS_DX1) pDriverCaps;
|
LPDDCAPS_DX1 myCaps = (LPDDCAPS_DX1) pDriverCaps;
|
||||||
|
|
||||||
|
if (CoreCaps->dwSize == sizeof(DDCORECAPS))
|
||||||
|
{
|
||||||
|
memcpy(myCaps, CoreCaps, sizeof(DDCAPS_DX1));
|
||||||
|
}
|
||||||
|
|
||||||
myCaps->dwVidMemFree = dwFree;
|
myCaps->dwVidMemFree = dwFree;
|
||||||
myCaps->dwVidMemTotal = dwTotal;
|
myCaps->dwVidMemTotal = dwTotal;
|
||||||
|
myCaps->dwSize = sizeof(DDCAPS_DX1);
|
||||||
|
|
||||||
|
retVal = DD_OK;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case sizeof(DDCAPS_DX3):
|
case sizeof(DDCAPS_DX3):
|
||||||
{
|
{
|
||||||
LPDDCAPS_DX3 myCaps = (LPDDCAPS_DX3) pDriverCaps;
|
LPDDCAPS_DX3 myCaps = (LPDDCAPS_DX3) pDriverCaps;
|
||||||
|
|
||||||
|
if (CoreCaps->dwSize == sizeof(DDCORECAPS))
|
||||||
|
{
|
||||||
|
memcpy(&myCaps->dwCaps, &CoreCaps->dwCaps, sizeof(DDCAPS_DX3));
|
||||||
|
}
|
||||||
|
|
||||||
myCaps->dwVidMemFree = dwFree;
|
myCaps->dwVidMemFree = dwFree;
|
||||||
myCaps->dwVidMemTotal = dwTotal;
|
myCaps->dwVidMemTotal = dwTotal;
|
||||||
|
myCaps->dwSize = sizeof(DDCAPS_DX3);
|
||||||
|
|
||||||
|
retVal = DD_OK;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case sizeof(DDCAPS_DX5):
|
case sizeof(DDCAPS_DX5):
|
||||||
{
|
{
|
||||||
LPDDCAPS_DX5 myCaps = (LPDDCAPS_DX5) pDriverCaps;
|
LPDDCAPS_DX5 myCaps = (LPDDCAPS_DX5) pDriverCaps;
|
||||||
|
|
||||||
|
if (CoreCaps->dwSize == sizeof(DDCORECAPS))
|
||||||
|
{
|
||||||
|
memcpy(&myCaps->dwCaps, &CoreCaps->dwCaps, sizeof(DDCORECAPS));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME
|
||||||
|
DWORD dwNLVBCaps;
|
||||||
|
DWORD dwNLVBCaps2;
|
||||||
|
DWORD dwNLVBCKeyCaps;
|
||||||
|
DWORD dwNLVBFXCaps;
|
||||||
|
DWORD dwNLVBRops[DD_ROP_SPACE];
|
||||||
|
*/
|
||||||
|
|
||||||
myCaps->dwVidMemFree = dwFree;
|
myCaps->dwVidMemFree = dwFree;
|
||||||
myCaps->dwVidMemTotal = dwTotal;
|
myCaps->dwVidMemTotal = dwTotal;
|
||||||
|
myCaps->dwSize = sizeof(DDCAPS_DX5);
|
||||||
|
|
||||||
|
retVal = DD_OK;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* DDCAPS_DX6 is same as DDCAPS_DX7 */
|
/* DDCAPS_DX6 is same as DDCAPS_DX7 */
|
||||||
case sizeof(DDCAPS_DX7):
|
case sizeof(DDCAPS_DX7):
|
||||||
{
|
{
|
||||||
LPDDCAPS_DX7 myCaps = (LPDDCAPS_DX7) pDriverCaps;
|
LPDDCAPS_DX7 myCaps = (LPDDCAPS_DX7) pDriverCaps;
|
||||||
|
|
||||||
|
if (CoreCaps->dwSize == sizeof(DDCORECAPS))
|
||||||
|
{
|
||||||
|
memcpy(&myCaps->dwCaps, &CoreCaps->dwCaps, sizeof(DDCORECAPS));
|
||||||
|
}
|
||||||
|
|
||||||
myCaps->dwVidMemFree = dwFree;
|
myCaps->dwVidMemFree = dwFree;
|
||||||
myCaps->dwVidMemTotal = dwTotal;
|
myCaps->dwVidMemTotal = dwTotal;
|
||||||
|
|
||||||
|
/* FIXME
|
||||||
|
DWORD dwNLVBCaps;
|
||||||
|
DWORD dwNLVBCaps2;
|
||||||
|
DWORD dwNLVBCKeyCaps;
|
||||||
|
DWORD dwNLVBFXCaps;
|
||||||
|
DWORD dwNLVBRops[DD_ROP_SPACE];
|
||||||
|
*/
|
||||||
|
|
||||||
|
myCaps->ddsCaps.dwCaps = ddscaps.dwCaps;
|
||||||
|
myCaps->ddsCaps.dwCaps2 = ddscaps.dwCaps2;
|
||||||
|
myCaps->ddsCaps.dwCaps3 = ddscaps.dwCaps3;
|
||||||
|
myCaps->ddsCaps.dwCaps4 = ddscaps.dwCaps4;
|
||||||
|
myCaps->dwSize = sizeof(DDCAPS_DX7);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
retVal = DDERR_INVALIDPARAMS;
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((IsBadWritePtr(pHELCaps,sizeof(LPDDCAPS))))
|
if (pHELCaps)
|
||||||
{
|
|
||||||
/* Setup hardware caps */
|
|
||||||
switch (pHELCaps->dwSize)
|
|
||||||
{
|
{
|
||||||
case sizeof(DDCAPS_DX1):
|
/* Setup software caps */
|
||||||
retVal = DDERR_INVALIDPARAMS;
|
switch (pHELCaps->dwSize)
|
||||||
break;
|
{
|
||||||
case sizeof(DDCAPS_DX3):
|
case sizeof(DDCAPS_DX1):
|
||||||
retVal = DDERR_INVALIDPARAMS;
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
break;
|
break;
|
||||||
case sizeof(DDCAPS_DX5):
|
case sizeof(DDCAPS_DX3):
|
||||||
retVal = DDERR_INVALIDPARAMS;
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
break;
|
break;
|
||||||
|
case sizeof(DDCAPS_DX5):
|
||||||
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
|
break;
|
||||||
|
|
||||||
/* DDCAPS_DX6 is same as DDCAPS_DX7 */
|
/* DDCAPS_DX6 is same as DDCAPS_DX7 */
|
||||||
case sizeof(DDCAPS_DX7):
|
case sizeof(DDCAPS_DX7):
|
||||||
retVal = DDERR_INVALIDPARAMS;
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
retVal = DDERR_INVALIDPARAMS;
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
retVal = DD_FALSE;
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue