The generic_*_byte functions did not rount the command size to a

multiple of 4 correctly in some cases.
This commit is contained in:
Ian Romanick
2005-01-07 02:29:42 +00:00
parent ba5ceda7e0
commit 3385d7cec3
2 changed files with 6 additions and 5 deletions

View 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); }
}

View 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):