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 )
|
generic_3_byte( GLint rop, const void * ptr )
|
||||||
{
|
{
|
||||||
__GLXcontext * const gc = __glXGetCurrentContext();
|
__GLXcontext * const gc = __glXGetCurrentContext();
|
||||||
const GLuint cmdlen = 7;
|
const GLuint cmdlen = 8;
|
||||||
|
|
||||||
emit_header(gc->pc, rop, cmdlen);
|
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;
|
gc->pc += cmdlen;
|
||||||
if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
|
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 )
|
generic_6_byte( GLint rop, const void * ptr )
|
||||||
{
|
{
|
||||||
__GLXcontext * const gc = __glXGetCurrentContext();
|
__GLXcontext * const gc = __glXGetCurrentContext();
|
||||||
const GLuint cmdlen = 10;
|
const GLuint cmdlen = 12;
|
||||||
|
|
||||||
emit_header(gc->pc, rop, cmdlen);
|
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;
|
gc->pc += cmdlen;
|
||||||
if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
|
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)
|
print "/* Missing GLX protocol for %s. */" % (f.name)
|
||||||
|
|
||||||
def print_generic_function(self, n):
|
def print_generic_function(self, n):
|
||||||
|
size = (n + 3) & ~3
|
||||||
print """static FASTCALL NOINLINE void
|
print """static FASTCALL NOINLINE void
|
||||||
generic_%u_byte( GLint rop, const void * ptr )
|
generic_%u_byte( GLint rop, const void * ptr )
|
||||||
{
|
{
|
||||||
@@ -153,7 +154,7 @@ generic_%u_byte( GLint rop, const void * ptr )
|
|||||||
gc->pc += cmdlen;
|
gc->pc += cmdlen;
|
||||||
if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); }
|
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):
|
def common_emit_one_arg(self, p, offset, pc, indent, adjust):
|
||||||
|
Reference in New Issue
Block a user