VBoxVideoIf.h revision 759c605ff712b0d178548cee2e3e41035b8d731c
/** @file
* Contains base definitions of constants & structures used
* to control & perform rendering,
* such as DMA commands types, allocation types, escape codes, etc.
* used by both miniport & display drivers.
*
* The latter uses these and only these defs to communicate with the former
* by posting appropriate requests via D3D RT Krnl Svc accessing callbacks.
*/
/*
* Copyright (C) 2010 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#ifndef ___VBoxVideoIf_h___
#define ___VBoxVideoIf_h___
#include <VBox/VBoxVideo.h>
#include "../../../include/VBoxDisplay.h"
#include <VBox/VBoxUhgsmi.h>
/* One would increase this whenever definitions in this file are changed */
#define VBOXVIDEOIF_VERSION 7
/* create allocation func */
typedef enum
{
/* this one is win 7-specific and hence unused for now */
/* custom allocation types requested from user-mode d3d module will go here */
/* usage */
typedef enum
{
/* set for the allocation being primary */
typedef struct VBOXWDDM_SURFACE_DESC
{
typedef struct VBOXWDDM_ALLOCINFO
{
union
{
struct
{
};
struct
{
};
};
/* this resource is OpenResource'd rather than CreateResource'd */
#define VBOXWDDM_RESOURCE_F_OPENNED 0x00000001
/* identifies this is a resource created with CreateResource, the VBOXWDDMDISP_RESOURCE::fRcFlags is valid */
#define VBOXWDDM_RESOURCE_F_TYPE_GENERIC 0x00000002
typedef struct VBOXWDDM_RC_DESC
{
typedef struct VBOXWDDM_RCINFO
{
// VBOXWDDM_ALLOCINFO aAllocInfos[1];
typedef struct VBOXWDDM_DMA_PRIVATEDATA_FLAFS
{
union
{
struct
{
};
};
typedef struct VBOXWDDM_DMA_PRIVATEDATA_BASEHDR
{
union
{
};
typedef struct VBOXWDDM_UHGSMI_BUFFER_UI_SUBMIT_INFO
{
typedef struct VBOXWDDM_DMA_PRIVATEDATA_UM_CHROMIUM_CMD
{
#define VBOXVHWA_F_ENABLED 0x00000001
#define VBOXVHWA_F_CKEY_DST 0x00000002
#define VBOXVHWA_F_CKEY_SRC 0x00000004
#define VBOXVHWA_MAX_FORMATS 8
typedef struct VBOXVHWA_INFO
{
#define VBOXWDDM_OVERLAY_F_CKEY_DST 0x00000001
#define VBOXWDDM_OVERLAY_F_CKEY_DSTRANGE 0x00000002
#define VBOXWDDM_OVERLAY_F_CKEY_SRC 0x00000004
#define VBOXWDDM_OVERLAY_F_CKEY_SRCRANGE 0x00000008
#define VBOXWDDM_OVERLAY_F_BOB 0x00000010
#define VBOXWDDM_OVERLAY_F_INTERLEAVED 0x00000020
#define VBOXWDDM_OVERLAY_F_MIRROR_LR 0x00000040
#define VBOXWDDM_OVERLAY_F_MIRROR_UD 0x00000080
#define VBOXWDDM_OVERLAY_F_DEINTERLACED 0x00000100
typedef struct VBOXWDDM_OVERLAY_DESC
{
/* the dirty rect info is valid */
#define VBOXWDDM_DIRTYREGION_F_VALID 0x00000001
#define VBOXWDDM_DIRTYREGION_F_RECT_VALID 0x00000002
typedef struct VBOXWDDM_DIRTYREGION
{
typedef struct VBOXWDDM_OVERLAY_INFO
{
typedef struct VBOXWDDM_OVERLAYFLIP_INFO
{
typedef enum
{
typedef struct VBOXWDDM_CREATECONTEXT_INFO
{
/* interface version, i.e. 9 for d3d9, 8 for d3d8, etc. */
/* true if d3d false if ddraw */
/* we use uint64_t instead of HANDLE to ensure structure def is the same for both 32-bit and 64-bit
* since x64 kernel driver can be called by 32-bit UMD */
/* info to be passed to UMD notification to identify the context */
typedef void *VBOXDISP_UMHANDLE;
typedef uint32_t VBOXDISP_KMHANDLE;
typedef struct VBOXWDDM_RECTS_FLAFS
{
union
{
struct
{
/* used only in conjunction with bSetVisibleRects.
* if set - VBOXWDDM_RECTS_INFO::aRects[0] contains view rectangle */
/* sets visible regions */
/* adds hidden regions */
};
};
typedef struct VBOXWDDM_RECTS_INFO
{
#define VBOXWDDM_RECTS_INFO_SIZE4CRECTS(_cRects) (RT_OFFSETOF(VBOXWDDM_RECTS_INFO, aRects[(_cRects)]))
typedef struct VBOXVIDEOCM_CMD_HDR
{
typedef struct VBOXVIDEOCM_CMD_RECTS
{
typedef struct VBOXVIDEOCM_CMD_RECTS_INTERNAL
{
union
{
};
#define VBOXVIDEOCM_CMD_RECTS_INTERNAL_SIZE4CRECTS(_cRects) (RT_OFFSETOF(VBOXVIDEOCM_CMD_RECTS_INTERNAL, Cmd.RectsInfo.aRects[(_cRects)]))
#define VBOXVIDEOCM_CMD_RECTS_INTERNAL_SIZE(_pCmd) (VBOXVIDEOCM_CMD_RECTS_INTERNAL_SIZE4CRECTS((_pCmd)->cRects))
typedef struct VBOXWDDM_GETVBOXVIDEOCMCMD_HDR
{
typedef struct VBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD
{
typedef struct VBOXDISPIFESCAPE_DBGPRINT
{
/* null-terminated string to DbgPrint including \0 */
char aStringBuf[1];
typedef struct VBOXSCREENLAYOUT_ELEMENT
{
typedef struct VBOXSCREENLAYOUT
{
typedef struct VBOXDISPIFESCAPE_SCREENLAYOUT
{
typedef struct VBOXSWAPCHAININFO
{
typedef struct VBOXDISPIFESCAPE_SWAPCHAININFO
{
typedef struct VBOXVIDEOCM_UM_ALLOC
{
typedef struct VBOXDISPIFESCAPE_UHGSMI_ALLOCATE
{
typedef struct VBOXDISPIFESCAPE_UHGSMI_DEALLOCATE
{
typedef struct VBOXWDDM_UHGSMI_BUFFER_UI_INFO_ESCAPE
{
typedef struct VBOXDISPIFESCAPE_UHGSMI_SUBMIT
{
/* query info func */
typedef struct VBOXWDDM_QI
{
} VBOXWDDM_QI;
/* submit cmd func */
/* tooling */
{
switch (format)
{
case D3DDDIFMT_R8G8B8:
return 24;
case D3DDDIFMT_A8R8G8B8:
case D3DDDIFMT_X8R8G8B8:
return 32;
case D3DDDIFMT_R5G6B5:
case D3DDDIFMT_X1R5G5B5:
case D3DDDIFMT_A1R5G5B5:
case D3DDDIFMT_A4R4G4B4:
return 16;
case D3DDDIFMT_R3G3B2:
case D3DDDIFMT_A8:
return 8;
case D3DDDIFMT_A8R3G3B2:
case D3DDDIFMT_X4R4G4B4:
return 16;
case D3DDDIFMT_A2B10G10R10:
case D3DDDIFMT_A8B8G8R8:
case D3DDDIFMT_X8B8G8R8:
case D3DDDIFMT_G16R16:
case D3DDDIFMT_A2R10G10B10:
return 32;
case D3DDDIFMT_A16B16G16R16:
return 64;
case D3DDDIFMT_A8P8:
return 16;
case D3DDDIFMT_P8:
case D3DDDIFMT_L8:
return 8;
case D3DDDIFMT_A8L8:
return 16;
case D3DDDIFMT_A4L4:
return 8;
case D3DDDIFMT_V8U8:
case D3DDDIFMT_L6V5U5:
return 16;
case D3DDDIFMT_X8L8V8U8:
case D3DDDIFMT_Q8W8V8U8:
case D3DDDIFMT_V16U16:
case D3DDDIFMT_W11V11U10:
case D3DDDIFMT_A2W10V10U10:
return 32;
case D3DDDIFMT_D16_LOCKABLE:
case D3DDDIFMT_D16:
case D3DDDIFMT_D15S1:
return 16;
case D3DDDIFMT_D32:
case D3DDDIFMT_D24S8:
case D3DDDIFMT_D24X8:
case D3DDDIFMT_D24X4S4:
case D3DDDIFMT_D24FS8:
case D3DDDIFMT_D32_LOCKABLE:
case D3DDDIFMT_D32F_LOCKABLE:
return 32;
case D3DDDIFMT_S8_LOCKABLE:
return 8;
default:
return 0;
}
}
{
/* assume that in case both four bytes are non-zero, this is a fourcc */
if ((format & 0xff000000)
&& (format & 0x00ff0000)
&& (format & 0x0000ff00)
&& (format & 0x000000ff)
)
return uFormat;
return 0;
}
{
/* pitch is now in bits, translate in bytes */
}
{
}
{
Assert(a);
Assert(b);
}
{
return false;
return false;
return false;
return false;
return true;
}
{
return false;
return false;
return false;
return false;
return true;
}
{
}
{
}
{
}
{
}
{
}
{
vboxWddmRectTranslate(pDst, x, y);
}
{
vboxWddmRectMove(pDst, x, y);
}
{
{
if (pRect)
{
}
}
{
if (pRect)
else
}
}
DECLINLINE(void) vboxWddmDirtyRegionUnite(PVBOXWDDM_DIRTYREGION pInfo, const PVBOXWDDM_DIRTYREGION pInfo2)
{
{
else
}
}
{
}
#endif /* #ifndef ___VBoxVideoIf_h___ */