mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
more redirect from win32k to dxg.sys
btw no old code exists in current file. svn path=/branches/reactx/; revision=29572
This commit is contained in:
parent
8d3e67ab96
commit
f3c20ee1cc
4 changed files with 132 additions and 153 deletions
|
@ -18,15 +18,11 @@
|
|||
|
||||
extern PDRVFN gpDxFuncs;
|
||||
|
||||
/* is not longer in use PDD_DESTROYDRIVER DestroyDriver */
|
||||
typedef DWORD (NTAPI *PGD_DDCREATESURFACE)(HANDLE, HANDLE *, DDSURFACEDESC *, DD_SURFACE_GLOBAL *, DD_SURFACE_LOCAL *, DD_SURFACE_MORE *, PDD_CREATESURFACEDATA , HANDLE *);
|
||||
/* see ddsurf.c for PDD_SETCOLORKEY SetColorKey; */
|
||||
/* is not longer in use PDD_SETMODE SetMode; */
|
||||
typedef DWORD (NTAPI *PGD_DXDDWAITFORVERTICALBLANK)(HANDLE, PDD_WAITFORVERTICALBLANKDATA);
|
||||
typedef DWORD (NTAPI *PGD_DDCANCREATESURFACE)(HANDLE hDirectDrawLocal, PDD_CANCREATESURFACEDATA puCanCreateSurfaceData);
|
||||
/* is not longer in use PDD_CREATEPALETTE CreatePalette; */
|
||||
typedef DWORD (NTAPI *PGD_DXDDGETSCANLINE)(HANDLE, PDD_GETSCANLINEDATA);
|
||||
/* is not longer in use PDD_MAPMEMORY MapMemory; */
|
||||
typedef DWORD (NTAPI *PGD_DXDDCREATESURFACEEX)(HANDLE,HANDLE,DWORD);
|
||||
|
||||
#define DXG_GET_INDEX_FUNCTION(INDEX, FUNCTION) \
|
||||
if (gpDxFuncs) \
|
||||
|
@ -142,3 +138,34 @@ NtGdiDdGetScanLine(HANDLE hDirectDrawLocal,
|
|||
}
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* 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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
|
||||
|
||||
|
||||
typedef DWORD (NTAPI *PGD_DXDDREENABLEDIRECTDRAWOBJECT)(HANDLE, BOOL);
|
||||
typedef DWORD (NTAPI *PGD_DXDDGETDRIVERINFO)(HANDLE, PDD_GETDRIVERINFODATA);
|
||||
typedef DWORD (NTAPI *PGD_DXDDGETAVAILDRIVERMEMORY(HANDLE, PDD_GETAVAILDRIVERMEMORYDATA);
|
||||
typedef DWORD (NTAPI *PGD_DXDDSETEXCLUSIVEMODE)(HANDLE, PDD_SETEXCLUSIVEMODEDATA);
|
||||
typedef NTSTATUS (NTAPI *PGD_DXDDSTARTUPDXGRAPHICS) (ULONG, PDRVENABLEDATA, ULONG, PDRVENABLEDATA, PULONG, PEPROCESS);
|
||||
typedef NTSTATUS (NTAPI *PGD_DXDDCLEANUPDXGRAPHICS) (VOID);
|
||||
typedef HANDLE (NTAPI *PGD_DDCREATEDIRECTDRAWOBJECT) (HDC hdc);
|
||||
|
@ -354,169 +358,107 @@ NtGdiDdQueryDirectDrawObject(HANDLE hDirectDrawLocal,
|
|||
}
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* NtGdiDdReenableDirectDrawObject */
|
||||
/************************************************************************/
|
||||
|
||||
|
||||
BOOL
|
||||
STDCALL NtGdiDdReenableDirectDrawObject(
|
||||
HANDLE hDirectDrawLocal,
|
||||
BOOL *pubNewMode
|
||||
)
|
||||
STDCALL
|
||||
NtGdiDdReenableDirectDrawObject(HANDLE hDirectDrawLocal,
|
||||
BOOL *pubNewMode)
|
||||
{
|
||||
BOOL Ret=FALSE;
|
||||
NTSTATUS Status = FALSE;
|
||||
PDD_DIRECTDRAW pDirectDraw;
|
||||
PGD_DXDDREENABLEDIRECTDRAWOBJECT pfnDdReenableDirectDrawObject = NULL;
|
||||
INT i;
|
||||
|
||||
if (hDirectDrawLocal == NULL)
|
||||
{
|
||||
return Ret;
|
||||
}
|
||||
|
||||
pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDrawLocal,
|
||||
GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
|
||||
if (!pDirectDraw)
|
||||
{
|
||||
return Ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME detect mode change thic code maybe are not correct
|
||||
* if we call on intEnableDriver it will cause some memory leak
|
||||
* we need free the alloc memory before we call on it
|
||||
*/
|
||||
Ret = intEnableDriver(pDirectDraw);
|
||||
|
||||
_SEH_TRY
|
||||
{
|
||||
ProbeForWrite(pubNewMode, sizeof(BOOL), 1);
|
||||
*pubNewMode = Ret;
|
||||
}
|
||||
_SEH_HANDLE
|
||||
{
|
||||
Status = _SEH_GetExceptionCode();
|
||||
}
|
||||
_SEH_END;
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
return Ret;
|
||||
}
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw);
|
||||
|
||||
return Ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdGetDriverInfo(
|
||||
HANDLE hDirectDrawLocal,
|
||||
PDD_GETDRIVERINFODATA puGetDriverInfoData)
|
||||
|
||||
{
|
||||
DWORD ddRVal = 0;
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDrawLocal,
|
||||
GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
|
||||
DPRINT1("NtGdiDdGetDriverInfo\n");
|
||||
|
||||
if (pDirectDraw == NULL)
|
||||
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdReenableDirectDrawObject, pfnDdReenableDirectDrawObject);
|
||||
|
||||
if (pfnDdReenableDirectDrawObject == NULL)
|
||||
{
|
||||
DPRINT1("Warring no pfnDdReenableDirectDrawObject");
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
}
|
||||
|
||||
/* it exsist two version of NtGdiDdGetDriverInfo we need check for both flags */
|
||||
if (!(pDirectDraw->Hal.dwFlags & DDHALINFO_GETDRIVERINFOSET))
|
||||
ddRVal++;
|
||||
|
||||
if (!(pDirectDraw->Hal.dwFlags & DDHALINFO_GETDRIVERINFO2))
|
||||
ddRVal++;
|
||||
|
||||
/* Now we are doing the call to drv DrvGetDriverInfo */
|
||||
if (ddRVal == 2)
|
||||
{
|
||||
DPRINT1("NtGdiDdGetDriverInfo DDHAL_DRIVER_NOTHANDLED");
|
||||
ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
}
|
||||
else
|
||||
{
|
||||
ddRVal = pDirectDraw->Hal.GetDriverInfo(puGetDriverInfoData);
|
||||
}
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw);
|
||||
|
||||
return ddRVal;
|
||||
DPRINT1("Calling on dxg.sys pfnDdReenableDirectDrawObject");
|
||||
return pfnDdReenableDirectDrawObject(hDirectDrawLocal, pubNewMode);
|
||||
}
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/* NtGdiDdGetDriverInfo */
|
||||
/************************************************************************/
|
||||
|
||||
DWORD
|
||||
STDCALL
|
||||
NtGdiDdGetDriverInfo(HANDLE hDirectDrawLocal,
|
||||
PDD_GETDRIVERINFODATA puGetDriverInfoData)
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdGetAvailDriverMemory(
|
||||
HANDLE hDirectDrawLocal,
|
||||
PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData
|
||||
)
|
||||
{
|
||||
DWORD ddRVal = DDHAL_DRIVER_NOTHANDLED;
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
PGD_DXDDGETDRIVERINFO pfnDdGetDriverInfo = NULL;
|
||||
INT i;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDrawLocal, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
#ifdef DX_DEBUG
|
||||
DPRINT1("NtGdiDdGetAvailDriverMemory\n");
|
||||
#endif
|
||||
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdGetDriverInfo, pfnDdGetDriverInfo);
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puGetAvailDriverMemoryData->lpDD;
|
||||
if (pfnDdGetDriverInfo == NULL)
|
||||
{
|
||||
DPRINT1("Warring no pfnDdGetDriverInfo");
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
}
|
||||
|
||||
/* use our cache version instead */
|
||||
puGetAvailDriverMemoryData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
// ddRVal = pDirectDraw->DdGetAvailDriverMemory(puGetAvailDriverMemoryData);
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw);
|
||||
DPRINT1("Calling on dxg.sys pfnDdGetDriverInfo");
|
||||
return pfnDdGetDriverInfo(hDirectDrawLocal, puGetDriverInfoData);
|
||||
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puGetAvailDriverMemoryData->lpDD = lgpl;
|
||||
|
||||
return ddRVal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
DWORD STDCALL NtGdiDdSetExclusiveMode(
|
||||
HANDLE hDirectDraw,
|
||||
PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData
|
||||
)
|
||||
/************************************************************************/
|
||||
/* NtGdiDdGetAvailDriverMemory */
|
||||
/************************************************************************/
|
||||
DWORD
|
||||
STDCALL
|
||||
NtGdiDdGetAvailDriverMemory(HANDLE hDirectDrawLocal,
|
||||
PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData)
|
||||
{
|
||||
DWORD ddRVal;
|
||||
PDD_DIRECTDRAW_GLOBAL lgpl;
|
||||
PGD_DXDDGETAVAILDRIVERMEMORY pfnDdGetAvailDriverMemory = NULL;
|
||||
INT i;
|
||||
|
||||
PDD_DIRECTDRAW pDirectDraw = GDIOBJ_LockObj(DdHandleTable, hDirectDraw, GDI_OBJECT_TYPE_DIRECTDRAW);
|
||||
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdGetAvailDriverMemory, pfnDdGetAvailDriverMemory);
|
||||
|
||||
#ifdef DX_DEBUG
|
||||
DPRINT1("NtGdiDdSetExclusiveMode\n");
|
||||
#endif
|
||||
if (pfnDdGetAvailDriverMemory == NULL)
|
||||
{
|
||||
DPRINT1("Warring no pfnDdGetAvailDriverMemory");
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
}
|
||||
|
||||
/* backup the orignal PDev and info */
|
||||
lgpl = puSetExclusiveModeData->lpDD;
|
||||
DPRINT1("Calling on dxg.sys pfnDdGetAvailDriverMemory");
|
||||
return pfnDdGetAvailDriverMemory(hDirectDrawLocal, puGetAvailDriverMemoryData);
|
||||
}
|
||||
|
||||
/* use our cache version instead */
|
||||
puSetExclusiveModeData->lpDD = &pDirectDraw->Global;
|
||||
|
||||
/* make the call */
|
||||
ddRVal = pDirectDraw->DdSetExclusiveMode(puSetExclusiveModeData);
|
||||
/************************************************************************/
|
||||
/* NtGdiDdSetExclusiveMode */
|
||||
/************************************************************************/
|
||||
|
||||
GDIOBJ_UnlockObjByPtr(DdHandleTable, pDirectDraw);
|
||||
DWORD
|
||||
STDCALL
|
||||
NtGdiDdSetExclusiveMode(HANDLE hDirectDraw,
|
||||
PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData)
|
||||
{
|
||||
PGD_DXDDSETEXCLUSIVEMODE pfnDdSetExclusiveMode = NULL;
|
||||
INT i;
|
||||
|
||||
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdSetExclusiveMode, pfnDdSetExclusiveMode);
|
||||
|
||||
if (pfnDdSetExclusiveMode == NULL)
|
||||
{
|
||||
DPRINT1("Warring no pfnDdSetExclusiveMode");
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
}
|
||||
|
||||
DPRINT1("Calling on dxg.sys pfnDdSetExclusiveMode");
|
||||
return pfnDdSetExclusiveMode(hDirectDrawLocal, puGetAvailDriverMemoryData);
|
||||
|
||||
/* But back the orignal PDev */
|
||||
puSetExclusiveModeData->lpDD = lgpl;
|
||||
|
||||
return ddRVal;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
extern PDRVFN gpDxFuncs;
|
||||
|
||||
typedef DWORD (NTAPI *PGD_DXDDUNATTACHSURFACE)(HANDLE, HANDLE);
|
||||
typedef DWORD (NTAPI *PGD_DXDDDESTROYSURFACE)(HANDLE, BOOL);
|
||||
typedef DWORD (NTAPI *PGD_DXDDFLIP)(HANDLE, HANDLE, HANDLE, HANDLE, PDD_FLIPDATA);
|
||||
/* Does not exists in win32k or dxg.sys PDD_SURFCB_SETCLIPLIST SetClipList; */
|
||||
|
@ -361,3 +362,27 @@ NtGdiDdAttachSurface(HANDLE hSurfaceFrom,
|
|||
return pfnDdAttachSurface(hSurfaceFrom,hSurfaceTo);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* NtGdiDdUnattachSurface */
|
||||
/************************************************************************/
|
||||
VOID
|
||||
STDCALL
|
||||
NtGdiDdUnattachSurface(HANDLE hSurface,
|
||||
HANDLE hSurfaceAttached)
|
||||
{
|
||||
PGD_DXDDUNATTACHSURFACE pfnDdUnattachSurface = NULL;
|
||||
INT i;
|
||||
|
||||
DXG_GET_INDEX_FUNCTION(DXG_INDEX_DxDdUnattachSurface, pfnDdUnattachSurface);
|
||||
|
||||
if (pfnDdUnattachSurface == NULL)
|
||||
{
|
||||
DPRINT1("Warring no pfnDdUnattachSurface");
|
||||
return DDHAL_DRIVER_NOTHANDLED;
|
||||
}
|
||||
|
||||
DPRINT1("Calling on dxg.sys pfnDdUnattachSurface");
|
||||
return pfnDdUnattachSurface(hSurface,hSurfaceAttached);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -13,16 +13,7 @@
|
|||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
DWORD STDCALL NtGdiDdCreateSurfaceEx(
|
||||
HANDLE hDirectDraw,
|
||||
HANDLE hSurface,
|
||||
DWORD dwSurfaceHandle
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD STDCALL NtGdiDdFlipToGDISurface(
|
||||
HANDLE hDirectDraw,
|
||||
|
@ -86,13 +77,7 @@ BOOL STDCALL NtGdiDdSetGammaRamp(
|
|||
return 0;
|
||||
}
|
||||
|
||||
VOID STDCALL NtGdiDdUnattachSurface(
|
||||
HANDLE hSurface,
|
||||
HANDLE hSurfaceAttached
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue