On 03/31/2016 05:04 PM, Dylan Baker wrote: > This allows large blocks of C code that is going to be printed to be > nested nicely in the python functions that print them, but still be > printed at the same level they were previously. This helps to make the > code visually more readable, and fixes syntax folding in vim. > > Signed-off-by: Dylan Baker <[email protected]> > --- > src/mapi/glapi/gen/apiexec.py | 2 + > src/mapi/glapi/gen/glX_proto_send.py | 478 > ++++++++++++++++++----------------- > src/mapi/glapi/gen/glX_proto_size.py | 18 +- > src/mapi/glapi/gen/gl_SPARC_asm.py | 7 +- > src/mapi/glapi/gen/gl_XML.py | 49 ++-- > src/mapi/glapi/gen/gl_apitemp.py | 146 +++++------ > src/mapi/glapi/gen/gl_enums.py | 160 ++++++------ > src/mapi/glapi/gen/gl_gentable.py | 9 +- > src/mapi/glapi/gen/gl_procs.py | 54 ++-- > src/mapi/glapi/gen/gl_table.py | 31 ++- > src/mapi/glapi/gen/gl_x86_asm.py | 7 +- > 11 files changed, 502 insertions(+), 459 deletions(-) > > diff --git a/src/mapi/glapi/gen/apiexec.py b/src/mapi/glapi/gen/apiexec.py > index 670dc4a..66e8579 100644 > --- a/src/mapi/glapi/gen/apiexec.py > +++ b/src/mapi/glapi/gen/apiexec.py > @@ -20,6 +20,7 @@ > # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > DEALINGS > # IN THE SOFTWARE. > > + > class exec_info(): > """Information relating GL APIs to a function. > > @@ -66,6 +67,7 @@ class exec_info(): > self.es1 = es1 > self.es2 = es2 > > + > functions = { > # OpenGL 3.1 / GL_ARB_texture_buffer_object. Mesa only exposes this > # extension with core profile.
Both the preceding hunks are spurious. With this removed, this patch is Reviewed-by: Ian Romanick <[email protected]> Future patches could: - rework the license.bsd_license_template stuff to use the standard "authors and/or copyright holders" language. - remove the \\authors lines from the generated files. > diff --git a/src/mapi/glapi/gen/glX_proto_send.py > b/src/mapi/glapi/gen/glX_proto_send.py > index aeb64b5..9142166 100644 > --- a/src/mapi/glapi/gen/glX_proto_send.py > +++ b/src/mapi/glapi/gen/glX_proto_send.py > @@ -31,6 +31,7 @@ > import argparse > import copy > import string > +import textwrap > > import gl_XML > import glX_XML > @@ -199,119 +200,120 @@ class > PrintGlxProtoStubs(glX_proto_common.glx_print_proto): > print ' temp.s[0] = (size); temp.s[1] = (op); \\' > print ' *((int *)(dest)) = temp.i; } while(0)' > print '' > - print """NOINLINE CARD32 > -__glXReadReply( Display *dpy, size_t size, void * dest, GLboolean > reply_is_always_array ) > -{ > - xGLXSingleReply reply; > - > - (void) _XReply(dpy, (xReply *) & reply, 0, False); > - if (size != 0) { > - if ((reply.length > 0) || reply_is_always_array) { > - const GLint bytes = (reply_is_always_array) > - ? (4 * reply.length) : (reply.size * size); > - const GLint extra = 4 - (bytes & 3); > - > - _XRead(dpy, dest, bytes); > - if ( extra < 4 ) { > - _XEatData(dpy, extra); > + print textwrap.dedent("""\ > + NOINLINE CARD32 > + __glXReadReply( Display *dpy, size_t size, void * dest, > GLboolean reply_is_always_array ) > + { > + xGLXSingleReply reply; > + > + (void) _XReply(dpy, (xReply *) & reply, 0, False); > + if (size != 0) { > + if ((reply.length > 0) || reply_is_always_array) { > + const GLint bytes = (reply_is_always_array) > + ? (4 * reply.length) : (reply.size * size); > + const GLint extra = 4 - (bytes & 3); > + > + _XRead(dpy, dest, bytes); > + if ( extra < 4 ) { > + _XEatData(dpy, extra); > + } > + } > + else { > + (void) memcpy( dest, &(reply.pad3), size); > + } > + } > + > + return reply.retval; > } > - } > - else { > - (void) memcpy( dest, &(reply.pad3), size); > - } > - } > - > - return reply.retval; > -} > - > -NOINLINE void > -__glXReadPixelReply( Display *dpy, struct glx_context * gc, unsigned max_dim, > - GLint width, GLint height, GLint depth, GLenum format, GLenum type, > - void * dest, GLboolean dimensions_in_reply ) > -{ > - xGLXSingleReply reply; > - GLint size; > - > - (void) _XReply(dpy, (xReply *) & reply, 0, False); > - > - if ( dimensions_in_reply ) { > - width = reply.pad3; > - height = reply.pad4; > - depth = reply.pad5; > - > - if ((height == 0) || (max_dim < 2)) { height = 1; } > - if ((depth == 0) || (max_dim < 3)) { depth = 1; } > - } > - > - size = reply.length * 4; > - if (size != 0) { > - void * buf = malloc( size ); > - > - if ( buf == NULL ) { > - _XEatData(dpy, size); > - __glXSetError(gc, GL_OUT_OF_MEMORY); > - } > - else { > - const GLint extra = 4 - (size & 3); > - > - _XRead(dpy, buf, size); > - if ( extra < 4 ) { > - _XEatData(dpy, extra); > + > + NOINLINE void > + __glXReadPixelReply( Display *dpy, struct glx_context * gc, > unsigned max_dim, > + GLint width, GLint height, GLint depth, GLenum format, > GLenum type, > + void * dest, GLboolean dimensions_in_reply ) > + { > + xGLXSingleReply reply; > + GLint size; > + > + (void) _XReply(dpy, (xReply *) & reply, 0, False); > + > + if ( dimensions_in_reply ) { > + width = reply.pad3; > + height = reply.pad4; > + depth = reply.pad5; > + > + if ((height == 0) || (max_dim < 2)) { height = 1; } > + if ((depth == 0) || (max_dim < 3)) { depth = 1; } > + } > + > + size = reply.length * 4; > + if (size != 0) { > + void * buf = malloc( size ); > + > + if ( buf == NULL ) { > + _XEatData(dpy, size); > + __glXSetError(gc, GL_OUT_OF_MEMORY); > + } > + else { > + const GLint extra = 4 - (size & 3); > + > + _XRead(dpy, buf, size); > + if ( extra < 4 ) { > + _XEatData(dpy, extra); > + } > + > + __glEmptyImage(gc, 3, width, height, depth, format, > type, > + buf, dest); > + free(buf); > + } > + } > + } > + > + #define X_GLXSingle 0 > + > + NOINLINE FASTCALL GLubyte * > + __glXSetupSingleRequest( struct glx_context * gc, GLint sop, > GLint cmdlen ) > + { > + xGLXSingleReq * req; > + Display * const dpy = gc->currentDpy; > + > + (void) __glXFlushRenderBuffer(gc, gc->pc); > + LockDisplay(dpy); > + GetReqExtra(GLXSingle, cmdlen, req); > + req->reqType = gc->majorOpcode; > + req->contextTag = gc->currentContextTag; > + req->glxCode = sop; > + return (GLubyte *)(req) + sz_xGLXSingleReq; > + } > + > + NOINLINE FASTCALL GLubyte * > + __glXSetupVendorRequest( struct glx_context * gc, GLint code, > GLint vop, GLint cmdlen ) > + { > + xGLXVendorPrivateReq * req; > + Display * const dpy = gc->currentDpy; > + > + (void) __glXFlushRenderBuffer(gc, gc->pc); > + LockDisplay(dpy); > + GetReqExtra(GLXVendorPrivate, cmdlen, req); > + req->reqType = gc->majorOpcode; > + req->glxCode = code; > + req->vendorCode = vop; > + req->contextTag = gc->currentContextTag; > + return (GLubyte *)(req) + sz_xGLXVendorPrivateReq; > } > > - __glEmptyImage(gc, 3, width, height, depth, format, type, > - buf, dest); > - free(buf); > - } > - } > -} > - > -#define X_GLXSingle 0 > - > -NOINLINE FASTCALL GLubyte * > -__glXSetupSingleRequest( struct glx_context * gc, GLint sop, GLint cmdlen ) > -{ > - xGLXSingleReq * req; > - Display * const dpy = gc->currentDpy; > - > - (void) __glXFlushRenderBuffer(gc, gc->pc); > - LockDisplay(dpy); > - GetReqExtra(GLXSingle, cmdlen, req); > - req->reqType = gc->majorOpcode; > - req->contextTag = gc->currentContextTag; > - req->glxCode = sop; > - return (GLubyte *)(req) + sz_xGLXSingleReq; > -} > - > -NOINLINE FASTCALL GLubyte * > -__glXSetupVendorRequest( struct glx_context * gc, GLint code, GLint vop, > GLint cmdlen ) > -{ > - xGLXVendorPrivateReq * req; > - Display * const dpy = gc->currentDpy; > - > - (void) __glXFlushRenderBuffer(gc, gc->pc); > - LockDisplay(dpy); > - GetReqExtra(GLXVendorPrivate, cmdlen, req); > - req->reqType = gc->majorOpcode; > - req->glxCode = code; > - req->vendorCode = vop; > - req->contextTag = gc->currentContextTag; > - return (GLubyte *)(req) + sz_xGLXVendorPrivateReq; > -} > - > -const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; > - > -#define zero (__glXDefaultPixelStore+0) > -#define one (__glXDefaultPixelStore+8) > -#define default_pixel_store_1D (__glXDefaultPixelStore+4) > -#define default_pixel_store_1D_size 20 > -#define default_pixel_store_2D (__glXDefaultPixelStore+4) > -#define default_pixel_store_2D_size 20 > -#define default_pixel_store_3D (__glXDefaultPixelStore+0) > -#define default_pixel_store_3D_size 36 > -#define default_pixel_store_4D (__glXDefaultPixelStore+0) > -#define default_pixel_store_4D_size 36 > -""" > + const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, > 0, 1 }; > + > + #define zero (__glXDefaultPixelStore+0) > + #define one (__glXDefaultPixelStore+8) > + #define default_pixel_store_1D (__glXDefaultPixelStore+4) > + #define default_pixel_store_1D_size 20 > + #define default_pixel_store_2D (__glXDefaultPixelStore+4) > + #define default_pixel_store_2D_size 20 > + #define default_pixel_store_3D (__glXDefaultPixelStore+0) > + #define default_pixel_store_3D_size 36 > + #define default_pixel_store_4D (__glXDefaultPixelStore+0) > + #define default_pixel_store_4D_size 36 > + """) > > for size in self.generic_sizes: > self.print_generic_function(size) > @@ -366,45 +368,47 @@ const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, > 0, 0, 0, 0, 1 }; > if func.has_different_protocol(n): > procs[n] = func.static_glx_name(n) > > - print """ > -#ifdef GLX_SHARED_GLAPI > + print textwrap.dedent("""\ > + #ifdef GLX_SHARED_GLAPI > > -static const struct proc_pair > -{ > - const char *name; > - _glapi_proc proc; > -} proc_pairs[%d] = {""" % len(procs) > + static const struct proc_pair > + { > + const char *name; > + _glapi_proc proc; > + } proc_pairs[%d] = { > + """ % len(procs)) > names = procs.keys() > names.sort() > for i in xrange(len(names)): > comma = ',' if i < len(names) - 1 else '' > print ' { "%s", (_glapi_proc) gl%s }%s' % (names[i], > procs[names[i]], comma) > - print """}; > - > -static int > -__indirect_get_proc_compare(const void *key, const void *memb) > -{ > - const struct proc_pair *pair = (const struct proc_pair *) memb; > - return strcmp((const char *) key, pair->name); > -} > - > -_glapi_proc > -__indirect_get_proc_address(const char *name) > -{ > - const struct proc_pair *pair; > - > - /* skip "gl" */ > - name += 2; > - > - pair = (const struct proc_pair *) bsearch((const void *) name, > - (const void *) proc_pairs, ARRAY_SIZE(proc_pairs), > sizeof(proc_pairs[0]), > - __indirect_get_proc_compare); > - > - return (pair) ? pair->proc : NULL; > -} > - > -#endif /* GLX_SHARED_GLAPI */ > -""" > + print textwrap.dedent("""\ > + }; > + > + static int > + __indirect_get_proc_compare(const void *key, const void *memb) > + { > + const struct proc_pair *pair = (const struct proc_pair *) > memb; > + return strcmp((const char *) key, pair->name); > + } > + > + _glapi_proc > + __indirect_get_proc_address(const char *name) > + { > + const struct proc_pair *pair; > + > + /* skip "gl" */ > + name += 2; > + > + pair = (const struct proc_pair *) bsearch((const void *) name, > + (const void *) proc_pairs, ARRAY_SIZE(proc_pairs), > sizeof(proc_pairs[0]), > + __indirect_get_proc_compare); > + > + return (pair) ? pair->proc : NULL; > + } > + > + #endif /* GLX_SHARED_GLAPI */ > + """) > return > > > @@ -462,18 +466,19 @@ __indirect_get_proc_address(const char *name) > > def print_generic_function(self, n): > size = (n + 3) & ~3 > - print """static FASTCALL NOINLINE void > -generic_%u_byte( GLint rop, const void * ptr ) > -{ > - struct glx_context * const gc = __glXGetCurrentContext(); > - const GLuint cmdlen = %u; > - > - emit_header(gc->pc, rop, cmdlen); > - (void) memcpy((void *)(gc->pc + 4), ptr, %u); > - gc->pc += cmdlen; > - if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) > __glXFlushRenderBuffer(gc, gc->pc); } > -} > -""" % (n, size + 4, size) > + print textwrap.dedent("""\ > + static FASTCALL NOINLINE void > + generic_%u_byte( GLint rop, const void * ptr ) > + { > + struct glx_context * const gc = __glXGetCurrentContext(); > + const GLuint cmdlen = %u; > + > + emit_header(gc->pc, rop, cmdlen); > + (void) memcpy((void *)(gc->pc + 4), ptr, %u); > + gc->pc += cmdlen; > + if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) > __glXFlushRenderBuffer(gc, gc->pc); } > + } > + """ % (n, size + 4, size)) > return > > > @@ -936,67 +941,71 @@ class PrintGlxProtoInit_c(gl_XML.gl_print_base): > > self.name = "glX_proto_send.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. > -(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM") > + textwrap.dedent("""\ > + Copyright 1998-1999 Precision Insight, Inc., Cedar Park, > Texas. > + (C) Copyright IBM Corporation 2004"""), > + "PRECISION INSIGHT, IBM") > return > > > def printRealHeader(self): > - print """/** > - * \\file indirect_init.c > - * Initialize indirect rendering dispatch table. > - * > - * \\author Kevin E. Martin <[email protected]> > - * \\author Brian Paul <[email protected]> > - * \\author Ian Romanick <[email protected]> > - */ > - > -#include "indirect_init.h" > -#include "indirect.h" > -#include "glapi.h" > -#include <assert.h> > - > -#ifndef GLX_USE_APPLEGL > - > -/** > - * No-op function used to initialize functions that have no GLX protocol > - * support. > - */ > -static int NoOp(void) > -{ > - return 0; > -} > - > -/** > - * Create and initialize a new GL dispatch table. The table is initialized > - * with GLX indirect rendering protocol functions. > - */ > -struct _glapi_table * __glXNewIndirectAPI( void ) > -{ > - _glapi_proc *table; > - unsigned entries; > - unsigned i; > - int o; > - > - entries = _glapi_get_dispatch_table_size(); > - table = malloc(entries * sizeof(_glapi_proc)); > - if (table == NULL) > - return NULL; > - > - /* first, set all entries to point to no-op functions */ > - for (i = 0; i < entries; i++) { > - table[i] = (_glapi_proc) NoOp; > - } > - > - /* now, initialize the entries we understand */""" > + print textwrap.dedent("""\ > + /** > + * \\file indirect_init.c > + * Initialize indirect rendering dispatch table. > + * > + * \\author Kevin E. Martin <[email protected]> > + * \\author Brian Paul <[email protected]> > + * \\author Ian Romanick <[email protected]> > + */ > + > + #include "indirect_init.h" > + #include "indirect.h" > + #include "glapi.h" > + #include <assert.h> > + > + #ifndef GLX_USE_APPLEGL > + > + /** > + * No-op function used to initialize functions that have no GLX > protocol > + * support. > + */ > + static int NoOp(void) > + { > + return 0; > + } > + > + /** > + * Create and initialize a new GL dispatch table. The table is > initialized > + * with GLX indirect rendering protocol functions. > + */ > + struct _glapi_table * __glXNewIndirectAPI( void ) > + { > + _glapi_proc *table; > + unsigned entries; > + unsigned i; > + int o; > + > + entries = _glapi_get_dispatch_table_size(); > + table = malloc(entries * sizeof(_glapi_proc)); > + if (table == NULL) > + return NULL; > + > + /* first, set all entries to point to no-op functions */ > + for (i = 0; i < entries; i++) { > + table[i] = (_glapi_proc) NoOp; > + } > + > + /* now, initialize the entries we understand */ > + """) > > def printRealFooter(self): > - print """ > - return (struct _glapi_table *) table; > -} > + print textwrap.dedent("""\ > + return (struct _glapi_table *) table; > + } > > -#endif > -""" > + #endif > + """) > return > > > @@ -1029,8 +1038,10 @@ class PrintGlxProtoInit_h(gl_XML.gl_print_base): > > self.name = "glX_proto_send.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. > -(C) Copyright IBM Corporation 2004""", "PRECISION INSIGHT, IBM") > + textwrap.dedent("""\ > + Copyright 1998-1999 Precision Insight, Inc., Cedar Park, > Texas. > + (C) Copyright IBM Corporation 2004"""), > + "PRECISION INSIGHT, IBM") > self.header_tag = "_INDIRECT_H_" > > self.last_category = "" > @@ -1038,35 +1049,36 @@ class PrintGlxProtoInit_h(gl_XML.gl_print_base): > > > def printRealHeader(self): > - print """/** > - * \\file > - * Prototypes for indirect rendering functions. > - * > - * \\author Kevin E. Martin <[email protected]> > - * \\author Ian Romanick <[email protected]> > - */ > -""" > + print textwrap.dedent("""\ > + /** > + * \\file > + * Prototypes for indirect rendering functions. > + * > + * \\author Kevin E. Martin <[email protected]> > + * \\author Ian Romanick <[email protected]> > + */ > + """) > self.printFastcall() > self.printNoinline() > > - print """ > -#include <X11/Xfuncproto.h> > -#include "glxclient.h" > + print textwrap.dedent("""\ > + #include <X11/Xfuncproto.h> > + #include "glxclient.h" > > -extern _X_HIDDEN NOINLINE CARD32 __glXReadReply( Display *dpy, size_t size, > - void * dest, GLboolean reply_is_always_array ); > + extern _X_HIDDEN NOINLINE CARD32 __glXReadReply( Display *dpy, > size_t size, > + void * dest, GLboolean reply_is_always_array ); > > -extern _X_HIDDEN NOINLINE void __glXReadPixelReply( Display *dpy, > - struct glx_context * gc, unsigned max_dim, GLint width, GLint height, > - GLint depth, GLenum format, GLenum type, void * dest, > - GLboolean dimensions_in_reply ); > + extern _X_HIDDEN NOINLINE void __glXReadPixelReply( Display *dpy, > + struct glx_context * gc, unsigned max_dim, GLint width, > GLint height, > + GLint depth, GLenum format, GLenum type, void * dest, > + GLboolean dimensions_in_reply ); > > -extern _X_HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupSingleRequest( > - struct glx_context * gc, GLint sop, GLint cmdlen ); > + extern _X_HIDDEN NOINLINE FASTCALL GLubyte * > __glXSetupSingleRequest( > + struct glx_context * gc, GLint sop, GLint cmdlen ); > > -extern _X_HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupVendorRequest( > - struct glx_context * gc, GLint code, GLint vop, GLint cmdlen ); > -""" > + extern _X_HIDDEN NOINLINE FASTCALL GLubyte * > __glXSetupVendorRequest( > + struct glx_context * gc, GLint code, GLint vop, GLint cmdlen > ); > + """) > > > def printBody(self, api): > diff --git a/src/mapi/glapi/gen/glX_proto_size.py > b/src/mapi/glapi/gen/glX_proto_size.py > index cdae554..9bf1b20 100644 > --- a/src/mapi/glapi/gen/glX_proto_size.py > +++ b/src/mapi/glapi/gen/glX_proto_size.py > @@ -28,6 +28,7 @@ > > import argparse > import string > +import textwrap > > import glX_XML > import gl_XML > @@ -374,14 +375,15 @@ class PrintGlxSizeStubs_c(PrintGlxSizeStubs_common): > > class PrintGlxSizeStubs_h(PrintGlxSizeStubs_common): > def printRealHeader(self): > - print """/** > - * \\file > - * Prototypes for functions used to determine the number of data elements in > - * various GLX protocol messages. > - * > - * \\author Ian Romanick <[email protected]> > - */ > -""" > + print textwrap.dedent("""\ > + /** > + * \\file > + * Prototypes for functions used to determine the number of data > elements in > + * various GLX protocol messages. > + * > + * \\author Ian Romanick <[email protected]> > + */ > + """) > print '#include <X11/Xfuncproto.h>' > print '' > self.printPure() > diff --git a/src/mapi/glapi/gen/gl_SPARC_asm.py > b/src/mapi/glapi/gen/gl_SPARC_asm.py > index 138616a..52aa98b 100644 > --- a/src/mapi/glapi/gen/gl_SPARC_asm.py > +++ b/src/mapi/glapi/gen/gl_SPARC_asm.py > @@ -27,6 +27,7 @@ > # Ian Romanick <[email protected]> > > import argparse > +import textwrap > > import glX_XML > import gl_XML > @@ -37,8 +38,10 @@ class PrintGenericStubs(gl_XML.gl_print_base): > gl_XML.gl_print_base.__init__(self) > self.name = "gl_SPARC_asm.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright (C) 1999-2003 Brian Paul All Rights Reserved. > -(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") > + textwrap.dedent("""\ > + Copyright (C) 1999-2003 Brian Paul All Rights Reserved. > + (C) Copyright IBM Corporation 2004"""), > + "BRIAN PAUL, IBM") > > > def printRealHeader(self): > diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py > index b4487cb..dbac478 100644 > --- a/src/mapi/glapi/gen/gl_XML.py > +++ b/src/mapi/glapi/gen/gl_XML.py > @@ -32,6 +32,7 @@ from decimal import Decimal > import os.path > import re > import string > +import textwrap > import xml.etree.ElementTree as ET > > import static_data > @@ -188,11 +189,13 @@ class gl_print_base(object): > The name is also added to the file's undef_list. > """ > self.undef_list.append("PURE") > - print """# if defined(__GNUC__) > -# define PURE __attribute__((pure)) > -# else > -# define PURE > -# endif""" > + print textwrap.dedent("""\ > + # if defined(__GNUC__) > + # define PURE __attribute__((pure)) > + # else > + # define PURE > + # endif > + """) > return > > > @@ -208,11 +211,13 @@ class gl_print_base(object): > """ > > self.undef_list.append("FASTCALL") > - print """# if defined(__i386__) && defined(__GNUC__) && > !defined(__CYGWIN__) && !defined(__MINGW32__) > -# define FASTCALL __attribute__((fastcall)) > -# else > -# define FASTCALL > -# endif""" > + print textwrap.dedent("""\ > + # if defined(__i386__) && defined(__GNUC__) && > !defined(__CYGWIN__) && !defined(__MINGW32__) > + # define FASTCALL __attribute__((fastcall)) > + # else > + # define FASTCALL > + # endif > + """) > return > > > @@ -228,11 +233,13 @@ class gl_print_base(object): > """ > > self.undef_list.append(S) > - print """# if defined(__GNUC__) && !defined(__CYGWIN__) && > !defined(__MINGW32__) > -# define %s __attribute__((visibility("%s"))) > -# else > -# define %s > -# endif""" % (S, s, S) > + print textwrap.dedent("""\ > + # if defined(__GNUC__) && !defined(__CYGWIN__) && > !defined(__MINGW32__) > + # define %s __attribute__((visibility("%s"))) > + # else > + # define %s > + # endif > + """ % (S, s, S)) > return > > > @@ -248,11 +255,13 @@ class gl_print_base(object): > """ > > self.undef_list.append("NOINLINE") > - print """# if defined(__GNUC__) > -# define NOINLINE __attribute__((noinline)) > -# else > -# define NOINLINE > -# endif""" > + print textwrap.dedent("""\ > + # if defined(__GNUC__) > + # define NOINLINE __attribute__((noinline)) > + # else > + # define NOINLINE > + # endif > + """) > return > > > diff --git a/src/mapi/glapi/gen/gl_apitemp.py > b/src/mapi/glapi/gen/gl_apitemp.py > index e80b5b3..9f90ad7 100644 > --- a/src/mapi/glapi/gen/gl_apitemp.py > +++ b/src/mapi/glapi/gen/gl_apitemp.py > @@ -27,6 +27,7 @@ > # Ian Romanick <[email protected]> > > import argparse > +import textwrap > > import glX_XML > import gl_XML > @@ -38,8 +39,10 @@ class PrintGlOffsets(gl_XML.gl_print_base): > > self.name = "gl_apitemp.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") > + textwrap.dedent("""\ > + Copyright (C) 1999-2001 Brian Paul All Rights Reserved. > + (C) Copyright IBM Corporation 2004"""), > + "BRIAN PAUL, IBM") > > self.es = es > > @@ -120,77 +123,77 @@ class PrintGlOffsets(gl_XML.gl_print_base): > def printRealHeader(self): > print '' > self.printVisibility( "HIDDEN", "hidden" ) > - print """ > -/* > - * This file is a template which generates the OpenGL API entry point > - * functions. It should be included by a .c file which first defines > - * the following macros: > - * KEYWORD1 - usually nothing, but might be __declspec(dllexport) on Win32 > - * KEYWORD2 - usually nothing, but might be __stdcall on Win32 > - * NAME(n) - builds the final function name (usually add "gl" prefix) > - * DISPATCH(func, args, msg) - code to do dispatch of named function. > - * msg is a printf-style debug message. > - * RETURN_DISPATCH(func, args, msg) - code to do dispatch with a return > value > - * > - * Here is an example which generates the usual OpenGL functions: > - * #define KEYWORD1 > - * #define KEYWORD2 > - * #define NAME(func) gl##func > - * #define DISPATCH(func, args, msg) \\ > - * struct _glapi_table *dispatch = CurrentDispatch; \\ > - * (*dispatch->func) args > - * #define RETURN DISPATCH(func, args, msg) \\ > - * struct _glapi_table *dispatch = CurrentDispatch; \\ > - * return (*dispatch->func) args > - * > - */ > - > - > -#if defined( NAME ) > -#ifndef KEYWORD1 > -#define KEYWORD1 > -#endif > - > -#ifndef KEYWORD1_ALT > -#define KEYWORD1_ALT HIDDEN > -#endif > - > -#ifndef KEYWORD2 > -#define KEYWORD2 > -#endif > - > -#ifndef DISPATCH > -#error DISPATCH must be defined > -#endif > - > -#ifndef RETURN_DISPATCH > -#error RETURN_DISPATCH must be defined > -#endif > - > -""" > + print textwrap.dedent("""\ > + /* > + * This file is a template which generates the OpenGL API entry > point > + * functions. It should be included by a .c file which first > defines > + * the following macros: > + * KEYWORD1 - usually nothing, but might be > __declspec(dllexport) on Win32 > + * KEYWORD2 - usually nothing, but might be __stdcall on Win32 > + * NAME(n) - builds the final function name (usually add "gl" > prefix) > + * DISPATCH(func, args, msg) - code to do dispatch of named > function. > + * msg is a printf-style debug > message. > + * RETURN_DISPATCH(func, args, msg) - code to do dispatch with > a return value > + * > + * Here is an example which generates the usual OpenGL functions: > + * #define KEYWORD1 > + * #define KEYWORD2 > + * #define NAME(func) gl##func > + * #define DISPATCH(func, args, msg) > \\ > + * struct _glapi_table *dispatch = CurrentDispatch; > \\ > + * (*dispatch->func) args > + * #define RETURN DISPATCH(func, args, msg) > \\ > + * struct _glapi_table *dispatch = CurrentDispatch; > \\ > + * return (*dispatch->func) args > + * > + */ > + > + > + #if defined( NAME ) > + #ifndef KEYWORD1 > + #define KEYWORD1 > + #endif > + > + #ifndef KEYWORD1_ALT > + #define KEYWORD1_ALT HIDDEN > + #endif > + > + #ifndef KEYWORD2 > + #define KEYWORD2 > + #endif > + > + #ifndef DISPATCH > + #error DISPATCH must be defined > + #endif > + > + #ifndef RETURN_DISPATCH > + #error RETURN_DISPATCH must be defined > + #endif > + """) > return > > > > def printInitDispatch(self, api): > - print """ > -#endif /* defined( NAME ) */ > + print textwrap.dedent("""\ > + #endif /* defined( NAME ) */ > > -/* > - * This is how a dispatch table can be initialized with all the functions > - * we generated above. > - */ > -#ifdef DISPATCH_TABLE_NAME > + /* > + * This is how a dispatch table can be initialized with all the > functions > + * we generated above. > + */ > + #ifdef DISPATCH_TABLE_NAME > > -#ifndef TABLE_ENTRY > -#error TABLE_ENTRY must be defined > -#endif > + #ifndef TABLE_ENTRY > + #error TABLE_ENTRY must be defined > + #endif > > -#ifdef _GLAPI_SKIP_NORMAL_ENTRY_POINTS > -#error _GLAPI_SKIP_NORMAL_ENTRY_POINTS must not be defined > -#endif > + #ifdef _GLAPI_SKIP_NORMAL_ENTRY_POINTS > + #error _GLAPI_SKIP_NORMAL_ENTRY_POINTS must not be defined > + #endif > > -_glapi_proc DISPATCH_TABLE_NAME[] = {""" > + _glapi_proc DISPATCH_TABLE_NAME[] = { > + """) > for f in api.functionIterateByOffset(): > print ' TABLE_ENTRY(%s),' % (f.dispatch_name()) > > @@ -208,13 +211,14 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {""" > > > def printAliasedTable(self, api): > - print """ > -/* > - * This is just used to silence compiler warnings. > - * We list the functions which are not otherwise used. > - */ > -#ifdef UNUSED_TABLE_NAME > -_glapi_proc UNUSED_TABLE_NAME[] = {""" > + print textwrap.dedent("""\ > + /* > + * This is just used to silence compiler warnings. > + * We list the functions which are not otherwise used. > + */ > + #ifdef UNUSED_TABLE_NAME > + _glapi_proc UNUSED_TABLE_NAME[] = { > + """) > > normal_entries = [] > proto_entries = [] > diff --git a/src/mapi/glapi/gen/gl_enums.py b/src/mapi/glapi/gen/gl_enums.py > index d23e783..0ef0633 100644 > --- a/src/mapi/glapi/gen/gl_enums.py > +++ b/src/mapi/glapi/gen/gl_enums.py > @@ -29,6 +29,7 @@ > > import argparse > import re > +import textwrap > import xml.etree.ElementTree as ET > > import gl_XML > @@ -41,7 +42,8 @@ class PrintGlEnums(gl_XML.gl_print_base): > > self.name = "gl_enums.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright (C) 1999-2005 Brian Paul All Rights Reserved.""", "BRIAN PAUL") > + "Copyright (C) 1999-2005 Brian Paul All Rights Reserved.", > + "BRIAN PAUL") > # Mapping from enum value to (name, priority) tuples. > self.enum_table = {} > # Mapping from enum name to value > @@ -62,85 +64,83 @@ class PrintGlEnums(gl_XML.gl_print_base): > return > > def print_code(self): > - print """ > -typedef int (*cfunc)(const void *, const void *); > - > -/** > - * Compare a key enum value to an element in the \c > enum_string_table_offsets array. > - * > - * \c bsearch always passes the key as the first parameter and the pointer > - * to the array element as the second parameter. We can elimiate some > - * extra work by taking advantage of that fact. > - * > - * \param a Pointer to the desired enum name. > - * \param b Pointer into the \c enum_string_table_offsets array. > - */ > -static int compar_nr( const int *a, enum_elt *b ) > -{ > - return a[0] - b->n; > -} > - > - > -static char token_tmp[20]; > - > -const char *_mesa_enum_to_string( int nr ) > -{ > - enum_elt *elt; > - > - elt = bsearch(& nr, enum_string_table_offsets, > - ARRAY_SIZE(enum_string_table_offsets), > - sizeof(enum_string_table_offsets[0]), > - (cfunc) compar_nr); > - > - if (elt != NULL) { > - return &enum_string_table[elt->offset]; > - } > - else { > - /* this is not re-entrant safe, no big deal here */ > - _mesa_snprintf(token_tmp, sizeof(token_tmp) - 1, "0x%x", nr); > - token_tmp[sizeof(token_tmp) - 1] = '\\0'; > - return token_tmp; > - } > -} > - > -/** > - * Primitive names > - */ > -static const char *prim_names[PRIM_MAX+3] = { > - "GL_POINTS", > - "GL_LINES", > - "GL_LINE_LOOP", > - "GL_LINE_STRIP", > - "GL_TRIANGLES", > - "GL_TRIANGLE_STRIP", > - "GL_TRIANGLE_FAN", > - "GL_QUADS", > - "GL_QUAD_STRIP", > - "GL_POLYGON", > - "GL_LINES_ADJACENCY", > - "GL_LINE_STRIP_ADJACENCY", > - "GL_TRIANGLES_ADJACENCY", > - "GL_TRIANGLE_STRIP_ADJACENCY", > - "GL_PATCHES", > - "outside begin/end", > - "unknown state" > -}; > - > - > -/* Get the name of an enum given that it is a primitive type. Avoids > - * GL_FALSE/GL_POINTS ambiguity and others. > - */ > -const char * > -_mesa_lookup_prim_by_nr(GLuint nr) > -{ > - if (nr < ARRAY_SIZE(prim_names)) > - return prim_names[nr]; > - else > - return "invalid mode"; > -} > - > - > -""" > + print textwrap.dedent("""\ > + typedef int (*cfunc)(const void *, const void *); > + > + /** > + * Compare a key enum value to an element in the \c > enum_string_table_offsets array. > + * > + * \c bsearch always passes the key as the first parameter and > the pointer > + * to the array element as the second parameter. We can > elimiate some > + * extra work by taking advantage of that fact. > + * > + * \param a Pointer to the desired enum name. > + * \param b Pointer into the \c enum_string_table_offsets array. > + */ > + static int compar_nr( const int *a, enum_elt *b ) > + { > + return a[0] - b->n; > + } > + > + > + static char token_tmp[20]; > + > + const char *_mesa_enum_to_string( int nr ) > + { > + enum_elt *elt; > + > + elt = bsearch(& nr, enum_string_table_offsets, > + ARRAY_SIZE(enum_string_table_offsets), > + sizeof(enum_string_table_offsets[0]), > + (cfunc) compar_nr); > + > + if (elt != NULL) { > + return &enum_string_table[elt->offset]; > + } > + else { > + /* this is not re-entrant safe, no big deal here */ > + _mesa_snprintf(token_tmp, sizeof(token_tmp) - 1, "0x%x", > nr); > + token_tmp[sizeof(token_tmp) - 1] = '\\0'; > + return token_tmp; > + } > + } > + > + /** > + * Primitive names > + */ > + static const char *prim_names[PRIM_MAX+3] = { > + "GL_POINTS", > + "GL_LINES", > + "GL_LINE_LOOP", > + "GL_LINE_STRIP", > + "GL_TRIANGLES", > + "GL_TRIANGLE_STRIP", > + "GL_TRIANGLE_FAN", > + "GL_QUADS", > + "GL_QUAD_STRIP", > + "GL_POLYGON", > + "GL_LINES_ADJACENCY", > + "GL_LINE_STRIP_ADJACENCY", > + "GL_TRIANGLES_ADJACENCY", > + "GL_TRIANGLE_STRIP_ADJACENCY", > + "GL_PATCHES", > + "outside begin/end", > + "unknown state" > + }; > + > + > + /* Get the name of an enum given that it is a primitive type. > Avoids > + * GL_FALSE/GL_POINTS ambiguity and others. > + */ > + const char * > + _mesa_lookup_prim_by_nr(GLuint nr) > + { > + if (nr < ARRAY_SIZE(prim_names)) > + return prim_names[nr]; > + else > + return "invalid mode"; > + } > + """) > return > > > diff --git a/src/mapi/glapi/gen/gl_gentable.py > b/src/mapi/glapi/gen/gl_gentable.py > index c353e1f..aa174ab 100644 > --- a/src/mapi/glapi/gen/gl_gentable.py > +++ b/src/mapi/glapi/gen/gl_gentable.py > @@ -32,6 +32,7 @@ > # Ian Romanick <[email protected]> > > import argparse > +import textwrap > > import glX_XML > import gl_XML > @@ -157,9 +158,11 @@ class PrintCode(gl_XML.gl_print_base): > > self.name = "gl_gentable.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. > -(C) Copyright IBM Corporation 2004, 2005 > -(C) Copyright Apple Inc 2011""", "BRIAN PAUL, IBM") > + textwrap.dedent("""\ > + Copyright (C) 1999-2001 Brian Paul All Rights Reserved. > + (C) Copyright IBM Corporation 2004, 2005 > + (C) Copyright Apple Inc 2011"""), > + "BRIAN PAUL, IBM") > > return > > diff --git a/src/mapi/glapi/gen/gl_procs.py b/src/mapi/glapi/gen/gl_procs.py > index 9bd71d5..04c54b5 100644 > --- a/src/mapi/glapi/gen/gl_procs.py > +++ b/src/mapi/glapi/gen/gl_procs.py > @@ -27,6 +27,7 @@ > # Ian Romanick <[email protected]> > > import argparse > +import textwrap > > import license > import gl_XML > @@ -40,34 +41,35 @@ class PrintGlProcs(gl_XML.gl_print_base): > self.es = es > self.name = "gl_procs.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. > -(C) Copyright IBM Corporation 2004, 2006""", "BRIAN PAUL, IBM") > + textwrap.dedent("""\ > + Copyright (C) 1999-2001 Brian Paul All Rights Reserved. > + (C) Copyright IBM Corporation 2004, 2006"""), > + "BRIAN PAUL, IBM") > > def printRealHeader(self): > - print """ > -/* This file is only included by glapi.c and is used for > - * the GetProcAddress() function > - */ > - > -typedef struct { > - GLint Name_offset; > -#if defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) > - _glapi_proc Address; > -#endif > - GLuint Offset; > -} glprocs_table_t; > - > -#if !defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING) > -# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , o } > -#elif defined(NEED_FUNCTION_POINTER) && !defined(GLX_INDIRECT_RENDERING) > -# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f1 , o } > -#elif defined(NEED_FUNCTION_POINTER) && defined(GLX_INDIRECT_RENDERING) > -# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f2 , o } > -#elif !defined(NEED_FUNCTION_POINTER) && defined(GLX_INDIRECT_RENDERING) > -# define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f3 , o } > -#endif > - > -""" > + print textwrap.dedent("""\ > + /* This file is only included by glapi.c and is used for > + * the GetProcAddress() function > + */ > + > + typedef struct { > + GLint Name_offset; > + #if defined(NEED_FUNCTION_POINTER) || > defined(GLX_INDIRECT_RENDERING) > + _glapi_proc Address; > + #endif > + GLuint Offset; > + } glprocs_table_t; > + > + #if !defined(NEED_FUNCTION_POINTER) && > !defined(GLX_INDIRECT_RENDERING) > + # define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , o } > + #elif defined(NEED_FUNCTION_POINTER) && > !defined(GLX_INDIRECT_RENDERING) > + # define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f1 > , o } > + #elif defined(NEED_FUNCTION_POINTER) && > defined(GLX_INDIRECT_RENDERING) > + # define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f2 > , o } > + #elif !defined(NEED_FUNCTION_POINTER) && > defined(GLX_INDIRECT_RENDERING) > + # define NAME_FUNC_OFFSET(n,f1,f2,f3,o) { n , (_glapi_proc) f3 > , o } > + #endif > + """) > return > > def printRealFooter(self): > diff --git a/src/mapi/glapi/gen/gl_table.py b/src/mapi/glapi/gen/gl_table.py > index 6f8fa36..d15dc0b 100644 > --- a/src/mapi/glapi/gen/gl_table.py > +++ b/src/mapi/glapi/gen/gl_table.py > @@ -28,6 +28,7 @@ > # Ian Romanick <[email protected]> > > import argparse > +import textwrap > > import gl_XML > import license > @@ -40,8 +41,10 @@ class PrintGlTable(gl_XML.gl_print_base): > self.header_tag = '_GLAPI_TABLE_H_' > self.name = "gl_table.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright (C) 1999-2003 Brian Paul All Rights Reserved. > -(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") > + textwrap.dedent("""\ > + Copyright (C) 1999-2003 Brian Paul All Rights Reserved. > + (C) Copyright IBM Corporation 2004"""), > + "BRIAN PAUL, IBM") > self.ifdef_emitted = False > return > > @@ -87,18 +90,18 @@ class PrintRemapTable(gl_XML.gl_print_base): > > > def printRealHeader(self): > - print """ > -/** > - * \\file main/dispatch.h > - * Macros for handling GL dispatch tables. > - * > - * For each known GL function, there are 3 macros in this file. The first > - * macro is named CALL_FuncName and is used to call that GL function using > - * the specified dispatch table. The other 2 macros, called GET_FuncName > - * can SET_FuncName, are used to get and set the dispatch pointer for the > - * named function in the specified dispatch table. > - */ > -""" > + print textwrap.dedent("""\ > + /** > + * \\file main/dispatch.h > + * Macros for handling GL dispatch tables. > + * > + * For each known GL function, there are 3 macros in this file. > The first > + * macro is named CALL_FuncName and is used to call that GL > function using > + * the specified dispatch table. The other 2 macros, called > GET_FuncName > + * can SET_FuncName, are used to get and set the dispatch > pointer for the > + * named function in the specified dispatch table. > + */ > + """) > return > > > diff --git a/src/mapi/glapi/gen/gl_x86_asm.py > b/src/mapi/glapi/gen/gl_x86_asm.py > index 2b9db45..e55a358 100644 > --- a/src/mapi/glapi/gen/gl_x86_asm.py > +++ b/src/mapi/glapi/gen/gl_x86_asm.py > @@ -27,6 +27,7 @@ > # Ian Romanick <[email protected]> > > import argparse > +import textwrap > > import glX_XML > import gl_XML > @@ -39,8 +40,10 @@ class PrintGenericStubs(gl_XML.gl_print_base): > > self.name = "gl_x86_asm.py (from Mesa)" > self.license = license.bsd_license_template % ( \ > -"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved. > -(C) Copyright IBM Corporation 2004, 2005""", "BRIAN PAUL, IBM") > + textwrap.dedent("""\ > + Copyright (C) 1999-2001 Brian Paul All Rights Reserved. > + (C) Copyright IBM Corporation 2004, 2005"""), > + "BRIAN PAUL, IBM") > return > > > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
