1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS kernel 4 * PURPOSE: Native DirectDraw implementation 5 * FILE: win32ss/reactx/ntddraw/dvp.c 6 * PROGRAMER: Magnus olsen (magnus@greatlord.com) 7 * REVISION HISTORY: 8 * 19/1-2006 Magnus Olsen 9 */ 10 11 #include <win32k.h> 12 13 // #define NDEBUG 14 #include <debug.h> 15 16 /************************************************************************/ 17 /* NtGdiDvpCanCreateVideoPort */ 18 /************************************************************************/ 19 DWORD 20 APIENTRY 21 NtGdiDvpCanCreateVideoPort(HANDLE hDirectDraw, 22 PDD_CANCREATEVPORTDATA puCanCreateVPortData) 23 { 24 PGD_DVPCANCREATEVIDEOPORT pfnDvpCanCreateVideoPort = (PGD_DVPCANCREATEVIDEOPORT)gpDxFuncs[DXG_INDEX_DxDvpCanCreateVideoPort].pfn; 25 26 if (pfnDvpCanCreateVideoPort == NULL) 27 { 28 DPRINT1("Warning: no pfnDvpCanCreateVideoPort\n"); 29 return DDHAL_DRIVER_NOTHANDLED; 30 } 31 32 DPRINT("Calling dxg.sys pfnDvpCanCreateVideoPort\n"); 33 return pfnDvpCanCreateVideoPort(hDirectDraw, puCanCreateVPortData); 34 } 35 36 /************************************************************************/ 37 /* NtGdiDvpColorControl */ 38 /************************************************************************/ 39 DWORD 40 APIENTRY 41 NtGdiDvpColorControl(HANDLE hVideoPort, 42 PDD_VPORTCOLORDATA puVPortColorData) 43 { 44 PGD_DVPCOLORCONTROL pfnDvpColorControl = (PGD_DVPCOLORCONTROL)gpDxFuncs[DXG_INDEX_DxDvpColorControl].pfn; 45 46 if (pfnDvpColorControl == NULL) 47 { 48 DPRINT1("Warning: no pfnDvpColorControl\n"); 49 return DDHAL_DRIVER_NOTHANDLED; 50 } 51 52 DPRINT("Calling dxg.sys pfnDvpColorControl\n"); 53 return pfnDvpColorControl(hVideoPort, puVPortColorData); 54 } 55 56 /************************************************************************/ 57 /* NtGdiDvpCreateVideoPort */ 58 /************************************************************************/ 59 HANDLE 60 APIENTRY 61 NtGdiDvpCreateVideoPort(HANDLE hDirectDraw, 62 PDD_CREATEVPORTDATA puCreateVPortData) 63 { 64 PGD_DVPCREATEVIDEOPORT pfnDvpCreateVideoPort = (PGD_DVPCREATEVIDEOPORT)gpDxFuncs[DXG_INDEX_DxDvpCreateVideoPort].pfn; 65 66 if (pfnDvpCreateVideoPort == NULL) 67 { 68 DPRINT1("Warning: no pfnDvpCreateVideoPort\n"); 69 return DDHAL_DRIVER_NOTHANDLED; 70 } 71 72 DPRINT("Calling dxg.sys pfnDvpCreateVideoPort\n"); 73 return pfnDvpCreateVideoPort(hDirectDraw, puCreateVPortData); 74 } 75 76 /************************************************************************/ 77 /* NtGdiDvpDestroyVideoPort */ 78 /************************************************************************/ 79 DWORD 80 APIENTRY 81 NtGdiDvpDestroyVideoPort(HANDLE hVideoPort, 82 PDD_DESTROYVPORTDATA puDestroyVPortData) 83 { 84 PGD_DVPDESTROYVIDEOPORT pfnDvpDestroyVideoPort = 85 (PGD_DVPDESTROYVIDEOPORT)gpDxFuncs[DXG_INDEX_DxDvpDestroyVideoPort].pfn; 86 87 if (pfnDvpDestroyVideoPort == NULL) 88 { 89 DPRINT1("Warning: no pfnDvpDestroyVideoPort\n"); 90 return DDHAL_DRIVER_NOTHANDLED; 91 } 92 93 DPRINT("Calling dxg.sys pfnDvpDestroyVideoPort\n"); 94 return pfnDvpDestroyVideoPort(hVideoPort, puDestroyVPortData); 95 } 96 97 /************************************************************************/ 98 /* NtGdiDvpFlipVideoPort */ 99 /************************************************************************/ 100 DWORD 101 APIENTRY 102 NtGdiDvpFlipVideoPort(HANDLE hVideoPort, 103 HANDLE hDDSurfaceCurrent, 104 HANDLE hDDSurfaceTarget, 105 PDD_FLIPVPORTDATA puFlipVPortData) 106 { 107 PGD_DVPFLIPVIDEOPORT pfnDvpFlipVideoPort = 108 (PGD_DVPFLIPVIDEOPORT)gpDxFuncs[DXG_INDEX_DxDvpFlipVideoPort].pfn; 109 110 if (pfnDvpFlipVideoPort == NULL) 111 { 112 DPRINT1("Warning: no pfnDvpFlipVideoPort\n"); 113 return DDHAL_DRIVER_NOTHANDLED; 114 } 115 116 DPRINT("Calling dxg.sys pfnDvpFlipVideoPort\n"); 117 return pfnDvpFlipVideoPort(hVideoPort, hDDSurfaceCurrent, hDDSurfaceTarget, puFlipVPortData); 118 } 119 120 /************************************************************************/ 121 /* NtGdiDvpGetVideoPortBandwidth */ 122 /************************************************************************/ 123 DWORD 124 APIENTRY 125 NtGdiDvpGetVideoPortBandwidth(HANDLE hVideoPort, 126 PDD_GETVPORTBANDWIDTHDATA puGetVPortBandwidthData) 127 { 128 PGD_DVPGETVIDEOPORTBANDWITH pfnDvpGetVideoPortBandwidth = (PGD_DVPGETVIDEOPORTBANDWITH)gpDxFuncs[DXG_INDEX_DxDvpGetVideoPortBandwidth].pfn; 129 130 if (pfnDvpGetVideoPortBandwidth == NULL) 131 { 132 DPRINT1("Warning: no pfnDvpGetVideoPortBandwidth\n"); 133 return DDHAL_DRIVER_NOTHANDLED; 134 } 135 136 DPRINT("Calling dxg.sys pfnDvpGetVideoPortBandwidth\n"); 137 return pfnDvpGetVideoPortBandwidth(hVideoPort, puGetVPortBandwidthData); 138 } 139 140 /************************************************************************/ 141 /* NtGdiDvpGetVideoPortFlipStatus */ 142 /************************************************************************/ 143 DWORD 144 APIENTRY 145 NtGdiDvpGetVideoPortFlipStatus(HANDLE hDirectDraw, 146 PDD_GETVPORTFLIPSTATUSDATA puGetVPortFlipStatusData) 147 { 148 PGD_DXDVPGETVIDEOPORTFLIPSTATUS pfnDvpGetVideoPortFlipStatus = (PGD_DXDVPGETVIDEOPORTFLIPSTATUS)gpDxFuncs[DXG_INDEX_DxDvpGetVideoPortFlipStatus].pfn; 149 150 if (pfnDvpGetVideoPortFlipStatus == NULL) 151 { 152 DPRINT1("Warning: no pfnDvpGetVideoPortFlipStatus\n"); 153 return DDHAL_DRIVER_NOTHANDLED; 154 } 155 156 DPRINT("Calling dxg.sys pfnDvpGetVideoPortFlipStatus\n"); 157 return pfnDvpGetVideoPortFlipStatus(hDirectDraw, puGetVPortFlipStatusData); 158 } 159 160 /************************************************************************/ 161 /* NtGdiDvpGetVideoPortInputFormats */ 162 /************************************************************************/ 163 DWORD 164 APIENTRY 165 NtGdiDvpGetVideoPortInputFormats(HANDLE hVideoPort, 166 PDD_GETVPORTINPUTFORMATDATA puGetVPortInputFormatData) 167 { 168 PGD_DXDVPGETVIDEOPORTINPUTFORMATS pfnDvpGetVideoPortInputFormats = (PGD_DXDVPGETVIDEOPORTINPUTFORMATS)gpDxFuncs[DXG_INDEX_DxDvpGetVideoPortInputFormats].pfn; 169 170 if (pfnDvpGetVideoPortInputFormats == NULL) 171 { 172 DPRINT1("Warning: no pfnDvpGetVideoPortInputFormats\n"); 173 return DDHAL_DRIVER_NOTHANDLED; 174 } 175 176 DPRINT("Calling dxg.sys pfnDvpGetVideoPortInputFormats\n"); 177 return pfnDvpGetVideoPortInputFormats(hVideoPort, puGetVPortInputFormatData); 178 } 179 180 /************************************************************************/ 181 /* NtGdiDvpGetVideoPortLine */ 182 /************************************************************************/ 183 DWORD 184 APIENTRY 185 NtGdiDvpGetVideoPortLine(HANDLE hVideoPort, 186 PDD_GETVPORTLINEDATA puGetVPortLineData) 187 { 188 PGD_DXDVPGETVIDEOPORTLINE pfnDvpGetVideoPortLine = (PGD_DXDVPGETVIDEOPORTLINE)gpDxFuncs[DXG_INDEX_DxDvpGetVideoPortLine].pfn; 189 190 if (pfnDvpGetVideoPortLine == NULL) 191 { 192 DPRINT1("Warning: no pfnDvpGetVideoPortLine\n"); 193 return DDHAL_DRIVER_NOTHANDLED; 194 } 195 196 DPRINT("Calling dxg.sys pfnDvpGetVideoPortLine\n"); 197 return pfnDvpGetVideoPortLine(hVideoPort, puGetVPortLineData); 198 } 199 200 /************************************************************************/ 201 /* NtGdiDvpGetVideoPortOutputFormats */ 202 /************************************************************************/ 203 DWORD 204 APIENTRY 205 NtGdiDvpGetVideoPortOutputFormats(HANDLE hVideoPort, 206 PDD_GETVPORTOUTPUTFORMATDATA puGetVPortOutputFormatData) 207 { 208 PGD_DXDVPGETVIDEOPORTOUTPUTFORMATS pfnDvpGetVideoPortOutputFormats = (PGD_DXDVPGETVIDEOPORTOUTPUTFORMATS)gpDxFuncs[DXG_INDEX_DxDvpGetVideoPortOutputFormats].pfn; 209 210 if (pfnDvpGetVideoPortOutputFormats == NULL) 211 { 212 DPRINT1("Warning: no pfnDvpGetVideoPortOutputFormats\n"); 213 return DDHAL_DRIVER_NOTHANDLED; 214 } 215 216 DPRINT("Calling dxg.sys pfnDvpGetVideoPortOutputFormats\n"); 217 return pfnDvpGetVideoPortOutputFormats(hVideoPort, puGetVPortOutputFormatData); 218 } 219 220 /************************************************************************/ 221 /* NtGdiDvpGetVideoPortConnectInfo */ 222 /************************************************************************/ 223 DWORD 224 APIENTRY 225 NtGdiDvpGetVideoPortConnectInfo(HANDLE hDirectDraw, 226 PDD_GETVPORTCONNECTDATA puGetVPortConnectData) 227 { 228 PGD_DXDVPGETVIDEOPORTCONNECTINFO pfnDvpGetVideoPortConnectInfo = (PGD_DXDVPGETVIDEOPORTCONNECTINFO)gpDxFuncs[DXG_INDEX_DxDvpGetVideoPortConnectInfo].pfn; 229 230 if (pfnDvpGetVideoPortConnectInfo == NULL) 231 { 232 DPRINT1("Warning: no pfnDvpGetVideoPortConnectInfo\n"); 233 return DDHAL_DRIVER_NOTHANDLED; 234 } 235 236 DPRINT("Calling dxg.sys pfnDvpGetVideoPortConnectInfo\n"); 237 return pfnDvpGetVideoPortConnectInfo(hDirectDraw, puGetVPortConnectData); 238 } 239 240 /************************************************************************/ 241 /* NtGdiDvpGetVideoSignalStatus */ 242 /************************************************************************/ 243 DWORD 244 APIENTRY 245 NtGdiDvpGetVideoSignalStatus(HANDLE hVideoPort, 246 PDD_GETVPORTSIGNALDATA puGetVPortSignalData) 247 { 248 PGD_DXDVPGETVIDEOSIGNALSTATUS pfnDvpGetVideoSignalStatus = (PGD_DXDVPGETVIDEOSIGNALSTATUS)gpDxFuncs[DXG_INDEX_DxDvpGetVideoSignalStatus].pfn; 249 250 if (pfnDvpGetVideoSignalStatus == NULL) 251 { 252 DPRINT1("Warning: no pfnDvpGetVideoSignalStatus\n"); 253 return DDHAL_DRIVER_NOTHANDLED; 254 } 255 256 DPRINT("Calling dxg.sys pfnDvpGetVideoSignalStatus\n"); 257 return pfnDvpGetVideoSignalStatus(hVideoPort, puGetVPortSignalData); 258 } 259 260 /************************************************************************/ 261 /* NtGdiDvpUpdateVideoPort */ 262 /************************************************************************/ 263 DWORD 264 APIENTRY 265 NtGdiDvpUpdateVideoPort(HANDLE hVideoPort, 266 HANDLE* phSurfaceVideo, 267 HANDLE* phSurfaceVbi, 268 PDD_UPDATEVPORTDATA puUpdateVPortData) 269 { 270 PGD_DXDVPUPDATEVIDEOPORT pfnDvpUpdateVideoPort = (PGD_DXDVPUPDATEVIDEOPORT)gpDxFuncs[DXG_INDEX_DxDvpUpdateVideoPort].pfn; 271 272 if (pfnDvpUpdateVideoPort == NULL) 273 { 274 DPRINT1("Warning: no pfnDvpUpdateVideoPort\n"); 275 return DDHAL_DRIVER_NOTHANDLED; 276 } 277 278 DPRINT("Calling dxg.sys pfnDvpUpdateVideoPort\n"); 279 return pfnDvpUpdateVideoPort(hVideoPort, phSurfaceVideo, phSurfaceVbi, puUpdateVPortData); 280 } 281 282 /************************************************************************/ 283 /* NtGdiDvpWaitForVideoPortSync */ 284 /************************************************************************/ 285 DWORD 286 APIENTRY 287 NtGdiDvpWaitForVideoPortSync(HANDLE hVideoPort, 288 PDD_WAITFORVPORTSYNCDATA puWaitForVPortSyncData) 289 { 290 PGD_DXDVPWAITFORVIDEOPORTSYNC pfnDvpWaitForVideoPortSync = (PGD_DXDVPWAITFORVIDEOPORTSYNC)gpDxFuncs[DXG_INDEX_DxDvpWaitForVideoPortSync].pfn; 291 292 if (pfnDvpWaitForVideoPortSync == NULL) 293 { 294 DPRINT1("Warning: no pfnDvpWaitForVideoPortSync\n"); 295 return DDHAL_DRIVER_NOTHANDLED; 296 } 297 298 DPRINT("Calling dxg.sys pfnDvpWaitForVideoPortSync\n"); 299 return pfnDvpWaitForVideoPortSync(hVideoPort, puWaitForVPortSyncData); 300 } 301 302 /************************************************************************/ 303 /* NtGdiDvpAcquireNotification */ 304 /************************************************************************/ 305 DWORD 306 APIENTRY 307 NtGdiDvpAcquireNotification(HANDLE hVideoPort, 308 HANDLE* hEvent, 309 LPDDVIDEOPORTNOTIFY pNotify) 310 { 311 PGD_DXDVPACQUIRENOTIFICATION pfnDvpAcquireNotification = (PGD_DXDVPACQUIRENOTIFICATION)gpDxFuncs[DXG_INDEX_DxDvpAcquireNotification].pfn; 312 313 if (pfnDvpAcquireNotification == NULL) 314 { 315 DPRINT1("Warning: no pfnDvpAcquireNotification\n"); 316 return DDHAL_DRIVER_NOTHANDLED; 317 } 318 319 DPRINT("Calling dxg.sys pfnDvpAcquireNotification\n"); 320 return pfnDvpAcquireNotification(hVideoPort, hEvent, pNotify); 321 } 322 323 /************************************************************************/ 324 /* NtGdiDvpReleaseNotification */ 325 /************************************************************************/ 326 DWORD 327 APIENTRY 328 NtGdiDvpReleaseNotification(HANDLE hVideoPort, 329 HANDLE hEvent) 330 { 331 PGD_DXDVPRELEASENOTIFICATION pfnDvpReleaseNotification = (PGD_DXDVPRELEASENOTIFICATION)gpDxFuncs[DXG_INDEX_DxDvpReleaseNotification].pfn; 332 333 if (pfnDvpReleaseNotification == NULL) 334 { 335 DPRINT1("Warning: no pfnDvpReleaseNotification\n"); 336 return DDHAL_DRIVER_NOTHANDLED; 337 } 338 339 DPRINT("Calling dxg.sys pfnDvpReleaseNotification\n"); 340 return pfnDvpReleaseNotification(hVideoPort, hEvent); 341 } 342 343 /************************************************************************/ 344 /* NtGdiDvpGetVideoPortField */ 345 /************************************************************************/ 346 DWORD 347 APIENTRY 348 NtGdiDvpGetVideoPortField(HANDLE hVideoPort, 349 PDD_GETVPORTFIELDDATA puGetVPortFieldData) 350 { 351 PGD_DXDVPGETVIDEOPORTFIELD pfnDvpGetVideoPortField = (PGD_DXDVPGETVIDEOPORTFIELD)gpDxFuncs[DXG_INDEX_DxDvpGetVideoPortField].pfn; 352 353 if (pfnDvpGetVideoPortField == NULL) 354 { 355 DPRINT1("Warning: no pfnDvpGetVideoPortField\n"); 356 return DDHAL_DRIVER_NOTHANDLED; 357 } 358 359 DPRINT("Calling dxg.sys pfnDvpGetVideoPortField\n"); 360 return pfnDvpGetVideoPortField(hVideoPort, puGetVPortFieldData); 361 } 362