mirror of
https://github.com/reactos/reactos.git
synced 2025-07-03 16:41:24 +00:00
correct some test, so they works with some bugi nivda drv
svn path=/trunk/; revision=32919
This commit is contained in:
parent
db575d112b
commit
6a80fdf161
1 changed files with 35 additions and 22 deletions
|
@ -1,4 +1,8 @@
|
||||||
|
|
||||||
|
/* Note : OsThunkDdQueryDirectDrawObject is the usermode name of NtGdiDdQueryDirectDrawObject
|
||||||
|
* it lives in d3d8thk.dll and in windows 2000 it doing syscall direcly to win32k.sus
|
||||||
|
* in windows xp and higher it call to gdi32.dll to DdEntry41 and it doing the syscall
|
||||||
|
*/
|
||||||
INT
|
INT
|
||||||
Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
{
|
{
|
||||||
|
@ -28,7 +32,6 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
DEVMODE devmode;
|
DEVMODE devmode;
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
|
|
||||||
|
|
||||||
/* clear data */
|
/* clear data */
|
||||||
memset(&vmList,0,sizeof(VIDEOMEMORY));
|
memset(&vmList,0,sizeof(VIDEOMEMORY));
|
||||||
memset(&D3dTextureFormats,0,sizeof(DDSURFACEDESC));
|
memset(&D3dTextureFormats,0,sizeof(DDSURFACEDESC));
|
||||||
|
@ -38,8 +41,6 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
memset(&HalInfo,0,sizeof(DD_HALINFO));
|
memset(&HalInfo,0,sizeof(DD_HALINFO));
|
||||||
memset(CallBackFlags,0,sizeof(DWORD)*3);
|
memset(CallBackFlags,0,sizeof(DWORD)*3);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Get currenet display mode */
|
/* Get currenet display mode */
|
||||||
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
|
||||||
|
@ -92,7 +93,7 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
RTEST(puNumHeaps == NULL);
|
RTEST(puNumHeaps == NULL);
|
||||||
RTEST(puvmList == NULL);
|
RTEST(puvmList == NULL);
|
||||||
|
|
||||||
/* testing OsThunkDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, NULL, .... */
|
/* testing NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, NULL, .... */
|
||||||
pHalInfo = &HalInfo;
|
pHalInfo = &HalInfo;
|
||||||
RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
|
RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
|
||||||
pCallBackFlags, puD3dCallbacks,
|
pCallBackFlags, puD3dCallbacks,
|
||||||
|
@ -202,16 +203,17 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
|
|
||||||
if (pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE )
|
if (pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE )
|
||||||
{
|
{
|
||||||
RTEST( pHalInfo->lpD3DGlobalDriverData != 0);
|
/* it is store in kmode so we check if it kmode address or not */
|
||||||
RTEST( pHalInfo->lpD3DHALCallbacks != 0);
|
RTEST( ( (DWORD)pHalInfo->lpD3DGlobalDriverData & (~0x80000000)) != 0 );
|
||||||
RTEST( pHalInfo->lpD3DBufCallbacks != 0);
|
RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 );
|
||||||
|
RTEST( ( (DWORD)pHalInfo->lpD3DHALCallbacks & (~0x80000000)) != 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Backup DD_HALINFO so we do not need resting it */
|
||||||
/* Next Start 2 */
|
|
||||||
RtlCopyMemory(&oldHalInfo, &HalInfo, sizeof(DD_HALINFO));
|
RtlCopyMemory(&oldHalInfo, &HalInfo, sizeof(DD_HALINFO));
|
||||||
|
|
||||||
|
/* testing NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, NULL, .... */
|
||||||
pHalInfo = &HalInfo;
|
pHalInfo = &HalInfo;
|
||||||
pCallBackFlags = CallBackFlags;
|
pCallBackFlags = CallBackFlags;
|
||||||
RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
|
RtlZeroMemory(pHalInfo,sizeof(DD_HALINFO));
|
||||||
|
@ -223,26 +225,32 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
puvmList, puNumFourCC,
|
puvmList, puNumFourCC,
|
||||||
puFourCC)== FALSE);
|
puFourCC)== FALSE);
|
||||||
RTEST(pHalInfo != NULL);
|
RTEST(pHalInfo != NULL);
|
||||||
|
ASSERT(pHalInfo != NULL);
|
||||||
|
|
||||||
RTEST(pCallBackFlags != NULL);
|
RTEST(pCallBackFlags != NULL);
|
||||||
|
ASSERT(pCallBackFlags != NULL);
|
||||||
|
|
||||||
RTEST(puD3dCallbacks == NULL);
|
RTEST(puD3dCallbacks == NULL);
|
||||||
RTEST(puD3dDriverData == NULL);
|
RTEST(puD3dDriverData == NULL);
|
||||||
RTEST(puD3dBufferCallbacks == NULL);
|
RTEST(puD3dBufferCallbacks == NULL);
|
||||||
RTEST(puD3dTextureFormats == NULL);
|
RTEST(puD3dTextureFormats == NULL);
|
||||||
RTEST(puNumFourCC == NULL);
|
RTEST(puNumFourCC == NULL);
|
||||||
RTEST(puFourCC == NULL);
|
RTEST(puFourCC == NULL);
|
||||||
ASSERT(pHalInfo != NULL);
|
|
||||||
RTEST(puNumHeaps == NULL);
|
RTEST(puNumHeaps == NULL);
|
||||||
RTEST(puvmList == NULL);
|
RTEST(puvmList == NULL);
|
||||||
|
|
||||||
/* We do not retesting DD_HALINFO, instead we compare it */
|
/* We do not retesting DD_HALINFO, instead we compare it */
|
||||||
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
|
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
|
||||||
|
|
||||||
|
/* Rember on some nivida drv the pCallBackFlags will not be set even they api exists in the drv
|
||||||
|
* known workaround is to check if the drv really return a kmode pointer for the drv functions
|
||||||
|
* we want to use.
|
||||||
|
*/
|
||||||
RTEST(pCallBackFlags[0] != 0);
|
RTEST(pCallBackFlags[0] != 0);
|
||||||
RTEST(pCallBackFlags[1] != 0);
|
RTEST(pCallBackFlags[1] != 0);
|
||||||
|
|
||||||
/* NT4 this will fail */
|
|
||||||
RTEST(pCallBackFlags[2] == 0);
|
RTEST(pCallBackFlags[2] == 0);
|
||||||
|
|
||||||
/* Next Start 3 */
|
/* testing NtGdiDdQueryDirectDrawObject( hDirectDrawLocal, pHalInfo, pCallBackFlags, D3dCallbacks, NULL, .... */
|
||||||
pHalInfo = &HalInfo;
|
pHalInfo = &HalInfo;
|
||||||
pCallBackFlags = CallBackFlags;
|
pCallBackFlags = CallBackFlags;
|
||||||
puD3dCallbacks = &D3dCallbacks;
|
puD3dCallbacks = &D3dCallbacks;
|
||||||
|
@ -257,12 +265,20 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
puvmList, puNumFourCC,
|
puvmList, puNumFourCC,
|
||||||
puFourCC)== FALSE);
|
puFourCC)== FALSE);
|
||||||
RTEST(pHalInfo != NULL);
|
RTEST(pHalInfo != NULL);
|
||||||
RTEST(pCallBackFlags != NULL);
|
ASSERT(pHalInfo != NULL);
|
||||||
|
|
||||||
if (pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE )
|
RTEST(pCallBackFlags != NULL);
|
||||||
{
|
ASSERT(pCallBackFlags != NULL);
|
||||||
RTEST(puD3dCallbacks != NULL);
|
|
||||||
}
|
/* rember puD3dCallbacks shall never return NULL */
|
||||||
|
RTEST(puD3dCallbacks != NULL);
|
||||||
|
ASSERT(puD3dCallbacks != NULL);
|
||||||
|
|
||||||
|
/* the pHalInfo->ddCaps.ddsCaps.dwCaps & DDSCAPS_3DDEVICE will be ignore, only way detect it proper follow code,
|
||||||
|
* this will be fill in of all drv, it is not only for 3d stuff, this always fill by win32k.sys or dxg.sys depns
|
||||||
|
* if it windows 2000 or windows xp/2003
|
||||||
|
*/
|
||||||
|
RTEST(puD3dCallbacks->dwSize == sizeof(D3DNTHAL_CALLBACKS));
|
||||||
|
|
||||||
RTEST(puD3dDriverData == NULL);
|
RTEST(puD3dDriverData == NULL);
|
||||||
RTEST(puD3dBufferCallbacks == NULL);
|
RTEST(puD3dBufferCallbacks == NULL);
|
||||||
|
@ -271,14 +287,11 @@ Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
|
||||||
RTEST(puFourCC == NULL);
|
RTEST(puFourCC == NULL);
|
||||||
RTEST(puNumHeaps == NULL);
|
RTEST(puNumHeaps == NULL);
|
||||||
RTEST(puvmList == NULL);
|
RTEST(puvmList == NULL);
|
||||||
ASSERT(pHalInfo != NULL);
|
|
||||||
|
|
||||||
/* We do not retesting DD_HALINFO, instead we compare it */
|
/* We do not retesting DD_HALINFO, instead we compare it */
|
||||||
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
|
RTEST(memcmp(&oldHalInfo, pHalInfo, sizeof(DD_HALINFO)) == 0);
|
||||||
RTEST(pCallBackFlags[0] != 0);
|
RTEST(pCallBackFlags[0] != 0);
|
||||||
RTEST(pCallBackFlags[1] != 0);
|
RTEST(pCallBackFlags[1] != 0);
|
||||||
|
|
||||||
/* NT4 this will fail */
|
|
||||||
RTEST(pCallBackFlags[2] == 0);
|
RTEST(pCallBackFlags[2] == 0);
|
||||||
|
|
||||||
/* Next Start 4 */
|
/* Next Start 4 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue