The generic_*_byte functions did not rount the command size to a
multiple of 4 correctly in some cases.
This commit is contained in:
@@ -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); }
|
||||
}
|
||||
|
@@ -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):
|
||||
|
Reference in New Issue
Block a user