screen.c revision e5debac2a05dfd761e502dc4ab6050c95b983ae8
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync/******************************Module*Header*******************************\
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * available from http://www.virtualbox.org. This file is free software;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * General Public License (GPL) as published by the Free Software
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync * additional information or have any questions.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* Based in part on Microsoft DDK sample code
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* *******************
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* * GDI SAMPLE CODE *
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* *******************
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* Module Name: screen.c
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* Initializes the GDIINFO and DEVINFO structures for DrvEnablePDEV.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync* Copyright (c) 1992-1998 Microsoft Corporation
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync\**************************************************************************/
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#define SYSTM_LOGFONT {16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH | FF_DONTCARE,L"System"}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#define HELVE_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,VARIABLE_PITCH | FF_DONTCARE,L"MS Sans Serif"}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#define COURI_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_DONTCARE, L"Courier"}
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync// This is the basic devinfo for a default driver. This is used as a base and customized based
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync// on information passed back from the miniport driver.
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ), /* Graphics capabilities */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync HELVE_LOGFONT, /* ANSI variable font description */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 0, /* Count of device fonts */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 0, /* Preferred DIB format */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync 0 /* Default palette to use for this device */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsyncstatic void vboxInitVBoxVideo (PPDEV ppdev, const VIDEO_MEMORY_INFORMATION *pMemoryInformation)
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->bVBoxVideoSupported = !EngDeviceIoControl(ppdev->hDriver,
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync u32MinVBVABufferSize = 0; /* In old mode the buffer is not used at all. */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->bHGSMISupported = !EngDeviceIoControl(ppdev->hDriver,
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->pfnHGSMICommandComplete = Callbacks.pfnCompletionHandler;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->pfnHGSMIRequestCommands = Callbacks.pfnRequestCommandsHandler;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#endif /* VBOX_WITH_HGSMI */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#endif /* VBOX_WITH_HGSMI */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->layout.cbVRAM = pMemoryInformation->VideoRamLength;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->layout.cbFrameBuffer = RT_ALIGN_32(pMemoryInformation->FrameBufferLength, 0x1000);
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync cbAvailable = ppdev->layout.cbVRAM - ppdev->layout.cbFrameBuffer;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#endif /* VBOX_WITH_HGSMI */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->layout.offDisplayInformation = ppdev->layout.cbVRAM - u32DisplayInfoSize;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->layout.cbDisplayInformation = u32DisplayInfoSize;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync /* Use minimum 64K and maximum the cbFrameBuffer for the VBVA buffer. */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync for (ppdev->layout.cbVBVABuffer = ppdev->layout.cbFrameBuffer;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->layout.cbVBVABuffer >= u32MinVBVABufferSize;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#endif /* VBOX_WITH_HGSMI */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync#endif /* VBOX_WITH_HGSMI */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync /* Now the offscreen heap followed by the VBVA buffer. */
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->layout.offDDRAWHeap = ppdev->layout.offFrameBuffer + ppdev->layout.cbFrameBuffer;
cf22150eaeeb72431bf1cf65c309a431454fb22bvboxsync ppdev->layout.offVBVABuffer = ppdev->layout.offDDRAWHeap + ppdev->layout.cbDDRAWHeap;
#ifndef VBOX_WITH_HGSMI
#ifdef VBOX_WITH_HGSMI
rc));
#ifndef VBOX_WITH_HGSMI
sizeof(ULONG),
sizeof(ULONG),
return(FALSE);
sizeof(VIDEO_MEMORY),
sizeof(VIDEO_MEMORY_INFORMATION),
return(FALSE);
return(FALSE);
sizeof(VIDEO_POINTER_ATTRIBUTES) +
return(FALSE);
#ifndef VBOX_WITH_HGSMI
#ifndef VBOX_WITH_HGSMI
#ifndef VBOX_WITH_HGSMI
#ifdef VBOX_WITH_VIDEOHWACCEL
return(TRUE);
sizeof(VIDEO_MEMORY),
NULL,
if (cModes == 0)
return(FALSE);
while (cModes--)
if (bSelectDefault ||
return(FALSE);
if (g_bOnNT40)
#ifdef MIPS
NULL,
sizeof(VIDEO_COLOR_CAPABILITIES),
&ulTemp))
return(TRUE);
NULL,
&modes,
sizeof(VIDEO_NUM_MODES),
&ulTemp))
NULL,
&ulTemp))
while (ulTemp--)