VirtualBox

source: vbox/trunk/src/VBox/Additions/common/crOpenGL/pack/packspu.h@ 76533

Last change on this file since 76533 was 76533, checked in by vboxsync, 6 years ago

Additions/common: scm --fix-header-guards. bugref:9344

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 4.6 KB
Line 
1/* Copyright (c) 2001, Stanford University
2 * All rights reserved.
3 *
4 * See the file LICENSE.txt for information on redistributing this software.
5 */
6
7#ifndef CR_PACKSPU_H
8#define CR_PACKSPU_H
9#ifndef RT_WITHOUT_PRAGMA_ONCE
10# pragma once
11#endif
12
13#ifdef WINDOWS
14#define PACKSPU_APIENTRY __stdcall
15#else
16#define PACKSPU_APIENTRY
17#endif
18
19#include "cr_glstate.h"
20#include "cr_netserver.h"
21#include "cr_pack.h"
22#include "cr_spu.h"
23#include "cr_threads.h"
24#include "state/cr_client.h"
25#ifdef VBOX_WITH_CRPACKSPU_DUMPER
26# include "cr_dump.h"
27#endif
28
29extern uint32_t g_u32VBoxHostCaps;
30
31typedef struct thread_info_t ThreadInfo;
32typedef struct context_info_t ContextInfo;
33typedef struct zvabuffer_info_t ZvaBufferInfo;
34
35struct zvabuffer_info_t
36{
37 /* GL_ARRAY_BUFFER_ARB buffer */
38 GLuint idBuffer;
39 /* buffer length */
40 GLuint cbBuffer;
41 /* number of values stored in the buffer currently */
42 GLuint cValues;
43 /* current buffer value */
44 union
45 {
46 GLfloat f[4];
47 GLuint ui[4];
48 GLubyte ub[4];
49 GLshort s[4];
50 GLushort us[4];
51 } Value;
52};
53
54struct thread_info_t {
55 unsigned long id;
56 CRNetServer netServer;
57 CRPackBuffer buffer;
58 CRPackBuffer normBuffer;
59 CRPackBuffer BeginEndBuffer;
60 GLenum BeginEndMode;
61 int BeginEndState;
62 ContextInfo *currentContext;
63 CRPackContext *packer;
64 int writeback;
65 GLboolean bInjectThread;
66 GLboolean inUse;
67};
68
69struct context_info_t {
70 CRContext *clientState; /* used to store client-side GL state */
71 GLint serverCtx; /* context ID returned by server */
72 GLboolean fAutoFlush;
73 GLboolean fCheckZerroVertAttr;
74 ThreadInfo *currentThread;
75 ZvaBufferInfo zvaBufferInfo;
76 GLubyte glVersion[100]; /* GL_VERSION string */
77 GLubyte pszRealVendor[100];
78 GLubyte pszRealVersion[100];
79 GLubyte pszRealRenderer[100];
80};
81
82typedef struct {
83 int id;
84 int swap;
85
86 /* config options */
87 int emit_GATHER_POST_SWAPBUFFERS;
88 int swapbuffer_sync;
89
90 int ReadPixels;
91
92 char *name;
93 int buffer_size;
94
95 int numThreads; /*number of used threads in the next array, doesn't need to be cont*/
96 ThreadInfo thread[MAX_THREADS];
97 int idxThreadInUse; /*index of any used thread*/
98
99#if defined(WINDOWS) && defined(VBOX_WITH_WDDM)
100 bool bIsWDDMCrHgsmi;
101#endif
102
103 SPUDispatchTable self;
104
105#ifdef VBOX_WITH_CRPACKSPU_DUMPER
106 CR_RECORDER Recorder;
107 CR_DBGPRINT_DUMPER Dumper;
108#endif
109
110 int numContexts;
111 ContextInfo context[CR_MAX_CONTEXTS];
112} PackSPU;
113
114extern PackSPU pack_spu;
115
116#define THREAD_OFFSET_MAGIC 2000
117
118#ifdef CHROMIUM_THREADSAFE
119extern CRmutex _PackMutex;
120extern CRtsd _PackTSD;
121#define GET_THREAD_VAL() (crGetTSD(&_PackTSD))
122#define GET_THREAD_IDX(_id) ((_id) - THREAD_OFFSET_MAGIC)
123#define GET_THREAD_VAL_ID(_id) (&(pack_spu.thread[GET_THREAD_IDX(_id)]))
124#else
125#define GET_THREAD_VAL() (&(pack_spu.thread[0]))
126#endif
127#define GET_THREAD(T) ThreadInfo *T = GET_THREAD_VAL()
128#define GET_THREAD_ID(T, _id) ThreadInfo *T = GET_THREAD_VAL_ID(_id)
129
130
131
132#define GET_CONTEXT(C) \
133 GET_THREAD(thread); \
134 ContextInfo *C = thread->currentContext
135
136#ifdef DEBUG_misha
137# define CRPACKSPU_WRITEBACK_ASSERT_ZERO(_writeback) Assert(!(_writeback))
138#else
139# define CRPACKSPU_WRITEBACK_ASSERT_ZERO(_writeback) do {} while (0)
140#endif
141
142#define CRPACKSPU_WRITEBACK_WAIT(_thread, _writeback) do {\
143 if (g_u32VBoxHostCaps & CR_VBOX_CAP_CMDVBVA) { \
144 CRPACKSPU_WRITEBACK_ASSERT_ZERO(_writeback); \
145 (_writeback) = 0; \
146 break; \
147 } \
148 CR_WRITEBACK_WAIT((_thread)->netServer.conn, _writeback); \
149 } while (0)
150
151#if defined(WINDOWS) && defined(VBOX_WITH_WDDM) && defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
152# define CRPACKSPU_IS_WDDM_CRHGSMI() (pack_spu.bIsWDDMCrHgsmi)
153#else
154# define CRPACKSPU_IS_WDDM_CRHGSMI() (GL_FALSE)
155#endif
156
157extern void packspuCreateFunctions( void );
158extern void packspuSetVBoxConfiguration( const SPU *child_spu );
159extern void packspuConnectToServer( CRNetServer *server
160#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
161 , struct VBOXUHGSMI *pHgsmi
162#endif
163 );
164extern void packspuFlush( void *arg );
165extern void packspuHuge( CROpcode opcode, void *buf );
166
167extern void packspuInitStrings(void);
168
169extern GLboolean packspuSyncOnFlushes(void);
170
171extern ThreadInfo *packspuNewThread(
172#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
173 struct VBOXUHGSMI *pHgsmi
174#else
175 void
176#endif
177 );
178
179extern ThreadInfo *packspuNewCtxThread( struct VBOXUHGSMI *pHgsmi );
180
181
182
183#define MAGIC_OFFSET 3000
184
185#endif /* CR_PACKSPU_H */
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