VirtualBox

source: vbox/trunk/include/VBox/Graphics/VBoxUhgsmi.h@ 104429

Last change on this file since 104429 was 98103, checked in by vboxsync, 20 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1/* $Id: VBoxUhgsmi.h 98103 2023-01-17 14:15:46Z vboxsync $ */
2/** @file
3 * Document me, pretty please.
4 */
5
6/*
7 * Copyright (C) 2010-2023 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * The contents of this file may alternatively be used under the terms
26 * of the Common Development and Distribution License Version 1.0
27 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
28 * in the VirtualBox distribution, in which case the provisions of the
29 * CDDL are applicable instead of those of the GPL.
30 *
31 * You may elect to license modified versions of this file under the
32 * terms and conditions of either the GPL or the CDDL or both.
33 *
34 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
35 */
36
37#ifndef VBOX_INCLUDED_Graphics_VBoxUhgsmi_h
38#define VBOX_INCLUDED_Graphics_VBoxUhgsmi_h
39#ifndef RT_WITHOUT_PRAGMA_ONCE
40# pragma once
41#endif
42
43#include <iprt/cdefs.h>
44#include <iprt/types.h>
45
46typedef struct VBOXUHGSMI *PVBOXUHGSMI;
47
48typedef struct VBOXUHGSMI_BUFFER *PVBOXUHGSMI_BUFFER;
49
50typedef union VBOXUHGSMI_BUFFER_TYPE_FLAGS
51{
52 uint32_t Value;
53 struct
54 {
55 uint32_t fCommand : 1;
56 uint32_t Reserved : 31;
57 } s;
58} VBOXUHGSMI_BUFFER_TYPE_FLAGS;
59
60typedef union VBOXUHGSMI_BUFFER_LOCK_FLAGS
61{
62 uint32_t Value;
63 struct
64 {
65 uint32_t fReadOnly : 1;
66 uint32_t fWriteOnly : 1;
67 uint32_t fDonotWait : 1;
68 uint32_t fDiscard : 1;
69 uint32_t fLockEntire : 1;
70 uint32_t Reserved : 27;
71 } s;
72} VBOXUHGSMI_BUFFER_LOCK_FLAGS;
73
74typedef union VBOXUHGSMI_BUFFER_SUBMIT_FLAGS
75{
76 uint32_t Value;
77 struct
78 {
79 uint32_t fHostReadOnly : 1;
80 uint32_t fHostWriteOnly : 1;
81 uint32_t fDoNotRetire : 1; /**< the buffer will be used in a subsequent command */
82 uint32_t fEntireBuffer : 1;
83 uint32_t Reserved : 28;
84 } s;
85} VBOXUHGSMI_BUFFER_SUBMIT_FLAGS, *PVBOXUHGSMI_BUFFER_SUBMIT_FLAGS;
86
87/* the caller can specify NULL as a hSynch and specify a valid enmSynchType to make UHGSMI create a proper object itself,
88 * */
89typedef DECLCALLBACKTYPE(int, FNVBOXUHGSMI_BUFFER_CREATE,(PVBOXUHGSMI pHgsmi, uint32_t cbBuf, VBOXUHGSMI_BUFFER_TYPE_FLAGS fType,
90 PVBOXUHGSMI_BUFFER* ppBuf));
91typedef FNVBOXUHGSMI_BUFFER_CREATE *PFNVBOXUHGSMI_BUFFER_CREATE;
92
93typedef struct VBOXUHGSMI_BUFFER_SUBMIT
94{
95 PVBOXUHGSMI_BUFFER pBuf;
96 uint32_t offData;
97 uint32_t cbData;
98 VBOXUHGSMI_BUFFER_SUBMIT_FLAGS fFlags;
99} VBOXUHGSMI_BUFFER_SUBMIT, *PVBOXUHGSMI_BUFFER_SUBMIT;
100
101typedef DECLCALLBACKTYPE(int, FNVBOXUHGSMI_BUFFER_SUBMIT,(PVBOXUHGSMI pHgsmi, PVBOXUHGSMI_BUFFER_SUBMIT aBuffers,
102 uint32_t cBuffers));
103typedef FNVBOXUHGSMI_BUFFER_SUBMIT *PFNVBOXUHGSMI_BUFFER_SUBMIT;
104
105typedef DECLCALLBACKTYPE(int, FNVBOXUHGSMI_BUFFER_DESTROY,(PVBOXUHGSMI_BUFFER pBuf));
106typedef FNVBOXUHGSMI_BUFFER_DESTROY *PFNVBOXUHGSMI_BUFFER_DESTROY;
107
108typedef DECLCALLBACKTYPE(int, FNVBOXUHGSMI_BUFFER_LOCK,(PVBOXUHGSMI_BUFFER pBuf, uint32_t offLock, uint32_t cbLock,
109 VBOXUHGSMI_BUFFER_LOCK_FLAGS fFlags, void**pvLock));
110typedef FNVBOXUHGSMI_BUFFER_LOCK *PFNVBOXUHGSMI_BUFFER_LOCK;
111
112typedef DECLCALLBACKTYPE(int, FNVBOXUHGSMI_BUFFER_UNLOCK,(PVBOXUHGSMI_BUFFER pBuf));
113typedef FNVBOXUHGSMI_BUFFER_UNLOCK *PFNVBOXUHGSMI_BUFFER_UNLOCK;
114
115typedef struct VBOXUHGSMI
116{
117 PFNVBOXUHGSMI_BUFFER_CREATE pfnBufferCreate;
118 PFNVBOXUHGSMI_BUFFER_SUBMIT pfnBufferSubmit;
119 /** User custom data. */
120 void *pvUserData;
121} VBOXUHGSMI;
122
123typedef struct VBOXUHGSMI_BUFFER
124{
125 PFNVBOXUHGSMI_BUFFER_LOCK pfnLock;
126 PFNVBOXUHGSMI_BUFFER_UNLOCK pfnUnlock;
127 PFNVBOXUHGSMI_BUFFER_DESTROY pfnDestroy;
128
129 /* r/o data added for ease of access and simplicity
130 * modifying it leads to unpredictable behavior */
131 VBOXUHGSMI_BUFFER_TYPE_FLAGS fType;
132 uint32_t cbBuffer;
133 /** User custom data. */
134 void *pvUserData;
135} VBOXUHGSMI_BUFFER;
136
137#define VBoxUhgsmiBufferCreate(_pUhgsmi, _cbBuf, _fType, _ppBuf) ((_pUhgsmi)->pfnBufferCreate(_pUhgsmi, _cbBuf, _fType, _ppBuf))
138#define VBoxUhgsmiBufferSubmit(_pUhgsmi, _aBuffers, _cBuffers) ((_pUhgsmi)->pfnBufferSubmit(_pUhgsmi, _aBuffers, _cBuffers))
139
140#define VBoxUhgsmiBufferLock(_pBuf, _offLock, _cbLock, _fFlags, _pvLock) ((_pBuf)->pfnLock(_pBuf, _offLock, _cbLock, _fFlags, _pvLock))
141#define VBoxUhgsmiBufferUnlock(_pBuf) ((_pBuf)->pfnUnlock(_pBuf))
142#define VBoxUhgsmiBufferDestroy(_pBuf) ((_pBuf)->pfnDestroy(_pBuf))
143
144#endif /* !VBOX_INCLUDED_Graphics_VBoxUhgsmi_h */
145
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle
ContactPrivacy/Do Not Sell My InfoTerms of Use