[Mesa-dev] [PATCH 05/41] glapi: use python's textwrap.dedent to make code readable
Ian Romanick
idr at freedesktop.org
Tue Apr 19 19:57:51 UTC 2016
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 <dylanx.c.baker at intel.com>
> ---
> 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 <ian.d.romanick at intel.com>
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 <kevin at precisioninsight.com>
> - * \\author Brian Paul <brian at precisioninsight.com>
> - * \\author Ian Romanick <idr at us.ibm.com>
> - */
> -
> -#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 <kevin at precisioninsight.com>
> + * \\author Brian Paul <brian at precisioninsight.com>
> + * \\author Ian Romanick <idr at us.ibm.com>
> + */
> +
> + #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 <kevin at precisioninsight.com>
> - * \\author Ian Romanick <idr at us.ibm.com>
> - */
> -"""
> + print textwrap.dedent("""\
> + /**
> + * \\file
> + * Prototypes for indirect rendering functions.
> + *
> + * \\author Kevin E. Martin <kevin at precisioninsight.com>
> + * \\author Ian Romanick <idr at us.ibm.com>
> + */
> + """)
> 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 <idr at us.ibm.com>
> - */
> -"""
> + print textwrap.dedent("""\
> + /**
> + * \\file
> + * Prototypes for functions used to determine the number of data elements in
> + * various GLX protocol messages.
> + *
> + * \\author Ian Romanick <idr at us.ibm.com>
> + */
> + """)
> 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 <idr at us.ibm.com>
>
> 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 <idr at us.ibm.com>
>
> 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 <idr at us.ibm.com>
>
> 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 <idr at us.ibm.com>
>
> 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 <idr at us.ibm.com>
>
> 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 <idr at us.ibm.com>
>
> 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
>
>
>
More information about the mesa-dev
mailing list