The generic_*_byte functions did not rount the command size to a
authorIan Romanick <idr@us.ibm.com>
Fri, 7 Jan 2005 02:29:42 +0000 (02:29 +0000)
committerIan Romanick <idr@us.ibm.com>
Fri, 7 Jan 2005 02:29:42 +0000 (02:29 +0000)
multiple of 4 correctly in some cases.

src/glx/x11/indirect.c
src/mesa/glapi/glX_proto_send.py

index e8f716f..a9b52e2 100644 (file)
@@ -119,10 +119,10 @@ static FASTCALL NOINLINE void
 generic_3_byte( GLint rop, const void * ptr )
 {
     __GLXcontext * const gc = __glXGetCurrentContext();
-    const GLuint cmdlen = 7;
+    const GLuint cmdlen = 8;
 
     emit_header(gc->pc, rop, cmdlen);
-    (void) memcpy((void *)(gc->pc + 4), ptr, 3);
+    (void) memcpy((void *)(gc->pc + 4), ptr, 4);
     gc->pc += cmdlen;
     if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
 }
@@ -143,10 +143,10 @@ static FASTCALL NOINLINE void
 generic_6_byte( GLint rop, const void * ptr )
 {
     __GLXcontext * const gc = __glXGetCurrentContext();
-    const GLuint cmdlen = 10;
+    const GLuint cmdlen = 12;
 
     emit_header(gc->pc, rop, cmdlen);
-    (void) memcpy((void *)(gc->pc + 4), ptr, 6);
+    (void) memcpy((void *)(gc->pc + 4), ptr, 8);
     gc->pc += cmdlen;
     if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
 }
index 15d1fa6..7a93ef1 100644 (file)
@@ -142,6 +142,7 @@ setup_vendor_request( __GLXcontext * gc, GLint code, GLint vop, GLint cmdlen )
                        print "/* Missing GLX protocol for %s. */" % (f.name)
 
        def print_generic_function(self, n):
+               size = (n + 3) & ~3
                print """static FASTCALL NOINLINE void
 generic_%u_byte( GLint rop, const void * ptr )
 {
@@ -153,7 +154,7 @@ generic_%u_byte( GLint rop, const void * ptr )
     gc->pc += cmdlen;
     if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
 }
-""" % (n, n + 4, n)
+""" % (n, size + 4, size)
 
 
        def common_emit_one_arg(self, p, offset, pc, indent, adjust):