2006-07-20 07:23:21 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS kernel
|
|
|
|
* PURPOSE: Native DirectDraw implementation
|
|
|
|
* FILE: subsys/win32k/ntddraw/dd.c
|
|
|
|
* PROGRAMER: Magnus Olsen (greatlord@reactos.org)
|
|
|
|
* REVISION HISTORY:
|
2007-10-14 12:07:23 +00:00
|
|
|
* 19/1-2006 Magnus Olsen
|
2006-07-20 07:23:21 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <w32k.h>
|
|
|
|
#include <debug.h>
|
2007-10-14 12:07:23 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* NtGdiDdCreateSurface */
|
|
|
|
/************************************************************************/
|
2007-10-14 12:07:23 +00:00
|
|
|
DWORD
|
|
|
|
STDCALL
|
2007-10-14 15:03:13 +00:00
|
|
|
NtGdiDdCreateSurface(HANDLE hDirectDrawLocal,
|
|
|
|
HANDLE *hSurface,
|
|
|
|
DDSURFACEDESC *puSurfaceDescription,
|
|
|
|
DD_SURFACE_GLOBAL *puSurfaceGlobalData,
|
|
|
|
DD_SURFACE_LOCAL *puSurfaceLocalData,
|
|
|
|
DD_SURFACE_MORE *puSurfaceMoreData,
|
|
|
|
PDD_CREATESURFACEDATA puCreateSurfaceData,
|
|
|
|
HANDLE *puhSurface)
|
2007-10-14 12:07:23 +00:00
|
|
|
{
|
2007-10-14 15:03:13 +00:00
|
|
|
PGD_DDCREATESURFACE pfnDdCreateSurface = NULL;
|
2007-10-14 12:07:23 +00:00
|
|
|
INT i;
|
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdCreateSurface, pfnDdCreateSurface);
|
2007-10-14 12:07:23 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
if (pfnDdCreateSurface == NULL)
|
2007-10-14 12:07:23 +00:00
|
|
|
{
|
2007-10-14 15:03:13 +00:00
|
|
|
DPRINT1("Warring no pfnDdCreateSurface");
|
2007-10-14 12:07:23 +00:00
|
|
|
return DDHAL_DRIVER_NOTHANDLED;
|
|
|
|
}
|
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DPRINT1("Calling on dxg.sys pfnDdCreateSurface");
|
|
|
|
return pfnDdCreateSurface(hDirectDrawLocal,hSurface,puSurfaceDescription,puSurfaceGlobalData,
|
|
|
|
puSurfaceLocalData,puSurfaceMoreData,puCreateSurfaceData,puhSurface);
|
2007-10-14 12:07:23 +00:00
|
|
|
}
|
|
|
|
|
2006-07-20 07:23:21 +00:00
|
|
|
/************************************************************************/
|
2007-10-14 15:03:13 +00:00
|
|
|
/* NtGdiDdWaitForVerticalBlank */
|
2006-07-20 07:23:21 +00:00
|
|
|
/************************************************************************/
|
2007-10-14 15:03:13 +00:00
|
|
|
DWORD
|
|
|
|
STDCALL
|
|
|
|
NtGdiDdWaitForVerticalBlank(HANDLE hDirectDraw,
|
|
|
|
PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData)
|
2006-07-20 07:23:21 +00:00
|
|
|
{
|
2007-10-14 15:03:13 +00:00
|
|
|
PGD_DXDDWAITFORVERTICALBLANK pfnDdWaitForVerticalBlank = NULL;
|
2007-04-02 15:08:54 +00:00
|
|
|
INT i;
|
2007-03-17 15:15:27 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdWaitForVerticalBlank, pfnDdWaitForVerticalBlank);
|
2007-03-16 15:28:48 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
if (pfnDdWaitForVerticalBlank == NULL)
|
2007-03-17 15:15:27 +00:00
|
|
|
{
|
2007-10-14 15:03:13 +00:00
|
|
|
DPRINT1("Warring no pfnDdWaitForVerticalBlank");
|
|
|
|
return DDHAL_DRIVER_NOTHANDLED;
|
2007-03-16 15:28:48 +00:00
|
|
|
}
|
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DPRINT1("Calling on dxg.sys pfnDdWaitForVerticalBlank");
|
|
|
|
return pfnDdWaitForVerticalBlank(hDirectDraw, puWaitForVerticalBlankData);
|
2006-07-20 07:23:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
2007-10-14 15:03:13 +00:00
|
|
|
/* NtGdiDdCanCreateSurface */
|
2006-07-20 07:23:21 +00:00
|
|
|
/************************************************************************/
|
2007-10-14 15:03:13 +00:00
|
|
|
DWORD
|
|
|
|
STDCALL
|
|
|
|
NtGdiDdCanCreateSurface(HANDLE hDirectDrawLocal,
|
|
|
|
PDD_CANCREATESURFACEDATA puCanCreateSurfaceData)
|
2006-07-20 07:23:21 +00:00
|
|
|
{
|
2007-10-14 15:03:13 +00:00
|
|
|
PGD_DDCANCREATESURFACE pfnDdCanCreateSurface = NULL;
|
|
|
|
INT i;
|
2007-04-08 12:05:22 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdCanCreateSurface, pfnDdCanCreateSurface);
|
2007-04-08 12:05:22 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
if (pfnDdCanCreateSurface == NULL)
|
|
|
|
{
|
|
|
|
DPRINT1("Warring no pfnDdCanCreateSurface");
|
|
|
|
return DDHAL_DRIVER_NOTHANDLED;
|
2007-03-11 16:28:22 +00:00
|
|
|
}
|
2007-03-11 15:47:49 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DPRINT1("Calling on dxg.sys DdCanCreateSurface");
|
|
|
|
return pfnDdCanCreateSurface(hDirectDrawLocal,puCanCreateSurfaceData);
|
|
|
|
}
|
2006-07-20 07:23:21 +00:00
|
|
|
|
|
|
|
/************************************************************************/
|
2007-10-14 15:03:13 +00:00
|
|
|
/* NtGdiDdGetScanLine */
|
2006-07-20 07:23:21 +00:00
|
|
|
/************************************************************************/
|
2007-10-14 15:03:13 +00:00
|
|
|
DWORD
|
|
|
|
STDCALL
|
|
|
|
NtGdiDdGetScanLine(HANDLE hDirectDrawLocal,
|
|
|
|
PDD_GETSCANLINEDATA puGetScanLineData)
|
2006-07-20 07:23:21 +00:00
|
|
|
{
|
2007-10-14 15:03:13 +00:00
|
|
|
PGD_DXDDGETSCANLINE pfnDdGetScanLine = NULL;
|
|
|
|
INT i;
|
2006-07-20 07:23:21 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdGetScanLine, pfnDdGetScanLine);
|
2007-04-07 15:10:01 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
if (pfnDdGetScanLine == NULL)
|
2007-03-11 15:47:49 +00:00
|
|
|
{
|
2007-10-14 15:03:13 +00:00
|
|
|
DPRINT1("Warring no pfnDdGetScanLine");
|
|
|
|
return DDHAL_DRIVER_NOTHANDLED;
|
2007-03-11 15:47:49 +00:00
|
|
|
}
|
2006-07-20 07:23:21 +00:00
|
|
|
|
2007-10-14 15:03:13 +00:00
|
|
|
DPRINT1("Calling on dxg.sys pfnDdGetScanLine");
|
|
|
|
return pfnDdGetScanLine(hDirectDrawLocal,puGetScanLineData);
|
2006-07-20 07:23:21 +00:00
|
|
|
}
|
2007-10-14 15:03:13 +00:00
|
|
|
|
|
|
|
|
2007-10-14 19:45:13 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* This is not part of the ddsurface interface but it have */
|
|
|
|
/* deal with the surface */
|
|
|
|
/************************************************************************/
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* NtGdiDdCreateSurfaceEx */
|
|
|
|
/************************************************************************/
|
|
|
|
DWORD
|
|
|
|
STDCALL
|
|
|
|
NtGdiDdCreateSurfaceEx(HANDLE hDirectDraw,
|
|
|
|
HANDLE hSurface,
|
|
|
|
DWORD dwSurfaceHandle)
|
|
|
|
{
|
|
|
|
PGD_DXDDCREATESURFACEEX pfnDdCreateSurfaceEx = NULL;
|
|
|
|
INT i;
|
|
|
|
|
|
|
|
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdCreateSurfaceEx, pfnDdCreateSurfaceEx);
|
|
|
|
|
|
|
|
if (pfnDdCreateSurfaceEx == NULL)
|
|
|
|
{
|
|
|
|
DPRINT1("Warring no pfnDdCreateSurfaceEx");
|
|
|
|
return DDHAL_DRIVER_NOTHANDLED;
|
|
|
|
}
|
|
|
|
|
|
|
|
DPRINT1("Calling on dxg.sys pfnDdCreateSurfaceEx");
|
|
|
|
return pfnDdCreateSurfaceEx(hDirectDrawLocal,puGetScanLineData);
|
|
|
|
|
|
|
|
}
|
|
|
|
|