e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync# See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncimport sys
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncimport apiutil
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncapiutil.CopyrightC()
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncprint """#include "cr_spu.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "chromium.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_error.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_mem.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_net.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "server_dispatch.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "server.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync"""
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfrom get_sizes import *;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfuncs = [ 'GetIntegerv', 'GetFloatv', 'GetDoublev', 'GetBooleanv' ]
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypes = [ 'GLint', 'GLfloat', 'GLdouble', 'GLboolean' ]
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfor index in range(len(funcs)):
205c82bc75eaec016e112946aae2d76565a06e21vboxsync func_name = funcs[index]
205c82bc75eaec016e112946aae2d76565a06e21vboxsync params = apiutil.Parameters(func_name)
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print 'void SERVER_DISPATCH_APIENTRY crServerDispatch%s( %s )' % ( func_name, apiutil.MakeDeclarationString(params))
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '{'
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '\t%s *get_values;' % types[index]
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '\tint tablesize;'
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print """
205c82bc75eaec016e112946aae2d76565a06e21vboxsync #ifdef CR_ARB_texture_compression
205c82bc75eaec016e112946aae2d76565a06e21vboxsync if (GL_COMPRESSED_TEXTURE_FORMATS_ARB == pname)
205c82bc75eaec016e112946aae2d76565a06e21vboxsync {
205c82bc75eaec016e112946aae2d76565a06e21vboxsync GLint numtexfmts = 0;
205c82bc75eaec016e112946aae2d76565a06e21vboxsync cr_server.head_spu->dispatch_table.GetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB, &numtexfmts);
205c82bc75eaec016e112946aae2d76565a06e21vboxsync tablesize = numtexfmts * sizeof(%s);
205c82bc75eaec016e112946aae2d76565a06e21vboxsync }
205c82bc75eaec016e112946aae2d76565a06e21vboxsync else
205c82bc75eaec016e112946aae2d76565a06e21vboxsync #endif
205c82bc75eaec016e112946aae2d76565a06e21vboxsync {
205c82bc75eaec016e112946aae2d76565a06e21vboxsync tablesize = __numValues( pname ) * sizeof(%s);
205c82bc75eaec016e112946aae2d76565a06e21vboxsync }
205c82bc75eaec016e112946aae2d76565a06e21vboxsync """ % (types[index], types[index])
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '\t(void) params;'
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '\tget_values = (%s *) crAlloc( tablesize );' % types[index]
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync print '\tif (tablesize>0)'
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '\tcr_server.head_spu->dispatch_table.%s( pname, get_values );' % func_name
4d10b27f3115f8fcd58864142163726d6214a752vboxsync print """
4d10b27f3115f8fcd58864142163726d6214a752vboxsync if (GL_TEXTURE_BINDING_1D==pname
4d10b27f3115f8fcd58864142163726d6214a752vboxsync || GL_TEXTURE_BINDING_2D==pname
4d10b27f3115f8fcd58864142163726d6214a752vboxsync || GL_TEXTURE_BINDING_3D==pname
4d10b27f3115f8fcd58864142163726d6214a752vboxsync || GL_TEXTURE_BINDING_RECTANGLE_ARB==pname
4d10b27f3115f8fcd58864142163726d6214a752vboxsync || GL_TEXTURE_BINDING_CUBE_MAP_ARB==pname)
4d10b27f3115f8fcd58864142163726d6214a752vboxsync {
4d10b27f3115f8fcd58864142163726d6214a752vboxsync GLuint texid;
4d10b27f3115f8fcd58864142163726d6214a752vboxsync CRASSERT(tablesize/sizeof(%s)==1);
4d10b27f3115f8fcd58864142163726d6214a752vboxsync texid = (GLuint) *get_values;
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync *get_values = (%s) crStateTextureHWIDtoID(texid);
4d10b27f3115f8fcd58864142163726d6214a752vboxsync }
6e7c344fc7cdb580356704e8201207b394d367bbvboxsync else if (GL_CURRENT_PROGRAM==pname)
6e7c344fc7cdb580356704e8201207b394d367bbvboxsync {
6e7c344fc7cdb580356704e8201207b394d367bbvboxsync GLuint programid;
6e7c344fc7cdb580356704e8201207b394d367bbvboxsync CRASSERT(tablesize/sizeof(%s)==1);
6e7c344fc7cdb580356704e8201207b394d367bbvboxsync programid = (GLuint) *get_values;
6e7c344fc7cdb580356704e8201207b394d367bbvboxsync *get_values = (%s) crStateGLSLProgramHWIDtoID(programid);
6e7c344fc7cdb580356704e8201207b394d367bbvboxsync }
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync else if (GL_FRAMEBUFFER_BINDING_EXT==pname
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync ||GL_READ_FRAMEBUFFER_BINDING==pname)
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync {
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync GLuint fboid;
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync CRASSERT(tablesize/sizeof(%s)==1);
ad0489bb65f0508e537f3468d171c4518cc91112vboxsync fboid = (GLuint) *get_values;
4a90abf7472a436c6951fd92417018a6890a69a7vboxsync if (crServerIsRedirectedToFBO()
a076b35761e36233a2a3ba16f77c77d7849170cavboxsync && (fboid==cr_server.curClient->currentMural->aidFBOs[0]
a076b35761e36233a2a3ba16f77c77d7849170cavboxsync || fboid==cr_server.curClient->currentMural->aidFBOs[1]))
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync {
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync fboid = 0;
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync }
ad0489bb65f0508e537f3468d171c4518cc91112vboxsync else
ad0489bb65f0508e537f3468d171c4518cc91112vboxsync {
ad0489bb65f0508e537f3468d171c4518cc91112vboxsync fboid = crStateFBOHWIDtoID(fboid);
ad0489bb65f0508e537f3468d171c4518cc91112vboxsync }
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync *get_values = (%s) fboid;
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync }
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync else if (GL_READ_BUFFER==pname)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync {
4a90abf7472a436c6951fd92417018a6890a69a7vboxsync if (crServerIsRedirectedToFBO()
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync && CR_SERVER_FBO_FOR_IDX(cr_server.curClient->currentMural, cr_server.curClient->currentMural->iCurReadBuffer)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync && !crStateGetCurrent()->framebufferobject.readFB)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync {
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync *get_values = (%s) crStateGetCurrent()->buffer.readBuffer;
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync Assert(crStateGetCurrent()->buffer.readBuffer == GL_BACK || crStateGetCurrent()->buffer.readBuffer == GL_FRONT);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync }
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync }
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync else if (GL_DRAW_BUFFER==pname)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync {
4a90abf7472a436c6951fd92417018a6890a69a7vboxsync if (crServerIsRedirectedToFBO()
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync && CR_SERVER_FBO_FOR_IDX(cr_server.curClient->currentMural, cr_server.curClient->currentMural->iCurDrawBuffer)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync && !crStateGetCurrent()->framebufferobject.drawFB)
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync {
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync *get_values = (%s) crStateGetCurrent()->buffer.drawBuffer;
3904a969d57a5bb3cc5136c75ec805b66f8660dcvboxsync Assert(crStateGetCurrent()->buffer.drawBuffer == GL_BACK || crStateGetCurrent()->buffer.drawBuffer == GL_FRONT);
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync }
1923b15bec4fe14f2049678525e5ae739a884dd0vboxsync }
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync else if (GL_RENDERBUFFER_BINDING_EXT==pname)
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync {
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync GLuint rbid;
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync CRASSERT(tablesize/sizeof(%s)==1);
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync rbid = (GLuint) *get_values;
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync *get_values = (%s) crStateRBOHWIDtoID(rbid);
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync }
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync else if (GL_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_VERTEX_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_NORMAL_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_COLOR_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_INDEX_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB==pname
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync || GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB==pname)
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync {
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync GLuint bufid;
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync CRASSERT(tablesize/sizeof(%s)==1);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync bufid = (GLuint) *get_values;
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync *get_values = (%s) crStateBufferHWIDtoID(bufid);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync }
080a4072bc16d97c4e9dbd5c476c69f8f02d16fdvboxsync else if (GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS==pname)
080a4072bc16d97c4e9dbd5c476c69f8f02d16fdvboxsync {
080a4072bc16d97c4e9dbd5c476c69f8f02d16fdvboxsync if (CR_MAX_TEXTURE_UNITS < (GLuint)*get_values)
080a4072bc16d97c4e9dbd5c476c69f8f02d16fdvboxsync {
080a4072bc16d97c4e9dbd5c476c69f8f02d16fdvboxsync *get_values = (%s)CR_MAX_TEXTURE_UNITS;
080a4072bc16d97c4e9dbd5c476c69f8f02d16fdvboxsync }
080a4072bc16d97c4e9dbd5c476c69f8f02d16fdvboxsync }
7a61d009952262efaa00c8539963964cec65b662vboxsync else if (GL_MAX_VERTEX_ATTRIBS_ARB==pname)
7a61d009952262efaa00c8539963964cec65b662vboxsync {
7a61d009952262efaa00c8539963964cec65b662vboxsync if (CR_MAX_VERTEX_ATTRIBS < (GLuint)*get_values)
7a61d009952262efaa00c8539963964cec65b662vboxsync {
7a61d009952262efaa00c8539963964cec65b662vboxsync *get_values = (%s)CR_MAX_VERTEX_ATTRIBS;
7a61d009952262efaa00c8539963964cec65b662vboxsync }
7a61d009952262efaa00c8539963964cec65b662vboxsync }
7a61d009952262efaa00c8539963964cec65b662vboxsync """ % (types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index], types[index])
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '\tcrServerReturnValue( get_values, tablesize );'
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '\tcrFree(get_values);'
205c82bc75eaec016e112946aae2d76565a06e21vboxsync print '}\n'