VirtualBox

source: vbox/trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.cpp@ 78190

最後變更 在這個檔案從78190是 78190,由 vboxsync 提交於 6 年 前

Merge first stage of the Chromium cleanup from the branch:

  • r129818 (Remove VBOX_WITH_CR_DISPLAY_LISTS and accompanying code as it was disabled since r108676 and was never brought back (see ​bugref:3456 and ​bugref:8485))
  • r129819 (HostServices/SharedOpenGL: Remove unused main entry point from upstream server process based implementation)
  • r129820 (HostServices/SharedOpenGL: Started eliminating all backends other than HGCM. They are not used and probably wouldn't work anymore anyway)
  • r129821 (HostServices/SharedOpenGL,GuestHost/OpenGLAdditions/common/crOpenGL: Kill crTimer* API as it is not used anywhere)
  • r129822 (HostServices/SharedOpenGL,GuestHost/OpenGLAdditions/common/crOpenGL: Kill most from cr_process.h apart from two used methods)
  • r129823 (HostServices/SharedOpenGL,GuestHost/OpenGLAdditions/common/crOpenGL: Kill crList* API as it is unused)
  • r129824 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Kill crHullInteriorBox API as it is unused)
  • r129825 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Kill crWarpPoint API as it is unused)
  • r129826 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Kill CrSa* API as it is unused and not even compiled in)
  • r129827 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Kill cr_bbox.h as it is unused)
  • r129828 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove a few crParseUrl() two uses)
  • r129829 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove last crParseURL() use)
  • r129830 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove crParseURL())
  • r129831 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove VBOX_WITH_COCOA_QT and related code when not set as it is the default for years now and we don't support anything else anymore)
  • r129832 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove unused cr_logo.h)
  • r129833 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove unused crut_api.h and crut_clientapi.h)
  • r129834 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove unused cr_dmx.h)
  • r129835 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove unused cr_perf.h)
  • r129836 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove cr_rand.h and friends as it is not actively used anywhere)
  • r129837 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of all the swapped versions in the packer SPU, we never change endianess from guest to host and don't need it)
  • r129838 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove more swapper versions in the packer related code)
  • r129839 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove more swapper versions in the packer related code)
  • r129840 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove unused pack_pica.c)
  • r129841 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove more swapper versions in the packer related code)
  • r129842 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of cr_endianess.h and friends)
  • r129843 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of unused lowercase.py)
  • r129844 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of unused cr_calllists.h and friends)
  • r129845 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of completely unused idpool.c, not even compiled in)
  • r129846 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of unused cr_debugopcodes.h and friends)
  • r129847 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Make the cr_mem.h API inline and get rid of the implementation in the util library)
  • r129848 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of SPUOptions and related code as it is of no use for us)
  • r129849 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of cr_environment.h and friends and convert usage to RTEnv* APIs)
  • r129850 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of unused renderspu_agl.c)
  • r129851 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Remove unused code in cr_htable.h)
  • r129853 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Introduce a state paremeter for the unpacker workers instead of reyling on global variables, work in progress)
  • r129854 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Let the caller of crUnpack set up the initial state. This allows to get rid of the global return_ptr and writeback_ptr as they get supplied in the unpacker state by the server)
  • r129855 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of the cr_lastDispatch and cr_unpackDispatch as they are of no use now)
  • r129856 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Get rid of the global cr_unpackData and cr_unpackDataEnd symbols by indtroducing another hack to make it possible for certail server dispatch callbacks to access the data buffer)
  • r129857 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: build fix for release builds)
  • r129858 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Make the pointer to the unpacker state non const (is required for the access verification))
  • r129859 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: First iteration of the buffer size validation to prevent out of bound read access + added todos for places where additional checks are needed)
  • r129860 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Working on remaining verification todos)
  • r129861 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Working on remaining verification todos)
  • r129871 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Working on remaining verification todos)
  • r129872 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Stop as soon as the unpacker encountered an error)
  • r129876 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Working on remaining verification todos)
  • r129880 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Working on remaining verification todos)
  • r129882 (HostServices/SharedOpenGL,GuestHost/OpenGL,Additions/common/crOpenGL: Fixed some offsets in unpack_texture.c, 3DMark03 renders correctly again)
  • r130013 (HostServices/SharedOpenGL: Convert files to C++ so we can use C99 featuers on Windows with cl.exe)
  • r130014 (HostServices/SharedOpenGL,GuestHost/OpenGL: WIndows build fixes)
  • r130015 (HostServices/SharedOpenGL,GuestHost/OpenGL: More Windows build fixes)
  • r130036 (Config.kmk: Fix linker error on Windows by temporarily disabling the use of VBoxGuestR3DllMinW2K)
  • r130094 (src/VBox/GuestHost/OpenGL: Revert inlining the allocation/free functions in R3 completely as it doesn't work on Windows if memory is allocated and freed across different DLLs which don't share a common CRT, causes crashes in RtlValidtaeHeap())
  • r130095 (src/VBox/GuestHost/OpenGL,src/VBox/Additions/common/crOpenGL/pack: Don't use floating point specifiers in packspu_GetString() to avoid R6002 errors (couldn't fully understand why they occur suddenly after the rework but this gets rid of it))
  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 8.6 KB
 
1/* $Id: server_glsl.cpp 78190 2019-04-18 00:07:07Z vboxsync $ */
2/** @file
3 * VBox OpenGL - GLSL related functions
4 */
5
6/*
7 * Copyright (C) 2009-2019 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.alldomusa.eu.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
18#include "cr_spu.h"
19#include "chromium.h"
20#include "cr_error.h"
21#include "cr_mem.h"
22#include "cr_net.h"
23#include "server_dispatch.h"
24#include "server.h"
25
26#ifdef CR_OPENGL_VERSION_2_0
27
28void SERVER_DISPATCH_APIENTRY crServerDispatchShaderSource(GLuint shader, GLsizei count, const char ** string, const GLint * length)
29{
30 /*@todo?crStateShaderSource(shader...);*/
31#ifdef DEBUG_misha
32 GLenum err = cr_server.head_spu->dispatch_table.GetError();
33#endif
34 cr_server.head_spu->dispatch_table.ShaderSource(crStateGetShaderHWID(shader), count, string, length);
35#ifdef DEBUG_misha
36 err = cr_server.head_spu->dispatch_table.GetError();
37 CRASSERT(err == GL_NO_ERROR);
38#endif
39 CR_SERVER_DUMP_SHADER_SOURCE(shader);
40}
41
42void SERVER_DISPATCH_APIENTRY crServerDispatchCompileShader(GLuint shader)
43{
44#ifdef DEBUG_misha
45 GLint iCompileStatus = GL_FALSE;
46#endif
47 crStateCompileShader(shader);
48 cr_server.head_spu->dispatch_table.CompileShader(crStateGetShaderHWID(shader));
49#ifdef DEBUG_misha
50 cr_server.head_spu->dispatch_table.GetShaderiv(crStateGetShaderHWID(shader), GL_COMPILE_STATUS, &iCompileStatus);
51 Assert(iCompileStatus == GL_TRUE);
52#endif
53 CR_SERVER_DUMP_COMPILE_SHADER(shader);
54}
55
56void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteShader(GLuint shader)
57{
58 GLuint shaderHW = crStateGetShaderHWID(shader);
59 crStateDeleteShader(shader);
60 if (shaderHW)
61 cr_server.head_spu->dispatch_table.DeleteShader(shaderHW);
62 else
63 crWarning("crServerDispatchDeleteShader: hwid not found for shader(%d)", shader);
64}
65
66void SERVER_DISPATCH_APIENTRY crServerDispatchAttachShader(GLuint program, GLuint shader)
67{
68 crStateAttachShader(program, shader);
69 cr_server.head_spu->dispatch_table.AttachShader(crStateGetProgramHWID(program), crStateGetShaderHWID(shader));
70}
71
72void SERVER_DISPATCH_APIENTRY crServerDispatchDetachShader(GLuint program, GLuint shader)
73{
74 crStateDetachShader(program, shader);
75 cr_server.head_spu->dispatch_table.DetachShader(crStateGetProgramHWID(program), crStateGetShaderHWID(shader));
76}
77
78void SERVER_DISPATCH_APIENTRY crServerDispatchLinkProgram(GLuint program)
79{
80 crStateLinkProgram(program);
81 cr_server.head_spu->dispatch_table.LinkProgram(crStateGetProgramHWID(program));
82 CR_SERVER_DUMP_LINK_PROGRAM(program);
83}
84
85void SERVER_DISPATCH_APIENTRY crServerDispatchUseProgram(GLuint program)
86{
87 crStateUseProgram(program);
88 cr_server.head_spu->dispatch_table.UseProgram(crStateGetProgramHWID(program));
89}
90
91void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteProgram(GLuint program)
92{
93 GLuint hwId = crStateGetProgramHWID(program);
94 crStateDeleteProgram(program);
95 if (hwId)
96 cr_server.head_spu->dispatch_table.DeleteProgram(hwId);
97 else
98 crWarning("crServerDispatchDeleteProgram: hwid not found for program(%d)", program);
99}
100
101void SERVER_DISPATCH_APIENTRY crServerDispatchValidateProgram(GLuint program)
102{
103 crStateValidateProgram(program);
104 cr_server.head_spu->dispatch_table.ValidateProgram(crStateGetProgramHWID(program));
105}
106
107void SERVER_DISPATCH_APIENTRY crServerDispatchBindAttribLocation(GLuint program, GLuint index, const char * name)
108{
109 crStateBindAttribLocation(program, index, name);
110 cr_server.head_spu->dispatch_table.BindAttribLocation(crStateGetProgramHWID(program), index, name);
111}
112
113void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteObjectARB(VBoxGLhandleARB obj)
114{
115 GLuint hwid = crStateDeleteObjectARB(obj);
116
117 if (hwid)
118 cr_server.head_spu->dispatch_table.DeleteObjectARB(hwid);
119 else
120 crWarning("zero hwid for object %d", obj);
121}
122
123GLint SERVER_DISPATCH_APIENTRY crServerDispatchGetAttribLocation( GLuint program, const char * name )
124{
125 GLint retval;
126 retval = cr_server.head_spu->dispatch_table.GetAttribLocation(crStateGetProgramHWID(program), name );
127 crServerReturnValue( &retval, sizeof(retval) );
128 return retval; /* WILL PROBABLY BE IGNORED */
129}
130
131VBoxGLhandleARB SERVER_DISPATCH_APIENTRY crServerDispatchGetHandleARB( GLenum pname )
132{
133 VBoxGLhandleARB retval;
134 retval = cr_server.head_spu->dispatch_table.GetHandleARB(pname);
135 if (pname==GL_PROGRAM_OBJECT_ARB)
136 {
137 retval = crStateGLSLProgramHWIDtoID(retval);
138 }
139 crServerReturnValue( &retval, sizeof(retval) );
140 return retval; /* WILL PROBABLY BE IGNORED */
141}
142
143GLint SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformLocation(GLuint program, const char * name)
144{
145 GLint retval;
146 retval = cr_server.head_spu->dispatch_table.GetUniformLocation(crStateGetProgramHWID(program), name);
147 crServerReturnValue( &retval, sizeof(retval) );
148 return retval; /* WILL PROBABLY BE IGNORED */
149}
150
151void SERVER_DISPATCH_APIENTRY crServerDispatchGetProgramiv( GLuint program, GLenum pname, GLint * params )
152{
153 GLint local_params[1] = {0};
154 (void) params;
155 cr_server.head_spu->dispatch_table.GetProgramiv(crStateGetProgramHWID(program), pname, local_params);
156 crServerReturnValue( &(local_params[0]), 1*sizeof(GLint) );
157}
158
159void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderiv( GLuint shader, GLenum pname, GLint * params )
160{
161 GLint local_params[1] = {0};
162 (void) params;
163 cr_server.head_spu->dispatch_table.GetShaderiv( crStateGetShaderHWID(shader), pname, local_params );
164 crServerReturnValue( &(local_params[0]), 1*sizeof(GLint) );
165}
166#endif /* #ifdef CR_OPENGL_VERSION_2_0 */
167
168/* XXXX Note: shared/separate Program ID numbers aren't totally implemented! */
169GLuint crServerTranslateProgramID( GLuint id )
170{
171 if (!cr_server.sharedPrograms && id) {
172 int client = cr_server.curClient->number;
173 return id + client * 100000;
174 }
175 return id;
176}
177
178
179void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteProgramsARB(GLsizei n, const GLuint * programs)
180{
181 GLuint *pLocalProgs;
182 GLint i;
183
184 if (n <= 0 || n >= INT32_MAX / sizeof(GLuint))
185 {
186 crError("crServerDispatchDeleteProgramsARB: parameter 'n' is out of range");
187 return;
188 }
189
190 pLocalProgs = (GLuint *)crAlloc(n * sizeof(GLuint));
191
192 if (!pLocalProgs) {
193 crError("crServerDispatchDeleteProgramsARB: out of memory");
194 return;
195 }
196 for (i = 0; i < n; i++) {
197 pLocalProgs[i] = crServerTranslateProgramID(programs[i]);
198 }
199 crStateDeleteProgramsARB(n, pLocalProgs);
200 cr_server.head_spu->dispatch_table.DeleteProgramsARB(n, pLocalProgs);
201 crFree(pLocalProgs);
202}
203
204
205/** @todo will fail for progs loaded from snapshot */
206GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsProgramARB( GLuint program )
207{
208 GLboolean retval;
209 program = crServerTranslateProgramID(program);
210 retval = cr_server.head_spu->dispatch_table.IsProgramARB( program );
211 crServerReturnValue( &retval, sizeof(retval) );
212 return retval; /* WILL PROBABLY BE IGNORED */
213}
214
215
216GLboolean SERVER_DISPATCH_APIENTRY
217crServerDispatchAreProgramsResidentNV(GLsizei n, const GLuint *programs,
218 GLboolean *residences)
219{
220 GLboolean retval = GL_FALSE;
221 GLboolean *res;
222 GLsizei i;
223 (void) residences;
224
225 if (n <= 0 || n >= INT32_MAX / sizeof(GLuint))
226 {
227 crError("crServerDispatchAreProgramsResidentNV: parameter 'n' is out of range");
228 return GL_FALSE;
229 }
230
231 res = (GLboolean *)crCalloc(n * sizeof(GLboolean));
232
233 if (!res) {
234 crError("crServerDispatchAreProgramsResidentNV: out of memory");
235 return GL_FALSE;
236 }
237
238 if (!cr_server.sharedTextureObjects) {
239 GLuint *programs2 = (GLuint *) crCalloc(n * sizeof(GLuint));
240 if (programs2)
241 {
242 for (i = 0; i < n; i++)
243 programs2[i] = crServerTranslateProgramID(programs[i]);
244
245 retval = cr_server.head_spu->dispatch_table.AreProgramsResidentNV(n, programs2, res);
246 crFree(programs2);
247 }
248 else
249 {
250 crError("crServerDispatchAreProgramsResidentNV: out of memory");
251 }
252 }
253 else {
254 retval = cr_server.head_spu->dispatch_table.AreProgramsResidentNV(n, programs, res);
255 }
256
257 crServerReturnValue(res, n * sizeof(GLboolean));
258 crFree(res);
259
260 return retval; /* WILL PROBABLY BE IGNORED */
261}
262
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

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