1 #include "../w32knapi.h"
5 NtGdiDdQueryDirectDrawObject(
6 HANDLE hDirectDrawLocal
,
9 LPD3DNTHAL_CALLBACKS puD3dCallbacks
,
10 LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData
,
11 PDD_D3DBUFCALLBACKS puD3dBufferCallbacks
,
12 LPDDSURFACEDESC puD3dTextureFormats
,
14 VIDEOMEMORY
*puvmList
,
19 return (BOOL
)Syscall(L
"NtGdiDdQueryDirectDrawObject", 11, &hDirectDrawLocal
);
23 Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti
)
25 HANDLE hDirectDraw
= NULL
;
26 DD_HALINFO
*pHalInfo
= NULL
;
27 DWORD
*pCallBackFlags
= NULL
;
28 LPD3DNTHAL_CALLBACKS puD3dCallbacks
= NULL
;
29 LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData
= NULL
;
30 PDD_D3DBUFCALLBACKS puD3dBufferCallbacks
= NULL
;
31 LPDDSURFACEDESC puD3dTextureFormats
= NULL
;
32 DWORD
*puNumHeaps
= NULL
;
33 VIDEOMEMORY
*puvmList
= NULL
;
34 DWORD
*puNumFourCC
= NULL
;
35 DWORD
*puFourCC
= NULL
;
38 DD_HALINFO oldHalInfo
;
39 DWORD CallBackFlags
[4];
40 D3DNTHAL_CALLBACKS D3dCallbacks
;
41 D3DNTHAL_GLOBALDRIVERDATA D3dDriverData
;
42 DD_D3DBUFCALLBACKS D3dBufferCallbacks
;
43 DDSURFACEDESC2 D3dTextureFormats
[100];
46 //DWORD NumFourCC = 0;
53 memset(&vmList
,0,sizeof(VIDEOMEMORY
));
54 memset(&D3dTextureFormats
,0,sizeof(DDSURFACEDESC
));
55 memset(&D3dBufferCallbacks
,0,sizeof(DD_D3DBUFCALLBACKS
));
56 memset(&D3dDriverData
,0,sizeof(D3DNTHAL_GLOBALDRIVERDATA
));
57 memset(&D3dCallbacks
,0,sizeof(D3DNTHAL_CALLBACKS
));
58 memset(&HalInfo
,0,sizeof(DD_HALINFO
));
59 memset(CallBackFlags
,0,sizeof(DWORD
)*3);
63 /* Get currenet display mode */
64 EnumDisplaySettings(NULL
, ENUM_CURRENT_SETTINGS
, &devmode
);
66 hdc
= CreateDCW(L
"DISPLAY",NULL
,NULL
,NULL
);
69 hDirectDraw
= (HANDLE
) Syscall(L
"NtGdiDdCreateDirectDrawObject", 1, &hdc
);
70 ASSERT1(hDirectDraw
!= NULL
);
73 hDirectDraw
= (HANDLE
) Syscall(L
"NtGdiDdCreateDirectDrawObject", 1, &hdc
);
75 RTEST(NtGdiDdQueryDirectDrawObject( NULL
, pHalInfo
,
76 pCallBackFlags
, puD3dCallbacks
,
77 puD3dDriverData
, puD3dBufferCallbacks
,
78 puD3dTextureFormats
, puNumHeaps
,
79 puvmList
, puNumFourCC
,
82 RTEST(pHalInfo
== NULL
);
83 RTEST(pCallBackFlags
== NULL
);
84 RTEST(puD3dCallbacks
== NULL
);
85 RTEST(puD3dDriverData
== NULL
);
86 RTEST(puD3dBufferCallbacks
== NULL
);
87 RTEST(puD3dTextureFormats
== NULL
);
88 RTEST(puNumFourCC
== NULL
);
89 RTEST(puFourCC
== NULL
);
91 RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw
, pHalInfo
,
92 pCallBackFlags
, puD3dCallbacks
,
93 puD3dDriverData
, puD3dBufferCallbacks
,
94 puD3dTextureFormats
, puNumHeaps
,
95 puvmList
, puNumFourCC
,
98 RTEST(pHalInfo
== NULL
);
99 RTEST(pCallBackFlags
== NULL
);
100 RTEST(puD3dCallbacks
== NULL
);
101 RTEST(puD3dDriverData
== NULL
);
102 RTEST(puD3dBufferCallbacks
== NULL
);
103 RTEST(puD3dTextureFormats
== NULL
);
104 RTEST(puNumFourCC
== NULL
);
105 RTEST(puFourCC
== NULL
);
108 RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw
, pHalInfo
,
109 pCallBackFlags
, puD3dCallbacks
,
110 puD3dDriverData
, puD3dBufferCallbacks
,
111 puD3dTextureFormats
, puNumHeaps
,
112 puvmList
, puNumFourCC
,
114 RTEST(pHalInfo
!= NULL
);
115 RTEST(pCallBackFlags
== NULL
);
116 RTEST(puD3dCallbacks
== NULL
);
117 RTEST(puD3dDriverData
== NULL
);
118 RTEST(puD3dBufferCallbacks
== NULL
);
119 RTEST(puD3dTextureFormats
== NULL
);
120 RTEST(puNumFourCC
== NULL
);
121 RTEST(puFourCC
== NULL
);
122 ASSERT1(pHalInfo
!= NULL
);
124 if ((pHalInfo
->dwSize
!= sizeof(DD_HALINFO
)) &&
125 (pHalInfo
->dwSize
!= sizeof(DD_HALINFO_V4
)))
127 RTEST(pHalInfo
->dwSize
!= sizeof(DD_HALINFO
));
128 ASSERT1(pHalInfo
->dwSize
!= sizeof(DD_HALINFO
));
133 if (pHalInfo
->dwSize
== sizeof(DD_HALINFO
))
135 /*the offset, in bytes, to primary surface in the display memory */
136 RTEST(pHalInfo
->vmiData
.fpPrimary
!= 0 );
138 /* unsuse always 0 */
139 RTEST(pHalInfo
->vmiData
.dwFlags
== 0 );
142 RTEST(pHalInfo
->vmiData
.dwDisplayWidth
== devmode
.dmPelsWidth
);
143 RTEST(pHalInfo
->vmiData
.dwDisplayHeight
== devmode
.dmPelsHeight
);
145 RTEST(pHalInfo->vmiData.lDisplayPitch == 0x1700;
147 RTEST(pHalInfo
->vmiData
.ddpfDisplay
.dwSize
== sizeof(DDPIXELFORMAT
) );
148 ASSERT1(pHalInfo
->vmiData
.ddpfDisplay
.dwSize
== sizeof(DDPIXELFORMAT
));
150 /* Fail on 8bit screen deep */
151 RTEST(pHalInfo
->vmiData
.ddpfDisplay
.dwFlags
== DDPF_RGB
);
154 /* No fourcc are use on primary screen */
155 RTEST(pHalInfo
->vmiData
.ddpfDisplay
.dwFourCC
== 0 );
157 /* Count RGB Bits 8/16/24/32 */
158 RTEST(pHalInfo
->vmiData
.ddpfDisplay
.dwRGBBitCount
== devmode
.dmBitsPerPel
);
161 //RTEST(pHalInfo->vmiData.ddpfDisplay.dwRBitMask == 0 );
162 //RTEST(pHalInfo->vmiData.ddpfDisplay.dwGBitMask == 0 );
163 //RTEST(pHalInfo->vmiData.ddpfDisplay.dwBBitMask == 0 );
165 /* primary never set the alpha blend mask */
166 RTEST(pHalInfo
->vmiData
.ddpfDisplay
.dwRGBAlphaBitMask
== 0 );
168 /* FIXME do not known how test follow thing, for it is diffent for each drv */
169 // pHalInfo->vmiData->dwOffscreenAlign : 0x00000100
170 // pHalInfo->vmiData->dwOverlayAlign : 0x00000010
171 // pHalInfo->vmiData->dwTextureAlign : 0x00000020
172 // pHalInfo->vmiData->dwZBufferAlign : 0x00001000
173 // pHalInfo->vmiData->dwAlphaAlign : 0x00000000
175 /* the primary display address */
176 /* test see if it in kmode memory or not */
177 RTEST(pHalInfo
->vmiData
.pvPrimary
!= 0 );
179 /* Test see if we got any hardware acclartions for 2d or 3d */
180 //RTEST(pHalInfo->ddCaps.dwSize == sizeof(DDCORECAPS));
182 /* Testing see if we got any hw support for
183 * This test can fail on video card that does not support 2d/overlay/3d
185 RTEST( pHalInfo
->ddCaps
.dwCaps
!= 0);
186 RTEST( pHalInfo
->ddCaps
.ddsCaps
.dwCaps
!= 0);
188 /* if this fail we do not have a dx driver install acodring ms, some version of windows it
189 * is okay this fail and drv does then only support basic dx
191 RTEST( (pHalInfo
->dwFlags
& (DDHALINFO_GETDRIVERINFOSET
| DDHALINFO_GETDRIVERINFO2
)) != 0 );
193 if (pHalInfo
->ddCaps
.ddsCaps
.dwCaps
& DDSCAPS_3DDEVICE
)
195 RTEST( pHalInfo
->lpD3DGlobalDriverData
!= 0);
196 RTEST( pHalInfo
->lpD3DHALCallbacks
!= 0);
197 RTEST( pHalInfo
->lpD3DBufCallbacks
!= 0);
201 /* FIXME DD_HALINFO_V4 test */
203 RtlCopyMemory(&oldHalInfo
, &HalInfo
, sizeof(DD_HALINFO
));
206 pCallBackFlags
= CallBackFlags
;
207 RtlZeroMemory(pHalInfo
,sizeof(DD_HALINFO
));
208 RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw
, pHalInfo
,
209 pCallBackFlags
, puD3dCallbacks
,
210 puD3dDriverData
, puD3dBufferCallbacks
,
211 puD3dTextureFormats
, puNumHeaps
,
212 puvmList
, puNumFourCC
,
214 RTEST(pHalInfo
!= NULL
);
215 RTEST(pCallBackFlags
!= NULL
);
216 RTEST(puD3dCallbacks
== NULL
);
217 RTEST(puD3dDriverData
== NULL
);
218 RTEST(puD3dBufferCallbacks
== NULL
);
219 RTEST(puD3dTextureFormats
== NULL
);
220 RTEST(puNumFourCC
== NULL
);
221 RTEST(puFourCC
== NULL
);
222 ASSERT1(pHalInfo
!= NULL
);
224 /* We do not retesting DD_HALINFO, instead we compare it */
225 RTEST(memcmp(&oldHalInfo
, pHalInfo
, sizeof(DD_HALINFO
)) == 0);
228 /* Cleanup ReactX setup */
230 Syscall(L
"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw
);
232 return APISTATUS_NORMAL
;