[75443] | 1 | /* $Id: VBoxPresent.h 98103 2023-01-17 14:15:46Z vboxsync $ */
|
---|
| 2 | /** @file
|
---|
| 3 | * VirtualBox Windows Guest Mesa3D - Gallium D3D9 state tracker interface.
|
---|
| 4 | *
|
---|
| 5 | * ID3DPresent and ID3DPresentGroup declarations.
|
---|
| 6 | */
|
---|
| 7 |
|
---|
| 8 | /*
|
---|
[98103] | 9 | * Copyright (C) 2016-2023 Oracle and/or its affiliates.
|
---|
[75443] | 10 | *
|
---|
[96407] | 11 | * This file is part of VirtualBox base platform packages, as
|
---|
| 12 | * available from https://www.virtualbox.org.
|
---|
| 13 | *
|
---|
| 14 | * This program is free software; you can redistribute it and/or
|
---|
| 15 | * modify it under the terms of the GNU General Public License
|
---|
| 16 | * as published by the Free Software Foundation, in version 3 of the
|
---|
| 17 | * License.
|
---|
| 18 | *
|
---|
| 19 | * This program is distributed in the hope that it will be useful, but
|
---|
| 20 | * WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
| 22 | * General Public License for more details.
|
---|
| 23 | *
|
---|
| 24 | * You should have received a copy of the GNU General Public License
|
---|
| 25 | * along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
| 26 | *
|
---|
| 27 | * SPDX-License-Identifier: GPL-3.0-only
|
---|
[75443] | 28 | */
|
---|
| 29 |
|
---|
[76563] | 30 | #ifndef GA_INCLUDED_SRC_WINNT_Graphics_Video_disp_wddm_gallium_VBoxPresent_h
|
---|
| 31 | #define GA_INCLUDED_SRC_WINNT_Graphics_Video_disp_wddm_gallium_VBoxPresent_h
|
---|
[76540] | 32 | #ifndef RT_WITHOUT_PRAGMA_ONCE
|
---|
| 33 | # pragma once
|
---|
| 34 | #endif
|
---|
[75443] | 35 |
|
---|
| 36 | #include <iprt/win/d3d9.h>
|
---|
| 37 |
|
---|
| 38 | typedef struct D3DWindowBuffer D3DWindowBuffer;
|
---|
| 39 |
|
---|
| 40 | #ifdef __cplusplus
|
---|
[84367] | 41 |
|
---|
| 42 | # include <iprt/cdefs.h>
|
---|
| 43 | # pragma warning(push)
|
---|
| 44 | # if RT_MSC_PREREQ(RT_MSC_VER_VC142)
|
---|
| 45 | # pragma warning(disable: 5204) /* warning C5204: 'ID3DPresent': class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly */
|
---|
| 46 | # endif
|
---|
| 47 |
|
---|
[75443] | 48 | /*
|
---|
| 49 | * Gallium only defines C interface for ID3DPresentGroup and ID3DPresent.
|
---|
| 50 | *
|
---|
| 51 | * Make sure that WINAPI is __stdcall in Gallium include/D3D9/d3d9types.h for the Windows build.
|
---|
| 52 | */
|
---|
| 53 | class ID3DPresent
|
---|
| 54 | {
|
---|
| 55 | public:
|
---|
| 56 | /* IUnknown */
|
---|
| 57 | virtual HRESULT WINAPI QueryInterface(REFIID riid, void **ppvObject) = 0;
|
---|
| 58 | virtual ULONG WINAPI AddRef() = 0;
|
---|
| 59 | virtual ULONG WINAPI Release() = 0;
|
---|
| 60 |
|
---|
| 61 | /* ID3DPresent */
|
---|
| 62 | virtual HRESULT WINAPI SetPresentParameters(D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) = 0;
|
---|
| 63 | virtual HRESULT WINAPI NewD3DWindowBufferFromDmaBuf(int dmaBufFd, int width, int height, int stride, int depth, int bpp, D3DWindowBuffer **out) = 0;
|
---|
| 64 | virtual HRESULT WINAPI DestroyD3DWindowBuffer(D3DWindowBuffer *buffer) = 0;
|
---|
| 65 | virtual HRESULT WINAPI WaitBufferReleased(D3DWindowBuffer *buffer) = 0;
|
---|
| 66 | virtual HRESULT WINAPI FrontBufferCopy(D3DWindowBuffer *buffer) = 0;
|
---|
| 67 | virtual HRESULT WINAPI PresentBuffer(D3DWindowBuffer *buffer, HWND hWndOverride, const RECT *pSourceRect, const RECT *pDestRect, const RGNDATA *pDirtyRegion, DWORD Flags) = 0;
|
---|
| 68 | virtual HRESULT WINAPI GetRasterStatus(D3DRASTER_STATUS *pRasterStatus) = 0;
|
---|
| 69 | virtual HRESULT WINAPI GetDisplayMode(D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) = 0;
|
---|
| 70 | virtual HRESULT WINAPI GetPresentStats(D3DPRESENTSTATS *pStats) = 0;
|
---|
| 71 | virtual HRESULT WINAPI GetCursorPos(POINT *pPoint) = 0;
|
---|
| 72 | virtual HRESULT WINAPI SetCursorPos(POINT *pPoint) = 0;
|
---|
| 73 | virtual HRESULT WINAPI SetCursor(void *pBitmap, POINT *pHotspot, BOOL bShow) = 0;
|
---|
| 74 | virtual HRESULT WINAPI SetGammaRamp(const D3DGAMMARAMP *pRamp, HWND hWndOverride) = 0;
|
---|
| 75 | virtual HRESULT WINAPI GetWindowInfo(HWND hWnd, int *width, int *height, int *depth) = 0;
|
---|
| 76 | };
|
---|
| 77 |
|
---|
| 78 | class ID3DPresentGroup
|
---|
| 79 | {
|
---|
| 80 | public:
|
---|
| 81 | /* IUnknown */
|
---|
| 82 | virtual HRESULT WINAPI QueryInterface(REFIID riid, void **ppvObject) = 0;
|
---|
| 83 | virtual ULONG WINAPI AddRef() = 0;
|
---|
| 84 | virtual ULONG WINAPI Release() = 0;
|
---|
| 85 |
|
---|
| 86 | /* ID3DPresentGroup */
|
---|
| 87 | virtual UINT WINAPI GetMultiheadCount() = 0;
|
---|
| 88 | virtual HRESULT WINAPI GetPresent(UINT Index, ID3DPresent **ppPresent) = 0;
|
---|
| 89 | virtual HRESULT WINAPI CreateAdditionalPresent(D3DPRESENT_PARAMETERS *pPresentationParameters, ID3DPresent **ppPresent) = 0;
|
---|
| 90 | virtual void WINAPI GetVersion(int *major, int *minor) = 0;
|
---|
| 91 | };
|
---|
| 92 |
|
---|
[84367] | 93 | # pragma warning(pop)
|
---|
| 94 |
|
---|
[75443] | 95 | class IGaDirect3DDevice9Ex;
|
---|
| 96 | HRESULT WDDMPresentGroupCreate(IGaDirect3DDevice9Ex *pGaDevice, ID3DPresentGroup **ppOut);
|
---|
| 97 |
|
---|
| 98 | #else /* !__cplusplus */
|
---|
| 99 | typedef struct ID3DPresent ID3DPresent;
|
---|
| 100 | typedef struct ID3DPresentGroup ID3DPresentGroup;
|
---|
| 101 | #endif
|
---|
| 102 |
|
---|
[76563] | 103 | #endif /* !GA_INCLUDED_SRC_WINNT_Graphics_Video_disp_wddm_gallium_VBoxPresent_h */
|
---|