Changeset 18539 in vbox
- Timestamp:
- Mar 30, 2009 12:44:59 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/crOpenGL/entrypoints.py
r15532 r18539 17 17 18 18 def GenerateEntrypoints(hacks = []): 19 """Emit code for all the OpenGL/Chromium entrypoints.20 hacks is an optional list of functions which are special cased.21 """19 """Emit code for all the OpenGL/Chromium entrypoints. 20 hacks is an optional list of functions which are special cased. 21 """ 22 22 23 apiutil.CopyrightC()23 apiutil.CopyrightC() 24 24 25 print '#define GL_GLEXT_PROTOTYPES' 26 print '#include <stdio.h>' 27 print '#include <stdlib.h>' 28 print '#include <GL/gl.h>' 29 print '#include "chromium.h"' 30 print '#include "stub.h"' 31 print '' 25 print '#define GL_GLEXT_PROTOTYPES' 26 print '#include <stdio.h>' 27 print '#include <stdlib.h>' 28 print '#include <GL/gl.h>' 29 print '#include "chromium.h"' 30 print '#include "stub.h"' 31 print '#include "dri_glx.h"' 32 print '' 32 33 33 # Get sorted list of dispatched functions.34 # The order is very important - it must match cr_opcodes.h35 # and spu_dispatch_table.h36 keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")34 # Get sorted list of dispatched functions. 35 # The order is very important - it must match cr_opcodes.h 36 # and spu_dispatch_table.h 37 keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt") 37 38 38 for index in range(len(keys)):39 func_name = keys[index]40 if apiutil.Category(func_name) == "Chromium":41 # this function is defined in stub.c42 continue39 for index in range(len(keys)): 40 func_name = keys[index] 41 if apiutil.Category(func_name) == "Chromium": 42 # this function is defined in stub.c 43 continue 43 44 44 return_type = apiutil.ReturnType(func_name)45 params = apiutil.Parameters(func_name)45 return_type = apiutil.ReturnType(func_name) 46 params = apiutil.Parameters(func_name) 46 47 47 if func_name in hacks:48 print "/* hacked entrypoint: %s */" % func_name49 if func_name == "TexImage3D":50 # Pretty common: internalformat is GLenum, not GLint51 print "void glTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"52 print "{"53 print "\tglim.TexImage3D( target, level, (GLint) internalformat, width, height, depth, border, format, type, pixels );"54 print "}"55 elif func_name == "TexImage2D":56 # Pretty common: internalformat is GLenum, not GLint57 print "void glTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"58 print "{"59 print "\tglim.TexImage2D( target, level, (GLint) internalformat, width, height, border, format, type, pixels );"60 print "}"61 elif func_name == "TexImage1D":62 # Pretty common: internalformat is GLenum, not GLint63 print "void glTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels )"64 print "{"65 print "\tglim.TexImage1D( target, level, (GLint) internalformat, width, border, format, type, pixels );"66 print "}"67 elif func_name == "EdgeFlagPointer":68 # second arg is GLboolean instead of GLvoid69 print "void glEdgeFlagPointer( GLsizei stride, const GLboolean *pointer )"70 print "{"71 print "\tglim.EdgeFlagPointer( stride, pointer );"72 print "}"73 elif func_name == "ProgramParameters4fvNV":74 print "void glProgramParameters4fvNV( GLenum target, GLuint index, GLuint num, const GLfloat *params )"75 print "{"76 print "\tglim.ProgramParameters4fvNV( target, index, num, params );"77 print "}"78 elif func_name == "MultiDrawElementsEXT":79 print "void glMultiDrawElementsEXT(GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)"80 print "{"81 print "\tglim.MultiDrawElementsEXT(mode, count,type, indices, primcount);"82 print "}"83 elif func_name == "ProgramParameters4dvNV":84 print "void glProgramParameters4dvNV( GLenum target, GLuint index, GLuint num, const GLdouble *params )"85 print "{"86 print "\tglim.ProgramParameters4dvNV( target, index, num, params );"87 print "}"88 else:89 # the usual path90 print "%s gl%s( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))91 print ""92 print "%s gl%s( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))93 print "{"94 print "\t",95 if return_type != "void":96 print "return ",97 print "glim.%s( %s );" % (func_name, apiutil.MakeCallString(params))98 print "}"99 print ""48 if func_name in hacks: 49 print "/* hacked entrypoint: %s */" % func_name 50 if func_name == "TexImage3D": 51 # Pretty common: internalformat is GLenum, not GLint 52 print "void glTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels )" 53 print "{" 54 print "\tglim.TexImage3D( target, level, (GLint) internalformat, width, height, depth, border, format, type, pixels );" 55 print "}" 56 elif func_name == "TexImage2D": 57 # Pretty common: internalformat is GLenum, not GLint 58 print "void glTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )" 59 print "{" 60 print "\tglim.TexImage2D( target, level, (GLint) internalformat, width, height, border, format, type, pixels );" 61 print "}" 62 elif func_name == "TexImage1D": 63 # Pretty common: internalformat is GLenum, not GLint 64 print "void glTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels )" 65 print "{" 66 print "\tglim.TexImage1D( target, level, (GLint) internalformat, width, border, format, type, pixels );" 67 print "}" 68 elif func_name == "EdgeFlagPointer": 69 # second arg is GLboolean instead of GLvoid 70 print "void glEdgeFlagPointer( GLsizei stride, const GLboolean *pointer )" 71 print "{" 72 print "\tglim.EdgeFlagPointer( stride, pointer );" 73 print "}" 74 elif func_name == "ProgramParameters4fvNV": 75 print "void glProgramParameters4fvNV( GLenum target, GLuint index, GLuint num, const GLfloat *params )" 76 print "{" 77 print "\tglim.ProgramParameters4fvNV( target, index, num, params );" 78 print "}" 79 elif func_name == "MultiDrawElementsEXT": 80 print "void glMultiDrawElementsEXT(GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)" 81 print "{" 82 print "\tglim.MultiDrawElementsEXT(mode, count,type, indices, primcount);" 83 print "}" 84 elif func_name == "ProgramParameters4dvNV": 85 print "void glProgramParameters4dvNV( GLenum target, GLuint index, GLuint num, const GLdouble *params )" 86 print "{" 87 print "\tglim.ProgramParameters4dvNV( target, index, num, params );" 88 print "}" 89 else: 90 # the usual path 91 print "%s VBOXGLTAG(gl%s)( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params)) 92 print "" 93 print "%s VBOXGLTAG(gl%s)( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params)) 94 print "{" 95 print "\t", 96 if return_type != "void": 97 print "return ", 98 print "glim.%s( %s );" % (func_name, apiutil.MakeCallString(params)) 99 print "}" 100 print "" 100 101 101 print '/*'102 print '* Aliases'103 print '*/'102 print '/*' 103 print '* Aliases' 104 print '*/' 104 105 105 # Now loop over all the functions and take care of any aliases106 allkeys = apiutil.GetAllFunctions(sys.argv[1]+"/APIspec.txt")107 for func_name in allkeys:108 if "omit" in apiutil.ChromiumProps(func_name):109 continue106 # Now loop over all the functions and take care of any aliases 107 allkeys = apiutil.GetAllFunctions(sys.argv[1]+"/APIspec.txt") 108 for func_name in allkeys: 109 if "omit" in apiutil.ChromiumProps(func_name): 110 continue 110 111 111 if func_name in keys:112 # we already processed this function earlier113 continue112 if func_name in keys: 113 # we already processed this function earlier 114 continue 114 115 115 # alias is the function we're aliasing116 alias = apiutil.Alias(func_name)117 if alias:118 if func_name in hacks:119 print "/* hacked entrypoint: %s */" % func_name120 if func_name == "MultiDrawArrays":121 print "void glMultiDrawArrays( GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount )"122 print "{"123 print "\tglim.MultiDrawArraysEXT( mode, (GLint*)first, (GLsizei*)count, primcount );"124 print "}"125 elif func_name == "BufferData":126 print "void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)"127 print "{"128 print "\tglim.BufferDataARB(target, size, data, usage);"129 print "}"130 elif func_name == "BufferSubData":131 print "void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)"132 print "{"133 print "\tglim.BufferSubDataARB(target, offset, size, data);"134 print "}"135 elif func_name == "GetBufferSubData":136 print "void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)"137 print "{"138 print "\tglim.GetBufferSubDataARB(target, offset, size, data);"139 print "}"140 else:141 return_type = apiutil.ReturnType(func_name)142 params = apiutil.Parameters(func_name)143 print "%s gl%s( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))144 print ""145 print "%s gl%s( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))146 print "{"147 print "\t",148 if return_type != "void":149 print "return ",150 print "glim.%s( %s );" % (alias, apiutil.MakeCallString(params))151 print "}"152 print ""116 # alias is the function we're aliasing 117 alias = apiutil.Alias(func_name) 118 if alias: 119 if func_name in hacks: 120 print "/* hacked entrypoint: %s */" % func_name 121 if func_name == "MultiDrawArrays": 122 print "void glMultiDrawArrays( GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount )" 123 print "{" 124 print "\tglim.MultiDrawArraysEXT( mode, (GLint*)first, (GLsizei*)count, primcount );" 125 print "}" 126 elif func_name == "BufferData": 127 print "void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)" 128 print "{" 129 print "\tglim.BufferDataARB(target, size, data, usage);" 130 print "}" 131 elif func_name == "BufferSubData": 132 print "void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)" 133 print "{" 134 print "\tglim.BufferSubDataARB(target, offset, size, data);" 135 print "}" 136 elif func_name == "GetBufferSubData": 137 print "void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)" 138 print "{" 139 print "\tglim.GetBufferSubDataARB(target, offset, size, data);" 140 print "}" 141 else: 142 return_type = apiutil.ReturnType(func_name) 143 params = apiutil.Parameters(func_name) 144 print "%s VBOXGLTAG(gl%s)( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params)) 145 print "" 146 print "%s VBOXGLTAG(gl%s)( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params)) 147 print "{" 148 print "\t", 149 if return_type != "void": 150 print "return ", 151 print "glim.%s( %s );" % (alias, apiutil.MakeCallString(params)) 152 print "}" 153 print "" 153 154 154 print '/*'155 print '* No-op stubs'156 print '*/'155 print '/*' 156 print '* No-op stubs' 157 print '*/' 157 158 158 # Now generate no-op stub functions159 for func_name in allkeys:160 if "stub" in apiutil.ChromiumProps(func_name):161 return_type = apiutil.ReturnType(func_name)162 params = apiutil.Parameters(func_name)159 # Now generate no-op stub functions 160 for func_name in allkeys: 161 if "stub" in apiutil.ChromiumProps(func_name): 162 return_type = apiutil.ReturnType(func_name) 163 params = apiutil.Parameters(func_name) 163 164 164 print "%s gl%s( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params))165 print ""166 print "%s gl%s( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params))167 print "{"168 if return_type != "void":169 print "return (%s) 0" % return_type170 print "}"171 print ""165 print "%s VBOXGLTAG(gl%s)( %s );" % (return_type, func_name, apiutil.MakeDeclarationString(params)) 166 print "" 167 print "%s VBOXGLTAG(gl%s)( %s )" % (return_type, func_name, apiutil.MakeDeclarationString(params)) 168 print "{" 169 if return_type != "void": 170 print "return (%s) 0" % return_type 171 print "}" 172 print "" 172 173 173 174
Note:
See TracChangeset
for help on using the changeset viewer.

