2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/* $Id$ */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/** @file
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Presenter API definitions.
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/*
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Copyright (C) 2014 Oracle Corporation
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync *
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * available from http://www.virtualbox.org. This file is free software;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * you can redistribute it and/or modify it under the terms of the GNU
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * General Public License (GPL) as published by the Free Software
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#ifndef __SERVER_PRESENTER_H__
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#define __SERVER_PRESENTER_H__
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "cr_spu.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "chromium.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "cr_error.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "cr_net.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "cr_rand.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "server_dispatch.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "server.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "cr_mem.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "cr_string.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <cr_vreg.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <cr_htable.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <cr_bmpscale.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "render/renderspu.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <iprt/cdefs.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <iprt/types.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <iprt/asm.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <iprt/mem.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include <iprt/list.h>
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass ICrFbDisplay
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync public:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int UpdateBegin(struct CR_FRAMEBUFFER *pFb) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void UpdateEnd(struct CR_FRAMEBUFFER *pFb) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryAdded(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry, HCR_FRAMEBUFFER_ENTRY hReplacedEntry) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryDestroyed(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryPosChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int RegionsChanged(struct CR_FRAMEBUFFER *pFb) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int FramebufferChanged(struct CR_FRAMEBUFFER *pFb) = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual ~ICrFbDisplay() {}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync};
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsynctypedef struct CR_FRAMEBUFFER
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync VBOXVR_SCR_COMPOSITOR Compositor;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync struct VBVAINFOSCREEN ScreenInfo;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void *pvVram;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync ICrFbDisplay *pDisplay;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTLISTNODE EntriesList;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t cEntries; /* <- just for debugging */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t cUpdating;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CRHTABLE SlotTable;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync} CR_FRAMEBUFFER;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsynctypedef union CR_FBENTRY_FLAGS
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync struct {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fCreateNotified : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fInList : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t Reserved : 30;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync };
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t Value;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync} CR_FBENTRY_FLAGS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsynctypedef struct CR_FRAMEBUFFER_ENTRY
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync VBOXVR_SCR_COMPOSITOR_ENTRY Entry;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTLISTNODE Node;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t cRefs;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FBENTRY_FLAGS Flags;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CRHTABLE HTable;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync} CR_FRAMEBUFFER_ENTRY;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsynctypedef struct CR_FBTEX
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_TEXDATA Tex;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CRTextureObj *pTobj;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync} CR_FBTEX;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass CrFbDisplayBase : public ICrFbDisplay
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync public:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual bool isComposite();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync class CrFbDisplayComposite* getContainer();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool isInList();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool isUpdating();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int setRegionsChanged();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int setFramebuffer(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync struct CR_FRAMEBUFFER* getFramebuffer();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int UpdateBegin(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void UpdateEnd(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryAdded(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry, HCR_FRAMEBUFFER_ENTRY hReplacedEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryDestroyed(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryPosChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int RegionsChanged(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int FramebufferChanged(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual ~CrFbDisplayBase();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync /*@todo: move to protected and switch from RTLISTNODE*/
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTLISTNODE mNode;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync class CrFbDisplayComposite* mpContainer;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync protected:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void onUpdateEnd();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void ueRegions();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync static DECLCALLBACK(bool) entriesCreateCb(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync static DECLCALLBACK(bool) entriesDestroyCb(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int fbSynchAddAllEntries();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int fbCleanupRemoveAllEntries();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int setFramebufferBegin(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void setFramebufferEnd(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync static DECLCALLBACK(void) slotEntryReleaseCB(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void slotRelease();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbCleanup();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbSync();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CRHTABLE_HANDLE slotGet();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync private:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync typedef union CR_FBDISPBASE_FLAGS
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync struct {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fRegionsShanged : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t Reserved : 31;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync };
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t u32Value;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync } CR_FBDISPBASE_FLAGS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync struct CR_FRAMEBUFFER *mpFb;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t mcUpdates;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CRHTABLE_HANDLE mhSlot;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FBDISPBASE_FLAGS mFlags;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync};
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass CrFbDisplayComposite : public CrFbDisplayBase
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync public:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayComposite();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual bool isComposite();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t getDisplayCount();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool add(CrFbDisplayBase *pDisplay);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool remove(CrFbDisplayBase *pDisplay, bool fCleanupDisplay = true);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase* first();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayBase* next(CrFbDisplayBase* pDisplay);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int setFramebuffer(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int UpdateBegin(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void UpdateEnd(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryAdded(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry, HCR_FRAMEBUFFER_ENTRY hReplacedEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryDestroyed(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int RegionsChanged(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int FramebufferChanged(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual ~CrFbDisplayComposite();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void cleanup(bool fCleanupDisplays = true);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync private:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTLISTNODE mDisplays;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t mcDisplays;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync};
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass CrFbWindow
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync public:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbWindow(uint64_t parentId);
819d37832bb10028c591cdf2b89ebe0d5e26b9e3vboxsync bool IsCreated() const;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool IsVisivle() const;
819d37832bb10028c591cdf2b89ebe0d5e26b9e3vboxsync void Destroy();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int Reparent(uint64_t parentId);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int SetVisible(bool fVisible);
cce5a52df3d40b27d3db7953f677658f8e303e78vboxsync int SetSize(uint32_t width, uint32_t height, bool fForced=false);
0b1a81b6de109dc12a78586a8d46ac0360a248efvboxsync int SetPosition(int32_t x, int32_t y, bool fForced=false);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int SetVisibleRegionsChanged();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int SetCompositor(const struct VBOXVR_SCR_COMPOSITOR * pCompositor);
9387b69969d278b2a96d379b5a3e9eb7c60d97fcvboxsync bool SetScaleFactor(GLdouble scaleFactorW, GLdouble scaleFactorH);
9387b69969d278b2a96d379b5a3e9eb7c60d97fcvboxsync bool GetScaleFactor(GLdouble *scaleFactorW, GLdouble *scaleFactorH);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int UpdateBegin();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void UpdateEnd();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint64_t GetParentId();
819d37832bb10028c591cdf2b89ebe0d5e26b9e3vboxsync int Create();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync ~CrFbWindow();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync protected:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void checkRegions();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool isPresentNeeded();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool checkInitedUpdating();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync private:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync typedef union CR_FBWIN_FLAGS
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync struct {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fVisible : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fDataPresented : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fForcePresentOnReenable : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fCompositoEntriesModified : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t Reserved : 28;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync };
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t Value;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync } CR_FBWIN_FLAGS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync GLint mSpuWindow;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync const struct VBOXVR_SCR_COMPOSITOR * mpCompositor;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t mcUpdates;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int32_t mxPos;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int32_t myPos;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t mWidth;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t mHeight;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FBWIN_FLAGS mFlags;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint64_t mParentId;
9387b69969d278b2a96d379b5a3e9eb7c60d97fcvboxsync
9387b69969d278b2a96d379b5a3e9eb7c60d97fcvboxsync RTSEMRW scaleFactorLock;
9387b69969d278b2a96d379b5a3e9eb7c60d97fcvboxsync GLdouble mScaleFactorWStorage;
9387b69969d278b2a96d379b5a3e9eb7c60d97fcvboxsync GLdouble mScaleFactorHStorage;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync};
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass CrFbDisplayWindow : public CrFbDisplayBase
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync public:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
5a96feeef6545e3b78a0e84669406a9ee2c8da2fvboxsync CrFbDisplayWindow(const RTRECT *pViewportRect, uint64_t parentId);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual ~CrFbDisplayWindow();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int UpdateBegin(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void UpdateEnd(struct CR_FRAMEBUFFER *pFb);
819d37832bb10028c591cdf2b89ebe0d5e26b9e3vboxsync virtual int RegionsChanged(struct CR_FRAMEBUFFER *pFb);
819d37832bb10028c591cdf2b89ebe0d5e26b9e3vboxsync virtual int EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
819d37832bb10028c591cdf2b89ebe0d5e26b9e3vboxsync virtual int EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry, HCR_FRAMEBUFFER_ENTRY hReplacedEntry);
819d37832bb10028c591cdf2b89ebe0d5e26b9e3vboxsync virtual int EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int FramebufferChanged(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync const RTRECT* getViewportRect();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int setViewportRect(const RTRECT *pViewportRect);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual CrFbWindow * windowDetach(bool fCleanup = true);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual CrFbWindow * windowAttach(CrFbWindow * pNewWindow);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int reparent(uint64_t parentId);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual bool isVisible();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int winVisibilityChanged();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbWindow* getWindow();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync protected:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void onUpdateEnd();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void ueRegions();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int screenChanged();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int windowSetCompositor(bool fSet);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int windowCleanup();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbCleanup();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool isActive();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int windowDimensionsSync(bool fForceCleanup = false);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int windowSync();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbSync();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual const struct RTRECT* getRect();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync private:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync typedef union CR_FBDISPWINDOW_FLAGS
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync struct {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fNeVisible : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t fNeForce : 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t Reserved : 30;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync };
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t u32Value;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync } CR_FBDISPWINDOW_FLAGS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbWindow *mpWindow;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTRECT mViewportRect;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FBDISPWINDOW_FLAGS mFlags;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t mu32Screen;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint64_t mParentId;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync};
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass CrFbDisplayWindowRootVr : public CrFbDisplayWindow
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync public:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
5a96feeef6545e3b78a0e84669406a9ee2c8da2fvboxsync CrFbDisplayWindowRootVr(const RTRECT *pViewportRect, uint64_t parentId);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryAdded(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry, HCR_FRAMEBUFFER_ENTRY hReplacedEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryDestroyed(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int setViewportRect(const RTRECT *pViewportRect);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync protected:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int windowSetCompositor(bool fSet);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual void ueRegions();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int compositorMarkUpdated();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int screenChanged();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual const struct RTRECT* getRect();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbCleanup();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbSync();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync VBOXVR_SCR_COMPOSITOR_ENTRY* entryAlloc();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void entryFree(VBOXVR_SCR_COMPOSITOR_ENTRY* pEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int synchCompositorRegions();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int synchCompositor();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int clearCompositor();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void rootVrTranslateForPos();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync static DECLCALLBACK(VBOXVR_SCR_COMPOSITOR_ENTRY*) rootVrGetCEntry(const VBOXVR_SCR_COMPOSITOR_ENTRY*pEntry, void *pvContext);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync private:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync VBOXVR_SCR_COMPOSITOR mCompositor;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync};
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass CrFbDisplayVrdp : public CrFbDisplayBase
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync public:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayVrdp();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry, HCR_FRAMEBUFFER_ENTRY hReplacedEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryDestroyed(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int EntryPosChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int RegionsChanged(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int FramebufferChanged(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync protected:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void syncPos();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbCleanup();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync virtual int fbSync();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void vrdpDestroy(HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void vrdpGeometry(HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int vrdpRegions(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int vrdpFrame(HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int vrdpRegionsAll(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int vrdpSynchEntry(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int vrdpSyncEntryAll(struct CR_FRAMEBUFFER *pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int vrdpCreate(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync private:
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTPOINT mPos;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync};
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsynctypedef struct CR_FB_INFO
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayComposite *pDpComposite;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t u32Id;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync VBOXCMDVBVA_SCREENMAP_DECL(uint32_t, aTargetMap);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync} CR_FB_INFO;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsynctypedef struct CR_FBDISPLAY_INFO
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayWindow *pDpWin;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayWindowRootVr *pDpWinRootVr;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDisplayVrdp *pDpVrdp;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbWindow *pWindow;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t u32DisplayMode;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t u32Id;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int32_t iFb;
06bb4b5cc82b007e3014977f0006901af14d1a98vboxsync
06bb4b5cc82b007e3014977f0006901af14d1a98vboxsync /* Cache scaling factor here before display output
06bb4b5cc82b007e3014977f0006901af14d1a98vboxsync * initialized (i.e., guest not yet initiated first 3D call).
06bb4b5cc82b007e3014977f0006901af14d1a98vboxsync * No synchronization stuff needed here because all the reads
06bb4b5cc82b007e3014977f0006901af14d1a98vboxsync * and writes are done in context of 3D HGCM thread. */
06bb4b5cc82b007e3014977f0006901af14d1a98vboxsync double dInitialScaleFactorW;
06bb4b5cc82b007e3014977f0006901af14d1a98vboxsync double dInitialScaleFactorH;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync} CR_FBDISPLAY_INFO;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsynctypedef struct CR_PRESENTER_GLOBALS
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#ifndef VBOXVDBG_MEMCACHE_DISABLE
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTMEMCACHE FbEntryLookasideList;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTMEMCACHE FbTexLookasideList;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync RTMEMCACHE CEntryLookasideList;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#endif
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t u32DisplayMode;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t u32DisabledDisplayMode;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool fEnabled;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CRHashTable *pFbTexMap;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FBDISPLAY_INFO aDisplayInfos[CR_MAX_GUEST_MONITORS];
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FBMAP FramebufferInitMap;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FRAMEBUFFER aFramebuffers[CR_MAX_GUEST_MONITORS];
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CR_FB_INFO aFbInfos[CR_MAX_GUEST_MONITORS];
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync bool fWindowsForceHidden;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t cbTmpBuf;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void *pvTmpBuf;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync uint32_t cbTmpBuf2;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync void *pvTmpBuf2;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync} CR_PRESENTER_GLOBALS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncextern CR_PRESENTER_GLOBALS g_CrPresenter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncHCR_FRAMEBUFFER_ENTRY CrFbEntryFromCompositorEntry(const struct VBOXVR_SCR_COMPOSITOR_ENTRY* pCEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#endif /* __SERVER_PRESENTER_H__ */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync