2 * DirectDraw driver interface
4 * Copyright 2001 TransGaming Technologies, Inc.
11 #include "debugtools.h"
13 DEFAULT_DEBUG_CHANNEL(x11drv);
15 static DWORD PASCAL X11DRV_DDHAL_DestroyDriver(LPDDHAL_DESTROYDRIVERDATA data)
18 return DDHAL_DRIVER_HANDLED;
21 static DWORD PASCAL X11DRV_DDHAL_SetMode(LPDDHAL_SETMODEDATA data)
23 #ifdef HAVE_LIBXXF86VM
24 if (xf86vm_mode_count) {
25 X11DRV_XF86VM_SetCurrentMode(data->dwModeIndex);
27 return DDHAL_DRIVER_HANDLED;
30 return DDHAL_DRIVER_NOTHANDLED;
33 static DDHAL_DDCALLBACKS hal_ddcallbacks = {
34 sizeof(DDHAL_DDCALLBACKS),
35 0x3ff, /* all callbacks are 32-bit */
36 X11DRV_DDHAL_DestroyDriver,
37 NULL, /* CreateSurface */
38 NULL, /* SetColorKey */
40 NULL, /* WaitForVerticalBlank */
41 NULL, /* CanCreateSurface */
42 NULL, /* CreatePalette */
43 NULL, /* GetScanLine */
44 NULL, /* SetExclusiveMode */
45 NULL /* FlipToGDISurface */
48 static DDHALINFO hal_info = {
54 static LPDDHALDDRAWFNS ddraw_fns;
55 static DWORD ddraw_ver;
57 INT X11DRV_DCICommand(INT cbInput, LPVOID lpInData, LPVOID lpOutData)
59 LPDCICMD lpCmd = (LPDCICMD)lpInData;
61 TRACE("(%d,(%ld,%ld,%ld),%p)\n", cbInput, lpCmd->dwCommand,
62 lpCmd->dwParam1, lpCmd->dwParam2, lpOutData);
64 switch (lpCmd->dwCommand) {
65 case DDNEWCALLBACKFNS:
66 ddraw_fns = (LPDDHALDDRAWFNS)lpCmd->dwParam1;
70 LPDDVERSIONDATA lpVer = (LPDDVERSIONDATA)lpOutData;
71 ddraw_ver = lpCmd->dwParam1;
73 /* well, whatever... the DDK says so */
74 lpVer->dwHALVersion = DD_RUNTIME_VERSION;
77 case DDGET32BITDRIVERNAME:
79 LPDD32BITDRIVERDATA lpData = (LPDD32BITDRIVERDATA)lpOutData;
80 /* here, we could ask ddraw to load a separate DLL, that
81 * would contain the 32-bit ddraw HAL */
82 strcpy(lpData->szName,"x11drv");
83 /* the entry point named here should initialize our hal_info
84 * with 32-bit entry points */
85 strcpy(lpData->szEntryPoint,"DriverInit");
86 lpData->dwContext = 0;
89 case DDCREATEDRIVEROBJECT:
91 LPDWORD lpInstance = (LPDWORD)lpOutData;
93 #ifdef HAVE_LIBXXF86VM
94 hal_info.dwNumModes = xf86vm_mode_count;
95 hal_info.lpModeInfo = xf86vm_modes;
96 hal_info.dwModeIndex = X11DRV_XF86VM_GetCurrentMode();
98 /* FIXME: get x11drv's hInstance */
100 (ddraw_fns->lpSetInfo)(&hal_info, FALSE);
101 *lpInstance = hal_info.hInstance;