9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox XPDM Display driver
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
b43f00592f321690997ff22fcb243059b0440091vboxsync * Copyright (C) 2011-2013 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 VBOXDISPVRDPBMP_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXDISPVRDPBMP_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* RDP cache holds about 350 tiles 64x64. Therefore
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * the driver does not have to cache more then the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * RDP capacity. Most of bitmaps will be tiled, so
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * number of RDP tiles will be greater than number of
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * bitmaps. Also the number of bitmaps must be a power
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * of 2. So the 256 is a good number.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VRDPBMP_N_CACHED_BITMAPS (256)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VRDPBMP_RC_NOT_CACHED (0x0000)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VRDPBMP_RC_CACHED (0x0001)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VRDPBMP_RC_ALREADY_CACHED (0x0002)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VRDPBMP_RC_F_DELETED (0x10000)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Bitmap hash. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#pragma pack (1)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VRDPBCHASH
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* A 64 bit hash value of pixels. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint64_t hash64;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Bitmap width. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint16_t cx;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Bitmap height. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint16_t cy;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Bytes per pixel at the bitmap. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint8_t bytesPerPixel;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Padding to 16 bytes. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint8_t padding[3];
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VRDPBCHASH;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#pragma pack ()
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
b43f00592f321690997ff22fcb243059b0440091vboxsync#define VRDP_BC_ENTRY_STATUS_EMPTY 0
b43f00592f321690997ff22fcb243059b0440091vboxsync#define VRDP_BC_ENTRY_STATUS_TEMPORARY 1
b43f00592f321690997ff22fcb243059b0440091vboxsync#define VRDP_BC_ENTRY_STATUS_CACHED 2
b43f00592f321690997ff22fcb243059b0440091vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VRDPBCENTRY
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct _VRDPBCENTRY *next;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct _VRDPBCENTRY *prev;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VRDPBCHASH hash;
b43f00592f321690997ff22fcb243059b0440091vboxsync uint32_t u32Status;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VRDPBCENTRY;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VRDPBC
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
b43f00592f321690997ff22fcb243059b0440091vboxsync VRDPBCENTRY *headTmp;
b43f00592f321690997ff22fcb243059b0440091vboxsync VRDPBCENTRY *tailTmp;
b43f00592f321690997ff22fcb243059b0440091vboxsync VRDPBCENTRY *headCached;
b43f00592f321690997ff22fcb243059b0440091vboxsync VRDPBCENTRY *tailCached;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VRDPBCENTRY aEntries[VRDPBMP_N_CACHED_BITMAPS];
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VRDPBC;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vrdpbmpReset (VRDPBC *pCache);
b43f00592f321690997ff22fcb243059b0440091vboxsyncint vrdpbmpCacheSurface (VRDPBC *pCache, const SURFOBJ *pso, VRDPBCHASH *phash, VRDPBCHASH *phashDeleted, BOOL bForce);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOXDISPVRDPBMP_H*/