VirtualBox

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

Last change on this file since 50345 was 49264, checked in by vboxsync, 11 years ago

crOpenGL: dumping/logging

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.5 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
10#ifdef WINDOWS
11#define PACKSPU_APIENTRY __stdcall
12#else
13#define PACKSPU_APIENTRY
14#endif
15
16#include "cr_glstate.h"
17#include "cr_netserver.h"
18#include "cr_pack.h"
19#include "cr_spu.h"
20#include "cr_threads.h"
21#include "state/cr_client.h"
22#ifdef VBOX_WITH_CRPACKSPU_DUMPER
23# include "cr_dump.h"
24#endif
25
26typedef struct thread_info_t ThreadInfo;
27typedef struct context_info_t ContextInfo;
28
29struct thread_info_t {
30 unsigned long id;
31 CRNetServer netServer;
32 CRPackBuffer buffer;
33 CRPackBuffer normBuffer;
34 CRPackBuffer BeginEndBuffer;
35 GLenum BeginEndMode;
36 int BeginEndState;
37 ContextInfo *currentContext;
38 CRPackContext *packer;
39 int writeback;
40 GLboolean bInjectThread;
41 GLboolean inUse;
42};
43
44struct context_info_t {
45 CRContext *clientState; /* used to store client-side GL state */
46 GLint serverCtx; /* context ID returned by server */
47 GLboolean fAutoFlush;
48 ThreadInfo *currentThread;
49 GLubyte glVersion[100]; /* GL_VERSION string */
50 GLubyte pszRealVendor[100];
51 GLubyte pszRealVersion[100];
52 GLubyte pszRealRenderer[100];
53};
54
55typedef struct {
56 int id;
57 int swap;
58
59 /* config options */
60 int emit_GATHER_POST_SWAPBUFFERS;
61 int swapbuffer_sync;
62
63 int ReadPixels;
64
65 char *name;
66 int buffer_size;
67
68 int numThreads; /*number of used threads in the next array, doesn't need to be cont*/
69 ThreadInfo thread[MAX_THREADS];
70 int idxThreadInUse; /*index of any used thread*/
71
72#if defined(WINDOWS) && defined(VBOX_WITH_WDDM)
73 bool bRunningUnderWDDM;
74#endif
75
76#ifdef VBOX_WITH_CRPACKSPU_DUMPER
77 SPUDispatchTable self;
78
79 CR_RECORDER Recorder;
80 CR_DBGPRINT_DUMPER Dumper;
81#endif
82
83 int numContexts;
84 ContextInfo context[CR_MAX_CONTEXTS];
85} PackSPU;
86
87extern PackSPU pack_spu;
88
89#define THREAD_OFFSET_MAGIC 2000
90
91#ifdef CHROMIUM_THREADSAFE
92extern CRmutex _PackMutex;
93extern CRtsd _PackTSD;
94#define GET_THREAD_VAL() (crGetTSD(&_PackTSD))
95#define GET_THREAD_IDX(_id) ((_id) - THREAD_OFFSET_MAGIC)
96#define GET_THREAD_VAL_ID(_id) (&(pack_spu.thread[GET_THREAD_IDX(_id)]))
97#else
98#define GET_THREAD_VAL() (&(pack_spu.thread[0]))
99#endif
100#define GET_THREAD(T) ThreadInfo *T = GET_THREAD_VAL()
101#define GET_THREAD_ID(T, _id) ThreadInfo *T = GET_THREAD_VAL_ID(_id)
102
103
104
105#define GET_CONTEXT(C) \
106 GET_THREAD(thread); \
107 ContextInfo *C = thread->currentContext
108
109#define CRPACKSPU_WRITEBACK_WAIT(_thread, _writeback) CR_WRITEBACK_WAIT((_thread)->netServer.conn, _writeback)
110#if defined(WINDOWS) && defined(VBOX_WITH_WDDM) && defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
111# define CRPACKSPU_IS_WDDM_CRHGSMI() (pack_spu.bRunningUnderWDDM)
112#else
113# define CRPACKSPU_IS_WDDM_CRHGSMI() (GL_FALSE)
114#endif
115
116extern void packspuCreateFunctions( void );
117extern void packspuSetVBoxConfiguration( const SPU *child_spu );
118extern void packspuConnectToServer( CRNetServer *server
119#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
120 , struct VBOXUHGSMI *pHgsmi
121#endif
122 );
123extern void packspuFlush( void *arg );
124extern void packspuHuge( CROpcode opcode, void *buf );
125
126extern GLboolean packspuSyncOnFlushes();
127
128extern ThreadInfo *packspuNewThread(
129#if defined(VBOX_WITH_CRHGSMI) && defined(IN_GUEST)
130 struct VBOXUHGSMI *pHgsmi
131#endif
132 );
133
134extern ThreadInfo *packspuNewCtxThread( struct VBOXUHGSMI *pHgsmi );
135
136#endif /* CR_PACKSPU_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