adding more dx test to w32knapi, convert from win32kdxtest tool
[reactos.git] / rostests / apitests / w32knapi / ntdd / NtGdiDdQueryDirectDrawObject.c
1 #include "../w32knapi.h"
2
3 W32KAPI
4 BOOL STDCALL
5 NtGdiDdQueryDirectDrawObject(
6 HANDLE hDirectDrawLocal,
7 DD_HALINFO *pHalInfo,
8 DWORD *pCallBackFlags,
9 LPD3DNTHAL_CALLBACKS puD3dCallbacks,
10 LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData,
11 PDD_D3DBUFCALLBACKS puD3dBufferCallbacks,
12 LPDDSURFACEDESC puD3dTextureFormats,
13 DWORD *puNumHeaps,
14 VIDEOMEMORY *puvmList,
15 DWORD *puNumFourCC,
16 DWORD *puFourCC
17 )
18 {
19 return (BOOL)Syscall(L"NtGdiDdQueryDirectDrawObject", 11, &hDirectDrawLocal);
20 }
21
22 INT
23 Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti)
24 {
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;
36
37 DD_HALINFO HalInfo;
38 DWORD CallBackFlags[4];
39 D3DNTHAL_CALLBACKS D3dCallbacks;
40 D3DNTHAL_GLOBALDRIVERDATA D3dDriverData;
41 DD_D3DBUFCALLBACKS D3dBufferCallbacks;
42 DDSURFACEDESC2 D3dTextureFormats[100];
43 //DWORD NumHeaps = 0;
44 VIDEOMEMORY vmList;
45 //DWORD NumFourCC = 0;
46 //DWORD FourCC = 0;
47 DEVMODE devmode;
48 HDC hdc;
49
50
51 /* clear data */
52 memset(&vmList,0,sizeof(VIDEOMEMORY));
53 memset(&D3dTextureFormats,0,sizeof(DDSURFACEDESC));
54 memset(&D3dBufferCallbacks,0,sizeof(DD_D3DBUFCALLBACKS));
55 memset(&D3dDriverData,0,sizeof(D3DNTHAL_GLOBALDRIVERDATA));
56 memset(&D3dCallbacks,0,sizeof(D3DNTHAL_CALLBACKS));
57 memset(&HalInfo,0,sizeof(DD_HALINFO));
58 memset(CallBackFlags,0,sizeof(DWORD)*3);
59
60
61
62 /* Get currenet display mode */
63 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
64
65 hdc = CreateDCW(L"DISPLAY",NULL,NULL,NULL);
66 ASSERT1(hdc != NULL);
67
68 hDirectDraw = (HANDLE) Syscall(L"NtGdiDdCreateDirectDrawObject", 1, &hdc);
69 ASSERT1(hDirectDraw != NULL);
70
71 /* Test ReactX */
72 hDirectDraw = (HANDLE) Syscall(L"NtGdiDdCreateDirectDrawObject", 1, &hdc);
73
74 RTEST(NtGdiDdQueryDirectDrawObject( NULL, pHalInfo,
75 pCallBackFlags, puD3dCallbacks,
76 puD3dDriverData, puD3dBufferCallbacks,
77 puD3dTextureFormats, puNumHeaps,
78 puvmList, puNumFourCC,
79 puFourCC) == FALSE);
80
81 RTEST(pHalInfo == NULL);
82 RTEST(pCallBackFlags == NULL);
83 RTEST(puD3dCallbacks == NULL);
84 RTEST(puD3dDriverData == NULL);
85 RTEST(puD3dBufferCallbacks == NULL);
86 RTEST(puD3dTextureFormats == NULL);
87 RTEST(puNumFourCC == NULL);
88 RTEST(puFourCC == NULL);
89
90 RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
91 pCallBackFlags, puD3dCallbacks,
92 puD3dDriverData, puD3dBufferCallbacks,
93 puD3dTextureFormats, puNumHeaps,
94 puvmList, puNumFourCC,
95 puFourCC) == FALSE);
96
97 RTEST(pHalInfo == NULL);
98 RTEST(pCallBackFlags == NULL);
99 RTEST(puD3dCallbacks == NULL);
100 RTEST(puD3dDriverData == NULL);
101 RTEST(puD3dBufferCallbacks == NULL);
102 RTEST(puD3dTextureFormats == NULL);
103 RTEST(puNumFourCC == NULL);
104 RTEST(puFourCC == NULL);
105
106 pHalInfo = &HalInfo;
107 RTEST(NtGdiDdQueryDirectDrawObject( hDirectDraw, pHalInfo,
108 pCallBackFlags, puD3dCallbacks,
109 puD3dDriverData, puD3dBufferCallbacks,
110 puD3dTextureFormats, puNumHeaps,
111 puvmList, puNumFourCC,
112 puFourCC)== FALSE);
113 RTEST(pHalInfo != NULL);
114 RTEST(pCallBackFlags == NULL);
115 RTEST(puD3dCallbacks == NULL);
116 RTEST(puD3dDriverData == NULL);
117 RTEST(puD3dBufferCallbacks == NULL);
118 RTEST(puD3dTextureFormats == NULL);
119 RTEST(puNumFourCC == NULL);
120 RTEST(puFourCC == NULL);
121 ASSERT1(pHalInfo != NULL);
122
123 if ((pHalInfo->dwSize != sizeof(DD_HALINFO)) &&
124 (pHalInfo->dwSize != sizeof(DD_HALINFO_V4)))
125 {
126 RTEST(pHalInfo->dwSize != sizeof(DD_HALINFO));
127 ASSERT1(pHalInfo->dwSize != sizeof(DD_HALINFO));
128 }
129
130
131
132 if (pHalInfo->dwSize == sizeof(DD_HALINFO))
133 {
134 /*the offset, in bytes, to primary surface in the display memory */
135 RTEST(pHalInfo->vmiData.fpPrimary != 0 );
136
137 /* unsuse always 0 */
138 RTEST(pHalInfo->vmiData.dwFlags == 0 );
139
140 /* fixme check the res */
141
142
143 RTEST(pHalInfo->vmiData.dwDisplayWidth == devmode.dmPelsWidth );
144 RTEST(pHalInfo->vmiData.dwDisplayHeight == devmode.dmPelsHeight );
145 /* FIXME
146 RTEST(pHalInfo->vmiData.lDisplayPitch == 0x1700;
147 */
148 RTEST(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT) );
149 ASSERT1(pHalInfo->vmiData.ddpfDisplay.dwSize == sizeof(DDPIXELFORMAT));
150
151
152 /* No fourcc are use on primary screen */
153 RTEST(pHalInfo->vmiData.ddpfDisplay.dwFourCC == 0 );
154
155 /* Count RGB Bits 8/16/24/32 */
156 RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount == devmode.dmBitsPerPel );
157
158 /* FIXME RGB mask */
159 //RTEST(pHalInfo->vmiData.ddpfDisplay.dwRBitMask == 0 );
160 //RTEST(pHalInfo->vmiData.ddpfDisplay.dwGBitMask == 0 );
161 //RTEST(pHalInfo->vmiData.ddpfDisplay.dwBBitMask == 0 );
162 /* primary never set the alpha blend mask */
163 RTEST(pHalInfo->vmiData.ddpfDisplay.dwRGBAlphaBitMask == 0 );
164
165 /* FIXME do not known how test follow thing, for it is diffent for each drv */
166 // pHalInfo->vmiData->dwOffscreenAlign : 0x00000100
167 // pHalInfo->vmiData->dwOverlayAlign : 0x00000010
168 // pHalInfo->vmiData->dwTextureAlign : 0x00000020
169 // pHalInfo->vmiData->dwZBufferAlign : 0x00001000
170 // pHalInfo->vmiData->dwAlphaAlign : 0x00000000
171
172 /* the primary display address */
173 RTEST(pHalInfo->vmiData.pvPrimary != 0x00000000 );
174 }
175
176 /* Cleanup ReactX setup */
177 DeleteDC(hdc);
178 Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDraw);
179
180 return APISTATUS_NORMAL;
181 }