Files
third_party_mesa3d/progs/tests/getprocaddress.py
Robert Ellison 99d5139078 mesa: improve getprocaddress test
- Allow the getprocaddress test to test extensions not supported by
  Mesa.  The original getprocaddress.py script only included OpenGL
  extension functions that were in Mesa dispatch tables.  Now all
  known extension functions (as detailed in gl_API.xml) are included.
  As the test does not link against any extension function symbols
  (i.e. it uses glXGetProcAddress() for all extension functions),
  it still compiles and links against Mesa; but now the same
  binary can be used to test extensions not yet supported by Mesa.

- Extend the list of tested extension functions.  The last revision
  of this test exercised 16 extension functions; this revision adds
  support for 95 more.
2009-08-07 12:06:17 -06:00

93 lines
1.9 KiB
Python

#!/usr/bin/env python
# Helper for the getprocaddress.c test.
import sys, getopt, re
sys.path.append("../../src/mesa/glapi/" )
import gl_XML
import license
def FindTestFunctions():
"""Scan getprocaddress.c for lines that start with "test_" to find
extension function tests. Return a list of names found."""
functions = []
f = open("getprocaddress.c")
if not f:
return functions
for line in f.readlines():
v = re.search("^test_([a-zA-Z0-9]+)", line)
if v:
func = v.group(1)
functions.append(func)
f.close
return functions
class PrintExports(gl_XML.gl_print_base):
def __init__(self):
gl_XML.gl_print_base.__init__(self)
self.name = "getprocaddress.py (from Mesa)"
self.license = license.bsd_license_template % ( \
"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
self.tests = FindTestFunctions()
self.prevCategory = ""
return
def printRealHeader(self):
print """
struct name_test_pair {
const char *name;
GLboolean (*test)(generic_func);
};
static struct name_test_pair functions[] = {"""
def printBody(self, api):
prev_category = None
for f in api.functionIterateByCategory():
[category, num] = api.get_category_for_name( f.name )
if category != prev_category:
print ' { "-%s", NULL},' % category
prev_category = category
test = "NULL"
for name in f.entry_points:
if name in self.tests:
test = "test_%s" % name
break
print ' { "gl%s", %s },' % (f.name, test)
print ''
print ' { NULL, NULL }'
print '};'
print ''
return
if __name__ == '__main__':
file_name = "../../src/mesa/glapi/gl_API.xml"
try:
(args, trail) = getopt.getopt(sys.argv[1:], "f:")
except Exception,e:
show_usage()
for (arg,val) in args:
if arg == "-f":
file_name = val
printer = PrintExports()
api = gl_XML.parse_GL_API( file_name, gl_XML.gl_item_factory() )
printer.Print( api )