VBoxVideo.h revision 9f301ea435b8b1026bb9e4cdc9df05bf1b4ed015
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VirtualBox Video interface.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Copyright (C) 2006-2012 Oracle Corporation
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * available from http://www.virtualbox.org. This file is free software;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * you can redistribute it and/or modify it under the terms of the GNU
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * General Public License (GPL) as published by the Free Software
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * The contents of this file may alternatively be used under the terms
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * of the Common Development and Distribution License Version 1.0
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * VirtualBox OSE distribution, in which case the provisions of the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * CDDL are applicable instead of those of the GPL.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * You may elect to license modified versions of this file under the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * terms and conditions of either the GPL or the CDDL or both.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * The last 4096 bytes of the guest VRAM contains the generic info for all
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * DualView chunks: sizes and offsets of chunks. This is filled by miniport.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Last 4096 bytes of each chunk contain chunk specific data: framebuffer info,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * etc. This is used exclusively by the corresponding instance of a display driver.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * The VRAM layout:
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Last 4096 bytes - Adapter information area.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * 4096 bytes aligned miniport heap (value specified in the config rouded up).
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * Slack - what left after dividing the VRAM.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * 4096 bytes aligned framebuffers:
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * last 4096 bytes of each framebuffer is the display information area.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * The Virtual Graphics Adapter information in the guest VRAM is stored by the
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * guest video driver using structures prepended by VBOXVIDEOINFOHDR.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * When the guest driver writes dword 0 to the VBE_DISPI_INDEX_VBOX_VIDEO
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * the host starts to process the info. The first element at the start of
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * the 4096 bytes region should be normally be a LINK that points to
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * actual information chain. That way the guest driver can have some
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync * fixed layout of the information memory block and just rewrite
#define VBOX_VIDEO_PRIMARY_SCREEN 0
#define VBOX_VIDEO_NO_SCREEN ~0
#ifndef VBOX_XPDM_MINIPORT
#define VBOX_VIDEO_INFO_TYPE_END 0
typedef struct VBOXVIDEOINFOHDR
typedef struct VBOXVIDEOINFOLINK
typedef struct VBOXVIDEOINFODISPLAY
typedef struct VBOXVIDEOINFOSCREEN
typedef struct VBOXVIDEOINFOHOSTEVENTS
typedef struct VBOXVIDEOINFONVHEAP
typedef struct VBOXVIDEOINFOVBVASTATUS
typedef struct VBOXVIDEOINFOVBVAFLUSH
#define VBOX_VIDEO_QCI32_MONITOR_COUNT 0
typedef struct VBOXVIDEOINFOQUERYCONF32
#pragma pack()
#ifdef VBOX_WITH_VIDEOHWACCEL
#define VBOXVHWA_VERSION_MAJ 0
#define VBOXVHWA_VERSION_MIN 0
#define VBOXVHWA_VERSION_RSV 0
#ifdef VBOX_WITH_WDDM
* must not be cleared once set, the command completion is performed by issuing a host->guest completion command
/* guest does not do any op on completion of this command, the host may copy the command and indicate that it does not need the command anymore
/* the host has copied the VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION command and returned it to the guest */
/* this is the host->host cmd, i.e. a configuration command posted by the host to the framebuffer */
typedef struct VBOXVHWACMD
uint64_t GuestVBVAReserved1; /* field internally used by the guest VBVA cmd handling, must NOT be modified by clients */
uint64_t GuestVBVAReserved2; /* field internally used by the guest VBVA cmd handling, must NOT be modified by clients */
} VBOXVHWACMD;
typedef unsigned int VBOXVHWACMD_LENGTH;
typedef struct VBOXVHWA_RECTL
typedef struct VBOXVHWA_COLORKEY
typedef struct VBOXVHWA_PIXELFORMAT
} m1;
} m2;
} m3;
} m4;
typedef struct VBOXVHWA_SURFACEDESC
typedef struct VBOXVHWA_BLTFX
typedef struct VBOXVHWA_OVERLAYFX
typedef struct VBOXVHWA_VERSION
typedef struct VBOXVHWACMD_QUERYINFO1
} in;
} out;
typedef struct VBOXVHWACMD_QUERYINFO2
typedef struct VBOXVHWACMD_SURF_CANCREATE
} in;
} out;
typedef struct VBOXVHWACMD_SURF_CREATE
#ifdef VBOX_WITH_WDDM
typedef struct VBOXVHWACMD_SURF_GETINFO
typedef struct VBOXVHWACMD_SURF_DESTROY
} in;
typedef struct VBOXVHWACMD_SURF_LOCK
} in;
typedef struct VBOXVHWACMD_SURF_UNLOCK
} in;
typedef struct VBOXVHWACMD_SURF_BLT
} in;
#ifdef VBOX_WITH_WDDM
typedef struct VBOXVHWACMD_SURF_COLORFILL
} in;
typedef struct VBOXVHWACMD_SURF_FLIP
} in;
typedef struct VBOXVHWACMD_SURF_COLORKEY_SET
} in;
typedef struct VBOXVHWACMD_SURF_OVERLAY_UPDATE
} in;
typedef struct VBOXVHWACMD_SURF_OVERLAY_SETPOSITION
} in;
typedef struct VBOXVHWACMD_HH_CONSTRUCT
void *pVM;
void *pvVRAM;
typedef struct VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM
typedef struct VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM
#pragma pack()
typedef struct VBVAHOSTFLAGS
typedef struct VBVABUFFER
} VBVABUFFER;
#ifdef VBOX_WITH_VIDEOHWACCEL
#ifdef VBOX_WITH_VDMA
#ifdef VBOX_WITH_VDMA
#ifdef VBOX_WITH_VIDEOHWACCEL
typedef struct VBVAHOSTCMDVHWACMDCOMPLETE
#pragma pack()
typedef struct VBVAHOSTCMDEVENT
typedef struct VBVAHOSTCMD
/* destination ID if >=0 specifies display index, otherwize the command is directed to the miniport */
#define VBVAHOSTCMD_HDR(_pBody) ((VBVAHOSTCMD*)(((uint8_t*)_pBody) - RT_OFFSETOF(VBVAHOSTCMD, body)))
#pragma pack()
#define VBOX_VBVA_CONF32_MONITOR_COUNT 0
typedef struct VBVACONF32
} VBVACONF32;
typedef struct VBVAINFOVIEW
} VBVAINFOVIEW;
typedef struct VBVAINFOHEAP
} VBVAINFOHEAP;
typedef struct VBVAFLUSH
} VBVAFLUSH;
typedef struct VBVACMDVBVASUBMIT
typedef struct VBVACMDVBVAFLUSH
typedef struct VBVAINFOSCREEN
typedef struct VBVAENABLE
} VBVAENABLE;
typedef struct VBVAENABLE_EX
typedef struct VBVAMOUSEPOINTERSHAPE
/* the guest driver can handle asynch guest cmd completion by reading the command offset from io port */
typedef struct VBVACAPS
} VBVACAPS;
typedef struct VBVASCANLINECFG
typedef struct VBVASCANLINEINFO
#pragma pack()
typedef struct VBOXSHGSMIHEADER
#pragma pack()
* must not be cleared once set, the command completion is performed by issuing a host->guest completion command
#ifdef VBOX_WITH_VDMA
typedef struct VBOXVDMA_CTL
typedef struct VBOXVDMA_RECTL
typedef struct VBOXVDMA_SURF_DESC
typedef struct VBOXVDMACBUF_DR
} Location;
#define VBOXVDMACBUF_DR_FROM_TAIL(_pCmd) ( (VBOXVDMACBUF_DR*)(((uint8_t*)(_pCmd)) - sizeof (VBOXVDMACBUF_DR)) )
typedef struct VBOXVDMACMD
#define VBOXVDMACMD_FROM_BODY(_pCmd) ( (VBOXVDMACMD*)(((uint8_t*)(_pCmd)) - VBOXVDMACMD_HEADER_SIZE()) )
#define VBOXVDMACMD_BODY_FIELD_OFFSET(_ot, _t, _f) ( (_ot)(uintptr_t)( VBOXVDMACMD_BODY(0, uint8_t) + RT_OFFSETOF(_t, _f) ) )
typedef struct VBOXVDMACMD_DMA_PRESENT_BLT
typedef struct VBOXVDMACMD_DMA_PRESENT_SHADOW2PRIMARY
typedef struct VBOXVDMACMD_DMA_BPB_TRANSFER
} Src;
} Dst;
typedef struct VBOXVDMACMD_SYSMEMEL
((PVBOXVDMACMD_SYSMEMEL)(((uint8_t*)(_pEl))+RT_OFFSETOF(VBOXVDMACMD_SYSMEMEL, phBuf[(_pEl)->cPages]))) \
typedef struct VBOXVDMACMD_DMA_BPB_TRANSFER_VRAMSYS
typedef struct VBOXVDMACMD_DMA_BPB_FILL
typedef struct VBOXVDMA_CHILD_STATUS
typedef struct VBOXVDMACMD_CHILD_STATUS_IRQ
# pragma pack()
typedef struct VBOXVDMACMD_CHROMIUM_BUFFER
typedef struct VBOXVDMACMD_CHROMIUM_CMD
typedef struct VBOXVDMACMD_CHROMIUM_CTL
typedef DECLCALLBACK(int) FNCRHGSMICMDCOMPLETION(HCRHGSMICMDCOMPLETION hCompletion, PVBOXVDMACMD_CHROMIUM_CMD pCmd, int rc);
typedef struct CR_MAIN_INTERFACE
typedef struct VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP_MAINCB
typedef DECLCALLBACK(int) FNVBOXCRCON_SVR_CRCMD(HVBOXCRCON_SERVER hServer, PVBOXVDMACMD_CHROMIUM_CMD pCmd, uint32_t cbCmd);
typedef DECLCALLBACK(int) FNVBOXCRCON_SVR_CRCTL(HVBOXCRCON_SERVER hServer, PVBOXVDMACMD_CHROMIUM_CTL pCtl, uint32_t cbCmd);
* 1. if there is no 3D data displayed on screen, returns VINF_EOF immediately w/o calling any PFNVBOXCRCON_3DRGN_XXX callbacks
* 2. otherwise calls PFNVBOXCRCON_3DRGN_ONSUBMIT, submits the "regions get" request to the CrOpenGL server to process it asynchronously and returns VINF_SUCCESS
typedef DECLCALLBACK(int) FNVBOXCRCON_SVR_3DRGN_GET(HVBOXCRCON_SERVER hServer, HVBOXCRCON_3DRGN_CLIENT hRgnClient, uint32_t idScreen);
/* called from the PFNVBOXCRCON_SVR_3DRGN_GET callback in case server has 3D data and is going to process the request asynchronously,
typedef DECLCALLBACK(int) FNVBOXCRCON_3DRGN_ONSUBMIT(HVBOXCRCON_3DRGN_CLIENT hRgnClient, uint32_t idScreen, HVBOXCRCON_3DRGN_ASYNCCLIENT *phRgnAsyncClient);
/* called from the "regions get" command processing thread, to indicate that the "regions get" is started.
typedef DECLCALLBACK(int) FNVBOXCRCON_3DRGN_BEGIN(HVBOXCRCON_3DRGN_ASYNCCLIENT hRgnAsyncClient, uint32_t idScreen);
typedef DECLCALLBACK(int) FNVBOXCRCON_3DRGN_REPORT(HVBOXCRCON_3DRGN_ASYNCCLIENT hRgnAsyncClient, uint32_t idScreen, void *pvData, uint32_t cbStride, const RTRECT *pRect);
/* called from the "regions get" command processing thread, to indicate that the "regions get" is completed.
typedef DECLCALLBACK(int) FNVBOXCRCON_3DRGN_END(HVBOXCRCON_3DRGN_ASYNCCLIENT hRgnAsyncClient, uint32_t idScreen);
typedef DECLCALLBACK(int) FNVBOXCRCON_CLT_CRCTL_COMPLETE(HVBOXCRCON_CLIENT hClient, PVBOXVDMACMD_CHROMIUM_CTL pCtl, int rc);
typedef DECLCALLBACK(int) FNVBOXCRCON_CLT_CRCMD_COMPLETE(HVBOXCRCON_CLIENT hClient, PVBOXVDMACMD_CHROMIUM_CMD pCmd, int rc);
typedef struct VBOXCRCON_SERVER_CALLBACKS
typedef struct VBOXCRCON_CLIENT_CALLBACKS
typedef struct VBOXVDMACMD_CHROMIUM_CTL_CRCONNECT
#define VBOXCMDVBVA_OPF_BLT_TYPE_PRIMARY 0
#define VBOXCMDVBVA_OPF_CLRFILL_TYPE_PRIMARY 0
typedef struct VBOXCMDVBVA_HDR
} complexCmdEl;
} u2;
typedef struct VBOXCMDVBVA_CRCMD_BUFFER
typedef struct VBOXCMDVBVA_CRCMD_CMD
typedef struct VBOXCMDVBVA_CRCMD
typedef struct VBOXCMDVBVA_ALLOCINFO
typedef struct VBOXCMDVBVA_ALLOCDESC
typedef struct VBOXCMDVBVA_RECT
typedef struct VBOXCMDVBVA_POINT
int16_t x;
int16_t y;
typedef struct VBOXCMDVBVA_BLT_HDR
typedef struct VBOXCMDVBVA_BLT_PRIMARY
typedef struct VBOXCMDVBVA_BLT_PRIMARY_GENERIC_A8R8G8B8
typedef struct VBOXCMDVBVA_BLT_OFFPRIMSZFMT_OR_ID
typedef struct VBOXCMDVBVA_BLT_GENERIC_A8R8G8B8
typedef struct VBOXCMDVBVA_FLIP
typedef struct VBOXCMDVBVA_CLRFILL_HDR
typedef struct VBOXCMDVBVA_CLRFILL_PRIMARY
typedef struct VBOXCMDVBVA_CLRFILL_GENERIC_A8R8G8B8
typedef struct VBOXCMDVBVA_SYSMEMEL
typedef struct VBOXCMDVBVA_PAGING_TRANSFER_DATA
typedef struct VBOXCMDVBVA_PAGING_TRANSFER
typedef struct VBOXCMDVBVA_PAGING_FILL
/* paging transfer can NOT be initiated for allocations having host 3D object (hostID) associated */
typedef struct VBOXCMDVBVA_SYSMEMCMD
typedef struct VBOXCMDVBVA_CTL
typedef struct VBOXCMDVBVA_CTL_ENABLE
typedef struct VBOXCMDVBVA_RESIZE_ENTRY
typedef struct VBOXCMDVBVA_RESIZE
typedef struct VBOXCMDVBVA_CTL_RESIZE
typedef struct VBOXCMDVBVA_3DCTL
typedef struct VBOXCMDVBVA_3DCTL_CONNECT
typedef struct VBOXCMDVBVA_3DCTL_CMD
typedef struct VBOXCMDVBVA_CTL_3DCTL_CMD
typedef struct VBOXCMDVBVA_CTL_3DCTL_CONNECT
typedef struct VBOXCMDVBVA_CTL_3DCTL
#pragma pack()
#ifdef VBOXVDMA_WITH_VBVA
typedef struct VBOXVDMAVBVACMD
#pragma pack()