diff --git a/src/glx/x11/indirect.c b/src/glx/x11/indirect.c index b81811cdb80..c654c939395 100644 --- a/src/glx/x11/indirect.c +++ b/src/glx/x11/indirect.c @@ -6062,13 +6062,13 @@ void __indirect_glProgramParameters4dvNV(GLenum target, GLuint index, GLuint num, const GLdouble * params) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 16 + __GLX_PAD((num * 8)); + const GLuint cmdlen = 16 + __GLX_PAD(((num * 4) * 8)); if (__builtin_expect(num >= 0, 1)) { emit_header(gc->pc, X_GLrop_ProgramParameters4dvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&target), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 12), (void *)(&num), 4); - (void) memcpy((void *)(gc->pc + 16), (void *)(params), (num * 8)); + (void) memcpy((void *)(gc->pc + 16), (void *)(params), ((num * 4) * 8)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6079,13 +6079,13 @@ void __indirect_glProgramParameters4fvNV(GLenum target, GLuint index, GLuint num, const GLfloat * params) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 16 + __GLX_PAD((num * 4)); + const GLuint cmdlen = 16 + __GLX_PAD(((num * 4) * 4)); if (__builtin_expect(num >= 0, 1)) { emit_header(gc->pc, X_GLrop_ProgramParameters4fvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&target), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 12), (void *)(&num), 4); - (void) memcpy((void *)(gc->pc + 16), (void *)(params), (num * 4)); + (void) memcpy((void *)(gc->pc + 16), (void *)(params), ((num * 4) * 4)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6533,12 +6533,12 @@ void __indirect_glVertexAttribs2dvNV(GLuint index, GLsizei n, const GLdouble * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 8)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 2) * 8)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs2dvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 8)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 2) * 8)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6549,12 +6549,12 @@ void __indirect_glVertexAttribs2fvNV(GLuint index, GLsizei n, const GLfloat * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 4)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 2) * 4)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs2fvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 4)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 2) * 4)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6565,12 +6565,12 @@ void __indirect_glVertexAttribs2svNV(GLuint index, GLsizei n, const GLshort * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 2)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 2) * 2)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs2svNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 2)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 2) * 2)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6581,12 +6581,12 @@ void __indirect_glVertexAttribs3dvNV(GLuint index, GLsizei n, const GLdouble * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 8)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 3) * 8)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs3dvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 8)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 3) * 8)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6597,12 +6597,12 @@ void __indirect_glVertexAttribs3fvNV(GLuint index, GLsizei n, const GLfloat * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 4)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 3) * 4)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs3fvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 4)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 3) * 4)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6613,12 +6613,12 @@ void __indirect_glVertexAttribs3svNV(GLuint index, GLsizei n, const GLshort * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 2)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 3) * 2)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs3svNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 2)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 3) * 2)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6629,12 +6629,12 @@ void __indirect_glVertexAttribs4dvNV(GLuint index, GLsizei n, const GLdouble * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 8)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 4) * 8)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs4dvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 8)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 4) * 8)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6645,12 +6645,12 @@ void __indirect_glVertexAttribs4fvNV(GLuint index, GLsizei n, const GLfloat * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 4)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 4) * 4)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs4fvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 4)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 4) * 4)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6661,12 +6661,12 @@ void __indirect_glVertexAttribs4svNV(GLuint index, GLsizei n, const GLshort * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 2)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 4) * 2)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs4svNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 2)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 4) * 2)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } @@ -6677,12 +6677,12 @@ void __indirect_glVertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte * v) { __GLXcontext * const gc = __glXGetCurrentContext(); - const GLuint cmdlen = 12 + __GLX_PAD((n * 1)); + const GLuint cmdlen = 12 + __GLX_PAD(((n * 4) * 1)); if (__builtin_expect(n >= 0, 1)) { emit_header(gc->pc, X_GLrop_VertexAttribs4ubvNV, cmdlen); (void) memcpy((void *)(gc->pc + 4), (void *)(&index), 4); (void) memcpy((void *)(gc->pc + 8), (void *)(&n), 4); - (void) memcpy((void *)(gc->pc + 12), (void *)(v), (n * 1)); + (void) memcpy((void *)(gc->pc + 12), (void *)(v), ((n * 4) * 1)); gc->pc += cmdlen; if (__builtin_expect(gc->pc > gc->limit, 0)) { (void) __glXFlushRenderBuffer(gc, gc->pc); } } diff --git a/src/mesa/glapi/gl_XML.py b/src/mesa/glapi/gl_XML.py index 03aa982ac28..3f87a5712a3 100644 --- a/src/mesa/glapi/gl_XML.py +++ b/src/mesa/glapi/gl_XML.py @@ -175,6 +175,8 @@ class glParameter( glItem ): self.p_count = 0 self.counter = c + self.count_scale = int(attrs.get('count_scale', "1")) + if attrs.get('counter', "false") == "true": self.is_counter = 1 else: @@ -296,7 +298,7 @@ class glParameter( glItem ): elif self.p_count == 0: return self.p_type.size else: - return self.p_type.size * self.p_count + return self.p_type.size * self.p_count * self.count_scale def size_string(self): s = self.size() @@ -310,11 +312,17 @@ class glParameter( glItem ): if b_prod == 0: b_prod = 1 if not self.count_parameter_list and self.counter != None: - a_prod = self.counter + if self.count_scale > 1: + a_prod = '(%s * %u)' % (self.counter, self.count_scale) + else: + a_prod = self.counter elif self.count_parameter_list and self.counter == None: pass elif self.count_parameter_list and self.counter != None: - b_prod = self.counter + if self.count_scale > 1: + b_prod = '(%s * %u)' % (self.counter, self.count_scale) + else: + b_prod = self.counter elif self.width: return "compsize" else: