9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox XPDM Display driver
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 Oracle Corporation
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync *
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * available from http://www.virtualbox.org. This file is free software;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * General Public License (GPL) as published by the Free Software
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifndef VBOXDISP_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXDISP_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include "VBoxDispInternal.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include "VBoxDispVrdpBmp.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* VirtualBox display driver version, could be seen in Control Panel */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXDISPDRIVERVERSION 0x01UL
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#if (VBOXDISPDRIVERVERSION & (~0xFFUL))
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#error VBOXDISPDRIVERVERSION can't be more than 0xFF
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
51f3ebb43ec0d2321eb66beff56c0568223e7493vboxsync#define VBOXDISP_DEVICE_NAME L"VBoxDisp"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Current mode info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDISPCURRENTMODE
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulIndex; /* miniport's video mode index */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulWidth, ulHeight; /* visible screen width and height */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulBitsPerPel; /* number of bits per pel */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync LONG lScanlineStride; /* distance between scanlines */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync FLONG flMaskR, flMaskG, flMaskB; /* RGB mask */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulPaletteShift; /* number of bits we have to shift 888 palette to match device palette */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPCURRENTMODE, *PVBOXDISPCURRENTMODE;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Pointer related info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDISPPOINTERINFO
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VIDEO_POINTER_CAPABILITIES caps; /* Pointer capabilities */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PVIDEO_POINTER_ATTRIBUTES pAttrs; /* Preallocated buffer to pass pointer shape to miniport driver */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync DWORD cbAttrs; /* Size of pAttrs buffer */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync POINTL orgHotSpot; /* Hot spot origin */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPPOINTERINFO, *PVBOXDISPPOINTERINFO;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Surface info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDISPSURF
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HBITMAP hBitmap; /* GDI's handle to framebuffer bitmap */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync SURFOBJ* psoBitmap; /* lock pointer to framebuffer bitmap */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HSURF hSurface; /* GDI's handle to framebuffer device-managed surface */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulFormat; /* Bitmap format, one of BMF_XXBPP */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPSURF, *PVBOXDISPSURF;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* VRAM Layout */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDISPVRAMLAYOUT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG cbVRAM;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG offFramebuffer, cbFramebuffer;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG offDDrawHeap, cbDDrawHeap;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG offVBVABuffer, cbVBVABuffer;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG offDisplayInfo, cbDisplayInfo;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPVRAMLAYOUT;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* HGSMI info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDISPHGSMIINFO
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BOOL bSupported; /* HGSMI is supported and enabled */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIQUERYCALLBACKS mp; /* HGSMI miniport's callbacks and context */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIGUESTCOMMANDCONTEXT ctx; /* HGSMI guest context */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPHGSMIINFO;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Saved screen bits information. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _SSB
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ident; /* 1 based index in the stack = the handle returned by VBoxDispDrvSaveScreenBits (SS_SAVE) */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BYTE *pBuffer; /* Buffer where screen bits are saved. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} SSB;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WITH_DDRAW
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* DirectDraw surface lock information */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDDLOCKINFO
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BOOL bLocked;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RECTL rect;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDDLOCKINFO;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Structure holding driver private device info. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBOXDISPDEV
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HANDLE hDriver; /* Display device handle which was passed to VBoxDispDrvEnablePDEV */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HDEV hDevGDI; /* GDI's handle for PDEV created in VBoxDispDrvEnablePDEV */
b0a3d0ec5780199a2f379da63c59ccf48f1a73b9vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXDISPCURRENTMODE mode; /* Current device mode */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG iDevice; /* Miniport's device index */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync POINTL orgDev; /* Device origin for DualView (0,0 is primary) */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync POINTL orgDisp; /* Display origin in virtual desktop, NT4 only */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXDISPPOINTERINFO pointer; /* Pointer info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HPALETTE hDefaultPalette; /* Default palette handle */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PALETTEENTRY *pPalette; /* Palette entries for device managed palette */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXDISPSURF surface; /* Device surface */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync FLONG flDrawingHooks; /* Enabled drawing hooks */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VIDEO_MEMORY_INFORMATION memInfo; /* Mapped Framebuffer/vram info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXDISPVRAMLAYOUT layout; /* VRAM layout information */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXDISPHGSMIINFO hgsmi; /* HGSMI Info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIQUERYCPORTPROCS vpAPI; /* Video Port API callbacks and miniport's context */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBVABUFFERCONTEXT vbvaCtx; /* VBVA context */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VRDPBC vrdpCache; /* VRDP bitmap cache */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG cSSB; /* Number of active saved screen bits records in the following array. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync SSB aSSB[4]; /* LIFO type stack for saved screen areas. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WITH_DDRAW
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXDDLOCKINFO ddpsLock; /* Primary surface DirectDraw lock information */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXDISPVHWAINFO vhwa; /* VHWA Info */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync BOOL bBitmapCacheDisabled;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPDEV, *PVBOXDISPDEV;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* -------------------- Driver callbacks -------------------- */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncRT_C_DECLS_BEGIN
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncULONG APIENTRY DriverEntry(IN PVOID Context1, IN PVOID Context2);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncRT_C_DECLS_END
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDHPDEV APIENTRY VBoxDispDrvEnablePDEV(DEVMODEW *pdm, LPWSTR pwszLogAddress,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG cPat, HSURF *phsurfPatterns,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG cjCaps, ULONG *pdevcaps,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG cjDevInfo, DEVINFO *pdi,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HDEV hdev, PWSTR pwszDeviceName, HANDLE hDriver);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVOID APIENTRY VBoxDispDrvCompletePDEV(DHPDEV dhpdev, HDEV hdev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVOID APIENTRY VBoxDispDrvDisablePDEV(DHPDEV dhpdev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHSURF APIENTRY VBoxDispDrvEnableSurface(DHPDEV dhpdev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVOID APIENTRY VBoxDispDrvDisableSurface(DHPDEV dhpdev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
b0a3d0ec5780199a2f379da63c59ccf48f1a73b9vboxsyncBOOL APIENTRY VBoxDispDrvLineTo(SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync LONG x1, LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvStrokePath(SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, XFORMOBJ *pxo,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BRUSHOBJ *pbo, POINTL *pptlBrushOrg, LINEATTRS *plineattrs, MIX mix);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvFillPath(SURFOBJ *pso, PATHOBJ *ppo, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync MIX mix, FLONG flOptions);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvPaint(SURFOBJ *pso, CLIPOBJ *pco, BRUSHOBJ *pbo, POINTL *pptlBrushOrg, MIX mix);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvRealizeBrush(BRUSHOBJ *pbo, SURFOBJ *psoTarget, SURFOBJ *psoPattern, SURFOBJ *psoMask,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync XLATEOBJ *pxlo, ULONG iHatch);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncULONG APIENTRY VBoxDispDrvDitherColor(DHPDEV dhpdev, ULONG iMode, ULONG rgb, ULONG *pul);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvBitBlt(SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ROP4 rop4);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvStretchBlt(SURFOBJ *psoDest, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync COLORADJUSTMENT *pca, POINTL *pptlHTOrg, RECTL *prclDest, RECTL *prclSrc,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync POINTL *pptlMask, ULONG iMode);
b0a3d0ec5780199a2f379da63c59ccf48f1a73b9vboxsyncBOOL APIENTRY VBoxDispDrvCopyBits(SURFOBJ *psoDest, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RECTL *prclDest, POINTL *pptlSrc);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncULONG APIENTRY VBoxDispDrvSetPointerShape(SURFOBJ *pso, SURFOBJ *psoMask, SURFOBJ *psoColor, XLATEOBJ *pxlo,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync LONG xHot, LONG yHot, LONG x, LONG y, RECTL *prcl, FLONG fl);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVOID APIENTRY VBoxDispDrvMovePointer(SURFOBJ *pso, LONG x, LONG y, RECTL *prcl);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvAssertMode(DHPDEV dhpdev, BOOL bEnable);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVOID APIENTRY VBoxDispDrvDisableDriver();
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvTextOut(SURFOBJ *pso, STROBJ *pstro, FONTOBJ *pfo, CLIPOBJ *pco,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RECTL *prclExtra, RECTL *prclOpaque, BRUSHOBJ *pboFore,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync BRUSHOBJ *pboOpaque, POINTL *pptlOrg, MIX mix);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvSetPalette(DHPDEV dhpdev, PALOBJ *ppalo, FLONG fl, ULONG iStart, ULONG cColors);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncULONG APIENTRY VBoxDispDrvEscape(SURFOBJ *pso, ULONG iEsc, ULONG cjIn, PVOID pvIn, ULONG cjOut, PVOID pvOut);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncULONG_PTR APIENTRY VBoxDispDrvSaveScreenBits(SURFOBJ *pso, ULONG iMode, ULONG_PTR ident, RECTL *prcl);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncULONG APIENTRY VBoxDispDrvGetModes(HANDLE hDriver, ULONG cjSize, DEVMODEW *pdm);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncBOOL APIENTRY VBoxDispDrvOffset(SURFOBJ* pso, LONG x, LONG y, FLONG flReserved);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVOID APIENTRY VBoxDispDrvNotify(SURFOBJ *pso, ULONG iType, PVOID pvData);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WITH_DDRAW
b0a3d0ec5780199a2f379da63c59ccf48f1a73b9vboxsyncBOOL APIENTRY VBoxDispDrvGetDirectDrawInfo(DHPDEV dhpdev, DD_HALINFO *pHalInfo, DWORD *pdwNumHeaps,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VIDEOMEMORY *pvmList, DWORD *pdwNumFourCCCodes, DWORD *pdwFourCC);
b0a3d0ec5780199a2f379da63c59ccf48f1a73b9vboxsyncBOOL APIENTRY VBoxDispDrvEnableDirectDraw(DHPDEV dhpdev, DD_CALLBACKS *pCallBacks,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync DD_SURFACECALLBACKS *pSurfaceCallBacks,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync DD_PALETTECALLBACKS *pPaletteCallBacks);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncVOID APIENTRY VBoxDispDrvDisableDirectDraw(DHPDEV dhpdev);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHBITMAP APIENTRY VBoxDispDrvDeriveSurface(DD_DIRECTDRAW_GLOBAL *pDirectDraw, DD_SURFACE_LOCAL *pSurface);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*#ifdef VBOX_WITH_DDRAW*/
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* -------------------- Internal helpers -------------------- */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncDECLINLINE(SURFOBJ) *getSurfObj(SURFOBJ *pso)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if (pso)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync {
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PVBOXDISPDEV pDev = (PVBOXDISPDEV)pso->dhpdev;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync if (pDev && pDev->surface.psoBitmap && pso->hsurf == pDev->surface.hSurface)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync {
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Convert the device PSO to the bitmap PSO which can be passed to Eng*. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pso = pDev->surface.psoBitmap;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync }
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync }
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return pso;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
b0a3d0ec5780199a2f379da63c59ccf48f1a73b9vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOXDISP_H*/