* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: lib/ddraw/ddraw.c
- * PURPOSE: DirectDraw Library
+ * PURPOSE: DirectDraw Library
* PROGRAMMER: Magnus Olsen (greatlrd)
*
*/
-#include <windows.h>
#include "rosdraw.h"
-#include "d3dhal.h"
-#include "ddrawgdi.h"
DDRAWI_DIRECTDRAW_GBL ddgbl;
DDRAWI_DDRAWSURFACE_GBL ddSurfGbl;
+WCHAR classname[128];
+WNDCLASSW wnd_class;
-HRESULT WINAPI
-StartDirectDraw(LPDIRECTDRAW* iface, LPGUID lpGuid, BOOL reenable)
+
+HRESULT WINAPI
+Create_DirectDraw (LPGUID pGUID, LPDIRECTDRAW* pIface,
+ REFIID id, BOOL reenable)
+{
+ LPDDRAWI_DIRECTDRAW_INT This;
+
+ DX_WINDBG_trace();
+
+ if ((IsBadReadPtr(pIface,sizeof(LPDIRECTDRAW))) ||
+ (IsBadWritePtr(pIface,sizeof(LPDIRECTDRAW))))
+ {
+ return DDERR_INVALIDPARAMS;
+ }
+
+ This = (LPDDRAWI_DIRECTDRAW_INT)*pIface;
+
+ /* fixme linking too second link when we shall not doing it */
+ if (IsBadReadPtr(This,sizeof(LPDIRECTDRAW)))
+ {
+ /* We do not have a DirectDraw interface, we need alloc it*/
+ LPDDRAWI_DIRECTDRAW_INT memThis;
+
+ DX_STUB_str("1. no linking\n");
+
+ DxHeapMemAlloc(memThis, sizeof(DDRAWI_DIRECTDRAW_INT));
+ if (memThis == NULL)
+ {
+ return DDERR_OUTOFMEMORY;
+ }
+
+ This = memThis;
+
+ /* Fixme release memory alloc if we fail */
+
+ DxHeapMemAlloc(This->lpLcl, sizeof(DDRAWI_DIRECTDRAW_LCL));
+ if (This->lpLcl == NULL)
+ {
+ return DDERR_OUTOFMEMORY;
+ }
+ }
+ else
+ {
+ /* We got the DirectDraw interface alloc and we need create the link */
+ LPDDRAWI_DIRECTDRAW_INT newThis;
+
+ DX_STUB_str("2.linking\n");
+
+ /* step 1.Alloc the new DDRAWI_DIRECTDRAW_INT for the lnking */
+ DxHeapMemAlloc(newThis, sizeof(DDRAWI_DIRECTDRAW_INT));
+ if (newThis == NULL)
+ {
+ return DDERR_OUTOFMEMORY;
+ }
+
+ /* step 2 check if it not DDCREATE_HARDWAREONLY we got if so we fail */
+ if ((pGUID) && (pGUID != (LPGUID)DDCREATE_HARDWAREONLY))
+ {
+ if (pGUID !=NULL)
+ {
+ This = newThis;
+ return DDERR_INVALIDDIRECTDRAWGUID;
+ }
+ }
+
+ /* step 3 do the link the old interface are store in the new one */
+ newThis->lpLink = This;
+
+ /* step 4 we need create new local directdraw struct for the new linked interface */
+ DxHeapMemAlloc(newThis->lpLcl, sizeof(DDRAWI_DIRECTDRAW_LCL));
+ if (newThis->lpLcl == NULL)
+ {
+ This = newThis;
+ return DDERR_OUTOFMEMORY;
+ }
+
+ This = newThis;
+ }
+
+ This->lpLcl->lpGbl = &ddgbl;
+
+ *pIface = (LPDIRECTDRAW)This;
+
+ /* Get right interface we whant */
+
+ This->lpVtbl = 0;
+ if (IsEqualGUID(&IID_IDirectDraw7, id))
+ {
+ /* DirectDraw7 Vtable */
+ This->lpVtbl = &DirectDraw7_Vtable;
+ This->lpLcl->dwLocalFlags = This->lpLcl->dwLocalFlags + DDRAWILCL_DIRECTDRAW7;
+ *pIface = (LPDIRECTDRAW)&This->lpVtbl;
+ Main_DirectDraw_AddRef(This);
+ }
+ else if (IsEqualGUID(&IID_IDirectDraw4, id))
+ {
+ /* DirectDraw4 Vtable */
+ This->lpVtbl = &DirectDraw4_Vtable;
+ *pIface = (LPDIRECTDRAW)&This->lpVtbl;
+ Main_DirectDraw_AddRef(This);
+ }
+ else if (IsEqualGUID(&IID_IDirectDraw2, id))
+ {
+ /* DirectDraw2 Vtable */
+ This->lpVtbl = &DirectDraw2_Vtable;
+ *pIface = (LPDIRECTDRAW)&This->lpVtbl;
+ Main_DirectDraw_AddRef(This);
+ }
+ else if (IsEqualGUID(&IID_IDirectDraw, id))
+ {
+ /* DirectDraw Vtable */
+ This->lpVtbl = &DirectDraw_Vtable;
+ *pIface = (LPDIRECTDRAW)&This->lpVtbl;
+ Main_DirectDraw_AddRef(This);
+ }
+
+ if ( This->lpVtbl != 0)
+ {
+ DX_STUB_str("Got iface\n");
+
+ if (StartDirectDraw((LPDIRECTDRAW)This, pGUID, FALSE) == DD_OK);
+ {
+ /*
+ RtlZeroMemory(&wnd_class, sizeof(wnd_class));
+ wnd_class.style = CS_HREDRAW | CS_VREDRAW;
+ wnd_class.lpfnWndProc = DefWindowProcW;
+ wnd_class.cbClsExtra = 0;
+ wnd_class.cbWndExtra = 0;
+ wnd_class.hInstance = GetModuleHandleW(0);
+ wnd_class.hIcon = 0;
+ wnd_class.hCursor = 0;
+ wnd_class.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
+ wnd_class.lpszMenuName = NULL;
+ wnd_class.lpszClassName = classname;
+ if(!RegisterClassW(&wnd_class))
+ {
+ DX_STUB_str("DDERR_GENERIC");
+ return DDERR_GENERIC;
+ }
+ */
+ This->lpLcl->hDD = ddgbl.hDD;
+ return DD_OK;
+ }
+ }
+
+ return DDERR_INVALIDPARAMS;
+}
+
+
+HRESULT WINAPI
+StartDirectDraw(LPDIRECTDRAW iface, LPGUID lpGuid, BOOL reenable)
{
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
DWORD hal_ret = DD_FALSE;
DWORD hel_ret = DD_FALSE;
- DEVMODE devmode;
- HBITMAP hbmp;
- const UINT bmiSize = sizeof(BITMAPINFOHEADER) + 0x10;
- UCHAR *pbmiData;
- BITMAPINFO *pbmi;
- DWORD *pMasks;
- INT devicetypes = 0;
+ DWORD devicetypes = 0;
DWORD dwFlags = 0;
-
+
+
DX_WINDBG_trace();
-
+
+
+ /*
+ * ddgbl.dwPDevice is not longer in use in windows 2000 and higher
+ * I am using it for device type
+ * devicetypes = 1 : both hal and hel are enable
+ * devicetypes = 2 : both hal are enable
+ * devicetypes = 3 : both hel are enable
+ * devicetypes = 4 :loading a guid drv from the register
+ */
+
+ ddgbl.lpDriverHandle = &ddgbl;
+ ddgbl.hDDVxd = -1;
+
+
+
+
if (reenable == FALSE)
{
- if (This->lpLink == NULL)
+ if ((!IsBadReadPtr(This->lpLink,sizeof(LPDIRECTDRAW))) && (This->lpLink == NULL))
{
RtlZeroMemory(&ddgbl, sizeof(DDRAWI_DIRECTDRAW_GBL));
This->lpLcl->lpGbl->dwRefCnt++;
if (ddgbl.lpDDCBtmp == NULL)
{
- ddgbl.lpDDCBtmp = (LPDDHAL_CALLBACKS) DxHeapMemAlloc(sizeof(DDHAL_CALLBACKS));
+ // LPDDHAL_CALLBACKS
+ DxHeapMemAlloc( ddgbl.lpDDCBtmp , sizeof(DDHAL_CALLBACKS));
if (ddgbl.lpDDCBtmp == NULL)
{
- DX_STUB_str("Out of memmory");
+ DX_STUB_str("Out of memmory\n");
return DD_FALSE;
}
}
}
- }
- /*
- Visual studio think this code is a break point if we call
- second time to this function, press on continue in visual
- studio the program will work. No real bug. gcc 3.4.5 genreate
- code that look like MS visual studio break point.
- */
-
- This->lpLcl->lpDDCB = ddgbl.lpDDCBtmp;
-
- /* Same for HEL and HAL */
-
- if (ddgbl.lpModeInfo == NULL)
- {
- ddgbl.lpModeInfo = (DDHALMODEINFO*) DxHeapMemAlloc(1 * sizeof(DDHALMODEINFO));
- if (ddgbl.lpModeInfo == NULL)
+ DxHeapMemAlloc(ddgbl.lpModeInfo, sizeof(DDHALMODEINFO));
+ if (!ddgbl.lpModeInfo)
{
- DX_STUB_str("DD_FALSE");
- return DD_FALSE;
+ return DDERR_OUTOFMEMORY;
}
- }
-
- EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
- This->lpLcl->lpGbl->lpModeInfo[0].dwWidth = devmode.dmPelsWidth;
- This->lpLcl->lpGbl->lpModeInfo[0].dwHeight = devmode.dmPelsHeight;
- This->lpLcl->lpGbl->lpModeInfo[0].dwBPP = devmode.dmBitsPerPel;
- This->lpLcl->lpGbl->lpModeInfo[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8;
- This->lpLcl->lpGbl->lpModeInfo[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency;
-
+ }
+ /* Windows handler are by set of SetCooperLevel
+ * so do not set it
+ */
if (reenable == FALSE)
{
if (lpGuid == NULL)
{
- devicetypes = 1;
+ devicetypes= 1;
/* Create HDC for default, hal and hel driver */
- This->lpLcl->hDC = (ULONG_PTR) CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);
+ // This->lpLcl->hWnd = (ULONG_PTR) GetActiveWindow();
+ This->lpLcl->hDC = (ULONG_PTR)CreateDCA("DISPLAY",NULL,NULL,NULL);
/* cObsolete is undoc in msdn it being use in CreateDCA */
RtlCopyMemory(&ddgbl.cObsolete,&"DISPLAY",7);
RtlCopyMemory(&ddgbl.cDriverName,&"DISPLAY",7);
-
dwFlags |= DDRAWI_DISPLAYDRV | DDRAWI_GDIDRV;
+
+
}
- else if (lpGuid == (LPGUID) DDCREATE_HARDWAREONLY)
+ else if (lpGuid == (LPGUID) DDCREATE_HARDWAREONLY)
{
devicetypes = 2;
- /* Create HDC for default, hal and hel driver */
- This->lpLcl->hDC = (ULONG_PTR)CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);
+ /* Create HDC for default, hal driver */
+ // This->lpLcl->hWnd =(ULONG_PTR) GetActiveWindow();
+ This->lpLcl->hDC = (ULONG_PTR)CreateDCA("DISPLAY",NULL,NULL,NULL);
/* cObsolete is undoc in msdn it being use in CreateDCA */
RtlCopyMemory(&ddgbl.cObsolete,&"DISPLAY",7);
RtlCopyMemory(&ddgbl.cDriverName,&"DISPLAY",7);
dwFlags |= DDRAWI_DISPLAYDRV | DDRAWI_GDIDRV;
}
- else if (lpGuid == (LPGUID) DDCREATE_EMULATIONONLY)
+ else if (lpGuid == (LPGUID) DDCREATE_EMULATIONONLY)
{
devicetypes = 3;
/* Create HDC for default, hal and hel driver */
- This->lpLcl->hDC = (ULONG_PTR) CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);
+ //This->lpLcl->hWnd = (ULONG_PTR) GetActiveWindow();
+ This->lpLcl->hDC = (ULONG_PTR)CreateDCA("DISPLAY",NULL,NULL,NULL);
/* cObsolete is undoc in msdn it being use in CreateDCA */
RtlCopyMemory(&ddgbl.cObsolete,&"DISPLAY",7);
else
{
/* FIXME : need getting driver from the GUID that have been pass in from
- * the register. we do not support that yet
+ * the register. we do not support that yet
*/
devicetypes = 4;
- This->lpLcl->hDC = (ULONG_PTR) NULL ;
+ //This->lpLcl->hDC = (ULONG_PTR) NULL ;
+ //This->lpLcl->hDC = (ULONG_PTR)CreateDCA("DISPLAY",NULL,NULL,NULL);
}
+ /*
if ( (HDC)This->lpLcl->hDC == NULL)
{
- DX_STUB_str("DDERR_OUTOFMEMORY");
+ DX_STUB_str("DDERR_OUTOFMEMORY\n");
return DDERR_OUTOFMEMORY ;
}
+ */
}
- hbmp = CreateCompatibleBitmap((HDC) This->lpLcl->hDC, 1, 1);
- if (hbmp==NULL)
- {
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC) This->lpLcl->hDC);
- DX_STUB_str("DDERR_OUTOFMEMORY");
- return DDERR_OUTOFMEMORY;
- }
-
- pbmiData = (UCHAR *) DxHeapMemAlloc(bmiSize);
- pbmi = (BITMAPINFO*)pbmiData;
-
- if (pbmiData==NULL)
- {
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC) This->lpLcl->hDC);
- DeleteObject(hbmp);
- DX_STUB_str("DDERR_OUTOFMEMORY");
- return DDERR_OUTOFMEMORY;
- }
-
- pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- pbmi->bmiHeader.biBitCount = (WORD)devmode.dmBitsPerPel;
- pbmi->bmiHeader.biCompression = BI_BITFIELDS;
- pbmi->bmiHeader.biWidth = 1;
- pbmi->bmiHeader.biHeight = 1;
-
- GetDIBits((HDC) This->lpLcl->hDC, hbmp, 0, 0, NULL, pbmi, 0);
- DeleteObject(hbmp);
-
- pMasks = (DWORD*)(pbmiData + sizeof(BITMAPINFOHEADER));
- This->lpLcl->lpGbl->lpModeInfo[0].dwRBitMask = pMasks[0];
- This->lpLcl->lpGbl->lpModeInfo[0].dwGBitMask = pMasks[1];
- This->lpLcl->lpGbl->lpModeInfo[0].dwBBitMask = pMasks[2];
- This->lpLcl->lpGbl->lpModeInfo[0].dwAlphaBitMask = pMasks[3];
-
- DxHeapMemFree(pbmiData);
+ This->lpLcl->lpDDCB = ddgbl.lpDDCBtmp;
/* Startup HEL and HAL */
- // RtlZeroMemory(&ddgbl, sizeof(DDRAWI_DIRECTDRAW_GBL));
-
This->lpLcl->lpDDCB = This->lpLcl->lpGbl->lpDDCBtmp;
This->lpLcl->dwProcessId = GetCurrentProcessId();
-
+
switch (devicetypes)
{
case 2:
{
if (hel_ret!=DD_OK)
{
- DX_STUB_str("DDERR_NODIRECTDRAWSUPPORT");
- return DDERR_NODIRECTDRAWSUPPORT;
+ DX_STUB_str("DDERR_NODIRECTDRAWSUPPORT\n");
+ return DDERR_NODIRECTDRAWSUPPORT;
}
dwFlags |= DDRAWI_NOHARDWARE;
}
dwFlags |= DDRAWI_EMULATIONINITIALIZED;
}
- This->lpLcl->lpGbl->dwFlags = dwFlags | DDRAWI_ATTACHEDTODESKTOP;
-
- This->lpLcl->hDD = This->lpLcl->lpGbl->hDD;
-
- /* Mix the DDCALLBACKS */
- This->lpLcl->lpDDCB = This->lpLcl->lpGbl->lpDDCBtmp;
-
- This->lpLcl->lpDDCB->cbDDCallbacks.dwSize = sizeof(This->lpLcl->lpDDCB->cbDDCallbacks);
-
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_CANCREATESURFACE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_CANCREATESURFACE;
- This->lpLcl->lpDDCB->cbDDCallbacks.CanCreateSurface = This->lpLcl->lpDDCB->HALDD.CanCreateSurface;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_CANCREATESURFACE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_CANCREATESURFACE;
- This->lpLcl->lpDDCB->cbDDCallbacks.CanCreateSurface = This->lpLcl->lpDDCB->HELDD.CanCreateSurface;
- }
-
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_CREATESURFACE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_CREATESURFACE;
- This->lpLcl->lpDDCB->cbDDCallbacks.CreateSurface = This->lpLcl->lpDDCB->HALDD.CreateSurface;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_CREATESURFACE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_CREATESURFACE;
- This->lpLcl->lpDDCB->cbDDCallbacks.CreateSurface = This->lpLcl->lpDDCB->HELDD.CreateSurface;
- }
-
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_CREATEPALETTE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_CREATEPALETTE;
- This->lpLcl->lpDDCB->cbDDCallbacks.CreatePalette = This->lpLcl->lpDDCB->HALDD.CreatePalette;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_CREATEPALETTE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_CREATEPALETTE;
- This->lpLcl->lpDDCB->cbDDCallbacks.CreatePalette = This->lpLcl->lpDDCB->HELDD.CreatePalette;
- }
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_DESTROYDRIVER) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_DESTROYDRIVER;
- This->lpLcl->lpDDCB->cbDDCallbacks.DestroyDriver = This->lpLcl->lpDDCB->HALDD.DestroyDriver;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_DESTROYDRIVER) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_DESTROYDRIVER;
- This->lpLcl->lpDDCB->cbDDCallbacks.DestroyDriver = This->lpLcl->lpDDCB->HELDD.DestroyDriver;
- }
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_FLIPTOGDISURFACE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_FLIPTOGDISURFACE;
- This->lpLcl->lpDDCB->cbDDCallbacks.FlipToGDISurface = This->lpLcl->lpDDCB->HALDD.FlipToGDISurface;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_FLIPTOGDISURFACE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_FLIPTOGDISURFACE;
- This->lpLcl->lpDDCB->cbDDCallbacks.FlipToGDISurface = This->lpLcl->lpDDCB->HELDD.FlipToGDISurface;
- }
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_GETSCANLINE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_GETSCANLINE;
- This->lpLcl->lpDDCB->cbDDCallbacks.GetScanLine = This->lpLcl->lpDDCB->HALDD.GetScanLine;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_GETSCANLINE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_GETSCANLINE;
- This->lpLcl->lpDDCB->cbDDCallbacks.GetScanLine = This->lpLcl->lpDDCB->HELDD.GetScanLine;
- }
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_SETCOLORKEY) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_SETCOLORKEY;
- This->lpLcl->lpDDCB->cbDDCallbacks.SetColorKey = This->lpLcl->lpDDCB->HALDD.SetColorKey;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_SETCOLORKEY) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_SETCOLORKEY;
- This->lpLcl->lpDDCB->cbDDCallbacks.SetColorKey = This->lpLcl->lpDDCB->HELDD.SetColorKey;
- }
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_SETEXCLUSIVEMODE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_SETEXCLUSIVEMODE;
- This->lpLcl->lpDDCB->cbDDCallbacks.SetExclusiveMode = This->lpLcl->lpDDCB->HALDD.SetExclusiveMode;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_SETEXCLUSIVEMODE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_SETEXCLUSIVEMODE;
- This->lpLcl->lpDDCB->cbDDCallbacks.SetExclusiveMode = This->lpLcl->lpDDCB->HELDD.SetExclusiveMode;
- }
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_SETMODE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_SETMODE;
- This->lpLcl->lpDDCB->cbDDCallbacks.SetMode = This->lpLcl->lpDDCB->HALDD.SetMode;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_SETMODE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_SETMODE;
- This->lpLcl->lpDDCB->cbDDCallbacks.SetMode = This->lpLcl->lpDDCB->HELDD.SetMode;
- }
- if ((This->lpLcl->lpDDCB->HALDD.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_WAITFORVERTICALBLANK;
- This->lpLcl->lpDDCB->cbDDCallbacks.WaitForVerticalBlank =
- This->lpLcl->lpDDCB->HALDD.WaitForVerticalBlank;
- }
- else if ((This->lpLcl->lpDDCB->HELDD.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags |= DDHAL_CB32_WAITFORVERTICALBLANK;
- This->lpLcl->lpDDCB->cbDDCallbacks.WaitForVerticalBlank =
- This->lpLcl->lpDDCB->HELDD.WaitForVerticalBlank;
- }
-
- /* Mix the DDSURFACE CALLBACKS */
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwSize = sizeof(This->lpLcl->lpDDCB->cbDDSurfaceCallbacks);
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_ADDATTACHEDSURFACE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_ADDATTACHEDSURFACE;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.AddAttachedSurface =
- This->lpLcl->lpDDCB->HALDDSurface.AddAttachedSurface;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_ADDATTACHEDSURFACE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_ADDATTACHEDSURFACE;
-
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.AddAttachedSurface =
- This->lpLcl->lpDDCB->HELDDSurface.AddAttachedSurface;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_BLT;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Blt = This->lpLcl->lpDDCB->HALDDSurface.Blt;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_BLT) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_BLT;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Blt = This->lpLcl->lpDDCB->HELDDSurface.Blt;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_DESTROYSURFACE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_DESTROYSURFACE;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.DestroySurface = This->lpLcl->lpDDCB->HALDDSurface.DestroySurface;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_DESTROYSURFACE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_DESTROYSURFACE;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.DestroySurface = This->lpLcl->lpDDCB->HELDDSurface.DestroySurface;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_FLIP;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Flip = This->lpLcl->lpDDCB->HALDDSurface.Flip;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_FLIP;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Flip = This->lpLcl->lpDDCB->HELDDSurface.Flip;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_GETBLTSTATUS) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_GETBLTSTATUS;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.GetBltStatus =
- This->lpLcl->lpDDCB->HALDDSurface.GetBltStatus;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_GETBLTSTATUS) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_GETBLTSTATUS;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.GetBltStatus = This->lpLcl->lpDDCB->HELDDSurface.GetBltStatus;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_GETFLIPSTATUS) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_GETFLIPSTATUS;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.GetFlipStatus = This->lpLcl->lpDDCB->HALDDSurface.GetFlipStatus;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_GETFLIPSTATUS) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_GETFLIPSTATUS;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.GetFlipStatus = This->lpLcl->lpDDCB->HELDDSurface.GetFlipStatus;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_LOCK;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Lock = This->lpLcl->lpDDCB->HALDDSurface.Lock;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_LOCK;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Lock = This->lpLcl->lpDDCB->HELDDSurface.Lock;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_RESERVED4) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_RESERVED4;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.reserved4 = This->lpLcl->lpDDCB->HALDDSurface.reserved4;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_RESERVED4) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_RESERVED4;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.reserved4 = This->lpLcl->lpDDCB->HELDDSurface.reserved4;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCLIPLIST) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETCLIPLIST;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetClipList = This->lpLcl->lpDDCB->HALDDSurface.SetClipList;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_SETCLIPLIST) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETCLIPLIST;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetClipList = This->lpLcl->lpDDCB->HELDDSurface.SetClipList;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETCOLORKEY;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetColorKey = This->lpLcl->lpDDCB->HALDDSurface.SetColorKey;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETCOLORKEY;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetColorKey = This->lpLcl->lpDDCB->HELDDSurface.SetColorKey;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_SETOVERLAYPOSITION) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETOVERLAYPOSITION;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetOverlayPosition =
- This->lpLcl->lpDDCB->HALDDSurface.SetOverlayPosition;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_SETOVERLAYPOSITION) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETOVERLAYPOSITION;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetOverlayPosition =
- This->lpLcl->lpDDCB->HELDDSurface.SetOverlayPosition;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_SETPALETTE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETPALETTE;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetPalette = This->lpLcl->lpDDCB->HALDDSurface.SetPalette;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_SETPALETTE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_SETPALETTE;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.SetPalette = This->lpLcl->lpDDCB->HELDDSurface.SetPalette;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_UNLOCK) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_UNLOCK;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Unlock = This->lpLcl->lpDDCB->HALDDSurface.Unlock;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_UNLOCK) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_UNLOCK;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.Unlock = This->lpLcl->lpDDCB->HELDDSurface.Unlock;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_UPDATEOVERLAY;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.UpdateOverlay = This->lpLcl->lpDDCB->HALDDSurface.UpdateOverlay;
- }
- else if ((This->lpLcl->lpDDCB->HELDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.dwFlags |= DDHAL_SURFCB32_UPDATEOVERLAY;
- This->lpLcl->lpDDCB->cbDDSurfaceCallbacks.UpdateOverlay = This->lpLcl->lpDDCB->HELDDSurface.UpdateOverlay;
- }
-
- /* Mix the DDPALETTE CALLBACKS */
- This->lpLcl->lpDDCB->HALDDPalette.dwSize = sizeof(This->lpLcl->lpDDCB->HALDDPalette);
-
- if ((This->lpLcl->lpDDCB->HALDDPalette.dwFlags & DDHAL_PALCB32_DESTROYPALETTE) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_SETENTRIES;
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.DestroyPalette =
- This->lpLcl->lpDDCB->HALDDPalette.DestroyPalette;
- }
- else if ((This->lpLcl->lpDDCB->HELDDPalette.dwFlags & DDHAL_PALCB32_DESTROYPALETTE) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_DESTROYPALETTE;
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.DestroyPalette =
- This->lpLcl->lpDDCB->HELDDPalette.DestroyPalette;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDPalette.dwFlags & DDHAL_PALCB32_SETENTRIES) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_SETENTRIES;
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.SetEntries =
- This->lpLcl->lpDDCB->HALDDPalette.SetEntries;
- }
- else if ((This->lpLcl->lpDDCB->HELDDPalette.dwFlags & DDHAL_PALCB32_SETENTRIES) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.dwFlags |= DDHAL_PALCB32_SETENTRIES;
- This->lpLcl->lpDDCB->cbDDPaletteCallbacks.SetEntries =
- This->lpLcl->lpDDCB->HELDDPalette.SetEntries;
- }
-
- /* Mix the DDExeBuf CALLBACKS */
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwSize = sizeof(This->lpLcl->lpDDCB->cbDDExeBufCallbacks);
-
- if ((This->lpLcl->lpDDCB->HALDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_CANCREATEEXEBUF) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.CanCreateExecuteBuffer =
- This->lpLcl->lpDDCB->HALDDExeBuf.CanCreateExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_CANCREATEEXEBUF;
- }
- else if ((This->lpLcl->lpDDCB->HELDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_CANCREATEEXEBUF) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.CanCreateExecuteBuffer =
- This->lpLcl->lpDDCB->HELDDExeBuf.CanCreateExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_CANCREATEEXEBUF;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_CREATEEXEBUF) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.CreateExecuteBuffer =
- This->lpLcl->lpDDCB->HALDDExeBuf.CreateExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_CREATEEXEBUF;
- }
- else if ((This->lpLcl->lpDDCB->HELDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_CREATEEXEBUF) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.CreateExecuteBuffer =
- This->lpLcl->lpDDCB->HELDDExeBuf.CreateExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_CREATEEXEBUF;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_DESTROYEXEBUF) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.DestroyExecuteBuffer =
- This->lpLcl->lpDDCB->HALDDExeBuf.DestroyExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_DESTROYEXEBUF;
- }
- else if ((This->lpLcl->lpDDCB->HELDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_DESTROYEXEBUF) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.DestroyExecuteBuffer =
- This->lpLcl->lpDDCB->HELDDExeBuf.DestroyExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_DESTROYEXEBUF;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_LOCKEXEBUF) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.LockExecuteBuffer =
- This->lpLcl->lpDDCB->HALDDExeBuf.LockExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_LOCKEXEBUF;
- }
- else if ((This->lpLcl->lpDDCB->HELDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_LOCKEXEBUF) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.LockExecuteBuffer =
- This->lpLcl->lpDDCB->HELDDExeBuf.LockExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_LOCKEXEBUF;
- }
-
- if ((This->lpLcl->lpDDCB->HALDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_UNLOCKEXEBUF) && (devicetypes !=3))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.UnlockExecuteBuffer =
- This->lpLcl->lpDDCB->HALDDExeBuf.UnlockExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_UNLOCKEXEBUF;
- }
- else if ((This->lpLcl->lpDDCB->HELDDExeBuf.dwFlags & DDHAL_EXEBUFCB32_UNLOCKEXEBUF) && (devicetypes !=2))
- {
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.UnlockExecuteBuffer =
- This->lpLcl->lpDDCB->HELDDExeBuf.UnlockExecuteBuffer;
- This->lpLcl->lpDDCB->cbDDExeBufCallbacks.dwFlags |= DDHAL_EXEBUFCB32_UNLOCKEXEBUF;
- }
-
/* Fill some basic info for Surface */
- ddSurfGbl.lpDD = &ddgbl;
-
- /* FIXME
- We need setup this also
- This->lpLcl->lpDDCB->cbDDColorControlCallbacks
- This->lpLcl->lpDDCB->cbDDKernelCallbacks
- This->lpLcl->lpDDCB->cbDDMiscellaneousCallbacks
- This->lpLcl->lpDDCB->cbDDMotionCompCallbacks
- This->lpLcl->lpDDCB->cbDDVideoPortCallbacks
- */
-
+ This->lpLcl->lpGbl->dwFlags = This->lpLcl->lpGbl->dwFlags | dwFlags | DDRAWI_ATTACHEDTODESKTOP;
+ This->lpLcl->lpDDCB = This->lpLcl->lpGbl->lpDDCBtmp;
This->lpLcl->hDD = ddgbl.hDD;
+ ddgbl.rectDevice.top = 0;
+ ddgbl.rectDevice.left = 0;
+ ddgbl.rectDevice.right = ddgbl.vmiData.dwDisplayWidth;
+ ddgbl.rectDevice.bottom = ddgbl.vmiData.dwDisplayHeight;
+
+ ddgbl.rectDesktop.top = 0;
+ ddgbl.rectDesktop.left = 0;
+ ddgbl.rectDesktop.right = ddgbl.vmiData.dwDisplayWidth;
+ ddgbl.rectDesktop.bottom = ddgbl.vmiData.dwDisplayHeight;
+
+ ddgbl.dwMonitorFrequency = GetDeviceCaps(GetWindowDC(NULL),VREFRESH);
+ ddgbl.lpModeInfo->dwWidth = ddgbl.vmiData.dwDisplayWidth;
+ ddgbl.lpModeInfo->dwHeight = ddgbl.vmiData.dwDisplayHeight;
+ ddgbl.lpModeInfo->dwBPP = ddgbl.vmiData.ddpfDisplay.dwRGBBitCount;
+ ddgbl.lpModeInfo->lPitch = ddgbl.vmiData.lDisplayPitch;
+ ddgbl.lpModeInfo->wRefreshRate = ddgbl.dwMonitorFrequency;
+ ddgbl.lpModeInfo->dwRBitMask = ddgbl.vmiData.ddpfDisplay.dwRBitMask;
+ ddgbl.lpModeInfo->dwGBitMask = ddgbl.vmiData.ddpfDisplay.dwGBitMask;
+ ddgbl.lpModeInfo->dwBBitMask = ddgbl.vmiData.ddpfDisplay.dwBBitMask;
+ ddgbl.lpModeInfo->dwAlphaBitMask = ddgbl.vmiData.ddpfDisplay.dwRGBAlphaBitMask;
+
return DD_OK;
}
-HRESULT WINAPI
-StartDirectDrawHal(LPDIRECTDRAW* iface, BOOL reenable)
-{
- LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
- DDHAL_GETDRIVERINFODATA DriverInfo;
-
- DDHALINFO mHALInfo;
- DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks;
- D3DHAL_CALLBACKS mD3dCallbacks;
- D3DHAL_GLOBALDRIVERDATA mD3dDriverData;
- UINT mcvmList;
- VIDMEM *mpvmList;
-
- UINT mcFourCC;
- DWORD *mpFourCC;
- UINT mcTextures;
- DDSURFACEDESC *mpTextures;
-
- /* HAL Startup process */
- BOOL newmode = FALSE;
- RtlZeroMemory(&mHALInfo, sizeof(DDHALINFO));
-
- if (reenable == FALSE)
- {
- ddgbl.lpDDCBtmp = DxHeapMemAlloc(sizeof(DDHAL_CALLBACKS));
- if ( ddgbl.lpDDCBtmp == NULL)
- {
- return DD_FALSE;
- }
- }
- else
- {
- RtlZeroMemory(ddgbl.lpDDCBtmp,sizeof(DDHAL_CALLBACKS));
- }
-
- /*
- Startup DX HAL step one of three
- */
- if (!DdCreateDirectDrawObject(This->lpLcl->lpGbl, (HDC)This->lpLcl->hDC))
- {
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC)This->lpLcl->hDC);
- return DD_FALSE;
- }
-
- // Do not relase HDC it have been map in kernel mode
- // DeleteDC(hdc);
-
- if (!DdReenableDirectDrawObject(This->lpLcl->lpGbl, &newmode))
- {
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC)This->lpLcl->hDC);
- return DD_FALSE;
- }
-
-
- /*
- Startup DX HAL step two of three
- */
-
- if (!DdQueryDirectDrawObject(This->lpLcl->lpGbl,
- &mHALInfo,
- &ddgbl.lpDDCBtmp->HALDD,
- &ddgbl.lpDDCBtmp->HALDDSurface,
- &ddgbl.lpDDCBtmp->HALDDPalette,
- &mD3dCallbacks,
- &mD3dDriverData,
- &mD3dBufferCallbacks,
- NULL,
- NULL,
- NULL))
- {
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC)This->lpLcl->hDC);
- // FIXME Close DX fristcall and second call
- return DD_FALSE;
- }
-
- mcvmList = mHALInfo.vmiData.dwNumHeaps;
- mpvmList = (VIDMEM*) DxHeapMemAlloc(sizeof(VIDMEM) * mcvmList);
- if (mpvmList == NULL)
- {
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC)This->lpLcl->hDC);
- // FIXME Close DX fristcall and second call
- return DD_FALSE;
- }
-
- mcFourCC = mHALInfo.ddCaps.dwNumFourCCCodes;
- mpFourCC = (DWORD *) DxHeapMemAlloc(sizeof(DWORD) * mcFourCC);
- if (mpFourCC == NULL)
- {
- DxHeapMemFree(mpvmList);
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC)This->lpLcl->hDC);
- // FIXME Close DX fristcall and second call
- return DD_FALSE;
- }
-
- mcTextures = mD3dDriverData.dwNumTextureFormats;
- mpTextures = (DDSURFACEDESC*) DxHeapMemAlloc(sizeof(DDSURFACEDESC) * mcTextures);
- if (mpTextures == NULL)
- {
- DxHeapMemFree( mpFourCC);
- DxHeapMemFree( mpvmList);
- DxHeapMemFree( This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC)This->lpLcl->hDC);
- // FIXME Close DX fristcall and second call
- return DD_FALSE;
- }
-
- mHALInfo.vmiData.pvmList = mpvmList;
- mHALInfo.lpdwFourCC = mpFourCC;
- mD3dDriverData.lpTextureFormats = (DDSURFACEDESC*) mpTextures;
-
- if (!DdQueryDirectDrawObject(
- This->lpLcl->lpGbl,
- &mHALInfo,
- &ddgbl.lpDDCBtmp->HALDD,
- &ddgbl.lpDDCBtmp->HALDDSurface,
- &ddgbl.lpDDCBtmp->HALDDPalette,
- &mD3dCallbacks,
- &mD3dDriverData,
- &ddgbl.lpDDCBtmp->HALDDExeBuf,
- (DDSURFACEDESC*)mpTextures,
- mpFourCC,
- mpvmList))
-
- {
- DxHeapMemFree(mpTextures);
- DxHeapMemFree(mpFourCC);
- DxHeapMemFree(mpvmList);
- DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
- DeleteDC((HDC)This->lpLcl->hDC);
- // FIXME Close DX fristcall and second call
- return DD_FALSE;
- }
-
-
- /*
- Copy over from HalInfo to DirectDrawGlobal
- */
-
- // this is wrong, cDriverName need be in ASC code not UNICODE
- //memcpy(mDDrawGlobal.cDriverName, mDisplayAdapter, sizeof(wchar)*MAX_DRIVER_NAME);
-
- memcpy(&ddgbl.vmiData, &mHALInfo.vmiData,sizeof(VIDMEMINFO));
- memcpy(&ddgbl.ddCaps, &mHALInfo.ddCaps,sizeof(DDCORECAPS));
-
- mHALInfo.dwNumModes = 1;
- mHALInfo.lpModeInfo = This->lpLcl->lpGbl->lpModeInfo;
- mHALInfo.dwMonitorFrequency = This->lpLcl->lpGbl->lpModeInfo[0].wRefreshRate;
-
- This->lpLcl->lpGbl->dwMonitorFrequency = mHALInfo.dwMonitorFrequency;
- This->lpLcl->lpGbl->dwModeIndex = mHALInfo.dwModeIndex;
- This->lpLcl->lpGbl->dwNumModes = mHALInfo.dwNumModes;
- This->lpLcl->lpGbl->lpModeInfo = mHALInfo.lpModeInfo;
- This->lpLcl->lpGbl->hInstance = mHALInfo.hInstance;
-
- This->lpLcl->lpGbl->lp16DD = This->lpLcl->lpGbl;
-
-
- memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA));
- DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA);
- DriverInfo.dwContext = This->lpLcl->lpGbl->hDD;
-
- /* Get the MiscellaneousCallbacks */
- DriverInfo.guidInfo = GUID_MiscellaneousCallbacks;
- DriverInfo.lpvData = &ddgbl.lpDDCBtmp->HALDDMiscellaneous;
- DriverInfo.dwExpectedSize = sizeof(DDHAL_DDMISCELLANEOUSCALLBACKS);
- mHALInfo.GetDriverInfo(&DriverInfo);
-
-
- /* FIXME
- The 3d and private data are not save at moment
-
- we need lest the private data being setup
- for some driver are puting kmode memory there
- the memory often contain the private struct +
- surface, see MS DDK how MS example driver using
- it
-
- the 3d interface are not so improten if u do not
- want the 3d, and we are not writing 3d code yet
- so we be okay for now.
- */
-
-
- return DD_OK;
-}
-
-HRESULT WINAPI
-StartDirectDrawHel(LPDIRECTDRAW* iface, BOOL reenable)
+HRESULT WINAPI
+StartDirectDrawHel(LPDIRECTDRAW iface, BOOL reenable)
{
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
- This->lpLcl->lpGbl->lpDDCBtmp->HELDD.CanCreateSurface = HelDdCanCreateSurface;
- This->lpLcl->lpGbl->lpDDCBtmp->HELDD.CreateSurface = HelDdCreateSurface;
+ This->lpLcl->lpGbl->lpDDCBtmp->HELDD.CanCreateSurface = HelDdCanCreateSurface;
+ This->lpLcl->lpGbl->lpDDCBtmp->HELDD.CreateSurface = HelDdCreateSurface;
This->lpLcl->lpGbl->lpDDCBtmp->HELDD.CreatePalette = HelDdCreatePalette;
This->lpLcl->lpGbl->lpDDCBtmp->HELDD.DestroyDriver = HelDdDestroyDriver;
This->lpLcl->lpGbl->lpDDCBtmp->HELDD.FlipToGDISurface = HelDdFlipToGDISurface;
This->lpLcl->lpGbl->lpDDCBtmp->HELDDSurface.dwSize = sizeof(This->lpLcl->lpDDCB->HELDDSurface);
/*
- This->lpLcl->lpDDCB->HELDDPalette.DestroyPalette = HelDdPalDestroyPalette;
+ This->lpLcl->lpDDCB->HELDDPalette.DestroyPalette = HelDdPalDestroyPalette;
This->lpLcl->lpDDCB->HELDDPalette.SetEntries = HelDdPalSetEntries;
This->lpLcl->lpDDCB->HELDDPalette.dwSize = sizeof(This->lpLcl->lpDDCB->HELDDPalette);
*/
return DD_OK;
}
-HRESULT
-WINAPI
-Create_DirectDraw (LPGUID pGUID,
- LPDIRECTDRAW* pIface,
- REFIID id,
- BOOL ex)
-{
- LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)*pIface;
-
+
+HRESULT WINAPI
+StartDirectDrawHal(LPDIRECTDRAW iface, BOOL reenable)
+{
+ LPDWORD mpFourCC = NULL;
+ DDHALINFO mHALInfo;
+ BOOL newmode = FALSE;
+ LPDDSURFACEDESC mpTextures;
+ D3DHAL_CALLBACKS mD3dCallbacks;
+ D3DHAL_GLOBALDRIVERDATA mD3dDriverData;
+ DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks;
+ LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
+ DDHAL_GETDRIVERINFODATA DdGetDriverInfo = { 0 };
+
DX_WINDBG_trace();
- if (!IsEqualGUID(&IID_IDirectDraw7, id))
- {
- return DDERR_INVALIDDIRECTDRAWGUID;
- }
+ RtlZeroMemory(&mHALInfo, sizeof(DDHALINFO));
+ RtlZeroMemory(&mD3dCallbacks, sizeof(D3DHAL_CALLBACKS));
+ RtlZeroMemory(&mD3dDriverData, sizeof(D3DHAL_GLOBALDRIVERDATA));
+ RtlZeroMemory(&mD3dBufferCallbacks, sizeof(DDHAL_DDEXEBUFCALLBACKS));
- if (This == NULL)
+ if (reenable == FALSE)
{
- /* We do not have any DirectDraw interface alloc */
- This = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT));
- if (This == NULL)
+ if (ddgbl.lpDDCBtmp == NULL)
{
- return DDERR_OUTOFMEMORY;
+ DxHeapMemAlloc(ddgbl.lpDDCBtmp, sizeof(DDHAL_CALLBACKS));
+ if ( ddgbl.lpDDCBtmp == NULL)
+ {
+ return DD_FALSE;
+ }
}
}
else
{
- /* We got the DirectDraw interface alloc and we need create the link */
+ RtlZeroMemory(ddgbl.lpDDCBtmp,sizeof(DDHAL_CALLBACKS));
+ }
- LPDDRAWI_DIRECTDRAW_INT newThis;
- newThis = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT));
- if (newThis == NULL)
- {
- return DDERR_OUTOFMEMORY;
- }
-
- /* we need check the GUID lpGUID what type it is */
- if (pGUID != DDCREATE_HARDWAREONLY)
- {
- if (pGUID !=NULL)
- {
- This = newThis;
- return DDERR_INVALIDDIRECTDRAWGUID;
- }
- }
+ /*
+ * Startup DX HAL step one of three
+ */
+ if (!DdCreateDirectDrawObject(This->lpLcl->lpGbl, (HDC)This->lpLcl->hDC))
+ {
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ return DD_FALSE;
+ }
- newThis->lpLink = This;
- This = newThis;
+ /* Some card disable the dx after it have been created so
+ * we are force reanble it
+ */
+ if (!DdReenableDirectDrawObject(This->lpLcl->lpGbl, &newmode))
+ {
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ return DD_FALSE;
}
- This->lpLcl = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT));
+ if (!DdQueryDirectDrawObject(This->lpLcl->lpGbl,
+ &mHALInfo,
+ &ddgbl.lpDDCBtmp->HALDD,
+ &ddgbl.lpDDCBtmp->HALDDSurface,
+ &ddgbl.lpDDCBtmp->HALDDPalette,
+ &mD3dCallbacks,
+ &mD3dDriverData,
+ &mD3dBufferCallbacks,
+ NULL,
+ mpFourCC,
+ NULL))
+ {
+ DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo);
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ // FIXME Close DX first and second call
+ return DD_FALSE;
+ }
- if (This->lpLcl == NULL)
+ /* Alloc mpFourCC */
+ if (This->lpLcl->lpGbl->lpdwFourCC != NULL)
{
- /* FIXME cleanup */
- return DDERR_OUTOFMEMORY;
+ DxHeapMemFree(This->lpLcl->lpGbl->lpdwFourCC);
}
- /*
- FIXME
- read dwAppHackFlags flag from the system register instead for hard code it
- */
- This->lpLcl->dwAppHackFlags = 0;
- This->lpLcl->dwHotTracking = 0;
- This->lpLcl->dwIMEState = 0;
- This->lpLcl->dwLocalFlags = DDRAWILCL_DIRECTDRAW7;
- This->lpLcl->dwLocalRefCnt = 0;
- /*
- do not rest this flag to NULL it need be unistae for some reason other wise
- somet thing will crash dwObsolete1 seam being use for something this was a
- supriese for me
- */
- //This->lpLcl->dwObsolete1 = 0;
- This->lpLcl->dwProcessId = 0;
- This->lpLcl->dwUnused0 = 0;
- This->lpLcl->hD3DInstance = NULL;
- This->lpLcl->hDC = 0;
- This->lpLcl->hDDVxd = 0;
- This->lpLcl->hFocusWnd = 0;
- This->lpLcl->hGammaCalibrator = 0;
- /* Do mot inistate this value if we do we can not open the HAL interface */
- //This->lpLcl->hWnd = 0;
- This->lpLcl->hWndPopup = 0;
- This->lpLcl->lpCB = NULL;
- This->lpLcl->lpDDCB = NULL;
- This->lpLcl->lpDDMore = 0;
- This->lpLcl->lpGammaCalibrator = 0;
- This->lpLcl->lpGbl = &ddgbl;
+ if (mHALInfo.ddCaps.dwNumFourCCCodes > 0 )
+ {
- /* Do mot inistate this value if we do we can not open the HAL interface */
- //This->lpLcl->lpPrimary = NULL;
- This->lpLcl->pD3DIUnknown = NULL;
- This->lpLcl->pUnkOuter = NULL;
+ DxHeapMemAlloc(mpFourCC, sizeof(DWORD) * (mHALInfo.ddCaps.dwNumFourCCCodes + 2));
- *pIface = (LPDIRECTDRAW)This;
+ if (mpFourCC == NULL)
+ {
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ // FIXME Close DX first and second call
+ return DD_FALSE;
+ }
+ }
- if(Main_DirectDraw_QueryInterface((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK)
+ /* Alloc mpTextures */
+#if 0
+ DX_STUB_str("1 Here\n");
+
+ if (This->lpLcl->lpGbl->texture != NULL)
{
- return DDERR_INVALIDPARAMS;
+ DxHeapMemFree(This->lpLcl->lpGbl->texture;
}
- if (StartDirectDraw((LPDIRECTDRAW*)This, pGUID, FALSE) == DD_OK);
- {
- return DD_OK;
+ mpTextures = NULL;
+ if (mD3dDriverData.dwNumTextureFormats > 0)
+ {
+ mpTextures = (DDSURFACEDESC*) DxHeapMemAlloc(sizeof(DDSURFACEDESC) * mD3dDriverData.dwNumTextureFormats);
+ if (mpTextures == NULL)
+ {
+ DxHeapMemFree(mpFourCC);
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ // FIXME Close DX first and second call
+ }
}
- return DDERR_INVALIDPARAMS;
-}
+ DX_STUB_str("2 Here\n");
+#else
+ mpTextures = NULL;
+#endif
-HRESULT WINAPI
-ReCreateDirectDraw(LPDIRECTDRAW* iface)
-{
- LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
-
- DdDeleteDirectDrawObject(This->lpLcl->lpGbl);
- if ((This->lpLcl->lpGbl->dwFlags & DDRAWI_NOHARDWARE) != DDRAWI_NOHARDWARE)
+ /* Get all basic data from the driver */
+ if (!DdQueryDirectDrawObject(
+ This->lpLcl->lpGbl,
+ &mHALInfo,
+ &ddgbl.lpDDCBtmp->HALDD,
+ &ddgbl.lpDDCBtmp->HALDDSurface,
+ &ddgbl.lpDDCBtmp->HALDDPalette,
+ &mD3dCallbacks,
+ &mD3dDriverData,
+ &ddgbl.lpDDCBtmp->HALDDExeBuf,
+ (DDSURFACEDESC*)mpTextures,
+ mpFourCC,
+ NULL))
{
- if (This->lpLcl->lpGbl->dwFlags & DDRAWI_EMULATIONINITIALIZED)
- {
- return StartDirectDraw(iface,NULL, TRUE);
- }
- else
- {
- return StartDirectDraw(iface,(LPGUID)DDCREATE_HARDWAREONLY, TRUE);
- }
+ DxHeapMemFree(mpFourCC);
+ DxHeapMemFree(mpTextures);
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ // FIXME Close DX first and second call
+ return DD_FALSE;
}
- else
+
+ memcpy(&ddgbl.vmiData, &mHALInfo.vmiData,sizeof(VIDMEMINFO));
+
+
+ memcpy(&ddgbl.ddCaps, &mHALInfo.ddCaps,sizeof(DDCORECAPS));
+
+ This->lpLcl->lpGbl->dwNumFourCC = mHALInfo.ddCaps.dwNumFourCCCodes;
+ This->lpLcl->lpGbl->lpdwFourCC = mpFourCC;
+ // This->lpLcl->lpGbl->dwMonitorFrequency = mHALInfo.dwMonitorFrequency; // 0
+ This->lpLcl->lpGbl->dwModeIndex = mHALInfo.dwModeIndex;
+ // This->lpLcl->lpGbl->dwNumModes = mHALInfo.dwNumModes;
+ // This->lpLcl->lpGbl->lpModeInfo = mHALInfo.lpModeInfo;
+
+ /* FIXME convert mpTextures to DDHALMODEINFO */
+ // DxHeapMemFree( mpTextures);
+
+ /* FIXME D3D setup mD3dCallbacks and mD3dDriverData */
+
+
+
+
+ if (mHALInfo.dwFlags & DDHALINFO_GETDRIVERINFOSET)
{
- return StartDirectDraw(iface,(LPGUID)DDCREATE_EMULATIONONLY, TRUE);
+ DdGetDriverInfo.dwSize = sizeof (DDHAL_GETDRIVERINFODATA);
+ DdGetDriverInfo.guidInfo = GUID_MiscellaneousCallbacks;
+ DdGetDriverInfo.lpvData = (PVOID)&ddgbl.lpDDCBtmp->HALDDMiscellaneous;
+ DdGetDriverInfo.dwExpectedSize = sizeof (DDHAL_DDMISCELLANEOUSCALLBACKS);
+
+ if(mHALInfo.GetDriverInfo (&DdGetDriverInfo) == DDHAL_DRIVER_NOTHANDLED || DdGetDriverInfo.ddRVal != DD_OK)
+ {
+ DxHeapMemFree(mpFourCC);
+ DxHeapMemFree(mpTextures);
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ // FIXME Close DX fristcall and second call
+ return DD_FALSE;
+ }
+
+ RtlZeroMemory(&DdGetDriverInfo, sizeof(DDHAL_GETDRIVERINFODATA));
+ DdGetDriverInfo.dwSize = sizeof (DDHAL_GETDRIVERINFODATA);
+ DdGetDriverInfo.guidInfo = GUID_Miscellaneous2Callbacks;
+
+ /* FIXME
+ DdGetDriverInfo.lpvData = (PVOID)&ddgbl.lpDDCBtmp->HALDDMiscellaneous;
+ DdGetDriverInfo.dwExpectedSize = sizeof (DDHAL_DDMISCELLANEOUS2CALLBACKS);
+
+ if(mHALInfo.GetDriverInfo (&DdGetDriverInfo) == DDHAL_DRIVER_NOTHANDLED || DdGetDriverInfo.ddRVal != DD_OK)
+ {
+ DxHeapMemFree(mpFourCC);
+ DxHeapMemFree(mpTextures);
+ DxHeapMemFree(ddgbl.lpDDCBtmp);
+ // FIXME Close DX fristcall and second call
+ return DD_FALSE;
+ }
+ DD_MISCELLANEOUS2CALLBACKS
+ {
+ DWORD dwSize;
+ DWORD dwFlags;
+ PDD_ALPHABLT AlphaBlt; // unsuse acoding msdn and always set to NULL
+ PDD_CREATESURFACEEX CreateSurfaceEx;
+ PDD_GETDRIVERSTATE GetDriverState;
+ PDD_DESTROYDDLOCAL DestroyDDLocal;
+ }
+ DDHAL_MISC2CB32_CREATESURFACEEX
+ DDHAL_MISC2CB32_GETDRIVERSTATE
+ DDHAL_MISC2CB32_DESTROYDDLOCAL
+ */
}
- return DD_FALSE;
-}
+ if (mHALInfo.dwFlags & DDHALINFO_GETDRIVERINFO2)
+ {
+ This->lpLcl->lpGbl->dwFlags = This->lpLcl->lpGbl->dwFlags | DDRAWI_DRIVERINFO2;
+ }
+ return DD_OK;
+}