VirtualBox

source: vbox/trunk/src/VBox/GuestHost/OpenGL/include/cr_blitter.h@ 45490

Last change on this file since 45490 was 45348, checked in by vboxsync, 12 years ago

crOpenGL: improved GPU data acwuisition mechanism for VRDP (disabled still)

  • Property svn:executable set to *
File size: 4.7 KB
Line 
1/* $Id$ */
2
3/** @file
4 * Blitter API
5 */
6/*
7 * Copyright (C) 2013 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#ifndef ___cr_blitter_h__
18#define ___cr_blitter_h__
19
20#include <iprt/cdefs.h>
21#include "cr_spu.h"
22#include "cr_vreg.h"
23
24#ifndef IN_RING0
25# define VBOXBLITTERDECL(_type) DECLEXPORT(_type)
26#else
27# define VBOXBLITTERDECL(_type) RTDECL(_type)
28#endif
29
30RT_C_DECLS_BEGIN
31
32/* BLITTER */
33typedef struct CR_BLITTER_BUFFER
34{
35 GLuint cbBuffer;
36 GLvoid * pvBuffer;
37} CR_BLITTER_BUFFER, *PCR_BLITTER_BUFFER;
38
39typedef union CR_BLITTER_FLAGS
40{
41 struct
42 {
43 uint32_t Initialized : 1;
44 uint32_t CtxCreated : 1;
45 uint32_t SupportsFBO : 1;
46 uint32_t SupportsFBOBlit : 1;
47 uint32_t CurrentMuralChanged : 1;
48 uint32_t LastWasFBODraw : 1;
49 uint32_t Reserved : 26;
50 };
51 uint32_t Value;
52} CR_BLITTER_FLAGS, *PCR_BLITTER_FLAGS;
53
54struct CR_BLITTER;
55
56typedef DECLCALLBACK(int) FNCRBLT_BLITTER(struct CR_BLITTER *pBlitter, const VBOXVR_TEXTURE *pSrc, const RTRECT *paSrcRect, const RTRECTSIZE *pDstSize, const RTRECT *paDstRect, uint32_t cRects, uint32_t fFlags);
57typedef FNCRBLT_BLITTER *PFNCRBLT_BLITTER;
58
59#define CRBLT_F_LINEAR 0x00000001
60#define CRBLT_F_INVERT_SRC_YCOORDS 0x00000002
61#define CRBLT_F_INVERT_DST_YCOORDS 0x00000004
62#define CRBLT_F_INVERT_YCOORDS (CRBLT_F_INVERT_SRC_YCOORDS | CRBLT_F_INVERT_DST_YCOORDS)
63
64#define CRBLT_FLAGS_FROM_FILTER(_f) ( ((_f) & GL_LINEAR) ? CRBLT_F_LINEAR : 0)
65#define CRBLT_FILTER_FROM_FLAGS(_f) (((_f) & CRBLT_F_LINEAR) ? GL_LINEAR : GL_NEAREST)
66
67typedef struct CR_BLITTER_SPUITEM
68{
69 int id;
70 GLint visualBits;
71} CR_BLITTER_SPUITEM, *PCR_BLITTER_SPUITEM;
72
73typedef struct CR_BLITTER_CONTEXT
74{
75 CR_BLITTER_SPUITEM Base;
76} CR_BLITTER_CONTEXT, *PCR_BLITTER_CONTEXT;
77
78typedef struct CR_BLITTER_WINDOW
79{
80 CR_BLITTER_SPUITEM Base;
81 GLuint width, height;
82} CR_BLITTER_WINDOW, *PCR_BLITTER_WINDOW;
83
84typedef struct CR_BLITTER
85{
86 GLuint idFBO;
87 CR_BLITTER_FLAGS Flags;
88 PFNCRBLT_BLITTER pfnBlt;
89 CR_BLITTER_BUFFER Verticies;
90 CR_BLITTER_BUFFER Indicies;
91 RTRECTSIZE CurrentSetSize;
92 CR_BLITTER_WINDOW CurrentMural;
93 CR_BLITTER_CONTEXT CtxInfo;
94 const CR_BLITTER_CONTEXT *pRestoreCtxInfo;
95 const CR_BLITTER_WINDOW *pRestoreMural;
96 int32_t i32MakeCurrentUserData;
97 SPUDispatchTable *pDispatch;
98} CR_BLITTER, *PCR_BLITTER;
99
100DECLINLINE(GLboolean) CrBltIsInitialized(PCR_BLITTER pBlitter)
101{
102 return !!pBlitter->pDispatch;
103}
104
105VBOXBLITTERDECL(int) CrBltInit(PCR_BLITTER pBlitter, const CR_BLITTER_CONTEXT *pCtxBase, bool fCreateNewCtx, SPUDispatchTable *pDispatch);
106VBOXBLITTERDECL(void) CrBltTerm(PCR_BLITTER pBlitter);
107
108DECLINLINE(GLboolean) CrBltSupportsTexTex(PCR_BLITTER pBlitter)
109{
110 return pBlitter->Flags.SupportsFBO;
111}
112
113DECLINLINE(GLboolean) CrBltIsEntered(PCR_BLITTER pBlitter)
114{
115 return !!pBlitter->pRestoreCtxInfo;
116}
117
118DECLINLINE(GLint) CrBltGetVisBits(PCR_BLITTER pBlitter)
119{
120 return pBlitter->CtxInfo.Base.visualBits;
121}
122
123
124DECLINLINE(GLboolean) CrBltIsEverEntered(PCR_BLITTER pBlitter)
125{
126 return !!pBlitter->Flags.Initialized;
127}
128
129DECLINLINE(void) CrBltSetMakeCurrentUserData(PCR_BLITTER pBlitter, int32_t i32MakeCurrentUserData)
130{
131 pBlitter->i32MakeCurrentUserData = i32MakeCurrentUserData;
132}
133
134VBOXBLITTERDECL(void) CrBltMuralSetCurrent(PCR_BLITTER pBlitter, const CR_BLITTER_WINDOW *pMural);
135DECLINLINE(const CR_BLITTER_WINDOW *) CrBltMuralGetCurrentInfo(PCR_BLITTER pBlitter)
136{
137 return &pBlitter->CurrentMural;
138}
139
140VBOXBLITTERDECL(void) CrBltLeave(PCR_BLITTER pBlitter);
141VBOXBLITTERDECL(int) CrBltEnter(PCR_BLITTER pBlitter, const CR_BLITTER_CONTEXT *pRestoreCtxInfo, const CR_BLITTER_WINDOW *pRestoreMural);
142VBOXBLITTERDECL(void) CrBltBlitTexMural(PCR_BLITTER pBlitter, const VBOXVR_TEXTURE *pSrc, const RTRECT *paSrcRects, const RTRECT *paDstRects, uint32_t cRects, uint32_t fFlags);
143VBOXBLITTERDECL(void) CrBltBlitTexTex(PCR_BLITTER pBlitter, const VBOXVR_TEXTURE *pSrc, const RTRECT *pSrcRect, const VBOXVR_TEXTURE *pDst, const RTRECT *pDstRect, uint32_t cRects, uint32_t fFlags);
144VBOXBLITTERDECL(void) CrBltPresent(PCR_BLITTER pBlitter);
145/* */
146
147RT_C_DECLS_END
148
149#endif /* #ifndef ___cr_blitter_h__ */
Note: See TracBrowser for help on using the repository browser.

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