diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index afde88e61dc..4aec2d438f5 100644 --- a/src/mapi/glapi/gen/gl_marshal.py +++ b/src/mapi/glapi/gen/gl_marshal.py @@ -227,7 +227,7 @@ class PrintCode(gl_XML.gl_print_base): p.name, p.size_string())) elif type == 'GLenum16': out('cmd->{0} = MIN2({0}, 0xffff); /* clamped to 0xffff (invalid enum) */'.format(p.name)) - elif type == 'int16_t': + elif type == 'GLclamped16i': out('cmd->{0} = CLAMP({0}, INT16_MIN, INT16_MAX);'.format(p.name)) else: out('cmd->{0} = {0};'.format(p.name)) diff --git a/src/mapi/glapi/gen/marshal_XML.py b/src/mapi/glapi/gen/marshal_XML.py index 41c411cbfdf..8c52df6a379 100644 --- a/src/mapi/glapi/gen/marshal_XML.py +++ b/src/mapi/glapi/gen/marshal_XML.py @@ -33,10 +33,15 @@ def get_marshal_type(func_name, param): if type == 'GLenum': return 'GLenum16' # clamped to 0xffff (always invalid enum) - # Use int16_t for the vertex stride, the max value is usually 2048. - if ((type, param.name) == ('GLsizei', 'stride') and - ('Vertex' in func_name or 'Pointer' in func_name or 'Interleaved' in func_name)): - return 'int16_t' # clamped to INT16_MAX (always invalid value) + if (func_name == 'InterleavedArrays' or + func_name.endswith('VertexBuffer') or + func_name.endswith('VertexBufferEXT') or + func_name.endswith('Pointer') or + func_name.endswith('PointerEXT') or + func_name.endswith('PointerOES') or + func_name.endswith('OffsetEXT')): + if (type, param.name) == ('GLsizei', 'stride'): + return 'GLclamped16i' return type @@ -54,7 +59,7 @@ def get_type_size(func_name, param): 'GLshort': 2, 'GLushort': 2, 'GLhalfNV': 2, - 'int16_t': 2, # clamped by glthread + 'GLclamped16i': 2, # clamped by glthread 'GLint': 4, 'GLuint': 4, 'GLbitfield': 4, diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index cf199de2867..d4ebfe090f9 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -35,6 +35,9 @@ #include "main/macros.h" #include "main/matrix.h" +/* 32-bit signed integer clamped to 16 bits. */ +typedef int16_t GLclamped16i; + struct marshal_cmd_base { /**