diff options
Diffstat (limited to 'src/glx/apple/gen_funcs.tcl')
-rw-r--r-- | src/glx/apple/gen_funcs.tcl | 630 |
1 files changed, 0 insertions, 630 deletions
diff --git a/src/glx/apple/gen_funcs.tcl b/src/glx/apple/gen_funcs.tcl deleted file mode 100644 index e78eb3278cf..00000000000 --- a/src/glx/apple/gen_funcs.tcl +++ /dev/null @@ -1,630 +0,0 @@ -package require Tcl 8.5 - -#input is specs/gl.spec - -set license { -/* - Copyright (c) 2008, 2009 Apple Inc. - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT - HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - Except as contained in this notice, the name(s) of the above - copyright holders shall not be used in advertising or otherwise to - promote the sale, use or other dealings in this Software without - prior written authorization. -*/ -} - - -proc extension name { - global extensions - - set extensions($name) 1 -} - -proc alias {from to} { - global aliases - - set aliases($from) $to -} - -proc promoted name { - global promoted - - set promoted($name) 1 -} - -proc noop name { - global noop - - set noop($name) 1 -} - -set dir [file dirname [info script]] - -source [file join $dir GL_extensions] -source [file join $dir GL_aliases] -source [file join $dir GL_promoted] -source [file join $dir GL_noop] - -proc is-extension-supported? name { - global extensions - - return [info exists extensions($name)] -} - -#This is going to need to be updated for OpenGL >= 2.1 in SnowLeopard. -# TextureComponentCount is GLenum in SL for everything -# It is GLint in mesa, but is GLenum for glTexImage3DEXT -array set typemap { - void void - List GLuint - Mode GLenum - CheckedFloat32 GLfloat - CheckedInt32 GLint - Float32 GLfloat - Int32 GLint - Int64 GLint64EXT - UInt64 GLuint64EXT - Float64 GLdouble - ListMode GLuint - SizeI GLsizei - ListNameType GLenum - Void void - BeginMode GLenum - CoordF GLfloat - UInt8 GLubyte - Boolean GLboolean - ColorIndexValueD GLdouble - ColorB GLbyte - ColorD GLdouble - ColorF GLfloat - ColorI GLint - ColorS GLshort - ColorUB GLubyte - ColorUI GLuint - ColorUS GLushort - ColorIndexValueF GLfloat - ColorIndexValueI GLint - ColorIndexValueS GLshort - Int8 GLbyte - CoordD GLdouble - Int16 GLshort - CoordI GLint - CoordS GLshort - ClipPlaneName GLenum - MaterialFace GLenum - ColorMaterialParameter GLenum - CullFaceMode GLenum - FogParameter GLenum - FrontFaceDirection GLenum - HintTarget GLenum - HintMode GLenum - LightName GLenum - LightParameter GLenum - LightModelParameter GLenum - LineStipple GLushort - MaterialParameter GLenum - PolygonMode GLenum - WinCoord GLint - ShadingModel GLenum - TextureTarget GLenum - TextureParameterName GLenum - TextureComponentCount GLint - PixelFormat GLenum - PixelType GLenum - TextureEnvTarget GLenum - TextureEnvParameter GLenum - TextureCoordName GLenum - TextureGenParameter GLenum - FeedbackType GLenum - FeedbackElement GLfloat - SelectName GLuint - RenderingMode GLenum - DrawBufferMode GLenum - ClearBufferMask GLbitfield - MaskedColorIndexValueF GLfloat - ClampedColorF GLclampf - StencilValue GLint - ClampedFloat64 GLclampd - MaskedStencilValue GLuint - MaskedColorIndexValueI GLuint - AccumOp GLenum - EnableCap GLenum - AttribMask GLbitfield - MapTarget GLenum - MeshMode1 GLenum - MeshMode2 GLenum - AlphaFunction GLenum - ClampedFloat32 GLclampf - BlendingFactorSrc GLenum - BlendingFactorDest GLenum - LogicOp GLenum - StencilFunction GLenum - ClampedStencilValue GLint - MaskedStencilValue GLuint - StencilOp GLenum - DepthFunction GLenum - PixelTransferParameter GLenum - PixelStoreParameter GLenum - PixelMap GLenum - UInt32 GLuint - UInt16 GLushort - ReadBufferMode GLenum - PixelCopyType GLenum - GetPName GLenum - ErrorCode GLenum - GetMapQuery GLenum - String "const GLubyte *" - StringName GLenum - GetTextureParameter GLenum - MatrixMode GLenum - ColorPointerType GLenum - DrawElementsType GLenum - GetPointervPName GLenum - VoidPointer "void *" - IndexPointerType GLenum - InterleavedArrayFormat GLenum - NormalPointerType GLenum - TexCoordPointerType GLenum - VertexPointerType GLenum - PixelInternalFormat GLenum - Texture GLuint - ColorIndexValueUB GLubyte - ClientAttribMask GLbitfield - BlendEquationMode GLenum - ColorTableTarget GLenum - ColorTableParameterPName GLenum - GetColorTableParameterPName GLenum - ConvolutionTarget GLenum - ConvolutionParameter GLenum - GetConvolutionParameterPName GLenum - SeparableTarget GLenum - HistogramTarget GLenum - GetHistogramParameterPName GLenum - MinmaxTarget GLenum - GetMinmaxParameterPName GLenum - TextureTarget GLenum - TextureUnit GLenum - CompressedTextureARB "void" - BlendFuncSeparateParameterEXT GLenum - FogPointerTypeEXT GLenum - PointParameterNameARB GLenum - GLenum GLenum - BufferTargetARB GLenum - ConstUInt32 "const GLuint" - BufferSize GLsizeiptr - ConstVoid "const GLvoid" - BufferUsageARB GLenum - BufferOffset GLintptr - BufferAccessARB GLenum - BufferPNameARB GLenum - BufferPointerNameARB GLenum - BlendEquationModeEXT GLenum - DrawBufferModeATI GLenum - StencilFaceDirection GLenum - Char GLchar - VertexAttribPropertyARB GLenum - VertexAttribPointerPropertyARB GLenum - CharPointer "GLchar *" - VertexAttribPointerTypeARB GLenum - ClampColorTargetARB unknown3.0 - ClampColorModeARB unknown3.0 - VertexAttribEnum GLenum - VertexAttribEnumNV GLenum - DrawBufferName unknown3.0 - WeightPointerTypeARB GLenum - ProgramTargetARB GLenum - ProgramFormatARB GLenum - ProgramStringPropertyARB GLenum - BufferSizeARB GLsizeiptrARB - BufferOffsetARB GLintptrARB - handleARB GLhandleARB - charPointerARB "GLcharARB *" - charARB GLcharARB - RenderbufferTarget GLenum - FramebufferTarget GLenum - FramebufferAttachment GLenum - BinormalPointerTypeEXT GLenum - HintTargetPGI GLenum - ProgramParameterPName GLenum - ProgramPropertyARB GLenum - ElementPointerTypeATI GLenum - FenceNV GLuint - FenceConditionNV GLenum - ObjectTypeAPPLE GLenum - VertexArrayPNameAPPLE GLenum - SeparableTargetEXT GLenum - ColorTableTargetSGI GLenum - ColorTableParameterPNameSGI GLenum - CombinerOutputNV GLenum - CombinerStageNV GLenum - CombinerPortionNV GLenum - CombinerRegisterNV GLenum - CombinerScaleNV GLenum - CombinerBiasNV GLenum - CombinerComponentUsageNV GLenum - CombinerMappingNV GLenum - CombinerParameterNV GLenum - CombinerVariableNV GLenum - ConvolutionParameterEXT GLenum - ConvolutionTargetEXT GLenum - CullParameterEXT GLenum - FenceParameterNameNV GLenum - FragmentLightModelParameterSGIX GLenum - FragmentLightNameSGIX GLenum - FragmentLightParameterSGIX GLenum - GetColorTableParameterPNameSGI GLenum - GetHistogramParameterPNameEXT GLenum - GetMinmaxParameterPNameEXT GLenum - HistogramTargetEXT GLenum - LightEnvParameterSGIX GLenum - MinmaxTargetEXT GLenum - PNTrianglesPNameATI GLenum - ProgramCharacterNV GLubyte - SamplePatternEXT GLenum - SamplePatternSGIS GLenum - TypeEnum GLenum -} - -proc psplit s { - set r [list] - set token "" - - foreach c [split $s ""] { - if {[string is space -strict $c]} { - if {[string length $token]} { - lappend r $token - } - set token "" - } else { - append token $c - } - } - - if {[string length $token]} { - lappend r $token - } - - return $r -} - -proc is-extension? str { - #Check if the trailing name of the function is NV, or EXT, and so on. - - if {[string is upper [string index $str end]] - && [string is upper [string index $str end-1]]} { - return 1 - } - - return 0 -} - - -proc parse {data arvar} { - upvar 1 $arvar ar - - set state "" - set name "" - - foreach line [split $data \n] { - if {"attr" eq $state} { - if {[string match "\t*" $line]} { - set plist [psplit [lindex [split $line "#"] 0]] - #puts PLIST:$plist - set master $ar($name) - set param [dict get $master parameters] - - switch -- [llength $plist] { - 1 { - dict set master [lindex $plist 0] "" - } - - 2 { - #standard key, value pair - set key [lindex $plist 0] - set value [lindex $plist 1] - - dict set master $key $value - } - - default { - set key [lindex $plist 0] - - #puts PLIST:$plist - - if {"param" eq $key} { - lappend param [list [lindex $plist 1] [lindex $plist 2] [lindex $plist 3] [lindex $plist 4]] - } else { - dict set master $key [lrange $plist 1 end] - } - } - } - - dict set master parameters $param - - set ar($name) $master - } else { - set state "" - } - } elseif {[regexp {^([A-Z_a-z0-9]+)\((.*)\)\S*} $line all name argv] > 0} { - #puts "MATCH:$name ARGV:$argv" - - #Trim the spaces in the elements. - set newargv [list] - foreach a [split $argv ,] { - lappend newargv [string trim $a] - } - - - set d [dict create name $name arguments $newargv \ - parameters [dict create]] - set ar($name) $d - set state attr - } - } -} - -#This returns true if the category is valid for an extension. -proc is-valid-category? c { - set clist [list display-list drawing drawing-control feedback framebuf misc modeling pixel-op pixel-rw state-req xform VERSION_1_0 VERSION_1_0_DEPRECATED VERSION_1_1 VERSION_1_1_DEPRECATED VERSION_1_2 VERSION_1_2_DEPRECATED VERSION_1_3 VERSION_1_3_DEPRECATED VERSION_1_4 VERSION_1_4_DEPRECATED VERSION_1_5 VERSION_2_0 VERSION_2_1 VERSION_3_0 VERSION_3_0_DEPRECATED VERSION_3_1 VERSION_3_2] - - set result [expr {$c in $clist}] - - - if {!$result} { - set result [is-extension-supported? $c] - } - - return $result -} - -proc translate-parameters {func parameters} { - global typemap - - set newparams [list] - - foreach p $parameters { - set var [lindex $p 0] - - set ptype [lindex $p 1] - - if {![info exists typemap($ptype)]} { - set ::missingTypes($ptype) $func - continue - } - - set type $typemap($ptype) - - if {"array" eq [lindex $p 3]} { - if {"in" eq [lindex $p 2]} { - set final_type "const $type *" - } else { - set final_type "$type *" - } - } else { - set final_type $type - } - - lappend newparams [list $final_type $var] - } - - return $newparams -} - -proc api-new-entry {info func} { - global typemap - - set master [dict create] - set rettype [dict get $info return] - - if {![info exists typemap($rettype)]} { - set ::missingTypes($rettype) $func - } else { - dict set master return $typemap($rettype) - } - - dict set master parameters [translate-parameters $func \ - [dict get $info parameters]] - - return $master -} - -proc main {argc argv} { - global extensions typemap aliases promoted noop - - set fd [open [lindex $argv 0] r] - set data [read $fd] - close $fd - - array set ar {} - - parse $data ar - - array set newapi {} - array set missingTypes {} - - foreach {key value} [array get ar] { - puts "KEY:$key VALUE:$value" - - set category [dict get $value category] - - #Invalidate any of the extensions and things not in the spec we support. - set valid [is-valid-category? $category] - puts VALID:$valid - - if {!$valid} { - continue - } - - puts "VALID:$key" - - if {"BlitFramebuffer" eq $key} { - #This was promoted to an ARB extension after Leopard it seems. - set key BlitFramebufferEXT - } - - if {"ARB_framebuffer_object" eq $category} { - #This wasn't an ARB extension in Leopard either. - if {![string match *EXT $key]} { - append key EXT - } - } - - set newapi($key) [api-new-entry $value $key] - } - - #Now iterate and support as many aliases as we can for promoted functions - #based on if the newapi contains the function. - foreach {func value} [array get ar] { - if {![info exists promoted([dict get $value category])]} { - continue - } - - if {[dict exists $value alias]} { - #We have an alias. Let's see if we have the implementation. - set alias [dict get $value alias] - - if {[info exists newapi($alias)] && ![info exists newapi($func)]} { - #We have an implementing function available. - puts "HAVE:$key ALIAS:$alias" - - set master [api-new-entry $value $func] - dict set master alias_for $alias - set newapi($func) $master - } - } - } - - parray noop - - #Now handle the no-op compatibility categories. - foreach {func value} [array get ar] { - if {[info exists noop([dict get $value category])]} { - if {[info exists newapi($func)]} { - puts stderr "$func shouldn't be a noop" - exit 1 - } - - set master [api-new-entry $value $func] - dict set master noop 1 - set newapi($func) $master - } - } - - - - parray newapi - - if {[array size ::missingTypes]} { - parray ::missingTypes - return 1 - } - - foreach {from to} [array get aliases] { - set d $newapi($to) - dict set d alias_for $to - set newapi($from) $d - } - - #Iterate the nm output and set each symbol in an associative array. - array set validapi {} - - foreach line [split [exec nm -j -g /System/Library/Frameworks/OpenGL.framework/Libraries/libGL.dylib] \n] { - set fn [string trim $line] - - #Only match the _gl functions. - if {[string match _gl* $fn]} { - set finalfn [string range $fn 3 end] - puts FINALFN:$finalfn - set validapi($finalfn) $finalfn - } - } - - puts "Correcting the API functions to match the OpenGL framework." - #parray validapi - - #Iterate the newapi and unset any members that the - #libGL.dylib doesn't support, assuming they aren't no-ops. - foreach fn [array names newapi] { - if {![info exists validapi($fn)]} { - puts "WARNING: libGL.dylib lacks support for: $fn" - - if {[dict exists $newapi($fn) noop] - && [dict get $newapi($fn) noop]} { - #This is no-op, so we should skip it. - continue - } - - #Is the function an alias for another in libGL? - if {[dict exists $newapi($fn) alias_for]} { - set alias [dict get $newapi($fn) alias_for] - - if {![info exists validapi($alias)]} { - puts "WARNING: alias function doesn't exist for $fn." - puts "The alias is $alias." - puts "unsetting $fn" - unset newapi($fn) - } - } else { - puts "unsetting $fn" - unset newapi($fn) - } - } - } - - - #Now print a warning about any symbols that libGL supports that we don't. - foreach fn [array names validapi] { - if {![info exists newapi($fn)]} { - puts "AppleSGLX is missing $fn" - } - } - - puts "NOW GENERATING:[lindex $::argv 1]" - set fd [open [lindex $::argv 1] w] - - set sorted [lsort -dictionary [array names newapi]] - - foreach f $sorted { - set attr $newapi($f) - set pstr "" - foreach p [dict get $attr parameters] { - append pstr "[lindex $p 0] [lindex $p 1], " - } - set pstr [string trimright $pstr ", "] - puts $fd "[dict get $attr return] gl[set f]($pstr); " - } - - close $fd - - if {$::argc == 3} { - puts "NOW GENERATING:[lindex $::argv 2]" - #Dump the array as a serialized list. - set fd [open [lindex $::argv 2] w] - puts $fd [array get newapi] - close $fd - } - - return 0 -} -exit [main $::argc $::argv] - |