VirtualBox

source: vbox/trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h@ 61092

Last change on this file since 61092 was 57790, checked in by vboxsync, 9 years ago

VMSVGA3d: Turns out I'm blitting to the wrong end (Y direction) of the nsview framebuffer. Missed some [NSOpenGLContext update] calls when the parent view got resized, so it sometimes worked, but not all the time. After calling update, the visible part of the framebuffer is the bottom half, not the top half as I though and as seems to be the case on the other plaforms.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.3 KB
Line 
1/* $Id: DevVGA-SVGA3d.h 57790 2015-09-16 17:09:28Z vboxsync $ */
2/** @file
3 * DevVMWare - VMWare SVGA device - 3D part.
4 */
5
6/*
7 * Copyright (C) 2013-2015 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ___DEVVMWARE3D_H___
19#define ___DEVVMWARE3D_H___
20
21#include "vmsvga/svga_reg.h"
22#include "vmsvga/svga3d_reg.h"
23#include "vmsvga/svga_escape.h"
24#include "vmsvga/svga_overlay.h"
25
26
27/** Arbitrary limit */
28#define SVGA3D_MAX_SHADER_IDS 0x800
29/** D3D allows up to 8 texture stages. */
30#define SVGA3D_MAX_TEXTURE_STAGE 8
31/** Arbitrary upper limit; seen 8 so far. */
32#define SVGA3D_MAX_LIGHTS 32
33
34
35/**@def FLOAT_FMT_STR
36 * Format string bits to go with FLOAT_FMT_ARGS. */
37#define FLOAT_FMT_STR "%d.%06d"
38/** @def FLOAT_FMT_ARGS
39 * Format arguments for a float value, corresponding to FLOAT_FMT_STR.
40 * @param r The floating point value to format. */
41#define FLOAT_FMT_ARGS(r) (int)(r), ((unsigned)((r) * 1000000) % 1000000U)
42
43
44/* DevVGA-SVGA.cpp: */
45void vmsvgaGMRFree(PVGASTATE pThis, uint32_t idGMR);
46int vmsvgaGMRTransfer(PVGASTATE pThis, const SVGA3dTransferType enmTransferType, uint8_t *pDest, int32_t cbDestPitch,
47 SVGAGuestPtr src, uint32_t offSrc, int32_t cbSrcPitch, uint32_t cbWidth, uint32_t cHeight);
48void vmsvga3dSurfaceUpdateHeapBuffersOnFifoThread(PVGASTATE pThis, uint32_t sid);
49
50
51/* DevVGA-SVGA3d-ogl.cpp & DevVGA-SVGA3d-win.cpp: */
52int vmsvga3dInit(PVGASTATE pThis);
53int vmsvga3dPowerOn(PVGASTATE pThis);
54int vmsvga3dLoadExec(PVGASTATE pThis, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
55int vmsvga3dSaveExec(PVGASTATE pThis, PSSMHANDLE pSSM);
56int vmsvga3dTerminate(PVGASTATE pThis);
57int vmsvga3dReset(PVGASTATE pThis);
58void vmsvga3dUpdateHostScreenViewport(PVGASTATE pThis, uint32_t idScreen, VMSVGAVIEWPORT const *pOldViewport);
59int vmsvga3dQueryCaps(PVGASTATE pThis, uint32_t idx3dCaps, uint32_t *pu32Val);
60
61int vmsvga3dSurfaceDefine(PVGASTATE pThis, uint32_t sid, uint32_t surfaceFlags, SVGA3dSurfaceFormat format, SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES], uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter, uint32_t cMipLevels, SVGA3dSize *pMipLevelSize);
62int vmsvga3dSurfaceDestroy(PVGASTATE pThis, uint32_t sid);
63int vmsvga3dSurfaceCopy(PVGASTATE pThis, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox);
64int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId const *pDstSfcImg, SVGA3dBox const *pDstBox,
65 SVGA3dSurfaceImageId const *pSrcSfcImg, SVGA3dBox const *pSrcBox, SVGA3dStretchBltMode enmMode);
66int vmsvga3dSurfaceDMA(PVGASTATE pThis, SVGA3dGuestImage guest, SVGA3dSurfaceImageId host, SVGA3dTransferType transfer, uint32_t cCopyBoxes, SVGA3dCopyBox *pBoxes);
67int vmsvga3dSurfaceBlitToScreen(PVGASTATE pThis, uint32_t dest, SVGASignedRect destRect, SVGA3dSurfaceImageId src, SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *pRect);
68
69int vmsvga3dContextDefine(PVGASTATE pThis, uint32_t cid);
70int vmsvga3dContextDestroy(PVGASTATE pThis, uint32_t cid);
71
72int vmsvga3dChangeMode(PVGASTATE pThis);
73
74int vmsvga3dSetTransform(PVGASTATE pThis, uint32_t cid, SVGA3dTransformType type, float matrix[16]);
75int vmsvga3dSetZRange(PVGASTATE pThis, uint32_t cid, SVGA3dZRange zRange);
76int vmsvga3dSetRenderState(PVGASTATE pThis, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState);
77int vmsvga3dSetRenderTarget(PVGASTATE pThis, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target);
78int vmsvga3dSetTextureState(PVGASTATE pThis, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState);
79int vmsvga3dSetMaterial(PVGASTATE pThis, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial);
80int vmsvga3dSetLightData(PVGASTATE pThis, uint32_t cid, uint32_t index, SVGA3dLightData *pData);
81int vmsvga3dSetLightEnabled(PVGASTATE pThis, uint32_t cid, uint32_t index, uint32_t enabled);
82int vmsvga3dSetViewPort(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect);
83int vmsvga3dSetClipPlane(PVGASTATE pThis, uint32_t cid, uint32_t index, float plane[4]);
84int vmsvga3dCommandClear(PVGASTATE pThis, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect);
85int vmsvga3dCommandPresent(PVGASTATE pThis, uint32_t sid, uint32_t cRects, SVGA3dCopyRect *pRect);
86int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pNumRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor);
87int vmsvga3dSetScissorRect(PVGASTATE pThis, uint32_t cid, SVGA3dRect *pRect);
88int vmsvga3dGenerateMipmaps(PVGASTATE pThis, uint32_t sid, SVGA3dTextureFilter filter);
89
90int vmsvga3dShaderDefine(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData);
91int vmsvga3dShaderDestroy(PVGASTATE pThis, uint32_t cid, uint32_t shid, SVGA3dShaderType type);
92int vmsvga3dShaderSet(PVGASTATE pThis, struct VMSVGA3DCONTEXT *pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid);
93int vmsvga3dShaderSetConst(PVGASTATE pThis, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues);
94
95int vmsvga3dQueryBegin(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type);
96int vmsvga3dQueryEnd(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult);
97int vmsvga3dQueryWait(PVGASTATE pThis, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult);
98
99/* DevVGA-SVGA3d-shared.h: */
100#if defined(RT_OS_WINDOWS) && defined(IN_RING3)
101# include <Windows.h>
102
103# define WM_VMSVGA3D_WAKEUP (WM_APP+1)
104# define WM_VMSVGA3D_CREATEWINDOW (WM_APP+2)
105# define WM_VMSVGA3D_DESTROYWINDOW (WM_APP+3)
106# define WM_VMSVGA3D_RESIZEWINDOW (WM_APP+4)
107# define WM_VMSVGA3D_EXIT (WM_APP+5)
108
109DECLCALLBACK(int) vmsvga3dWindowThread(RTTHREAD ThreadSelf, void *pvUser);
110int vmsvga3dSendThreadMessage(RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, UINT msg, WPARAM wParam, LPARAM lParam);
111
112#endif
113
114void vmsvga3dUpdateHeapBuffersForSurfaces(PVGASTATE pThis, uint32_t sid);
115void vmsvga3dInfoContextWorker(PVGASTATE pThis, PCDBGFINFOHLP pHlp, uint32_t cid, bool fVerbose);
116void vmsvga3dInfoSurfaceWorker(PVGASTATE pThis, PCDBGFINFOHLP pHlp, uint32_t sid, bool fVerbose, uint32_t cxAscii, bool fInvY);
117
118
119/* DevVGA-SVGA3d-shared.cpp: */
120
121/**
122 * Structure for use with vmsvga3dInfoU32Flags.
123 */
124typedef struct VMSVGAINFOFLAGS32
125{
126 /** The flags. */
127 uint32_t fFlags;
128 /** The corresponding mnemonic. */
129 const char *pszJohnny;
130} VMSVGAINFOFLAGS32;
131/** Pointer to a read-only flag translation entry. */
132typedef VMSVGAINFOFLAGS32 const *PCVMSVGAINFOFLAGS32;
133void vmsvga3dInfoU32Flags(PCDBGFINFOHLP pHlp, uint32_t fFlags, const char *pszPrefix, PCVMSVGAINFOFLAGS32 paFlags, uint32_t cFlags);
134
135/**
136 * Structure for use with vmsvgaFormatEnumValueEx and vmsvgaFormatEnumValue.
137 */
138typedef struct VMSVGAINFOENUM
139{
140 /** The enum value. */
141 int32_t iValue;
142 /** The corresponding value name. */
143 const char *pszName;
144} VMSVGAINFOENUM;
145/** Pointer to a read-only enum value translation entry. */
146typedef VMSVGAINFOENUM const *PCVMSVGAINFOENUM;
147/**
148 * Structure for use with vmsvgaFormatEnumValueEx and vmsvgaFormatEnumValue.
149 */
150typedef struct VMSVGAINFOENUMMAP
151{
152 /** Pointer to the value mapping array. */
153 PCVMSVGAINFOENUM paValues;
154 /** The number of value mappings. */
155 size_t cValues;
156 /** The prefix. */
157 const char *pszPrefix;
158#ifdef RT_STRICT
159 /** Indicates whether we've checked that it's sorted or not. */
160 bool *pfAsserted;
161#endif
162} VMSVGAINFOENUMMAP;
163typedef VMSVGAINFOENUMMAP const *PCVMSVGAINFOENUMMAP;
164/** @def VMSVGAINFOENUMMAP_MAKE
165 * Macro for defining a VMSVGAINFOENUMMAP, silently dealing with pfAsserted.
166 *
167 * @param a_Scope The scope. RT_NOTHING or static.
168 * @param a_VarName The variable name for this map.
169 * @param a_aValues The variable name of the value mapping array.
170 * @param a_pszPrefix The value name prefix.
171 */
172#ifdef VBOX_STRICT
173# define VMSVGAINFOENUMMAP_MAKE(a_Scope, a_VarName, a_aValues, a_pszPrefix) \
174 static bool RT_CONCAT(a_VarName,_AssertedSorted) = false; \
175 a_Scope VMSVGAINFOENUMMAP const a_VarName = { \
176 a_aValues, RT_ELEMENTS(a_aValues), a_pszPrefix, &RT_CONCAT(a_VarName,_AssertedSorted) \
177 }
178#else
179# define VMSVGAINFOENUMMAP_MAKE(a_Scope, a_VarName, a_aValues, a_pszPrefix) \
180 a_Scope VMSVGAINFOENUMMAP const a_VarName = { a_aValues, RT_ELEMENTS(a_aValues), a_pszPrefix }
181#endif
182extern VMSVGAINFOENUMMAP const g_SVGA3dSurfaceFormat2String;
183const char *vmsvgaLookupEnum(int32_t iValue, PCVMSVGAINFOENUMMAP pEnumMap);
184char *vmsvgaFormatEnumValueEx(char *pszBuffer, size_t cbBuffer, const char *pszName, int32_t iValue,
185 bool fPrefix, PCVMSVGAINFOENUMMAP pEnumMap);
186char *vmsvgaFormatEnumValue(char *pszBuffer, size_t cbBuffer, const char *pszName, uint32_t uValue,
187 const char *pszPrefix, const char * const *papszValues, size_t cValues);
188
189/**
190 * ASCII "art" scanline printer callback.
191 *
192 * @param pszLine The line to output.
193 * @param pvUser The user argument.
194 */
195typedef DECLCALLBACK(void) FMVMSVGAASCIIPRINTLN(const char *pszLine, void *pvUser);
196/** Pointer to an ASCII "art" print line callback. */
197typedef FMVMSVGAASCIIPRINTLN *PFMVMSVGAASCIIPRINTLN;
198void vmsvga3dAsciiPrint(PFMVMSVGAASCIIPRINTLN pfnPrintLine, void *pvUser, void const *pvImage, size_t cbImage,
199 uint32_t cx, uint32_t cy, uint32_t cbScanline, SVGA3dSurfaceFormat enmFormat, bool fInvY,
200 uint32_t cchMaxX, uint32_t cchMaxY);
201DECLCALLBACK(void) vmsvga3dAsciiPrintlnInfo(const char *pszLine, void *pvUser);
202DECLCALLBACK(void) vmsvga3dAsciiPrintlnLog(const char *pszLine, void *pvUser);
203
204char *vmsvga3dFormatRenderState(char *pszBuffer, size_t cbBuffer, SVGA3dRenderState const *pRenderState);
205char *vmsvga3dFormatTextureState(char *pszBuffer, size_t cbBuffer, SVGA3dTextureState const *pTextureState);
206void vmsvga3dInfoHostWindow(PCDBGFINFOHLP pHlp, uint64_t idHostWindow);
207
208uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format);
209
210#ifdef LOG_ENABLED
211const char *vmsvga3dGetCapString(uint32_t idxCap);
212const char *vmsvga3dGet3dFormatString(uint32_t format);
213const char *vmsvga3dGetRenderStateName(uint32_t state);
214const char *vmsvga3dTextureStateToString(SVGA3dTextureStateName textureState);
215const char *vmsvgaTransformToString(SVGA3dTransformType type);
216const char *vmsvgaDeclUsage2String(SVGA3dDeclUsage usage);
217const char *vmsvgaDeclType2String(SVGA3dDeclType type);
218const char *vmsvgaDeclMethod2String(SVGA3dDeclMethod method);
219const char *vmsvgaSurfaceType2String(SVGA3dSurfaceFormat format);
220const char *vmsvga3dPrimitiveType2String(SVGA3dPrimitiveType PrimitiveType);
221#endif
222
223#endif /* !___DEVVMWARE3D_H___ */
224
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette