From 7870298086cfdde020437e23ba86abb61741129e Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Sun, 25 Oct 2009 23:24:18 +0800 Subject: glapi: Allow normal entry points to be skipped. Reorganize glapitemp.h such that it is possible to skip normal entry points or protocol entry points by defining _GLAPI_SKIP_NORMAL_ENTRY_POINTS or _GLAPI_SKIP_PROTO_ENTRY_POINTS. Protocol entry points are those with different GLX protocols. They are skipped in libglapi.a when GLX_INDIRECT_RENDERING is defined. Signed-off-by: Chia-I Wu --- src/mesa/glapi/gl_apitemp.py | 100 ++++++++--- src/mesa/glapi/glapitemp.h | 385 ++++++++++++++++++++++--------------------- src/mesa/main/dispatch.c | 4 + 3 files changed, 274 insertions(+), 215 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/glapi/gl_apitemp.py b/src/mesa/glapi/gl_apitemp.py index a37c08d6ce..d4f8b1d8f8 100644 --- a/src/mesa/glapi/gl_apitemp.py +++ b/src/mesa/glapi/gl_apitemp.py @@ -82,9 +82,6 @@ class PrintGlOffsets(gl_XML.gl_print_base): else: dispatch = "DISPATCH" - if f.has_different_protocol(name): - print '#ifndef GLX_INDIRECT_RENDERING' - if not f.is_static_entry_point(name): print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name)) print '' @@ -98,8 +95,6 @@ class PrintGlOffsets(gl_XML.gl_print_base): print ' %s(%s, (%s), (F, "gl%s(%s);\\n", %s));' \ % (dispatch, f.name, p_string, name, t_string, o_string) print '}' - if f.has_different_protocol(name): - print '#endif /* GLX_INDIRECT_RENDERING */' print '' return @@ -172,6 +167,10 @@ class PrintGlOffsets(gl_XML.gl_print_base): #error TABLE_ENTRY must be defined #endif +#ifdef _GLAPI_SKIP_NORMAL_ENTRY_POINTS +#error _GLAPI_SKIP_NORMAL_ENTRY_POINTS must not be defined +#endif + static _glapi_proc DISPATCH_TABLE_NAME[] = {""" for f in api.functionIterateByOffset(): print ' TABLE_ENTRY(%s),' % (f.dispatch_name()) @@ -198,33 +197,88 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = {""" #ifdef UNUSED_TABLE_NAME static _glapi_proc UNUSED_TABLE_NAME[] = {""" + normal_entries = [] + proto_entries = [] for f in api.functionIterateByOffset(): - for n in f.entry_points: - if n != f.name: - if f.is_static_entry_point(n): - text = ' TABLE_ENTRY(%s),' % (n) - - if f.has_different_protocol(n): - print '#ifndef GLX_INDIRECT_RENDERING' - print text - print '#endif' - else: - print text + normal_ents, proto_ents = self.classifyEntryPoints(f) + + # exclude f.name + if f.name in normal_ents: + normal_ents.remove(f.name) + elif f.name in proto_ents: + proto_ents.remove(f.name) + + normal_ents = [f.static_name(ent) for ent in normal_ents] + proto_ents = [f.static_name(ent) for ent in proto_ents] + + normal_entries.extend(normal_ents) + proto_entries.extend(proto_ents) + + print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS' + for ent in normal_entries: + print ' TABLE_ENTRY(%s),' % (ent) + print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */' + print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS' + for ent in proto_entries: + print ' TABLE_ENTRY(%s),' % (ent) + print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */' + print '};' print '#endif /*UNUSED_TABLE_NAME*/' print '' return + def classifyEntryPoints(self, func): + normal_names = [] + normal_stubs = [] + proto_names = [] + proto_stubs = [] + # classify the entry points + for name in func.entry_points: + if func.has_different_protocol(name): + if func.is_static_entry_point(name): + proto_names.append(name) + else: + proto_stubs.append(name) + else: + if func.is_static_entry_point(name): + normal_names.append(name) + else: + normal_stubs.append(name) + # there can be at most one stub for a function + if normal_stubs: + normal_names.append(normal_stubs[0]) + elif proto_stubs: + proto_names.append(proto_stubs[0]) + + return (normal_names, proto_names) + def printBody(self, api): + normal_entry_points = [] + proto_entry_points = [] for func in api.functionIterateByOffset(): - got_stub = 0 - for n in func.entry_points: - if func.is_static_entry_point(n): - self.printFunction(func, n) - elif not got_stub: - self.printFunction(func, n) - got_stub = 1 + normal_ents, proto_ents = self.classifyEntryPoints(func) + normal_entry_points.append((func, normal_ents)) + proto_entry_points.append((func, proto_ents)) + + print '#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS' + print '' + for func, ents in normal_entry_points: + for ent in ents: + self.printFunction(func, ent) + print '' + print '#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */' + print '' + print '/* these entry points might require different protocols */' + print '#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS' + print '' + for func, ents in proto_entry_points: + for ent in ents: + self.printFunction(func, ent) + print '' + print '#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */' + print '' self.printInitDispatch(api) self.printAliasedTable(api) diff --git a/src/mesa/glapi/glapitemp.h b/src/mesa/glapi/glapitemp.h index d9a3690f2a..0138abddb8 100644 --- a/src/mesa/glapi/glapitemp.h +++ b/src/mesa/glapi/glapitemp.h @@ -80,6 +80,8 @@ #endif +#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS + KEYWORD1 void KEYWORD2 NAME(NewList)(GLuint list, GLenum mode) { DISPATCH(NewList, (list, mode), (F, "glNewList(%d, 0x%x);\n", list, mode)); @@ -1710,13 +1712,6 @@ KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResident)(GLsizei n, const GLuint * RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResident(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences) -{ - RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) { DISPATCH(CopyTexImage1D, (target, level, internalformat, x, y, width, border), (F, "glCopyTexImage1D(0x%x, %d, 0x%x, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, border)); @@ -1762,25 +1757,11 @@ KEYWORD1 void KEYWORD2 NAME(DeleteTextures)(GLsizei n, const GLuint * textures) DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTextures(%d, %p);\n", n, (const void *) textures)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures) -{ - DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GenTextures)(GLsizei n, GLuint * textures) { DISPATCH(GenTextures, (n, textures), (F, "glGenTextures(%d, %p);\n", n, (const void *) textures)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures) -{ - DISPATCH(GenTextures, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetPointerv)(GLenum pname, GLvoid ** params) { DISPATCH(GetPointerv, (pname, params), (F, "glGetPointerv(0x%x, %p);\n", pname, (const void *) params)); @@ -1796,13 +1777,6 @@ KEYWORD1 GLboolean KEYWORD2 NAME(IsTexture)(GLuint texture) RETURN_DISPATCH(IsTexture, (texture), (F, "glIsTexture(%d);\n", texture)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture) -{ - RETURN_DISPATCH(IsTexture, (texture), (F, "glIsTextureEXT(%d);\n", texture)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(PrioritizeTextures)(GLsizei n, const GLuint * textures, const GLclampf * priorities) { DISPATCH(PrioritizeTextures, (n, textures, priorities), (F, "glPrioritizeTextures(%d, %p, %p);\n", n, (const void *) textures, (const void *) priorities)); @@ -1878,6 +1852,11 @@ KEYWORD1 void KEYWORD2 NAME(ColorTable)(GLenum target, GLenum internalformat, GL DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTable(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); } +KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) +{ + DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); +} + KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_339)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_339)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) @@ -1885,11 +1864,6 @@ KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_339)(GLenum target, GLenum intern DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableSGI(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); } -KEYWORD1 void KEYWORD2 NAME(ColorTableEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) -{ - DISPATCH(ColorTable, (target, internalformat, width, format, type, table), (F, "glColorTableEXT(0x%x, 0x%x, %d, 0x%x, 0x%x, %p);\n", target, internalformat, width, format, type, (const void *) table)); -} - KEYWORD1 void KEYWORD2 NAME(ColorTableParameterfv)(GLenum target, GLenum pname, const GLfloat * params) { DISPATCH(ColorTableParameterfv, (target, pname, params), (F, "glColorTableParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); @@ -1931,64 +1905,16 @@ KEYWORD1 void KEYWORD2 NAME(GetColorTable)(GLenum target, GLenum format, GLenum DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTable(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_343)(GLenum target, GLenum format, GLenum type, GLvoid * table); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_343)(GLenum target, GLenum format, GLenum type, GLvoid * table) -{ - DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTableSGI(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); -} -#endif /* GLX_INDIRECT_RENDERING */ - -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1 void KEYWORD2 NAME(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * table) -{ - DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_344)(GLenum target, GLenum pname, GLfloat * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_344)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetColorTableParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_345)(GLenum target, GLenum pname, GLint * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_345)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(ColorSubTable)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) { DISPATCH(ColorSubTable, (target, start, count, format, type, data), (F, "glColorSubTable(0x%x, %d, %d, 0x%x, 0x%x, %p);\n", target, start, count, format, type, (const void *) data)); @@ -2114,57 +2040,21 @@ KEYWORD1 void KEYWORD2 NAME(GetConvolutionFilter)(GLenum target, GLenum format, DISPATCH(GetConvolutionFilter, (target, format, type, image), (F, "glGetConvolutionFilter(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_356)(GLenum target, GLenum format, GLenum type, GLvoid * image); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_356)(GLenum target, GLenum format, GLenum type, GLvoid * image) -{ - DISPATCH(GetConvolutionFilter, (target, format, type, image), (F, "glGetConvolutionFilterEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetConvolutionParameterfv, (target, pname, params), (F, "glGetConvolutionParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_357)(GLenum target, GLenum pname, GLfloat * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_357)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetConvolutionParameterfv, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetConvolutionParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetConvolutionParameteriv, (target, pname, params), (F, "glGetConvolutionParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_358)(GLenum target, GLenum pname, GLint * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_358)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetConvolutionParameteriv, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetSeparableFilter)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) { DISPATCH(GetSeparableFilter, (target, format, type, row, column, span), (F, "glGetSeparableFilter(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_359)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_359)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) -{ - DISPATCH(GetSeparableFilter, (target, format, type, row, column, span), (F, "glGetSeparableFilterEXT(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(SeparableFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) { DISPATCH(SeparableFilter2D, (target, internalformat, width, height, format, type, row, column), (F, "glSeparableFilter2D(0x%x, 0x%x, %d, %d, 0x%x, 0x%x, %p, %p);\n", target, internalformat, width, height, format, type, (const void *) row, (const void *) column)); @@ -2182,85 +2072,31 @@ KEYWORD1 void KEYWORD2 NAME(GetHistogram)(GLenum target, GLboolean reset, GLenum DISPATCH(GetHistogram, (target, reset, format, type, values), (F, "glGetHistogram(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_361)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_361)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) -{ - DISPATCH(GetHistogram, (target, reset, format, type, values), (F, "glGetHistogramEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetHistogramParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetHistogramParameterfv, (target, pname, params), (F, "glGetHistogramParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_362)(GLenum target, GLenum pname, GLfloat * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_362)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetHistogramParameterfv, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetHistogramParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetHistogramParameteriv, (target, pname, params), (F, "glGetHistogramParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_363)(GLenum target, GLenum pname, GLint * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_363)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetHistogramParameteriv, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) { DISPATCH(GetMinmax, (target, reset, format, type, values), (F, "glGetMinmax(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_364)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_364)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) -{ - DISPATCH(GetMinmax, (target, reset, format, type, values), (F, "glGetMinmaxEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameterfv)(GLenum target, GLenum pname, GLfloat * params) { DISPATCH(GetMinmaxParameterfv, (target, pname, params), (F, "glGetMinmaxParameterfv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_365)(GLenum target, GLenum pname, GLfloat * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_365)(GLenum target, GLenum pname, GLfloat * params) -{ - DISPATCH(GetMinmaxParameterfv, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(GetMinmaxParameteriv)(GLenum target, GLenum pname, GLint * params) { DISPATCH(GetMinmaxParameteriv, (target, pname, params), (F, "glGetMinmaxParameteriv(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); } -#ifndef GLX_INDIRECT_RENDERING -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_366)(GLenum target, GLenum pname, GLint * params); - -KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_366)(GLenum target, GLenum pname, GLint * params) -{ - DISPATCH(GetMinmaxParameteriv, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); -} -#endif /* GLX_INDIRECT_RENDERING */ - KEYWORD1 void KEYWORD2 NAME(Histogram)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) { DISPATCH(Histogram, (target, width, internalformat, sink), (F, "glHistogram(0x%x, %d, 0x%x, %d);\n", target, width, internalformat, sink)); @@ -5732,6 +5568,141 @@ KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_794)(GLuint id, GLenum pname, GLu } +#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */ + +/* these entry points might require different protocols */ +#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS + +KEYWORD1 GLboolean KEYWORD2 NAME(AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences) +{ + RETURN_DISPATCH(AreTexturesResident, (n, textures, residences), (F, "glAreTexturesResidentEXT(%d, %p, %p);\n", n, (const void *) textures, (const void *) residences)); +} + +KEYWORD1 void KEYWORD2 NAME(DeleteTexturesEXT)(GLsizei n, const GLuint * textures) +{ + DISPATCH(DeleteTextures, (n, textures), (F, "glDeleteTexturesEXT(%d, %p);\n", n, (const void *) textures)); +} + +KEYWORD1 void KEYWORD2 NAME(GenTexturesEXT)(GLsizei n, GLuint * textures) +{ + DISPATCH(GenTextures, (n, textures), (F, "glGenTexturesEXT(%d, %p);\n", n, (const void *) textures)); +} + +KEYWORD1 GLboolean KEYWORD2 NAME(IsTextureEXT)(GLuint texture) +{ + RETURN_DISPATCH(IsTexture, (texture), (F, "glIsTextureEXT(%d);\n", texture)); +} + +KEYWORD1 void KEYWORD2 NAME(GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * table) +{ + DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTableEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_343)(GLenum target, GLenum format, GLenum type, GLvoid * table); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_343)(GLenum target, GLenum format, GLenum type, GLvoid * table) +{ + DISPATCH(GetColorTable, (target, format, type, table), (F, "glGetColorTableSGI(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) table)); +} + +KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_344)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_344)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetColorTableParameterfv, (target, pname, params), (F, "glGetColorTableParameterfvSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1 void KEYWORD2 NAME(GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_345)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_345)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetColorTableParameteriv, (target, pname, params), (F, "glGetColorTableParameterivSGI(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_356)(GLenum target, GLenum format, GLenum type, GLvoid * image); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_356)(GLenum target, GLenum format, GLenum type, GLvoid * image) +{ + DISPATCH(GetConvolutionFilter, (target, format, type, image), (F, "glGetConvolutionFilterEXT(0x%x, 0x%x, 0x%x, %p);\n", target, format, type, (const void *) image)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_357)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_357)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetConvolutionParameterfv, (target, pname, params), (F, "glGetConvolutionParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_358)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_358)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetConvolutionParameteriv, (target, pname, params), (F, "glGetConvolutionParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_359)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_359)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) +{ + DISPATCH(GetSeparableFilter, (target, format, type, row, column, span), (F, "glGetSeparableFilterEXT(0x%x, 0x%x, 0x%x, %p, %p, %p);\n", target, format, type, (const void *) row, (const void *) column, (const void *) span)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_361)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_361)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) +{ + DISPATCH(GetHistogram, (target, reset, format, type, values), (F, "glGetHistogramEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_362)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_362)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetHistogramParameterfv, (target, pname, params), (F, "glGetHistogramParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_363)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_363)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetHistogramParameteriv, (target, pname, params), (F, "glGetHistogramParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_364)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_364)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) +{ + DISPATCH(GetMinmax, (target, reset, format, type, values), (F, "glGetMinmaxEXT(0x%x, %d, 0x%x, 0x%x, %p);\n", target, reset, format, type, (const void *) values)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_365)(GLenum target, GLenum pname, GLfloat * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_365)(GLenum target, GLenum pname, GLfloat * params) +{ + DISPATCH(GetMinmaxParameterfv, (target, pname, params), (F, "glGetMinmaxParameterfvEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_366)(GLenum target, GLenum pname, GLint * params); + +KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_366)(GLenum target, GLenum pname, GLint * params) +{ + DISPATCH(GetMinmaxParameteriv, (target, pname, params), (F, "glGetMinmaxParameterivEXT(0x%x, 0x%x, %p);\n", target, pname, (const void *) params)); +} + + +#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */ + + #endif /* defined( NAME ) */ /* @@ -5744,6 +5715,10 @@ KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_794)(GLuint id, GLenum pname, GLu #error TABLE_ENTRY must be defined #endif +#ifdef _GLAPI_SKIP_NORMAL_ENTRY_POINTS +#error _GLAPI_SKIP_NORMAL_ENTRY_POINTS must not be defined +#endif + static _glapi_proc DISPATCH_TABLE_NAME[] = { TABLE_ENTRY(NewList), TABLE_ENTRY(EndList), @@ -6653,26 +6628,15 @@ static _glapi_proc DISPATCH_TABLE_NAME[] = { */ #ifdef UNUSED_TABLE_NAME static _glapi_proc UNUSED_TABLE_NAME[] = { +#ifndef _GLAPI_SKIP_NORMAL_ENTRY_POINTS TABLE_ENTRY(ArrayElementEXT), TABLE_ENTRY(BindTextureEXT), TABLE_ENTRY(DrawArraysEXT), -#ifndef GLX_INDIRECT_RENDERING - TABLE_ENTRY(AreTexturesResidentEXT), -#endif TABLE_ENTRY(CopyTexImage1DEXT), TABLE_ENTRY(CopyTexImage2DEXT), TABLE_ENTRY(CopyTexSubImage1DEXT), TABLE_ENTRY(CopyTexSubImage2DEXT), -#ifndef GLX_INDIRECT_RENDERING - TABLE_ENTRY(DeleteTexturesEXT), -#endif -#ifndef GLX_INDIRECT_RENDERING - TABLE_ENTRY(GenTexturesEXT), -#endif TABLE_ENTRY(GetPointervEXT), -#ifndef GLX_INDIRECT_RENDERING - TABLE_ENTRY(IsTextureEXT), -#endif TABLE_ENTRY(PrioritizeTexturesEXT), TABLE_ENTRY(TexSubImage1DEXT), TABLE_ENTRY(TexSubImage2DEXT), @@ -6680,15 +6644,25 @@ static _glapi_proc UNUSED_TABLE_NAME[] = { TABLE_ENTRY(BlendEquationEXT), TABLE_ENTRY(DrawRangeElementsEXT), TABLE_ENTRY(ColorTableEXT), -#ifndef GLX_INDIRECT_RENDERING - TABLE_ENTRY(GetColorTableEXT), -#endif -#ifndef GLX_INDIRECT_RENDERING - TABLE_ENTRY(GetColorTableParameterfvEXT), -#endif -#ifndef GLX_INDIRECT_RENDERING - TABLE_ENTRY(GetColorTableParameterivEXT), -#endif + TABLE_ENTRY(_dispatch_stub_339), + TABLE_ENTRY(_dispatch_stub_340), + TABLE_ENTRY(_dispatch_stub_341), + TABLE_ENTRY(_dispatch_stub_342), + TABLE_ENTRY(_dispatch_stub_346), + TABLE_ENTRY(_dispatch_stub_347), + TABLE_ENTRY(_dispatch_stub_348), + TABLE_ENTRY(_dispatch_stub_349), + TABLE_ENTRY(_dispatch_stub_350), + TABLE_ENTRY(_dispatch_stub_351), + TABLE_ENTRY(_dispatch_stub_352), + TABLE_ENTRY(_dispatch_stub_353), + TABLE_ENTRY(_dispatch_stub_354), + TABLE_ENTRY(_dispatch_stub_355), + TABLE_ENTRY(_dispatch_stub_360), + TABLE_ENTRY(_dispatch_stub_367), + TABLE_ENTRY(_dispatch_stub_368), + TABLE_ENTRY(_dispatch_stub_369), + TABLE_ENTRY(_dispatch_stub_370), TABLE_ENTRY(TexImage3DEXT), TABLE_ENTRY(TexSubImage3DEXT), TABLE_ENTRY(CopyTexSubImage3DEXT), @@ -6726,6 +6700,7 @@ static _glapi_proc UNUSED_TABLE_NAME[] = { TABLE_ENTRY(MultiTexCoord4iv), TABLE_ENTRY(MultiTexCoord4s), TABLE_ENTRY(MultiTexCoord4sv), + TABLE_ENTRY(_dispatch_stub_423), TABLE_ENTRY(LoadTransposeMatrixd), TABLE_ENTRY(LoadTransposeMatrixf), TABLE_ENTRY(MultTransposeMatrixd), @@ -6839,8 +6814,10 @@ static _glapi_proc UNUSED_TABLE_NAME[] = { TABLE_ENTRY(DrawBuffersATI), TABLE_ENTRY(PointParameterf), TABLE_ENTRY(PointParameterfARB), + TABLE_ENTRY(_dispatch_stub_592), TABLE_ENTRY(PointParameterfv), TABLE_ENTRY(PointParameterfvARB), + TABLE_ENTRY(_dispatch_stub_593), TABLE_ENTRY(SecondaryColor3b), TABLE_ENTRY(SecondaryColor3bv), TABLE_ENTRY(SecondaryColor3d), @@ -6866,6 +6843,7 @@ static _glapi_proc UNUSED_TABLE_NAME[] = { TABLE_ENTRY(FogCoordf), TABLE_ENTRY(FogCoordfv), TABLE_ENTRY(BlendFuncSeparate), + TABLE_ENTRY(_dispatch_stub_623), TABLE_ENTRY(WindowPos2d), TABLE_ENTRY(WindowPos2dARB), TABLE_ENTRY(WindowPos2dv), @@ -6929,6 +6907,29 @@ static _glapi_proc UNUSED_TABLE_NAME[] = { TABLE_ENTRY(BlitFramebuffer), TABLE_ENTRY(FramebufferTextureLayer), TABLE_ENTRY(ProvokingVertex), +#endif /* _GLAPI_SKIP_NORMAL_ENTRY_POINTS */ +#ifndef _GLAPI_SKIP_PROTO_ENTRY_POINTS + TABLE_ENTRY(AreTexturesResidentEXT), + TABLE_ENTRY(DeleteTexturesEXT), + TABLE_ENTRY(GenTexturesEXT), + TABLE_ENTRY(IsTextureEXT), + TABLE_ENTRY(GetColorTableEXT), + TABLE_ENTRY(_dispatch_stub_343), + TABLE_ENTRY(GetColorTableParameterfvEXT), + TABLE_ENTRY(_dispatch_stub_344), + TABLE_ENTRY(GetColorTableParameterivEXT), + TABLE_ENTRY(_dispatch_stub_345), + TABLE_ENTRY(_dispatch_stub_356), + TABLE_ENTRY(_dispatch_stub_357), + TABLE_ENTRY(_dispatch_stub_358), + TABLE_ENTRY(_dispatch_stub_359), + TABLE_ENTRY(_dispatch_stub_361), + TABLE_ENTRY(_dispatch_stub_362), + TABLE_ENTRY(_dispatch_stub_363), + TABLE_ENTRY(_dispatch_stub_364), + TABLE_ENTRY(_dispatch_stub_365), + TABLE_ENTRY(_dispatch_stub_366), +#endif /* _GLAPI_SKIP_PROTO_ENTRY_POINTS */ }; #endif /*UNUSED_TABLE_NAME*/ diff --git a/src/mesa/main/dispatch.c b/src/mesa/main/dispatch.c index 97d213e8e1..cd5410514d 100644 --- a/src/mesa/main/dispatch.c +++ b/src/mesa/main/dispatch.c @@ -89,6 +89,10 @@ #define GLAPIENTRY #endif +#ifdef GLX_INDIRECT_RENDERING +/* those link to libglapi.a should provide the entry points */ +#define _GLAPI_SKIP_PROTO_ENTRY_POINTS +#endif #include "glapi/glapitemp.h" #endif /* USE_X86_ASM */ -- cgit v1.2.3 From 888429360a30090b9ecd17bfd160a88141195235 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 15 Oct 2009 18:07:22 +0800 Subject: mesa/xlib: Fix missing symbols when GLX_INDIRECT_RENDERING is defined. When GLX_INDIRECT_RENDERING is defined, some symbols are used in libglapi.a but are not defined. Define them through the help of glapitemp.h. Signed-off-by: Chia-I Wu --- src/mesa/drivers/x11/glxapi.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/mesa') diff --git a/src/mesa/drivers/x11/glxapi.c b/src/mesa/drivers/x11/glxapi.c index 02eea25a71..66b9a41f13 100644 --- a/src/mesa/drivers/x11/glxapi.c +++ b/src/mesa/drivers/x11/glxapi.c @@ -50,6 +50,36 @@ struct display_dispatch { struct display_dispatch *Next; }; + +/** + * When GLX_INDIRECT_RENDERING is defined, some symbols are missing in + * libglapi.a. We need to define them here. + */ +#ifdef GLX_INDIRECT_RENDERING + +#include "glapi/dispatch.h" + +#define KEYWORD1 PUBLIC + +#if defined(USE_MGL_NAMESPACE) +#define NAME(func) mgl##func +#else +#define NAME(func) gl##func +#endif + +#define DISPATCH(FUNC, ARGS, MESSAGE) \ + CALL_ ## FUNC(GET_DISPATCH(), ARGS); + +#define RETURN_DISPATCH(FUNC, ARGS, MESSAGE) \ + return CALL_ ## FUNC(GET_DISPATCH(), ARGS); + +/* skip normal ones */ +#define _GLAPI_SKIP_NORMAL_ENTRY_POINTS +#include "glapi/glapitemp.h" + +#endif /* GLX_INDIRECT_RENDERING */ + + static struct display_dispatch *DispatchList = NULL; -- cgit v1.2.3 From c3d61d378574878deedb44d84f506ca23e66c6ca Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 7 Sep 2009 14:46:22 +0800 Subject: mesa/main: Add support for point size array in _mesa_GetPointerv. Signed-off-by: Chia-I Wu --- src/mesa/main/getstring.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/mesa') diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c index 6599ed9698..4b1f4b0ea1 100644 --- a/src/mesa/main/getstring.c +++ b/src/mesa/main/getstring.c @@ -242,6 +242,11 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params ) case GL_SELECTION_BUFFER_POINTER: *params = ctx->Select.Buffer; break; +#if FEATURE_point_size_array + case GL_POINT_SIZE_ARRAY_POINTER_OES: + *params = (GLvoid *) ctx->Array.ArrayObj->PointSize.Ptr; + break; +#endif default: _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); return; -- cgit v1.2.3 From 8d2edbf1395ca1e2d23b3bd2ba2c5d54f21d377b Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 21 Sep 2009 18:46:28 +0800 Subject: mesa/main: Add more OpenGL ES types to glheader.h. Signed-off-by: Chia-I Wu --- src/mesa/main/glheader.h | 7 +++++++ src/mesa/swrast/swrast.h | 6 ------ 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h index 81d4ccf919..77544c88c6 100644 --- a/src/mesa/main/glheader.h +++ b/src/mesa/main/glheader.h @@ -57,6 +57,13 @@ #ifndef GL_FIXED #define GL_FIXED 0x140C +typedef int GLfixed; +typedef int GLclampx; +#endif + + +#ifndef GL_OES_EGL_image +typedef void *GLeglImageOES; #endif diff --git a/src/mesa/swrast/swrast.h b/src/mesa/swrast/swrast.h index c183b315b6..c01cf7d1f0 100644 --- a/src/mesa/swrast/swrast.h +++ b/src/mesa/swrast/swrast.h @@ -75,12 +75,6 @@ typedef struct { } SWvertex; -/** - * Fixed point data type. - */ -typedef int GLfixed; - - #define FRAG_ATTRIB_CI FRAG_ATTRIB_COL0 -- cgit v1.2.3 From 6418f836d470b41c2a5dbfad52b797db1ec3871b Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 20 Oct 2009 14:32:39 +0800 Subject: glapi: Add is_abi() to test if a function is in the ABI. The test is done by checking if the offset is manually assigned. The generated headers are unchanged. Signed-off-by: Chia-I Wu --- src/mesa/glapi/gl_XML.py | 3 +++ src/mesa/glapi/gl_offsets.py | 5 +---- src/mesa/glapi/gl_table.py | 5 +---- src/mesa/glapi/remap_helper.py | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/glapi/gl_XML.py b/src/mesa/glapi/gl_XML.py index b98919134f..bafb00306f 100644 --- a/src/mesa/glapi/gl_XML.py +++ b/src/mesa/glapi/gl_XML.py @@ -738,6 +738,9 @@ class gl_function( gl_item ): return p_string + def is_abi(self): + return (self.offset >= 0 and not self.assign_offset) + def is_static_entry_point(self, name): return name in self.static_entry_points diff --git a/src/mesa/glapi/gl_offsets.py b/src/mesa/glapi/gl_offsets.py index ca6c90ffd8..b8b509d09f 100644 --- a/src/mesa/glapi/gl_offsets.py +++ b/src/mesa/glapi/gl_offsets.py @@ -41,8 +41,6 @@ class PrintGlOffsets(gl_XML.gl_print_base): return def printBody(self, api): - abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ] - print '/* this file should not be included directly in mesa */' print '' @@ -50,8 +48,7 @@ class PrintGlOffsets(gl_XML.gl_print_base): abi_functions = [] count = 0 for f in api.functionIterateByOffset(): - [category, num] = api.get_category_for_name( f.name ) - if category not in abi: + if not f.is_abi(): functions.append( [f, count] ) count += 1 else: diff --git a/src/mesa/glapi/gl_table.py b/src/mesa/glapi/gl_table.py index 0e05b3431a..698795fb0a 100644 --- a/src/mesa/glapi/gl_table.py +++ b/src/mesa/glapi/gl_table.py @@ -113,14 +113,11 @@ class PrintRemapTable(gl_XML.gl_print_base): print ' } while(0)' print '' - abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ] - functions = [] abi_functions = [] count = 0 for f in api.functionIterateByOffset(): - [category, num] = api.get_category_for_name( f.name ) - if category not in abi: + if not f.is_abi(): functions.append( [f, count] ) count += 1 else: diff --git a/src/mesa/glapi/remap_helper.py b/src/mesa/glapi/remap_helper.py index e47583a5d3..2a1f5adc32 100644 --- a/src/mesa/glapi/remap_helper.py +++ b/src/mesa/glapi/remap_helper.py @@ -145,7 +145,7 @@ class PrintGlRemap(gl_XML.gl_print_base): funcs = [] for f in extension_functions[ext]: # test if the function is in the ABI - if not f.assign_offset and f.offset >= 0: + if f.is_abi(): funcs.append(f) if not funcs: continue -- cgit v1.2.3 From 7df4c7e1b8faf0c0339ca7287e3560fafab02b6a Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 20 Oct 2009 14:15:45 +0800 Subject: glapi: Avoid hardcoded category names in remap helper script. The output of the script is unchanged. Signed-off-by: Chia-I Wu --- src/mesa/glapi/remap_helper.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/glapi/remap_helper.py b/src/mesa/glapi/remap_helper.py index 2a1f5adc32..d93c7a4285 100644 --- a/src/mesa/glapi/remap_helper.py +++ b/src/mesa/glapi/remap_helper.py @@ -123,18 +123,26 @@ class PrintGlRemap(gl_XML.gl_print_base): print '};' print '' - abi = [ "1.0", "1.1", "1.2", "GL_ARB_multitexture" ] + # collect functions by versions/extensions extension_functions = {} - - # collect non-ABI functions + abi_extensions = [] for f in api.functionIterateAll(): for n in f.entry_points: category, num = api.get_category_for_name(n) - if category not in abi: - c = gl_XML.real_category_name(category) + # consider only GL_VERSION_X_Y or extensions + c = gl_XML.real_category_name(category) + if c.startswith("GL_"): if not extension_functions.has_key(c): extension_functions[c] = [] extension_functions[c].append(f) + # remember the ext names of the ABI + if (f.is_abi() and n == f.name and + c not in abi_extensions): + abi_extensions.append(c) + # ignore the ABI itself + for ext in abi_extensions: + extension_functions.pop(ext) + extensions = extension_functions.keys() extensions.sort() @@ -144,8 +152,8 @@ class PrintGlRemap(gl_XML.gl_print_base): for ext in extensions: funcs = [] for f in extension_functions[ext]: - # test if the function is in the ABI - if f.is_abi(): + # test if the function is in the ABI and has alt names + if f.is_abi() and len(f.entry_points) > 1: funcs.append(f) if not funcs: continue @@ -171,7 +179,7 @@ class PrintGlRemap(gl_XML.gl_print_base): remapped.append(f) else: # these functions are either in the - # abi, or have offset -1 + # abi, or have offset -1 funcs.append(f) print '#if defined(need_%s)' % (ext) -- cgit v1.2.3 From 5b426288c2dbc42ef44ea13fe37afa77223107bb Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 3 Sep 2009 11:03:20 +0800 Subject: glapi: Include headers with directory prefixes. This allows different sets of generated sources and headers to be used. Signed-off-by: Chia-I Wu --- src/mesa/glapi/dispatch.h | 6 +++--- src/mesa/glapi/gl_enums.py | 8 ++++---- src/mesa/glapi/gl_x86-64_asm.py | 2 +- src/mesa/glapi/gl_x86_asm.py | 2 +- src/mesa/glapi/glapi.c | 8 ++++---- src/mesa/glapi/glapi_getproc.c | 8 ++++---- src/mesa/glapi/glthread.c | 2 +- src/mesa/main/enums.c | 8 ++++---- src/mesa/main/remap.c | 2 +- src/mesa/x86-64/glapi_x86-64.S | 2 +- src/mesa/x86/glapi_x86.S | 2 +- 11 files changed, 25 insertions(+), 25 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/glapi/dispatch.h b/src/mesa/glapi/dispatch.h index 6623d52469..27f80a5062 100644 --- a/src/mesa/glapi/dispatch.h +++ b/src/mesa/glapi/dispatch.h @@ -30,8 +30,8 @@ #define _GLAPI_USE_REMAP_TABLE #endif -#include "glapitable.h" -#include "glapioffsets.h" -#include "glapidispatch.h" +#include "glapi/glapitable.h" +#include "glapi/glapioffsets.h" +#include "glapi/glapidispatch.h" #endif /* _DISPATCH_H */ diff --git a/src/mesa/glapi/gl_enums.py b/src/mesa/glapi/gl_enums.py index 27ab119537..acaa06ab37 100644 --- a/src/mesa/glapi/gl_enums.py +++ b/src/mesa/glapi/gl_enums.py @@ -42,10 +42,10 @@ class PrintGlEnums(gl_XML.gl_print_base): def printRealHeader(self): - print '#include "glheader.h"' - print '#include "mfeatures.h"' - print '#include "enums.h"' - print '#include "imports.h"' + print '#include "main/glheader.h"' + print '#include "main/mfeatures.h"' + print '#include "main/enums.h"' + print '#include "main/imports.h"' print '' print 'typedef struct {' print ' size_t offset;' diff --git a/src/mesa/glapi/gl_x86-64_asm.py b/src/mesa/glapi/gl_x86-64_asm.py index f36ad3a5d8..31c1a2b93a 100644 --- a/src/mesa/glapi/gl_x86-64_asm.py +++ b/src/mesa/glapi/gl_x86-64_asm.py @@ -122,7 +122,7 @@ class PrintGenericStubs(gl_XML.gl_print_base): print " * the symbol visibility mode to 'default'." print ' */' print '' - print '#include "../x86/assyntax.h"' + print '#include "x86/assyntax.h"' print '' print '#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303' print '# pragma GCC visibility push(default)' diff --git a/src/mesa/glapi/gl_x86_asm.py b/src/mesa/glapi/gl_x86_asm.py index 36f0e31fe2..d293497736 100644 --- a/src/mesa/glapi/gl_x86_asm.py +++ b/src/mesa/glapi/gl_x86_asm.py @@ -53,7 +53,7 @@ class PrintGenericStubs(gl_XML.gl_print_base): def printRealHeader(self): - print '#include "assyntax.h"' + print '#include "x86/assyntax.h"' print '#include "glapi/glapioffsets.h"' print '' print '#if defined(STDCALL_API)' diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c index e36fccb354..ad72fe48be 100644 --- a/src/mesa/glapi/glapi.c +++ b/src/mesa/glapi/glapi.c @@ -69,9 +69,9 @@ #include #endif -#include "glapi.h" -#include "glapioffsets.h" -#include "glapitable.h" +#include "glapi/glapi.h" +#include "glapi/glapioffsets.h" +#include "glapi/glapitable.h" /***** BEGIN NO-OP DISPATCH *****/ @@ -145,7 +145,7 @@ static GLint NoOpUnused(void) return 0; } -#include "glapitemp.h" +#include "glapi/glapitemp.h" /***** END NO-OP DISPATCH *****/ diff --git a/src/mesa/glapi/glapi_getproc.c b/src/mesa/glapi/glapi_getproc.c index ed443c12c8..decdd05b13 100644 --- a/src/mesa/glapi/glapi_getproc.c +++ b/src/mesa/glapi/glapi_getproc.c @@ -34,9 +34,9 @@ #include #include "main/glheader.h" #include "main/compiler.h" -#include "glapi.h" -#include "glapioffsets.h" -#include "glapitable.h" +#include "glapi/glapi.h" +#include "glapi/glapioffsets.h" +#include "glapi/glapitable.h" static void @@ -75,7 +75,7 @@ str_dup(const char *str) #endif /* The code in this file is auto-generated with Python */ -#include "glprocs.h" +#include "glapi/glprocs.h" /** diff --git a/src/mesa/glapi/glthread.c b/src/mesa/glapi/glthread.c index 737fd4d6a8..dc90b3602c 100644 --- a/src/mesa/glapi/glthread.c +++ b/src/mesa/glapi/glthread.c @@ -33,7 +33,7 @@ #endif #include "main/compiler.h" -#include "glthread.h" +#include "glapi/glthread.h" /* diff --git a/src/mesa/main/enums.c b/src/mesa/main/enums.c index 606d50c59a..dedb6af7b5 100644 --- a/src/mesa/main/enums.c +++ b/src/mesa/main/enums.c @@ -25,10 +25,10 @@ * SOFTWARE. */ -#include "glheader.h" -#include "mfeatures.h" -#include "enums.h" -#include "imports.h" +#include "main/glheader.h" +#include "main/mfeatures.h" +#include "main/enums.h" +#include "main/imports.h" typedef struct { size_t offset; diff --git a/src/mesa/main/remap.c b/src/mesa/main/remap.c index 0385ae8d7d..5f32a48258 100644 --- a/src/mesa/main/remap.c +++ b/src/mesa/main/remap.c @@ -45,7 +45,7 @@ #define need_MESA_remap_table -#include "remap_helper.h" +#include "main/remap_helper.h" #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) #define MAX_ENTRY_POINTS 16 diff --git a/src/mesa/x86-64/glapi_x86-64.S b/src/mesa/x86-64/glapi_x86-64.S index 72d0532906..05afbb294c 100644 --- a/src/mesa/x86-64/glapi_x86-64.S +++ b/src/mesa/x86-64/glapi_x86-64.S @@ -29,7 +29,7 @@ * the symbol visibility mode to 'default'. */ -#include "../x86/assyntax.h" +#include "x86/assyntax.h" #if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303 # pragma GCC visibility push(default) diff --git a/src/mesa/x86/glapi_x86.S b/src/mesa/x86/glapi_x86.S index 12c77f434e..117e31ede0 100644 --- a/src/mesa/x86/glapi_x86.S +++ b/src/mesa/x86/glapi_x86.S @@ -26,7 +26,7 @@ * SOFTWARE. */ -#include "assyntax.h" +#include "x86/assyntax.h" #include "glapi/glapioffsets.h" #if defined(STDCALL_API) -- cgit v1.2.3 From 7cdf8ab0967b1a80c16d317ed5b0e3b810312ad1 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 20 Oct 2009 12:39:56 +0800 Subject: mesa/main: Make _mesa_TexGenf and _mesa_GetTexGenfv global again. They are needed by OpenGL ES overlay. Signed-off-by: Chia-I Wu --- src/mesa/main/texgen.c | 4 ++-- src/mesa/main/texgen.h | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/main/texgen.c b/src/mesa/main/texgen.c index 733e129fcf..8d114108f8 100644 --- a/src/mesa/main/texgen.c +++ b/src/mesa/main/texgen.c @@ -208,7 +208,7 @@ _mesa_TexGendv(GLenum coord, GLenum pname, const GLdouble *params ) } -static void GLAPIENTRY +void GLAPIENTRY _mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param ) { _mesa_TexGenfv(coord, pname, ¶m); @@ -261,7 +261,7 @@ _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params ) -static void GLAPIENTRY +void GLAPIENTRY _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) { struct gl_texture_unit *texUnit; diff --git a/src/mesa/main/texgen.h b/src/mesa/main/texgen.h index f6924ef722..eb4626033a 100644 --- a/src/mesa/main/texgen.h +++ b/src/mesa/main/texgen.h @@ -40,9 +40,15 @@ extern void GLAPIENTRY _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); +extern void GLAPIENTRY +_mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param ); + extern void GLAPIENTRY _mesa_TexGeni( GLenum coord, GLenum pname, GLint param ); +extern void GLAPIENTRY +_mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); + extern void _mesa_init_texgen_dispatch(struct _glapi_table *disp); -- cgit v1.2.3 From f68bf0621d1f865033b078191c1f4ec1fa0bbc5c Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Wed, 2 Sep 2009 12:04:56 +0800 Subject: mesa/es: Add OpenGL ES XMLs. These XMLs define OpenGL ES 1.x and 2.x APIs. Signed-off-by: Chia-I Wu --- src/mesa/es/glapi/Makefile | 90 ++ src/mesa/es/glapi/base1_API.xml | 744 ++++++++++ src/mesa/es/glapi/base2_API.xml | 533 +++++++ src/mesa/es/glapi/es1_API.xml | 1100 ++++++++++++++ src/mesa/es/glapi/es1_COMPAT.xml | 135 ++ src/mesa/es/glapi/es1_EXT.xml | 693 +++++++++ src/mesa/es/glapi/es2_API.xml | 294 ++++ src/mesa/es/glapi/es2_COMPAT.xml | 368 +++++ src/mesa/es/glapi/es2_EXT.xml | 122 ++ src/mesa/es/glapi/es_COMPAT.xml | 2646 ++++++++++++++++++++++++++++++++++ src/mesa/es/glapi/es_EXT.xml | 83 ++ src/mesa/es/glapi/gl_compare.py | 354 +++++ src/mesa/es/glapi/gl_parse_header.py | 450 ++++++ 13 files changed, 7612 insertions(+) create mode 100644 src/mesa/es/glapi/Makefile create mode 100644 src/mesa/es/glapi/base1_API.xml create mode 100644 src/mesa/es/glapi/base2_API.xml create mode 100644 src/mesa/es/glapi/es1_API.xml create mode 100644 src/mesa/es/glapi/es1_COMPAT.xml create mode 100644 src/mesa/es/glapi/es1_EXT.xml create mode 100644 src/mesa/es/glapi/es2_API.xml create mode 100644 src/mesa/es/glapi/es2_COMPAT.xml create mode 100644 src/mesa/es/glapi/es2_EXT.xml create mode 100644 src/mesa/es/glapi/es_COMPAT.xml create mode 100644 src/mesa/es/glapi/es_EXT.xml create mode 100644 src/mesa/es/glapi/gl_compare.py create mode 100644 src/mesa/es/glapi/gl_parse_header.py (limited to 'src/mesa') diff --git a/src/mesa/es/glapi/Makefile b/src/mesa/es/glapi/Makefile new file mode 100644 index 0000000000..5f2aa8225b --- /dev/null +++ b/src/mesa/es/glapi/Makefile @@ -0,0 +1,90 @@ +TOP = ../../../.. +GLAPI = ../../glapi +include $(TOP)/configs/current + +OUTPUTS := \ + glapi/glapidispatch.h \ + glapi/glapioffsets.h \ + glapi/glapitable.h \ + glapi/glapitemp.h \ + glapi/glprocs.h \ + sparc/glapi_sparc.S \ + x86-64/glapi_x86-64.S \ + x86/glapi_x86.S \ + main/enums.c \ + main/remap_helper.h + +COMMON = gl_XML.py glX_XML.py license.py typeexpr.py +COMMON := $(addprefix $(GLAPI)/, $(COMMON)) + +ES1_APIXML := es1_API.xml +ES2_APIXML := es2_API.xml +ES1_OUTPUT_DIR := glapi-es1 +ES2_OUTPUT_DIR := glapi-es2 + +ES1_DEPS = $(ES1_APIXML) base1_API.xml es1_EXT.xml es_EXT.xml \ + es1_COMPAT.xml es_COMPAT.xml +ES2_DEPS = $(ES2_APIXML) base2_API.xml es2_EXT.xml es_EXT.xml \ + es2_COMPAT.xml es_COMPAT.xml + +ES1_OUTPUTS := $(addprefix $(ES1_OUTPUT_DIR)/, $(OUTPUTS)) +ES2_OUTPUTS := $(addprefix $(ES2_OUTPUT_DIR)/, $(OUTPUTS)) + +all: $(ES1_OUTPUTS) $(ES2_OUTPUTS) + +$(ES1_OUTPUTS): APIXML := $(ES1_APIXML) +$(ES2_OUTPUTS): APIXML := $(ES2_APIXML) +$(ES1_OUTPUTS): $(ES1_DEPS) +$(ES2_OUTPUTS): $(ES2_DEPS) + +define gen-glapi + @mkdir -p $(dir $@) + $(PYTHON2) $(PYTHON_FLAGS) $< -f $(APIXML) $(1) > $@ +endef + +%/glapidispatch.h: $(GLAPI)/gl_table.py $(COMMON) + $(call gen-glapi,-c -m remap_table) + +%/glapioffsets.h: $(GLAPI)/gl_offsets.py $(COMMON) + $(call gen-glapi,-c) + +%/glapitable.h: $(GLAPI)/gl_table.py $(COMMON) + $(call gen-glapi,-c) + +%/glapitemp.h: $(GLAPI)/gl_apitemp.py $(COMMON) + $(call gen-glapi) + +%/glprocs.h: $(GLAPI)/gl_procs.py $(COMMON) + $(call gen-glapi,-c) + +%/sparc/glapi_sparc.S: $(GLAPI)/gl_SPARC_asm.py $(COMMON) + $(call gen-glapi) + +%/x86-64/glapi_x86-64.S: $(GLAPI)/gl_x86-64_asm.py $(COMMON) + $(call gen-glapi) + +%/x86/glapi_x86.S: $(GLAPI)/gl_x86_asm.py $(COMMON) + $(call gen-glapi) + +%/main/enums.c: $(GLAPI)/gl_enums.py $(COMMON) + $(call gen-glapi) + +%/main/remap_helper.h: $(GLAPI)/remap_helper.py $(COMMON) + $(call gen-glapi) + +verify_xml: + @if [ ! -f gl.h ]; then \ + echo "Please copy gl.h and gl2.h to this directory"; \ + exit 1; \ + fi + @echo "Verifying that es1_API.xml covers OpenGL ES 1.1..." + @$(PYTHON2) $(PYTHON_FLAGS) gl_parse_header.py gl.h > tmp.xml + @$(PYTHON2) $(PYTHON_FLAGS) gl_compare.py difference tmp.xml es1_API.xml + @echo "Verifying that es2_API.xml covers OpenGL ES 2.0..." + @$(PYTHON2) $(PYTHON_FLAGS) gl_parse_header.py gl2.h > tmp.xml + @$(PYTHON2) $(PYTHON_FLAGS) gl_compare.py difference tmp.xml es2_API.xml + @rm -f tmp.xml + +clean: + -rm -rf $(ES1_OUTPUT_DIR) $(ES2_OUTPUT_DIR) + -rm -f *~ *.pyc *.pyo diff --git a/src/mesa/es/glapi/base1_API.xml b/src/mesa/es/glapi/base1_API.xml new file mode 100644 index 0000000000..f5d136ccef --- /dev/null +++ b/src/mesa/es/glapi/base1_API.xml @@ -0,0 +1,744 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/base2_API.xml b/src/mesa/es/glapi/base2_API.xml new file mode 100644 index 0000000000..6aa43b728a --- /dev/null +++ b/src/mesa/es/glapi/base2_API.xml @@ -0,0 +1,533 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es1_API.xml b/src/mesa/es/glapi/es1_API.xml new file mode 100644 index 0000000000..7ee5515f19 --- /dev/null +++ b/src/mesa/es/glapi/es1_API.xml @@ -0,0 +1,1100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es1_COMPAT.xml b/src/mesa/es/glapi/es1_COMPAT.xml new file mode 100644 index 0000000000..4fc9223cc0 --- /dev/null +++ b/src/mesa/es/glapi/es1_COMPAT.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es1_EXT.xml b/src/mesa/es/glapi/es1_EXT.xml new file mode 100644 index 0000000000..7c7c585736 --- /dev/null +++ b/src/mesa/es/glapi/es1_EXT.xml @@ -0,0 +1,693 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es2_API.xml b/src/mesa/es/glapi/es2_API.xml new file mode 100644 index 0000000000..266c07613c --- /dev/null +++ b/src/mesa/es/glapi/es2_API.xml @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es2_COMPAT.xml b/src/mesa/es/glapi/es2_COMPAT.xml new file mode 100644 index 0000000000..61f11a604e --- /dev/null +++ b/src/mesa/es/glapi/es2_COMPAT.xml @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es2_EXT.xml b/src/mesa/es/glapi/es2_EXT.xml new file mode 100644 index 0000000000..fef6368022 --- /dev/null +++ b/src/mesa/es/glapi/es2_EXT.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es_COMPAT.xml b/src/mesa/es/glapi/es_COMPAT.xml new file mode 100644 index 0000000000..bb6d28db83 --- /dev/null +++ b/src/mesa/es/glapi/es_COMPAT.xml @@ -0,0 +1,2646 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es_EXT.xml b/src/mesa/es/glapi/es_EXT.xml new file mode 100644 index 0000000000..28f41ae09a --- /dev/null +++ b/src/mesa/es/glapi/es_EXT.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/gl_compare.py b/src/mesa/es/glapi/gl_compare.py new file mode 100644 index 0000000000..7a2148cb1f --- /dev/null +++ b/src/mesa/es/glapi/gl_compare.py @@ -0,0 +1,354 @@ +#!/usr/bin/python +# +# Copyright (C) 2009 Chia-I Wu +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# on the rights to use, copy, modify, merge, publish, distribute, sub +# license, and/or sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import sys +import os.path +import getopt + +GLAPI = "../../glapi" +sys.path.append(GLAPI) + +import gl_XML +import glX_XML + +class ApiSet(object): + def __init__(self, api, elts=["enum", "type", "function"]): + self.api = api + self.elts = elts + + def _check_enum(self, e1, e2, strict=True): + if e1.name != e2.name: + raise ValueError("%s: name mismatch" % e1.name) + if e1.value != e2.value: + raise ValueError("%s: value 0x%04x != 0x%04x" + % (e1.name, e1.value, e2.value)) + + def _check_type(self, t1, t2, strict=True): + if t1.name != t2.name: + raise ValueError("%s: name mismatch" % t1.name) + if t1.type_expr.string() != t2.type_expr.string(): + raise ValueError("%s: type %s != %s" + % (t1.name, t1.type_expr.string(), t2.type_expr.string())) + + def _check_function(self, f1, f2, strict=True): + if f1.name != f2.name: + raise ValueError("%s: name mismatch" % f1.name) + if f1.return_type != f2.return_type: + raise ValueError("%s: return type %s != %s" + % (f1.name, f1.return_type, f2.return_type)) + # there might be padded parameters + if strict and len(f1.parameters) != len(f2.parameters): + raise ValueError("%s: parameter length %d != %d" + % (f1.name, len(f1.parameters), len(f2.parameters))) + if f1.assign_offset != f2.assign_offset: + if ((f1.assign_offset and f2.offset < 0) or + (f2.assign_offset and f1.offset < 0)): + raise ValueError("%s: assign offset %d != %d" + % (f1.name, f1.assign_offset, f2.assign_offset)) + elif not f1.assign_offset: + if f1.offset != f2.offset: + raise ValueError("%s: offset %d != %d" + % (f1.name, f1.offset, f2.offset)) + + if strict: + l1 = f1.entry_points + l2 = f2.entry_points + l1.sort() + l2.sort() + if l1 != l2: + raise ValueError("%s: entry points %s != %s" + % (f1.name, l1, l2)) + + l1 = f1.static_entry_points + l2 = f2.static_entry_points + l1.sort() + l2.sort() + if l1 != l2: + raise ValueError("%s: static entry points %s != %s" + % (f1.name, l1, l2)) + + pad = 0 + for i in xrange(len(f1.parameters)): + p1 = f1.parameters[i] + p2 = f2.parameters[i + pad] + + if not strict and p1.is_padding != p2.is_padding: + if p1.is_padding: + pad -= 1 + continue + else: + pad += 1 + p2 = f2.parameters[i + pad] + + if strict and p1.name != p2.name: + raise ValueError("%s: parameter %d name %s != %s" + % (f1.name, i, p1.name, p2.name)) + if p1.type_expr.string() != p2.type_expr.string(): + if (strict or + # special case + f1.name == "TexImage2D" and p1.name != "internalformat"): + raise ValueError("%s: parameter %s type %s != %s" + % (f1.name, p1.name, p1.type_expr.string(), + p2.type_expr.string())) + + def union(self, other): + union = gl_XML.gl_api(None) + + if "enum" in self.elts: + union.enums_by_name = other.enums_by_name.copy() + for key, val in self.api.enums_by_name.iteritems(): + if key not in union.enums_by_name: + union.enums_by_name[key] = val + else: + self._check_enum(val, other.enums_by_name[key]) + + if "type" in self.elts: + union.types_by_name = other.types_by_name.copy() + for key, val in self.api.types_by_name.iteritems(): + if key not in union.types_by_name: + union.types_by_name[key] = val + else: + self._check_type(val, other.types_by_name[key]) + + if "function" in self.elts: + union.functions_by_name = other.functions_by_name.copy() + for key, val in self.api.functions_by_name.iteritems(): + if key not in union.functions_by_name: + union.functions_by_name[key] = val + else: + self._check_function(val, other.functions_by_name[key]) + + return union + + def intersection(self, other): + intersection = gl_XML.gl_api(None) + + if "enum" in self.elts: + for key, val in self.api.enums_by_name.iteritems(): + if key in other.enums_by_name: + self._check_enum(val, other.enums_by_name[key]) + intersection.enums_by_name[key] = val + + if "type" in self.elts: + for key, val in self.api.types_by_name.iteritems(): + if key in other.types_by_name: + self._check_type(val, other.types_by_name[key]) + intersection.types_by_name[key] = val + + if "function" in self.elts: + for key, val in self.api.functions_by_name.iteritems(): + if key in other.functions_by_name: + self._check_function(val, other.functions_by_name[key]) + intersection.functions_by_name[key] = val + + return intersection + + def difference(self, other): + difference = gl_XML.gl_api(None) + + if "enum" in self.elts: + for key, val in self.api.enums_by_name.iteritems(): + if key not in other.enums_by_name: + difference.enums_by_name[key] = val + else: + self._check_enum(val, other.enums_by_name[key]) + + if "type" in self.elts: + for key, val in self.api.types_by_name.iteritems(): + if key not in other.types_by_name: + difference.types_by_name[key] = val + else: + self._check_type(val, other.types_by_name[key]) + + if "function" in self.elts: + for key, val in self.api.functions_by_name.iteritems(): + if key not in other.functions_by_name: + difference.functions_by_name[key] = val + else: + self._check_function(val, other.functions_by_name[key], False) + + return difference + +def cmp_enum(e1, e2): + if e1.value < e2.value: + return -1 + elif e1.value > e2.value: + return 1 + else: + return 0 + +def cmp_type(t1, t2): + return t1.size - t2.size + +def cmp_function(f1, f2): + if f1.name > f2.name: + return 1 + elif f1.name < f2.name: + return -1 + else: + return 0 + +def spaces(n, str=""): + spaces = n - len(str) + if spaces < 1: + spaces = 1 + return " " * spaces + +def output_enum(e, indent=0): + attrs = 'name="%s"' % e.name + if e.default_count > 0: + tab = spaces(37, attrs) + attrs += '%scount="%d"' % (tab, e.default_count) + tab = spaces(48, attrs) + val = "%04x" % e.value + val = "0x" + val.upper() + attrs += '%svalue="%s"' % (tab, val) + + # no child + if not e.functions: + print '%s' % (spaces(indent), attrs) + return + + print '%s' % (spaces(indent), attrs) + for key, val in e.functions.iteritems(): + attrs = 'name="%s"' % key + if val[0] != e.default_count: + attrs += ' count="%d"' % val[0] + if not val[1]: + attrs += ' mode="get"' + + print '%s' % (spaces(indent * 2), attrs) + + print '%s' % spaces(indent) + +def output_type(t, indent=0): + tab = spaces(16, t.name) + attrs = 'name="%s"%ssize="%d"' % (t.name, tab, t.size) + ctype = t.type_expr.string() + if ctype.find("unsigned") != -1: + attrs += ' unsigned="true"' + elif ctype.find("signed") == -1: + attrs += ' float="true"' + print '%s' % (spaces(indent), attrs) + +def output_function(f, indent=0): + attrs = 'name="%s"' % f.name + if f.offset > 0: + if f.assign_offset: + attrs += ' offset="assign"' + else: + attrs += ' offset="%d"' % f.offset + print '%s' % (spaces(indent), attrs) + + for p in f.parameters: + attrs = 'name="%s" type="%s"' \ + % (p.name, p.type_expr.original_string) + print '%s' % (spaces(indent * 2), attrs) + if f.return_type != "void": + attrs = 'type="%s"' % f.return_type + print '%s' % (spaces(indent * 2), attrs) + + print '%s' % spaces(indent) + +def output_category(api, indent=0): + enums = api.enums_by_name.values() + enums.sort(cmp_enum) + types = api.types_by_name.values() + types.sort(cmp_type) + functions = api.functions_by_name.values() + functions.sort(cmp_function) + + for e in enums: + output_enum(e, indent) + if enums and types: + print + for t in types: + output_type(t, indent) + if enums or types: + print + for f in functions: + output_function(f, indent) + if f != functions[-1]: + print + +def is_api_empty(api): + return bool(not api.enums_by_name and + not api.types_by_name and + not api.functions_by_name) + +def show_usage(ops): + print "Usage: %s [-k elts] <%s> " % (sys.argv[0], "|".join(ops)) + print " -k elts A comma separated string of types of elements to" + print " skip. Possible types are enum, type, and function." + sys.exit(1) + +def main(): + ops = ["union", "intersection", "difference"] + elts = ["enum", "type", "function"] + + try: + options, args = getopt.getopt(sys.argv[1:], "k:") + except Exception, e: + show_usage(ops) + + if len(args) != 3: + show_usage(ops) + op, file1, file2 = args + if op not in ops: + show_usage(ops) + + skips = [] + for opt, val in options: + if opt == "-k": + skips = val.split(",") + + for elt in skips: + try: + elts.remove(elt) + except ValueError: + show_usage(ops) + + api1 = gl_XML.parse_GL_API(file1, glX_XML.glx_item_factory()) + api2 = gl_XML.parse_GL_API(file2, glX_XML.glx_item_factory()) + + set = ApiSet(api1, elts) + func = getattr(set, op) + result = func(api2) + + if not is_api_empty(result): + cat_name = "%s_of_%s_and_%s" \ + % (op, os.path.basename(file1), os.path.basename(file2)) + + print '' + print '' % GLAPI + print + print '' + print + print '' % (cat_name) + output_category(result, 4) + print '' + print + print '' + +if __name__ == "__main__": + main() diff --git a/src/mesa/es/glapi/gl_parse_header.py b/src/mesa/es/glapi/gl_parse_header.py new file mode 100644 index 0000000000..8b8d16b395 --- /dev/null +++ b/src/mesa/es/glapi/gl_parse_header.py @@ -0,0 +1,450 @@ +#!/usr/bin/python +# +# Copyright (C) 2009 Chia-I Wu +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# on the rights to use, copy, modify, merge, publish, distribute, sub +# license, and/or sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +import sys +import os.path +import getopt +import re + +GLAPI = "../../glapi" +sys.path.append(GLAPI) + +class HeaderParser(object): + """Parser for GL header files.""" + + def __init__(self, verbose=0): + # match #if and #ifdef + self.IFDEF = re.compile('#\s*if(n?def\s+(?P\w+)|\s+(?P.+))') + # match #endif + self.ENDIF = re.compile('#\s*endif') + # match typedef abc def; + self.TYPEDEF = re.compile('typedef\s+(?P[\w ]+)\s+(?P\w+);') + # match #define XYZ VAL + self.DEFINE = re.compile('#\s*define\s+(?P\w+)(?P\s+[\w"]*)?') + # match GLAPI + self.GLAPI = re.compile('^GL_?API(CALL)?\s+(?P[\w\s*]+[\w*])\s+(GL)?_?APIENTRY\s+(?P\w+)\s*\((?P[\w\s(,*\[\])]+)\)\s*;') + + self.split_params = re.compile('\s*,\s*') + self.split_ctype = re.compile('(\W)') + # ignore GL_VERSION_X_Y + self.ignore_enum = re.compile('GL(_ES)?_VERSION(_ES_C[ML])?_\d_\d') + + self.verbose = verbose + self._reset() + + def _reset(self): + """Reset to initial state.""" + self.ifdef_levels = [] + self.need_char = False + + # use typeexpr? + def _format_ctype(self, ctype, fix=True): + """Format a ctype string, optionally fix it.""" + # split the type string + tmp = self.split_ctype.split(ctype) + tmp = [s for s in tmp if s and s != " "] + + pretty = "" + for i in xrange(len(tmp)): + # add missing GL prefix + if (fix and tmp[i] != "const" and tmp[i] != "*" and + not tmp[i].startswith("GL")): + tmp[i] = "GL" + tmp[i] + + if i == 0: + pretty = tmp[i] + else: + sep = " " + if tmp[i - 1] == "*": + sep = "" + pretty += sep + tmp[i] + return pretty + + # use typeexpr? + def _get_ctype_attrs(self, ctype): + """Get the attributes of a ctype.""" + is_float = (ctype.find("float") != -1 or ctype.find("double") != -1) + is_signed = not (ctype.find("unsigned") != -1) + + size = 0 + if ctype.find("char") != -1: + size = 1 + elif ctype.find("short") != -1: + size = 2 + elif ctype.find("int") != -1: + size = 4 + elif is_float: + if ctype.find("float") != -1: + size = 4 + else: + size = 8 + + return (size, is_float, is_signed) + + def _parse_define(self, line): + """Parse a #define line for an .""" + m = self.DEFINE.search(line) + if not m: + if self.verbose and line.find("#define") >= 0: + print "ignore %s" % (line) + return None + + key = m.group("key").strip() + val = m.group("value").strip() + + # enum must begin with GL_ and be all uppercase + if ((not (key.startswith("GL_") and key.isupper())) or + (self.ignore_enum.match(key) and val == "1")): + if self.verbose: + print "ignore enum %s" % (key) + return None + + return (key, val) + + def _parse_typedef(self, line): + """Parse a typedef line for a .""" + m = self.TYPEDEF.search(line) + if not m: + if self.verbose and line.find("typedef") >= 0: + print "ignore %s" % (line) + return None + + f = m.group("from").strip() + t = m.group("to").strip() + if not t.startswith("GL"): + if self.verbose: + print "ignore type %s" % (t) + return None + attrs = self._get_ctype_attrs(f) + + return (f, t, attrs) + + def _parse_gl_api(self, line): + """Parse a GLAPI line for a .""" + m = self.GLAPI.search(line) + if not m: + if self.verbose and line.find("APIENTRY") >= 0: + print "ignore %s" % (line) + return None + + rettype = m.group("return") + rettype = self._format_ctype(rettype) + if rettype == "GLvoid": + rettype = "" + + name = m.group("name") + + param_str = m.group("params") + chunks = self.split_params.split(param_str) + chunks = [s.strip() for s in chunks] + if len(chunks) == 1 and (chunks[0] == "void" or chunks[0] == "GLvoid"): + chunks = [] + + params = [] + for c in chunks: + # split type and variable name + idx = c.rfind("*") + if idx < 0: + idx = c.rfind(" ") + if idx >= 0: + idx += 1 + ctype = c[:idx] + var = c[idx:] + else: + ctype = c + var = "unnamed" + + # convert array to pointer + idx = var.find("[") + if idx >= 0: + var = var[:idx] + ctype += "*" + + ctype = self._format_ctype(ctype) + var = var.strip() + + if not self.need_char and ctype.find("GLchar") >= 0: + self.need_char = True + + params.append((ctype, var)) + + return (rettype, name, params) + + def _change_level(self, line): + """Parse a #ifdef line and change level.""" + m = self.IFDEF.search(line) + if m: + ifdef = m.group("ifdef") + if not ifdef: + ifdef = m.group("if") + self.ifdef_levels.append(ifdef) + return True + m = self.ENDIF.search(line) + if m: + self.ifdef_levels.pop() + return True + return False + + def _read_header(self, header): + """Open a header file and read its contents.""" + lines = [] + try: + fp = open(header, "rb") + lines = fp.readlines() + fp.close() + except IOError, e: + print "failed to read %s: %s" % (header, e) + return lines + + def _cmp_enum(self, enum1, enum2): + """Compare two enums.""" + # sort by length of the values as strings + val1 = enum1[1] + val2 = enum2[1] + ret = len(val1) - len(val2) + # sort by the values + if not ret: + val1 = int(val1, 16) + val2 = int(val2, 16) + ret = val1 - val2 + # in case int cannot hold the result + if ret > 0: + ret = 1 + elif ret < 0: + ret = -1 + # sort by the names + if not ret: + if enum1[0] < enum2[0]: + ret = -1 + elif enum1[0] > enum2[0]: + ret = 1 + return ret + + def _cmp_type(self, type1, type2): + """Compare two types.""" + attrs1 = type1[2] + attrs2 = type2[2] + # sort by type size + ret = attrs1[0] - attrs2[0] + # float is larger + if not ret: + ret = attrs1[1] - attrs2[1] + # signed is larger + if not ret: + ret = attrs1[2] - attrs2[2] + # reverse + ret = -ret + return ret + + def _cmp_function(self, func1, func2): + """Compare two functions.""" + name1 = func1[1] + name2 = func2[1] + ret = 0 + # sort by the names + if name1 < name2: + ret = -1 + elif name1 > name2: + ret = 1 + return ret + + def _postprocess_dict(self, hdict): + """Post-process a header dict and return an ordered list.""" + hlist = [] + largest = 0 + for key, cat in hdict.iteritems(): + size = len(cat["enums"]) + len(cat["types"]) + len(cat["functions"]) + # ignore empty category + if not size: + continue + + cat["enums"].sort(self._cmp_enum) + # remove duplicates + dup = [] + for i in xrange(1, len(cat["enums"])): + if cat["enums"][i] == cat["enums"][i - 1]: + dup.insert(0, i) + for i in dup: + e = cat["enums"].pop(i) + if self.verbose: + print "remove duplicate enum %s" % e[0] + + cat["types"].sort(self._cmp_type) + cat["functions"].sort(self._cmp_function) + + # largest category comes first + if size > largest: + hlist.insert(0, (key, cat)) + largest = size + else: + hlist.append((key, cat)) + return hlist + + def parse(self, header): + """Parse a header file.""" + self._reset() + + if self.verbose: + print "Parsing %s" % (header) + + hdict = {} + lines = self._read_header(header) + for line in lines: + if self._change_level(line): + continue + + # skip until the first ifdef (i.e. __gl_h_) + if not self.ifdef_levels: + continue + + cat_name = os.path.basename(header) + # check if we are in an extension + if (len(self.ifdef_levels) > 1 and + self.ifdef_levels[-1].startswith("GL_")): + cat_name = self.ifdef_levels[-1] + + try: + cat = hdict[cat_name] + except KeyError: + cat = { + "enums": [], + "types": [], + "functions": [] + } + hdict[cat_name] = cat + + key = "enums" + elem = self._parse_define(line) + if not elem: + key = "types" + elem = self._parse_typedef(line) + if not elem: + key = "functions" + elem = self._parse_gl_api(line) + + if elem: + cat[key].append(elem) + + if self.need_char: + if self.verbose: + print "define GLchar" + elem = self._parse_typedef("typedef char GLchar;") + cat["types"].append(elem) + return self._postprocess_dict(hdict) + +def spaces(n, str=""): + spaces = n - len(str) + if spaces < 1: + spaces = 1 + return " " * spaces + +def output_xml(name, hlist): + """Output a parsed header in OpenGLAPI XML.""" + + for i in xrange(len(hlist)): + cat_name, cat = hlist[i] + + print '' % (cat_name) + indent = 4 + + for enum in cat["enums"]: + name = enum[0][3:] + value = enum[1] + tab = spaces(41, name) + attrs = 'name="%s"%svalue="%s"' % (name, tab, value) + print '%s' % (spaces(indent), attrs) + + if cat["enums"] and cat["types"]: + print + + for type in cat["types"]: + ctype = type[0] + size, is_float, is_signed = type[2] + + attrs = 'name="%s"' % (type[1][2:]) + attrs += spaces(16, attrs) + 'size="%d"' % (size) + if is_float: + attrs += ' float="true"' + elif not is_signed: + attrs += ' unsigned="true"' + + print '%s' % (spaces(indent), attrs) + + for func in cat["functions"]: + print + ret = func[0] + name = func[1][2:] + params = func[2] + + attrs = 'name="%s" offset="assign"' % name + print '%s' % (spaces(indent), attrs) + + for param in params: + attrs = 'name="%s" type="%s"' % (param[1], param[0]) + print '%s' % (spaces(indent * 2), attrs) + if ret: + attrs = 'type="%s"' % ret + print '%s' % (spaces(indent * 2), attrs) + + print '%s' % spaces(indent) + + print '' + print + +def show_usage(): + print "Usage: %s [-v]
..." % sys.argv[0] + sys.exit(1) + +def main(): + try: + args, headers = getopt.getopt(sys.argv[1:], "v") + except Exception, e: + show_usage() + if not headers: + show_usage() + + verbose = 0 + for arg in args: + if arg[0] == "-v": + verbose += 1 + + need_xml_header = True + parser = HeaderParser(verbose) + for h in headers: + h = os.path.abspath(h) + hlist = parser.parse(h) + + if need_xml_header: + print '' + print '' % GLAPI + need_xml_header = False + + print + print '' % (h) + print '' + print + output_xml(h, hlist) + print '' + +if __name__ == '__main__': + main() -- cgit v1.2.3 From bfa66bd6f941920cf32ce79fb103c3755b4dd8fb Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 21 Sep 2009 17:57:57 +0800 Subject: mesa/es: Add OpenGL ES overlay. This is primitive support for OpenGL ES. It uses a subset of mesa sources to build libesXgallium.a and libesXapi.a, where X is 1 for OpenGL ES 1.x, 2 for OpenGL ES 2.x. The static libraries serve the same purpose as libmesagallium.a and libglapi.a do for OpenGL. This is based on the work of opengl-es branch. Signed-off-by: Chia-I Wu --- src/mesa/es/Makefile | 125 ++ src/mesa/es/main/APIspec.txt | 2886 ++++++++++++++++++++++++++++++++++++ src/mesa/es/main/apiutil.py | 1117 ++++++++++++++ src/mesa/es/main/es1_special | 8 + src/mesa/es/main/es2_special | 5 + src/mesa/es/main/es_cpaltex.c | 240 +++ src/mesa/es/main/es_fbo.c | 37 + src/mesa/es/main/es_generator.py | 773 ++++++++++ src/mesa/es/main/es_query_matrix.c | 199 +++ src/mesa/es/main/get_gen.py | 785 ++++++++++ src/mesa/es/main/mfeatures_es1.h | 115 ++ src/mesa/es/main/mfeatures_es2.h | 115 ++ src/mesa/es/main/specials_es1.c | 186 +++ src/mesa/es/main/specials_es2.c | 176 +++ src/mesa/es/main/stubs.c | 138 ++ src/mesa/es/sources.mak | 164 ++ 16 files changed, 7069 insertions(+) create mode 100644 src/mesa/es/Makefile create mode 100644 src/mesa/es/main/APIspec.txt create mode 100644 src/mesa/es/main/apiutil.py create mode 100644 src/mesa/es/main/es1_special create mode 100644 src/mesa/es/main/es2_special create mode 100644 src/mesa/es/main/es_cpaltex.c create mode 100644 src/mesa/es/main/es_fbo.c create mode 100644 src/mesa/es/main/es_generator.py create mode 100644 src/mesa/es/main/es_query_matrix.c create mode 100644 src/mesa/es/main/get_gen.py create mode 100644 src/mesa/es/main/mfeatures_es1.h create mode 100644 src/mesa/es/main/mfeatures_es2.h create mode 100644 src/mesa/es/main/specials_es1.c create mode 100644 src/mesa/es/main/specials_es2.c create mode 100644 src/mesa/es/main/stubs.c create mode 100644 src/mesa/es/sources.mak (limited to 'src/mesa') diff --git a/src/mesa/es/Makefile b/src/mesa/es/Makefile new file mode 100644 index 0000000000..42347d0b07 --- /dev/null +++ b/src/mesa/es/Makefile @@ -0,0 +1,125 @@ +# src/mesa/es/Makefile +# +TOP := ../../.. +MESA := .. + +include $(TOP)/configs/current +include sources.mak + +ES1_LIBS := libes1gallium.a libes1api.a +ES2_LIBS := libes2gallium.a libes2api.a + +# Default rule: create ES1 and ES2 libs +.PHONY: default +default: subdirs depend es1 es2 + +es1: $(ES1_LIBS) + +es2: $(ES2_LIBS) + +# force the inclusion of es's mfeatures.h +ES1_CPPFLAGS := -include main/mfeatures_es1.h -D__GL_EXPORTS +ES2_CPPFLAGS := -include main/mfeatures_es2.h -D__GL_EXPORTS + +ES1_OBJ_DIR := objs-es1 +ES2_OBJ_DIR := objs-es2 + +# adjust output dirs +ES1_OBJECTS := $(addprefix $(ES1_OBJ_DIR)/, $(ES1_OBJECTS)) +ES1_GALLIUM_OBJECTS := $(addprefix $(ES1_OBJ_DIR)/, $(ES1_GALLIUM_OBJECTS)) +ES1_API_OBJECTS := $(addprefix $(ES1_OBJ_DIR)/, $(ES1_API_OBJECTS)) + +ES2_OBJECTS := $(addprefix $(ES2_OBJ_DIR)/, $(ES2_OBJECTS)) +ES2_GALLIUM_OBJECTS := $(addprefix $(ES2_OBJ_DIR)/, $(ES2_GALLIUM_OBJECTS)) +ES2_API_OBJECTS := $(addprefix $(ES2_OBJ_DIR)/, $(ES2_API_OBJECTS)) + +# compile either ES1 or ES2 sources +define es-compile + @mkdir -p $(dir $@) + $(CC) -c $(CFLAGS) $(ES$(1)_CPPFLAGS) $(ES$(1)_INCLUDES) -o $@ $< +endef + +$(ES1_OBJ_DIR)/%.o: %.c + $(call es-compile,1) + +$(ES1_OBJ_DIR)/%.o: %.S + $(call es-compile,1) + +$(ES1_OBJ_DIR)/%.o: $(MESA)/%.c + $(call es-compile,1) + +$(ES1_OBJ_DIR)/%.o: $(MESA)/%.S + $(call es-compile,1) + +$(ES2_OBJ_DIR)/%.o: %.c + $(call es-compile,2) + +$(ES2_OBJ_DIR)/%.o: %.S + $(call es-compile,2) + +$(ES2_OBJ_DIR)/%.o: $(MESA)/%.c + $(call es-compile,2) + +$(ES2_OBJ_DIR)/%.o: $(MESA)/%.S + $(call es-compile,2) + +libes1.a: $(ES1_OBJECTS) + @$(TOP)/bin/mklib -o es1 -static $(ES1_OBJECTS) + +libes2.a: $(ES2_OBJECTS) + @$(TOP)/bin/mklib -o es2 -static $(ES1_OBJECTS) + +libes1gallium.a: $(ES1_GALLIUM_OBJECTS) + @$(TOP)/bin/mklib -o es1gallium -static $(ES1_GALLIUM_OBJECTS) + +libes2gallium.a: $(ES2_GALLIUM_OBJECTS) + @$(TOP)/bin/mklib -o es2gallium -static $(ES2_GALLIUM_OBJECTS) + +libes1api.a: $(ES1_API_OBJECTS) + @$(TOP)/bin/mklib -o es1api -static $(ES1_API_OBJECTS) + +libes2api.a: $(ES2_API_OBJECTS) + @$(TOP)/bin/mklib -o es2api -static $(ES2_API_OBJECTS) + +GENERATED_SOURCES := \ + main/api_exec_es1.c \ + main/api_exec_es2.c \ + main/get_es1.c \ + main/get_es2.c + +main/api_exec_es1.c: main/APIspec.txt main/es_generator.py main/apiutil.py main/es1_special + $(PYTHON2) $(PYTHON_FLAGS) main/es_generator.py -S main/APIspec.txt -V GLES1.1 > $@ + +main/api_exec_es2.c: main/APIspec.txt main/es_generator.py main/apiutil.py main/es2_special + $(PYTHON2) $(PYTHON_FLAGS) main/es_generator.py -S main/APIspec.txt -V GLES2.0 > $@ + +main/get_es1.c: main/get_gen.py + $(PYTHON2) $(PYTHON_FLAGS) $< 1 > $@ + +main/get_es2.c: main/get_gen.py + $(PYTHON2) $(PYTHON_FLAGS) $< 2 > $@ + +.PHONY: clean +clean: + -rm -f $(ES1_LIBS) $(ES2_LIBS) + -rm -rf $(ES1_OBJ_DIR) $(ES2_OBJ_DIR) + -rm -f $(GENERATED_SOURCES) + -rm -f depend + -rm -f *~ + +subdirs: + make -C glapi + make -C $(MESA) asm_subdirs + +depend: $(ES1_ALL_SOURCES) $(ES2_ALL_SOURCES) + @echo "running $(MKDEP)" + @touch depend + @# MESA is "..", but luckily, directories are longer than 2 characters + @$(MKDEP) -f- -p$(ES1_OBJ_DIR)/ $(DEFINES) $(ES1_CFLAGS) \ + $(ES1_INCLUDES) $(ES1_ALL_SOURCES) 2>/dev/null | \ + sed -e 's,^$(ES1_OBJ_DIR)/$(MESA)/,$(ES1_OBJ_DIR)/,' > depend + @$(MKDEP) -f- -p$(ES2_OBJ_DIR)/ $(DEFINES) $(ES2_CFLAGS) \ + $(ES2_INCLUDES) $(ES2_ALL_SOURCES) 2>/dev/null | \ + sed -e 's,^$(ES2_OBJ_DIR)/$(MESA)/,$(ES2_OBJ_DIR)/,' >> depend + +-include depend diff --git a/src/mesa/es/main/APIspec.txt b/src/mesa/es/main/APIspec.txt new file mode 100644 index 0000000000..86dd546f63 --- /dev/null +++ b/src/mesa/es/main/APIspec.txt @@ -0,0 +1,2886 @@ +## Adapted from Mesa and Chromium. +# Python scripts read this file and generate various C files. + +# Possible lines: +# name Name of the function (without "gl" prefix). Required. +# +# return Datatype of returned value, or void. Required. +# +# param Zero or more of these lines may be present. Each describes a +# function parameter. Two fields follow: parameter name and the +# parameter type (which may be several tokens like "const GLvoid *"). +# +# vector Used to indicate the size of constant arrays referenced by +# the given parameter. (If the number of elements in the +# array is dependent on another parameter, use "dependentvector" +# (below) instead.) +# Two fields follow: the parameter name (previously defined by a +# 'param' line) and a number indicating how may elements are +# referenced by the vector. If the number is unknown, don't use +# a vector line. Example for glGetClipPlane: +# vector equation 4 +# +# dependentvector Used to indicate how many elements are referenced by +# pointer params, if the number depends on the value of another +# parameter. It is followed by the parameter name of the vector +# parameter (previously defined by a 'param' line, one of the +# potential sizes of the array, the name of the controlling +# parameter, and a list (one or more) of parameter values of the +# controlling parameter that are associated with the given size. +# There will always be more than one line of this type (or otherwise +# you could have used the "vector" specifier above). +# As a convenience, each parameter value named in a +# "dependentvector" specifier will also be considered as a +# "paramprop" specifier. +# Example for glLightfv: +# dependentvector params 4 pname GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION +# dependentvector params 3 pname GL_SPOT_DIRECTION +# dependentvector params 1 pname GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION +# +# category May be 1.x to indicate that the function belongs to OpenGL +# version 1.x. Or may be the name of an extension such as +# GL_ARB_multitexture. Or may be GLES1.x to indicate +# that the function belongs to GLES version 1.x. Required. +# May have more than one token to indicate that a function +# belongs to more than one category. +# +# alias Names the Mesa function _mesa_ that will be called. +# Mostly used when the function was originally defined and +# introduced into Mesa as an extension function (i.e. ARB); +# even though the function loses the extension as it is adopted +# into the core, the Mesa support remains named the same +# (for compatibility). +# +# aliasprefix May be used to change the default Mesa support functional +# prefix on a per-function basis. By default, it's "_mesa_"; +# but this allows it to be changed (e.g. to "_vbo_" for many +# of the core functions). +# +# props An optional list of properties for this function. Possible +# properties include: +# get - the function is a state-getter +# +# convertalias +# +# convertparams +# +# checkparam +# +# checkdependentparam + +name Color4f +aliasprefix _vbo_ +return void +param red GLfloat +param green GLfloat +param blue GLfloat +param alpha GLfloat +category 1.0 GLES1.1 + +name Color4ub +return void +param red GLubyte +param green GLubyte +param blue GLubyte +param alpha GLubyte +aliasprefix _vbo_ +convertalias Color4f +convertparams GLfloat red green blue alpha +category 1.0 GLES1.1 + +name Color4x +return void +param red GLfixed +param green GLfixed +param blue GLfixed +param alpha GLfixed +aliasprefix _vbo_ +convertalias Color4f +convertparams GLfloat red green blue alpha +category GLES1.1 GLES1.1:OES_fixed_point + +name ClipPlane +return void +param plane GLenum +checkparam plane GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 +param equation const GLdouble * +vector equation 4 +category 1.0 + +name ClipPlanef +return void +param plane GLenum +checkparam plane GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 +param equation const GLfloat * +vector equation 4 +convertalias ClipPlane +convertparams GLdouble equation +category GLES1.1 GLES1.1:OES_single_precision + +name ClipPlanex +return void +param plane GLenum +checkparam plane GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 +param equation const GLfixed * +vector equation 4 +convertalias ClipPlane +convertparams GLdouble equation +category GLES1.1 GLES1.1:OES_fixed_point + +name CullFace +return void +param mode GLenum +checkparam mode GL_FRONT GL_BACK GL_FRONT_AND_BACK +category 1.0 GLES1.1 GLES2.0 + +name Fogf +return void +param pname GLenum +checkparam pname GL_FOG_MODE GL_FOG_DENSITY GL_FOG_START GL_FOG_END +param param GLfloat +checkdependentparam pname GL_FOG_MODE param GL_EXP GL_EXP2 GL_LINEAR +category 1.0 GLES1.1 + +name Fogfv +return void +param pname GLenum +param params const GLfloat * +paramvec params GL_LINEAR +dependentvector params 4 pname GL_FOG_COLOR +dependentvector params 1 pname GL_FOG_DENSITY GL_FOG_START GL_FOG_END +dependentvector params 1 pname GL_FOG_MODE +checkdependentparam pname GL_FOG_MODE params GL_EXP GL_EXP2 GL_LINEAR +category 1.0 GLES1.1 + +name Fogx +return void +param pname GLenum +checkparam pname GL_FOG_MODE GL_FOG_DENSITY GL_FOG_START GL_FOG_END +param param GLfixed +checkdependentparam pname GL_FOG_MODE param GL_EXP GL_EXP2 GL_LINEAR +convertalias Fogf +convertparams GLfloat param +category GLES1.1 GLES1.1:OES_fixed_point + +name Fogxv +return void +param pname GLenum +param params const GLfixed * +dependentvector params 4 pname GL_FOG_COLOR +dependentvector params 1 pname GL_FOG_DENSITY GL_FOG_START GL_FOG_END +dependentvector params 1 pname GL_FOG_MODE +checkdependentparam pname GL_FOG_MODE params GL_EXP GL_EXP2 GL_LINEAR +convertalias Fogfv +convertparams GLfloat params +category GLES1.1 GLES1.1:OES_fixed_point + +name FrontFace +return void +param mode GLenum +checkparam mode GL_CW GL_CCW +category 1.0 GLES1.1 GLES2.0 + +name Hint +return void +param target GLenum +param mode GLenum +checkparam target GLES1.1:GL_FOG_HINT GLES1.1:GL_LINE_SMOOTH_HINT GLES1.1:GL_PERSPECTIVE_CORRECTION_HINT GLES1.1:GL_POINT_SMOOTH_HINT +checkparam target GL_GENERATE_MIPMAP_HINT +checkparam mode GL_FASTEST GL_NICEST GL_DONT_CARE +# OES_standard_derivatives +checkparam target GLES2.0:GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES +category GLES1.1 GLES2.0 + +name Lightf +return void +param light GLenum +checkparam light GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 +param pname GLenum +checkparam pname GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION +param param GLfloat +category 1.0 GLES1.1 + +name Lightfv +return void +param light GLenum +checkparam light GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 +param pname GLenum +param params const GLfloat * +paramvec params 0.0 1.0 1.0 0.0 +dependentvector params 4 pname GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION +dependentvector params 3 pname GL_SPOT_DIRECTION +dependentvector params 1 pname GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION +category 1.0 1.1 GLES1.1 + +name Lightx +return void +param light GLenum +checkparam light GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 +param pname GLenum +checkparam pname GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION +param param GLfixed +convertalias Lightf +convertparams GLfloat param +category GLES1.1 GLES1.1:OES_fixed_point + +name Lightxv +return void +param light GLenum +checkparam light GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 +param pname GLenum +param params const GLfixed * +dependentvector params 4 pname GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION +dependentvector params 3 pname GL_SPOT_DIRECTION +dependentvector params 1 pname GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION +convertalias Lightfv +convertparams GLfloat params +category GLES1.1 GLES1.1:OES_fixed_point + +name LightModelf +return void +param pname GLenum +checkparam pname GL_LIGHT_MODEL_TWO_SIDE +param param GLfloat +checkdependentparam pname GL_LIGHT_MODEL_TWO_SIDE param GL_TRUE GL_FALSE +category 1.0 GLES1.1 + +name LightModelfv +return void +param pname GLenum +param params const GLfloat * +dependentvector params 4 pname GL_LIGHT_MODEL_AMBIENT +dependentvector params 1 pname GL_LIGHT_MODEL_TWO_SIDE +category 1.0 GLES1.1 + +name LightModelx +return void +param pname GLenum +checkparam pname GL_LIGHT_MODEL_TWO_SIDE +param param GLfixed +checkdependentparam pname GL_LIGHT_MODEL_TWO_SIDE param GL_TRUE GL_FALSE +convertalias LightModelf +convertparams GLfloat param +category GLES1.1 GLES1.1:OES_fixed_point + +name LightModelxv +return void +param pname GLenum +param params const GLfixed * +dependentvector params 4 pname GL_LIGHT_MODEL_AMBIENT +dependentvector params 1 pname GL_LIGHT_MODEL_TWO_SIDE +checkdependentparam pname GL_LIGHT_MODEL_TWO_SIDE params GL_TRUE GL_FALSE +convertalias LightModelfv +convertparams GLfloat params +category GLES1.1 GLES1.1:OES_fixed_point + +name LineWidth +return void +param width GLfloat +category 1.0 GLES1.1 GLES2.0 + +name LineWidthx +return void +param width GLfixed +convertalias LineWidth +convertparams GLfloat width +category GLES1.1 GLES1.1:OES_fixed_point + +name Materialf +aliasprefix _vbo_ +return void +param face GLenum +checkparam face GL_FRONT_AND_BACK +param pname GLenum +checkparam pname GL_SHININESS +param param GLfloat +category 1.0 GLES1.1 + +name Materialfv +aliasprefix _vbo_ +return void +param face GLenum +checkparam face GL_FRONT_AND_BACK +param pname GLenum +param params const GLfloat * +paramvec params 0.8 0.8 0.5 0.1 +dependentvector params 4 pname GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR GL_EMISSION +dependentvector params 1 pname GL_SHININESS +category 1.0 GLES1.1 + +name Materialx +return void +param face GLenum +checkparam face GL_FRONT_AND_BACK +param pname GLenum +checkparam pname GL_SHININESS +param param GLfixed +aliasprefix _vbo_ +convertalias Materialf +convertparams GLfloat param +category GLES1.1 GLES1.1:OES_fixed_point + +name Materialxv +return void +param face GLenum +checkparam face GL_FRONT_AND_BACK +param pname GLenum +param params const GLfixed * +dependentvector params 4 pname GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR GL_EMISSION +dependentvector params 1 pname GL_SHININESS +aliasprefix _vbo_ +convertalias Materialfv +convertparams GLfloat params +category GLES1.1 GLES1.1:OES_fixed_point + +name PointSize +return void +param size GLfloat +category 1.0 GLES1.1 + +name PointSizex +return void +param size GLfixed +convertalias PointSize +convertparams GLfloat size +category GLES1.1 GLES1.1:OES_fixed_point + +name PointSizePointer +return void +param type GLenum +checkparam type GL_FIXED GL_FLOAT +param stride GLsizei +param pointer const GLvoid * +props setclient +# OES_vertex_half_float - not in glext.h +#checkparam type GL_HALF_FLOAT_OES +category GLES1.1:OES_point_size_array + +name Scissor +return void +param x GLint +param y GLint +param width GLsizei +param height GLsizei +category 1.0 GLES1.1 GLES2.0 + +name ShadeModel +return void +param mode GLenum +checkparam mode GL_FLAT GL_SMOOTH +category 1.0 GLES1.1 + +name TexParameterf +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param pname GLenum +param param GLfloat +checkdependentparam pname GL_TEXTURE_WRAP_S param GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_WRAP_T param GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_MIN_FILTER param GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR +checkdependentparam pname GL_TEXTURE_MAG_FILTER param GL_NEAREST GL_LINEAR +checkdependentparam pname GL_GENERATE_MIPMAP param GLES1.1:GL_TRUE GLES1.1:GL_FALSE +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +# OES_texture_mirrored_repeat +checkdependentparam pname GL_TEXTURE_WRAP_S param GLES1.1:GL_MIRRORED_REPEAT_OES +checkdependentparam pname GL_TEXTURE_WRAP_T param GLES1.1:GL_MIRRORED_REPEAT_OES +# EXT_texture_filter_anisotropic +checkparam pname GL_TEXTURE_MAX_ANISOTROPY_EXT +# OES_texture_3D +checkdependentparam pname GL_TEXTURE_WRAP_R_OES param GLES2.0:GL_CLAMP_TO_EDGE GLES2.0:GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +category GLES1.1 GLES2.0 + +name TexParameterfv +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param pname GLenum +param params const GLfloat * +dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GLES1.1:GL_GENERATE_MIPMAP +checkdependentparam pname GL_TEXTURE_WRAP_S params GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_WRAP_T params GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_MIN_FILTER params GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR +checkdependentparam pname GL_TEXTURE_MAG_FILTER params GL_NEAREST GL_LINEAR +checkdependentparam pname GL_GENERATE_MIPMAP params GLES1.1:GL_TRUE GLES1.1:GL_FALSE +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +# OES_texture_mirrored_repeat +checkdependentparam pname GL_TEXTURE_WRAP_S params GLES1.1:GL_MIRRORED_REPEAT_OES +checkdependentparam pname GL_TEXTURE_WRAP_T params GLES1.1:GL_MIRRORED_REPEAT_OES +# EXT_texture_filter_anisotropic +dependentvector params 1 pname GL_TEXTURE_MAX_ANISOTROPY_EXT +# OES_texture_3D +checkdependentparam pname GL_TEXTURE_WRAP_R_OES params GLES2.0:GL_CLAMP_TO_EDGE GLES2.0:GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +category GLES1.1 GLES2.0 + +name TexParameteri +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param pname GLenum +param param GLint +checkdependentparam pname GL_TEXTURE_WRAP_S param GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_WRAP_T param GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_MIN_FILTER param GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR +checkdependentparam pname GL_TEXTURE_MAG_FILTER param GL_NEAREST GL_LINEAR +checkdependentparam pname GL_GENERATE_MIPMAP param GLES1.1:GL_TRUE GLES1.1:GL_FALSE +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +# OES_texture_mirrored_repeat +checkdependentparam pname GL_TEXTURE_WRAP_S param GLES1.1:GL_MIRRORED_REPEAT_OES +checkdependentparam pname GL_TEXTURE_WRAP_T param GLES1.1:GL_MIRRORED_REPEAT_OES +# EXT_texture_filter_anisotropic +checkparam pname GL_TEXTURE_MAX_ANISOTROPY_EXT +# OES_texture_3D +checkdependentparam pname GL_TEXTURE_WRAP_R_OES param GLES2.0:GL_CLAMP_TO_EDGE GLES2.0:GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +category GLES1.1 GLES2.0 + +name TexParameteriv +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param pname GLenum +param params const GLint * +dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GLES1.1:GL_GENERATE_MIPMAP +checkdependentparam pname GL_TEXTURE_WRAP_S params GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_WRAP_T params GL_CLAMP_TO_EDGE GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +checkdependentparam pname GL_TEXTURE_MIN_FILTER params GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR +checkdependentparam pname GL_TEXTURE_MAG_FILTER params GL_NEAREST GL_LINEAR +checkdependentparam pname GL_GENERATE_MIPMAP params GLES1.1:GL_TRUE GLES1.1:GL_FALSE +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +# OES_texture_mirrored_repeat +checkdependentparam pname GL_TEXTURE_WRAP_S params GLES1.1:GL_MIRRORED_REPEAT_OES +checkdependentparam pname GL_TEXTURE_WRAP_T params GLES1.1:GL_MIRRORED_REPEAT_OES +# EXT_texture_filter_anisotropic +dependentvector params 1 pname GL_TEXTURE_MAX_ANISOTROPY_EXT +# OES_texture_3D +checkdependentparam pname GL_TEXTURE_WRAP_R_OES params GLES2.0:GL_CLAMP_TO_EDGE GLES2.0:GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +category GLES1.1 GLES2.0 + +name TexParameterx +return void +param target GLenum +checkparam target GL_TEXTURE_2D +param pname GLenum +param param GLfixed +checkdependentparam pname GL_TEXTURE_WRAP_S param GL_CLAMP_TO_EDGE GL_REPEAT +checkdependentparam pname GL_TEXTURE_WRAP_T param GL_CLAMP_TO_EDGE GL_REPEAT +checkdependentparam pname GL_TEXTURE_MIN_FILTER param GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR +checkdependentparam pname GL_TEXTURE_MAG_FILTER param GL_NEAREST GL_LINEAR +checkdependentparam pname GL_GENERATE_MIPMAP param GL_TRUE GL_FALSE +convertalias TexParameterf +convertparams GLfloat param +# OES_texture_cube_map +checkparam target GL_TEXTURE_CUBE_MAP_OES +# OES_texture_mirrored_repeat +checkdependentparam pname GL_TEXTURE_WRAP_S param GL_MIRRORED_REPEAT_OES +checkdependentparam pname GL_TEXTURE_WRAP_T param GL_MIRRORED_REPEAT_OES +# EXT_texture_filter_anisotropic +checkparam pname GL_TEXTURE_MAX_ANISOTROPY_EXT +category GLES1.1 GLES1.1:OES_fixed_point + + +# Same is true for this function. +name TexParameterxv +return void +param target GLenum +checkparam target GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP_OES +param pname GLenum +param params const GLfixed * +vector params 1 +dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GL_GENERATE_MIPMAP +checkdependentparam pname GL_TEXTURE_WRAP_S params GL_CLAMP_TO_EDGE GL_REPEAT +checkdependentparam pname GL_TEXTURE_WRAP_T params GL_CLAMP_TO_EDGE GL_REPEAT +checkdependentparam pname GL_TEXTURE_MIN_FILTER params GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR +checkdependentparam pname GL_TEXTURE_MAG_FILTER params GL_NEAREST GL_LINEAR +checkdependentparam pname GL_GENERATE_MIPMAP params GL_TRUE GL_FALSE +convertalias TexParameterfv +convertparams GLfloat params +# OES_texture_cube_map +checkparam target GL_TEXTURE_CUBE_MAP_OES +# OES_texture_mirrored_repeat +checkdependentparam pname GL_TEXTURE_WRAP_S params GL_MIRRORED_REPEAT_OES +checkdependentparam pname GL_TEXTURE_WRAP_T params GL_MIRRORED_REPEAT_OES +# EXT_texture_filter_anisotropic +dependentvector params 1 pname GL_TEXTURE_MAX_ANISOTROPY_EXT +category GLES1.1 GLES1.1:OES_fixed_point + +# TexImage2D has *different* versions for GLES1 and GLES2, strangely, +# with different types for "internalFormat". There's also a few +# tokens with different spellings. +name TexImage2D +return void +param target GLenum +checkparam target GL_TEXTURE_2D +param level GLint +param internalFormat GLint +param width GLsizei +param height GLsizei +param border GLint +param format GLenum +param type GLenum +param pixels const GLvoid * +checkparam internalFormat /GL_INVALID_VALUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_RGBA +checkparam border /GL_INVALID_VALUE 0 +# OES_texture_cube_map +checkparam target GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES +## OES_packed_depth_stencil - only appears in GLES2 header files? +#checkdependentparam format GL_DEPTH_STENCIL_OES internalFormat GL_UNSIGNED_INT_24_8_OES +category 1.0 GLES1.1 + +name TexImage2D +return void +param target GLenum +param level GLint +# it is compiled with OpenGL header +#param internalFormat GLenum +param internalFormat GLint +param width GLsizei +param height GLsizei +param border GLint +param format GLenum +param type GLenum +param pixels const GLvoid * +checkparam target GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +checkparam internalFormat /GL_INVALID_VALUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_RGBA +checkparam border /GL_INVALID_VALUE 0 +checkdependentparam format GL_ALPHA type GL_UNSIGNED_BYTE +checkdependentparam format GL_RGB type GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT_5_6_5 +checkdependentparam format GL_RGBA type GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_5_5_5_1 +checkdependentparam format GL_LUMINANCE type GL_UNSIGNED_BYTE +checkdependentparam format GL_LUMINANCE_ALPHA type GL_UNSIGNED_BYTE +# OES_texture_float +checkdependentparam format GL_ALPHA type GL_FLOAT +checkdependentparam format GL_RGB type GL_FLOAT +checkdependentparam format GL_RGBA type GL_FLOAT +checkdependentparam format GL_LUMINANCE type GL_FLOAT +checkdependentparam format GL_LUMINANCE_ALPHA type GL_FLOAT +# OES_texture_half_float +checkdependentparam format GL_ALPHA type GL_HALF_FLOAT_OES +checkdependentparam format GL_RGB type GL_HALF_FLOAT_OES +checkdependentparam format GL_RGBA type GL_HALF_FLOAT_OES +checkdependentparam format GL_LUMINANCE type GL_HALF_FLOAT_OES +checkdependentparam format GL_LUMINANCE_ALPHA type GL_HALF_FLOAT_OES +# EXT_texture_type_2_10_10_10_REV +checkdependentparam format GL_RGBA type GL_UNSIGNED_INT_2_10_10_10_REV_EXT +# OES_depth_texture +checkdependentparam format GL_DEPTH_COMPONENT type GL_UNSIGNED_SHORT GL_UNSIGNED_INT +checkparam internalFormat GL_DEPTH_COMPONENT +category GLES2.0 + +name TexEnvf +return void +param target GLenum +param pname GLenum +param param GLfloat +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +checkdependentparam pname GL_TEXTURE_ENV_MODE param GL_REPLACE GL_MODULATE GL_DECAL GL_BLEND GL_ADD GL_COMBINE +checkdependentparam pname GL_COMBINE_RGB param GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT GL_DOT3_RGB GL_DOT3_RGBA +checkdependentparam pname GL_COMBINE_ALPHA param GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT +checkdependentparam pname GL_RGB_SCALE param /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_ALPHA_SCALE param /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_SRC0_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC0_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +# OES_texture_env_crossbar +checkdependentparam pname GL_SRC0_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC0_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +# OES_point_sprite +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam pname GL_COORD_REPLACE_OES param GL_TRUE GL_FALSE +category 1.0 GLES1.1 + +name TexEnvfv +return void +param target GLenum +param pname GLenum +param params const GLfloat * +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam pname GL_COORD_REPLACE_OES params GL_TRUE GL_FALSE +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +checkdependentparam pname GL_TEXTURE_ENV_MODE params GL_REPLACE GL_MODULATE GL_DECAL GL_BLEND GL_ADD GL_COMBINE +checkdependentparam pname GL_COMBINE_RGB params GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT GL_DOT3_RGB GL_DOT3_RGBA +checkdependentparam pname GL_COMBINE_ALPHA params GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT +checkdependentparam pname GL_SRC0_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC0_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_RGB_SCALE params /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_ALPHA_SCALE params /GL_INVALID_VALUE 1.0 2.0 4.0 +dependentvector params 4 pname GL_TEXTURE_ENV_COLOR +dependentvector params 1 pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_COORD_REPLACE_OES GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +dependentvector params 1 pname GL_RGB_SCALE GL_ALPHA_SCALE +# OES_texture_env_crossbar +dependentvector params 1 pname GL_SRC0_RGB GL_SRC1_RGB GL_SRC2_RGB GL_SRC0_ALPHA GL_SRC1_ALPHA GL_SRC2_ALPHA +checkdependentparam pname GL_SRC0_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC0_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +category 1.0 GLES1.1 + +name TexEnvi +return void +param target GLenum +param pname GLenum +param param GLint +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam pname GL_COORD_REPLACE_OES param GL_TRUE GL_FALSE +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +checkdependentparam pname GL_TEXTURE_ENV_MODE param GL_REPLACE GL_MODULATE GL_DECAL GL_BLEND GL_ADD GL_COMBINE +checkdependentparam pname GL_COMBINE_RGB param GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT GL_DOT3_RGB GL_DOT3_RGBA +checkdependentparam pname GL_COMBINE_ALPHA param GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT +checkdependentparam pname GL_RGB_SCALE param /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_ALPHA_SCALE param /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_SRC0_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC0_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +# OES_texture_env_crossbar +checkdependentparam pname GL_SRC0_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC0_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +category 1.0 GLES1.1 + +name TexEnviv +return void +param target GLenum +param pname GLenum +param params const GLint * +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam pname GL_COORD_REPLACE_OES params GL_TRUE GL_FALSE +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +checkdependentparam pname GL_TEXTURE_ENV_MODE params GL_REPLACE GL_MODULATE GL_DECAL GL_BLEND GL_ADD GL_COMBINE +checkdependentparam pname GL_COMBINE_RGB params GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT GL_DOT3_RGB GL_DOT3_RGBA +checkdependentparam pname GL_COMBINE_ALPHA params GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT +checkdependentparam pname GL_SRC0_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC0_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_RGB_SCALE params /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_ALPHA_SCALE params /GL_INVALID_VALUE 1.0 2.0 4.0 +dependentvector params 4 pname GL_TEXTURE_ENV_COLOR +dependentvector params 1 pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_COORD_REPLACE_OES GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +dependentvector params 1 pname GL_RGB_SCALE GL_ALPHA_SCALE +# OES_texture_env_crossbar +checkdependentparam pname GL_SRC0_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC0_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +category 1.0 GLES1.1 + +name TexEnvx +return void +param target GLenum +param pname GLenum +param param GLfixed +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam pname GL_COORD_REPLACE_OES param GL_TRUE GL_FALSE +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +checkdependentparam pname GL_TEXTURE_ENV_MODE param GL_REPLACE GL_MODULATE GL_DECAL GL_BLEND GL_ADD GL_COMBINE +checkdependentparam pname GL_COMBINE_RGB param GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT GL_DOT3_RGB GL_DOT3_RGBA +checkdependentparam pname GL_COMBINE_ALPHA param GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT +checkdependentparam pname GL_RGB_SCALE param /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_ALPHA_SCALE param /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_SRC0_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC0_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_RGB param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_RGB param GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_ALPHA param GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_ALPHA param GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +convertalias TexEnvf +convertparams GLfloat param +# OES_texture_env_crossbar +checkdependentparam pname GL_SRC0_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_RGB param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC0_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_ALPHA param GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +category 1.0 GLES1.1 GLES1.1:OES_fixed_point + +name TexEnvxv +return void +param target GLenum +param pname GLenum +param params const GLfixed * +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam pname GL_COORD_REPLACE_OES params GL_TRUE GL_FALSE +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +checkdependentparam pname GL_TEXTURE_ENV_MODE params GL_REPLACE GL_MODULATE GL_DECAL GL_BLEND GL_ADD GL_COMBINE +checkdependentparam pname GL_COMBINE_RGB params GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT GL_DOT3_RGB GL_DOT3_RGBA +checkdependentparam pname GL_COMBINE_ALPHA params GL_REPLACE GL_MODULATE GL_ADD GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT +checkdependentparam pname GL_SRC0_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC0_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND0_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC1_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND1_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_RGB params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_RGB params GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_SRC2_ALPHA params GL_TEXTURE GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS +checkdependentparam pname GL_OPERAND2_ALPHA params GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA +checkdependentparam pname GL_RGB_SCALE params /GL_INVALID_VALUE 1.0 2.0 4.0 +checkdependentparam pname GL_ALPHA_SCALE params /GL_INVALID_VALUE 1.0 2.0 4.0 +dependentvector params 4 pname GL_TEXTURE_ENV_COLOR +dependentvector params 1 pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_COORD_REPLACE_OES GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +dependentvector params 1 pname GL_RGB_SCALE GL_ALPHA_SCALE +convertalias TexEnvfv +convertparams GLfloat params +# OES_texture_env_crossbar +dependentvector params 1 pname GL_SRC0_RGB GL_SRC1_RGB GL_SRC2_RGB GL_SRC0_ALPHA GL_SRC1_ALPHA GL_SRC2_ALPHA +checkdependentparam pname GL_SRC0_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_RGB params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC0_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC1_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +checkdependentparam pname GL_SRC2_ALPHA params GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +category GLES1.1 GLES1.1:OES_fixed_point + +name TexGenx +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +param param GLfixed +checkdependentparam pname GL_TEXTURE_GEN_MODE_OES param GL_NORMAL_MAP_OES GL_REFLECTION_MAP_OES +convertalias TexGenf +convertparams GLfloat param +category GLES1.1:OES_texture_cube_map + +name TexGenxv +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +param params const GLfixed * +dependentvector params 1 pname GL_TEXTURE_GEN_MODE_OES +checkdependentparam pname GL_TEXTURE_GEN_MODE_OES params GL_NORMAL_MAP_OES GL_REFLECTION_MAP_OES +convertalias TexGenfv +convertparams GLfloat params +category GLES1.1:OES_texture_cube_map + +name TexGenf +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +checkparam pname GL_TEXTURE_GEN_MODE_OES +param param GLfloat +checkdependentparam pname GL_TEXTURE_GEN_MODE_OES param GL_NORMAL_MAP_OES GL_REFLECTION_MAP_OES +category 1.0 GLES1.1:OES_texture_cube_map + +name TexGenfv +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +param params const GLfloat * +dependentvector params 1 pname GL_TEXTURE_GEN_MODE_OES +checkdependentparam pname GL_TEXTURE_GEN_MODE_OES params GL_NORMAL_MAP_OES GL_REFLECTION_MAP_OES +category 1.0 GLES1.1:OES_texture_cube_map + +name TexGeni +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +checkparam pname GL_TEXTURE_GEN_MODE_OES +param param GLint +checkdependentparam pname GL_TEXTURE_GEN_MODE_OES param GL_NORMAL_MAP_OES GL_REFLECTION_MAP_OES +category 1.0 GLES1.1:OES_texture_cube_map + +name TexGeniv +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +checkparam pname GL_TEXTURE_GEN_MODE_OES +param params const GLint * +dependentvector params 1 pname GL_TEXTURE_GEN_MODE_OES +checkdependentparam pname GL_TEXTURE_GEN_MODE_OES params GL_NORMAL_MAP_OES GL_REFLECTION_MAP_OES +convertalias TexGenfv +convertparams GLfloat params +category 1.0 GLES1.1:OES_texture_cube_map + +name Clear +return void +param mask GLbitfield +checkparam mask /GL_INVALID_VALUE 0 (GL_COLOR_BUFFER_BIT) (GL_DEPTH_BUFFER_BIT) (GL_STENCIL_BUFFER_BIT) (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) (GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT) (GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT) (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT) +category 1.0 GLES1.1 GLES2.0 + +name ClearColor +return void +param red GLclampf +param green GLclampf +param blue GLclampf +param alpha GLclampf +category 1.0 GLES1.1 GLES2.0 + +name ClearColorx +return void +param red GLclampx +param green GLclampx +param blue GLclampx +param alpha GLclampx +convertalias ClearColor +convertparams GLclampf red green blue alpha +category GLES1.1 GLES1.1:OES_fixed_point + +name ClearStencil +return void +param s GLint +category 1.0 GLES1.1 GLES2.0 + +name ClearDepthf +return void +param depth GLclampf +convertalias ClearDepth +convertparams GLclampd depth +category GLES1.1 GLES1.1:OES_single_precision GLES2.0 + +name ClearDepthx +return void +param depth GLclampx +convertalias ClearDepth +convertparams GLclampd depth +category GLES1.1 GLES1.1:OES_fixed_point + +name StencilMask +return void +param mask GLuint +category 1.0 GLES1.1 GLES2.0 + +name StencilMaskSeparate +return void +param face GLenum +param mask GLuint +checkparam face GL_FRONT GL_BACK GL_FRONT_AND_BACK +category GLES2.0 + +name ColorMask +return void +param red GLboolean +param green GLboolean +param blue GLboolean +param alpha GLboolean +category 1.0 GLES1.1 GLES2.0 + +name DepthMask +return void +param flag GLboolean +category 1.0 GLES1.1 GLES2.0 + +# Two versions, as GLES2 has a vastly different set of enable/disable capabilities +name Disable +return void +param cap GLenum +checkparam cap GL_VERTEX_ARRAY GL_NORMAL_ARRAY GL_COLOR_ARRAY GL_TEXTURE_COORD_ARRAY GL_NORMALIZE GL_RESCALE_NORMAL GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_FOG GL_LIGHTING GL_COLOR_MATERIAL GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_POINT_SMOOTH GL_LINE_SMOOTH GL_CULL_FACE GL_POLYGON_OFFSET_FILL GL_MULTISAMPLE GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_ALPHA_TO_ONE GL_SAMPLE_COVERAGE GL_TEXTURE_2D GL_SCISSOR_TEST GL_ALPHA_TEST GL_STENCIL_TEST GL_DEPTH_TEST GL_BLEND GL_DITHER GL_COLOR_LOGIC_OP +# OES_matrix_palette +checkparam cap GL_MATRIX_INDEX_ARRAY_OES GL_WEIGHT_ARRAY_OES +# OES_point_size_array +checkparam cap GL_POINT_SIZE_ARRAY_OES +# OES_point_sprite +checkparam cap GL_POINT_SPRITE_OES +# OES_texture_cube_map +checkparam cap GL_TEXTURE_CUBE_MAP_OES GL_TEXTURE_GEN_STR_OES +category GLES1.1 + +name Disable +return void +param cap GLenum +checkparam cap GL_CULL_FACE GL_SCISSOR_TEST GL_POLYGON_OFFSET_FILL GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_COVERAGE GL_STENCIL_TEST GL_DEPTH_TEST GL_DITHER GL_BLEND +category GLES2.0 + +# Two versions, as GLES2 has a vastly different set of enable/disable capabilities +name Enable +return void +param cap GLenum +checkparam cap GL_VERTEX_ARRAY GL_NORMAL_ARRAY GL_COLOR_ARRAY GL_TEXTURE_COORD_ARRAY GL_NORMALIZE GL_RESCALE_NORMAL GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_FOG GL_LIGHTING GL_COLOR_MATERIAL GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_POINT_SMOOTH GL_LINE_SMOOTH GL_CULL_FACE GL_POLYGON_OFFSET_FILL GL_MULTISAMPLE GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_ALPHA_TO_ONE GL_SAMPLE_COVERAGE GL_TEXTURE_2D GL_SCISSOR_TEST GL_ALPHA_TEST GL_STENCIL_TEST GL_DEPTH_TEST GL_BLEND GL_DITHER GL_COLOR_LOGIC_OP +# OES_matrix_palette +checkparam cap GL_MATRIX_INDEX_ARRAY_OES GL_WEIGHT_ARRAY_OES +# OES_point_size_array +checkparam cap GL_POINT_SIZE_ARRAY_OES +# OES_point_sprite +checkparam cap GL_POINT_SPRITE_OES +# OES_texture_cube_map +checkparam cap GL_TEXTURE_CUBE_MAP_OES GL_TEXTURE_GEN_STR_OES +category GLES1.1 + +name Enable +return void +param cap GLenum +checkparam cap GL_CULL_FACE GL_SCISSOR_TEST GL_POLYGON_OFFSET_FILL GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_COVERAGE GL_STENCIL_TEST GL_DEPTH_TEST GL_DITHER GL_BLEND +category GLES2.0 + +name Finish +return void +category 1.0 GLES1.1 GLES2.0 + +name Flush +return void +category 1.0 GLES1.1 GLES2.0 + +name AlphaFunc +return void +param func GLenum +checkparam func GL_NEVER GL_LESS GL_EQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_GEQUAL GL_ALWAYS +param ref GLclampf +category 1.0 GLES1.1 + +name AlphaFuncx +return void +param func GLenum +checkparam func GL_NEVER GL_LESS GL_EQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_GEQUAL GL_ALWAYS +param ref GLclampx +convertalias AlphaFunc +convertparams GLclampf ref +category GLES1.1 GLES1.1:OES_fixed_point + +name BlendFunc +return void +param sfactor GLenum +checkparam sfactor GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_COLOR GL_DST_ALPHA GL_ONE_MINUS_DST_COLOR GL_ONE_MINUS_DST_ALPHA GL_SRC_ALPHA_SATURATE +checkparam sfactor GLES2.0:GL_CONSTANT_COLOR GLES2.0:GL_CONSTANT_ALPHA GLES2.0:GL_ONE_MINUS_CONSTANT_COLOR GLES2.0:GL_ONE_MINUS_CONSTANT_ALPHA +param dfactor GLenum +checkparam dfactor GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_COLOR GL_DST_ALPHA GL_ONE_MINUS_DST_COLOR GL_ONE_MINUS_DST_ALPHA +checkparam dfactor GLES2.0:GL_CONSTANT_COLOR GLES2.0:GL_CONSTANT_ALPHA GLES2.0:GL_ONE_MINUS_CONSTANT_COLOR GLES2.0:GL_ONE_MINUS_CONSTANT_ALPHA +category 1.0 GLES1.1 GLES2.0 + +name LogicOp +return void +param opcode GLenum +checkparam opcode GL_CLEAR GL_SET GL_COPY GL_COPY_INVERTED GL_NOOP GL_INVERT GL_AND GL_NAND GL_OR GL_NOR GL_XOR GL_EQUIV GL_AND_REVERSE GL_AND_INVERTED GL_OR_REVERSE GL_OR_INVERTED +category 1.0 GLES1.1 + +name StencilFunc +return void +param func GLenum +param ref GLint +param mask GLuint +checkparam func GL_NEVER GL_LESS GL_LEQUAL GL_GREATER GL_GEQUAL GL_EQUAL GL_NOTEQUAL GL_ALWAYS +category 1.0 GLES1.1 GLES2.0 + +name StencilFuncSeparate +return void +param face GLenum +param func GLenum +param ref GLint +param mask GLuint +checkparam face GL_FRONT GL_BACK GL_FRONT_AND_BACK +checkparam func GL_NEVER GL_LESS GL_LEQUAL GL_GREATER GL_GEQUAL GL_EQUAL GL_NOTEQUAL GL_ALWAYS +category GLES2.0 + +name StencilOp +return void +param fail GLenum +param zfail GLenum +param zpass GLenum +checkparam fail GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GLES2.0:GL_INCR_WRAP GLES2.0:GL_DECR_WRAP +checkparam zfail GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GLES2.0:GL_INCR_WRAP GLES2.0:GL_DECR_WRAP +checkparam zpass GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GLES2.0:GL_INCR_WRAP GLES2.0:GL_DECR_WRAP +# OES_stencil_wrap +checkparam fail GLES1.1:GL_INCR_WRAP_OES GLES1.1:GL_DECR_WRAP_OES +checkparam zfail GLES1.1:GL_INCR_WRAP_OES GLES1.1:GL_DECR_WRAP_OES +checkparam zpass GLES1.1:GL_INCR_WRAP_OES GLES1.1:GL_DECR_WRAP_OES +category GLES1.1 GLES2.0 + +name StencilOpSeparate +return void +param face GLenum +param fail GLenum +param zfail GLenum +param zpass GLenum +checkparam face GL_FRONT GL_BACK GL_FRONT_AND_BACK +checkparam fail GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP GL_DECR_WRAP +checkparam zfail GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP GL_DECR_WRAP +checkparam zpass GL_KEEP GL_ZERO GL_REPLACE GL_INCR GL_DECR GL_INVERT GL_INCR_WRAP GL_DECR_WRAP +category GLES2.0 + +name DepthFunc +return void +param func GLenum +checkparam func GL_NEVER GL_LESS GL_EQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_GEQUAL GL_ALWAYS +category 1.0 GLES1.1 GLES2.0 + +name PixelStorei +return void +param pname GLenum +checkparam pname GL_PACK_ALIGNMENT GL_UNPACK_ALIGNMENT +param param GLint +checkparam param /GL_INVALID_VALUE 1 2 4 8 +category 1.0 GLES1.1 GLES2.0 + +name ReadPixels +return void +param x GLint +param y GLint +param width GLsizei +param height GLsizei +param format GLenum +param type GLenum +param pixels GLvoid * +# Technically, only two combinations are actually allowed: +# GL_RGBA/GL_UNSIGNED_BYTE, and some implementation-specific internal +# preferred combination. I don't know what that is, so I'm allowing +# any valid combination for now; the underlying support should fail +# when necessary. +checkdependentparam format GL_RGBA type GL_UNSIGNED_BYTE +checkdependentparam format GL_RGBA type GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_5_5_5_1 +checkdependentparam format GL_RGB type GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT_5_6_5 +checkdependentparam format GL_LUMINANCE_ALPHA format GL_UNSIGNED_BYTE +checkdependentparam format GL_LUMINANCE format GL_UNSIGNED_BYTE +checkdependentparam format GL_ALPHA format GL_UNSIGNED_BYTE +props get +category 1.0 GLES1.1 GLES2.0 + +# Note: glGetBooleanv param checking done inside Mesa +name GetBooleanv +return void +param pname GLenum +param params GLboolean * +props get +category GLES1.1 GLES2.0 + +name GetClipPlanef +return void +param plane GLenum +checkparam plane GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 +param equation GLfloat * +paramvec equation 0.0 0.0 0.0 0.0 +vector equation 4 +convertalias GetClipPlane +convertparams GLdouble equation +props get +category GLES1.1 GLES1.1:OES_single_precision + +name GetClipPlanex +return void +param plane GLenum +checkparam plane GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 +param equation GLfixed * +paramvec equation 0.0 0.0 0.0 0.0 +vector equation 4 +convertalias GetClipPlane +convertparams GLdouble equation +props get +category GLES1.1 GLES1.1:OES_fixed_point + +name GetError +return GLenum +props get +category 1.0 GLES1.1 GLES2.0 + +# Note: glGetFloatv param checking done inside Mesa +name GetFloatv +return void +param pname GLenum +param params GLfloat * +props get +category GLES1.1 GLES2.0 + +name GetFixedv +return void +param pname GLenum +param params GLfixed * +convertalias GetFloatv +convertparams GLfloat params +props get +dependentvector params 1 pname GL_CLIENT_ACTIVE_TEXTURE GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_TYPE GL_VERTEX_ARRAY_STRIDE GL_NORMAL_ARRAY GL_NORMAL_ARRAY_TYPE GL_NORMAL_ARRAY_STRIDE GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_TYPE +dependentvector params 1 pname GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_COORD_ARRAY_STRIDE GL_POINT_SIZE_ARRAY_OES GL_POINT_SIZE_ARRAY_STRIDE_OES GL_ARRAY_BUFFER_BINDING GL_VERTEX_ARRAY_BUFFER_BINDING GL_NORMAL_ARRAY_BUFFER_BINDING GL_COLOR_ARRAY_BUFFER_BINDING GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES GL_ELEMENT_ARRAY_BUFFER_BINDING +dependentvector params 1 pname GL_MODELVIEW_STACK_DEPTH GL_PROJECTION_STACK_DEPTH GL_TEXTURE_STACK_DEPTH GL_MATRIX_MODE GL_NORMALIZE GL_RESCALE_NORMAL GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 +dependentvector params 1 pname GL_FOG_DENSITY GL_FOG_START GL_FOG_END GL_FOG_MODE GL_FOG GL_SHADE_MODEL +dependentvector params 1 pname GL_LIGHTING GL_COLOR_MATERIAL GL_LIGHT_MODEL_TWO_SIDE +dependentvector params 1 pname GL_POINT_SIZE GL_POINT_SMOOTH GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE GL_POINT_SPRITE_OES GL_LINE_WIDTH GL_LINE_SMOOTH GL_CULL_FACE GL_CULL_FACE_MODE GL_FRONT_FACE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_UNITS GL_POLYGON_OFFSET_FILL +dependentvector params 1 pname GL_MULTISAMPLE GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_ALPHA_TO_ONE GL_SAMPLE_COVERAGE GL_SAMPLE_COVERAGE_VALUE +dependentvector params 1 pname GL_TEXTURE_2D GL_TEXTURE_BINDING_2D +dependentvector params 1 pname GL_ACTIVE_TEXTURE +dependentvector params 1 pname GL_SCISSOR_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_STENCIL_TEST GL_STENCIL_FUNC GL_STENCIL_VALUE_MASK GL_STENCIL_REF GL_STENCIL_FAIL GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_DEPTH_TEST GL_DEPTH_FUNC GL_BLEND GL_BLEND_SRC GL_BLEND_DST GL_DITHER GL_COLOR_LOGIC_OP GL_LOGIC_OP_MODE +dependentvector params 1 pname GL_DEPTH_WRITEMASK GL_STENCIL_WRITEMASK GL_DEPTH_CLEAR_VALUE GL_STENCIL_CLEAR_VALUE +dependentvector params 1 pname GL_UNPACK_ALIGNMENT GL_PACK_ALIGNMENT +dependentvector params 1 pname GL_PERSPECTIVE_CORRECTION_HINT GL_POINT_SMOOTH_HINT GL_LINE_SMOOTH_HINT GL_FOG_HINT GL_GENERATE_MIPMAP_HINT +dependentvector params 1 pname GL_MAX_LIGHTS GL_MAX_CLIP_PLANES GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_STACK_DEPTH GL_SUBPIXEL_BITS GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_UNITS GL_SAMPLE_BUFFERS GL_SAMPLES GL_NUM_COMPRESSED_TEXTURE_FORMATS GL_RED_BITS GL_GREEN_BITS GL_BLUE_BITS GL_ALPHA_BITS GL_DEPTH_BITS GL_STENCIL_BITS +dependentvector params 2 pname GL_MAX_VIEWPORT_DIMS GL_ALIASED_POINT_SIZE_RANGE GL_SMOOTH_POINT_SIZE_RANGE GL_ALIASED_LINE_WIDTH_RANGE GL_SMOOTH_LINE_WIDTH_RANGE +dependentvector params 2 pname GL_DEPTH_RANGE +dependentvector params 3 pname GL_CURRENT_NORMAL +dependentvector params 3 pname GL_POINT_DISTANCE_ATTENUATION +dependentvector params 4 pname GL_CURRENT_COLOR GL_CURRENT_TEXTURE_COORDS +dependentvector params 4 pname GL_SCISSOR_BOX +dependentvector params 4 pname GL_COLOR_WRITEMASK GL_COLOR_CLEAR_VALUE +dependentvector params 4 pname GL_LIGHT_MODEL_AMBIENT +dependentvector params 4 pname GL_VIEWPORT +dependentvector params 4 pname GL_FOG_COLOR +dependentvector params 16 pname GL_MODELVIEW_MATRIX GL_PROJECTION_MATRIX GL_TEXTURE_MATRIX +dependentvector params _get_size(GL_NUM_COMPRESSED_TEXTURE_FORMATS) pname GL_COMPRESSED_TEXTURE_FORMATS +# OES_blend_subtract +dependentvector params 1 pname GL_BLEND_SRC_RGB_OES GL_BLEND_DST_RGB_OES GL_BLEND_SRC_ALPHA_OES GL_BLEND_DST_ALPHA_OES +# OES_blend_equation_separate +dependentvector params 1 pname GL_BLEND_EQUATION_RGB_OES GL_BLEND_EQUATION_ALPHA_OES +# OES_framebuffer_object +dependentvector params 1 pname GL_FRAMEBUFFER_BINDING_OES GL_RENDERBUFFER_BINDING_OES GL_MAX_RENDERBUFFER_SIZE_OES +# OES_matrix_get +dependentvector params 16 pname GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES +# OES_matrix_palette +dependentvector params 1 pname GL_MAX_PALETTE_MATRICES_OES GL_MAX_VERTEX_UNITS_OES GL_CURRENT_PALETTE_MATRIX_OES +dependentvector params 1 pname GL_MATRIX_INDEX_ARRAY_SIZE_OES GL_MATRIX_INDEX_ARRAY_TYPE_OES GL_MATRIX_INDEX_ARRAY_STRIDE_OES GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES GL_WEIGHT_ARRAY_SIZE_OES GL_WEIGHT_ARRAY_TYPE_OES GL_WEIGHT_ARRAY_STRIDE_OES GL_WEIGHT_ARRAY_BUFFER_BINDING_OES +# OES_point_size_array +dependentvector params 1 pname GL_POINT_SIZE_ARRAY_TYPE_OES GL_POINT_SIZE_ARRAY_STRIDE_OES GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES +# OES_read_format +dependentvector params 1 pname GL_IMPLEMENTATION_COLOR_READ_TYPE_OES GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES +# OES_texture_cube_map +dependentvector params 1 pname GL_TEXTURE_CUBE_MAP_OES GL_TEXTURE_BINDING_CUBE_MAP_OES GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES +# EXT_texture_filter_anisotropic +dependentvector params 1 pname GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT +# These values return booleans or GLenums, and should not have their +# value converted when used with glGetFixed() +dependentnovalueconvert params pname GL_VERTEX_ARRAY GL_VERTEX_ARRAY_TYPE GL_NORMAL_ARRAY GL_NORMAL_ARRAY_TYPE GL_COLOR_ARRAY GL_COLOR_ARRAY_TYPE GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_TYPE GL_POINT_SIZE_ARRAY_OES GL_MATRIX_MODE GL_NORMALIZE GL_RESCALE_NORMAL GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_FOG_MODE GL_FOG GL_SHADE_MODEL GL_LIGHTING GL_COLOR_MATERIAL GL_LIGHT_MODEL_TWO_SIDE GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_POINT_SMOOTH GL_POINT_SPRITE_OES GL_LINE_SMOOTH GL_CULL_FACE GL_CULL_FACE_MODE GL_FRONT_FACE GL_POLYGON_OFFSET_FILL GL_MULTISAMPLE GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_ALPHA_TO_ONE GL_SAMPLE_COVERAGE GL_TEXTURE_2D GL_ACTIVE_TEXTURE GL_SCISSOR_TEST GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_STENCIL_TEST GL_STENCIL_FUNC GL_STENCIL_FAIL GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_DEPTH_TEST GL_DEPTH_FUNC GL_BLEND GL_BLEND_SRC GL_BLEND_DST GL_DITHER GL_COLOR_LOGIC_OP GL_LOGIC_OP_MODE GL_DEPTH_WRITEMASK GL_PERSPECTIVE_CORRECTION_HINT GL_POINT_SMOOTH_HINT GL_LINE_SMOOTH_HINT GL_FOG_HINT GL_GENERATE_MIPMAP_HINT GL_COMPRESSED_TEXTURE_FORMATS GL_IMPLEMENTATION_COLOR_READ_TYPE_OES GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES GL_BLEND_SRC_RGB_OES GL_BLEND_DST_RGB_OES GL_BLEND_SRC_ALPHA_OES GL_BLEND_DST_ALPHA_OES GL_BLEND_EQUATION_RGB_OES GL_BLEND_EQUATION_ALPHA_OES GL_MATRIX_INDEX_ARRAY_TYPE_OES GL_WEIGHT_ARRAY_TYPE_OES GL_POINT_SIZE_ARRAY_TYPE_OES GL_TEXTURE_CUBE_MAP_OES +category GLES1.1 GLES1.1:OES_fixed_point + +# Note: glGetIntegerv param checking done inside Mesa +name GetIntegerv +return void +param pname GLenum +param params GLint * +props get +category GLES1.1 GLES2.0 + + +# This does *not* specify dependent vectors because everything is just +# passed down to Mesa - no copy or conversion is done. +name GetLightfv +return void +param light GLenum +checkparam light GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 +param pname GLenum +checkparam pname GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_DIRECTION GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION +param params GLfloat * +props get +category 1.0 GLES1.1 + +name GetLightxv +return void +param light GLenum +checkparam light GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 +param pname GLenum +param params GLfixed * +dependentvector params 4 pname GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION +dependentvector params 3 pname GL_SPOT_DIRECTION +dependentvector params 1 pname GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_QUADRATIC_ATTENUATION +convertalias GetLightfv +convertparams GLfloat params +props get +category GLES1.1 GLES1.1:OES_fixed_point + +name GetMaterialfv +return void +param face GLenum +checkparam face GL_FRONT GL_BACK +param pname GLenum +checkparam pname GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR GL_EMISSION GL_SHININESS +param params GLfloat * +props get +category 1.0 GLES1.1 + +name GetMaterialiv +return void +param face GLenum +checkparam face GL_FRONT GL_BACK +param pname GLenum +checkparam pname GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR GL_EMISSION GL_SHININESS +param params GLint * +category 1.0 +props get + +name GetMaterialxv +return void +param face GLenum +checkparam face GL_FRONT GL_BACK +param pname GLenum +param params GLfixed * +props get +dependentvector params 1 pname GL_SHININESS +dependentvector params 4 pname GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR GL_EMISSION +convertalias GetMaterialfv +convertparams GLfloat params +category GLES1.1 GLES1.1:OES_fixed_point + +name GetString +return const GLubyte * +param name GLenum +checkparam name GL_VENDOR GL_RENDERER GL_VERSION GL_EXTENSIONS +props get +category 1.0 GLES1.1 GLES2.0 + +name GetTexEnvfv +return void +param target GLenum +param pname GLenum +param params GLfloat * +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +dependentvector params 4 pname GL_TEXTURE_ENV_COLOR +dependentvector params 1 pname GL_RGB_SCALE GL_ALPHA_SCALE +dependentvector params 1 pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_SRC0_RGB GL_SRC1_RGB GL_SRC2_RGB GL_SRC0_ALPHA GL_SRC1_ALPHA GL_SRC2_ALPHA GL_OPERAND0_RGB GL_OPERAND1_RGB GL_OPERAND2_RGB GL_OPERAND0_ALPHA GL_OPERAND1_ALPHA GL_OPERAND2_ALPHA GL_COORD_REPLACE_OES +dependentnovalueconvert params pname GL_COORD_REPLACE_OES GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +props get +category 1.0 GLES1.1 + +name GetTexEnviv +return void +param target GLenum +param pname GLenum +param params GLint * +props get +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +category 1.0 GLES1.1 +dependentvector params 4 pname GL_TEXTURE_ENV_COLOR +dependentvector params 1 pname GL_RGB_SCALE GL_ALPHA_SCALE +dependentvector params 1 pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_SRC0_RGB GL_SRC1_RGB GL_SRC2_RGB GL_SRC0_ALPHA GL_SRC1_ALPHA GL_SRC2_ALPHA GL_OPERAND0_RGB GL_OPERAND1_RGB GL_OPERAND2_RGB GL_OPERAND0_ALPHA GL_OPERAND1_ALPHA GL_OPERAND2_ALPHA GL_COORD_REPLACE_OES +dependentnovalueconvert params pname GL_COORD_REPLACE_OES GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA + +name GetTexEnvxv +return void +param target GLenum +param pname GLenum +param params GLfixed * +checkdependentparam target GL_POINT_SPRITE_OES pname GL_COORD_REPLACE_OES +checkdependentparam target GL_TEXTURE_ENV pname GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_COMBINE_RGB GL_COMBINE_ALPHA GL_RGB_SCALE GL_ALPHA_SCALE GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +dependentvector params 4 pname GL_TEXTURE_ENV_COLOR +dependentvector params 1 pname GL_RGB_SCALE GL_ALPHA_SCALE +dependentvector params 1 pname GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_SRC0_RGB GL_SRC1_RGB GL_SRC2_RGB GL_SRC0_ALPHA GL_SRC1_ALPHA GL_SRC2_ALPHA GL_OPERAND0_RGB GL_OPERAND1_RGB GL_OPERAND2_RGB GL_OPERAND0_ALPHA GL_OPERAND1_ALPHA GL_OPERAND2_ALPHA GL_COORD_REPLACE_OES +dependentnovalueconvert params pname GL_COORD_REPLACE_OES GL_TEXTURE_ENV_MODE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_SRC0_RGB GL_OPERAND0_RGB GL_SRC0_ALPHA GL_OPERAND0_ALPHA GL_SRC1_RGB GL_OPERAND1_RGB GL_SRC1_ALPHA GL_OPERAND1_ALPHA GL_SRC2_RGB GL_OPERAND2_RGB GL_SRC2_ALPHA GL_OPERAND2_ALPHA +convertalias GetTexEnvfv +convertparams GLfloat params +props get +category GLES1.1 GLES1.1:OES_fixed_point + +name GetTexGenfv +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +param params GLfloat * +dependentvector params 1 pname GL_TEXTURE_GEN_MODE_OES +props get +category 1.0 GLES1.1:OES_texture_cube_map + +name GetTexGenxv +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +param params GLfixed * +dependentvector params 1 pname GL_TEXTURE_GEN_MODE_OES +convertalias GetTexGenfv +convertparams GLfloat params +dependentnovalueconvert params pname GL_TEXTURE_GEN_MODE_OES +props get +category 1.0 GLES1.1:OES_texture_cube_map + +name GetTexGeniv +return void +param coord GLenum +checkparam coord GL_TEXTURE_GEN_STR_OES +param pname GLenum +param params GLint * +dependentvector params 1 pname GL_TEXTURE_GEN_MODE_OES +convertalias GetTexGenfv +convertparams GLfloat params +dependentnovalueconvert params pname GL_TEXTURE_GEN_MODE_OES +props get +category 1.0 GLES1.1:OES_texture_cube_map + +name GetTexParameterfv +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param pname GLenum +param params GLfloat * +dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GLES1.1:GL_GENERATE_MIPMAP +props get +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +category GLES1.1 GLES2.0 + +name GetTexParameteriv +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param pname GLenum +param params GLint * +dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GLES1.1:GL_GENERATE_MIPMAP +props get +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +# OES_texture_3D +checkparam target GLES2.0:GL_TEXTURE_3D_OES +category GLES1.1 GLES2.0 + +name GetTexParameterxv +return void +param target GLenum +checkparam target GL_TEXTURE_2D +param pname GLenum +param params GLfixed * +dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GL_GENERATE_MIPMAP +convertalias GetTexParameterfv +convertparams GLfloat params +dependentnovalueconvert params pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GL_GENERATE_MIPMAP +props get +# OES_texture_cube_map +checkparam target GL_TEXTURE_CUBE_MAP_OES +category GLES1.1 GLES1.1:OES_fixed_point + +# GLES1.1 and GLES2.0 have different capabilities +name IsEnabled +return GLboolean +param cap GLenum +props get +checkparam cap GL_VERTEX_ARRAY GL_NORMAL_ARRAY GL_COLOR_ARRAY GL_TEXTURE_COORD_ARRAY GL_NORMALIZE GL_RESCALE_NORMAL GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_FOG GL_LIGHTING GL_COLOR_MATERIAL GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_POINT_SMOOTH GL_LINE_SMOOTH GL_CULL_FACE GL_POLYGON_OFFSET_FILL GL_MULTISAMPLE GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_ALPHA_TO_ONE GL_SAMPLE_COVERAGE GL_TEXTURE_2D GL_SCISSOR_TEST GL_ALPHA_TEST GL_STENCIL_TEST GL_DEPTH_TEST GL_BLEND GL_DITHER GL_COLOR_LOGIC_OP +# OES_matrix_palette +checkparam cap GL_MATRIX_INDEX_ARRAY_OES GL_WEIGHT_ARRAY_OES +# OES_point_size_array +checkparam cap GL_POINT_SIZE_ARRAY_OES +# OES_point_sprite +checkparam cap GL_POINT_SPRITE_OES +# OES_texture_cube_map +checkparam cap GL_TEXTURE_CUBE_MAP_OES GL_TEXTURE_GEN_STR_OES +category GLES1.1 + +name IsEnabled +return GLboolean +param cap GLenum +checkparam cap GL_CULL_FACE GL_SCISSOR_TEST GL_POLYGON_OFFSET_FILL GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_COVERAGE GL_STENCIL_TEST GL_DEPTH_TEST GL_DITHER GL_BLEND +props get +category GLES2.0 + + +name DepthRangef +return void +param zNear GLclampf +param zFar GLclampf +convertalias DepthRange +convertparams GLclampd zNear zFar +category GLES1.1 GLES1.1:OES_single_precision GLES2.0 + +name DepthRangex +return void +param zNear GLclampx +param zFar GLclampx +convertalias DepthRange +convertparams GLclampd zNear zFar +category GLES1.1 GLES1.1:OES_fixed_point + +name Frustumf +return void +param left GLfloat +param right GLfloat +param bottom GLfloat +param top GLfloat +param zNear GLfloat +param zFar GLfloat +convertalias Frustum +convertparams GLdouble left right bottom top zNear zFar +category GLES1.1 GLES1.1:OES_single_precision + +name Frustumx +return void +param left GLfixed +param right GLfixed +param bottom GLfixed +param top GLfixed +param zNear GLfixed +param zFar GLfixed +convertalias Frustum +convertparams GLdouble left right bottom top zNear zFar +category GLES1.1 GLES1.1:OES_fixed_point + +name LoadIdentity +return void +category 1.0 GLES1.1 + +name LoadMatrixf +return void +param m const GLfloat * +vector m 16 +category 1.0 GLES1.1 + +name LoadMatrixx +return void +param m const GLfixed * +vector m 16 +convertalias LoadMatrixf +convertparams GLfloat m +category GLES1.1 GLES1.1:OES_fixed_point + +name MatrixMode +return void +param mode GLenum +checkparam mode GL_MODELVIEW GL_PROJECTION GL_TEXTURE +# OES_matrix_palette +checkparam mode GL_MATRIX_PALETTE_OES +category 1.0 GLES1.1 + +name MultMatrixf +return void +param m const GLfloat * +vector m 16 +category 1.0 GLES1.1 + +name MultMatrixx +return void +param m const GLfixed * +vector m 16 +convertalias MultMatrixf +convertparams GLfloat m +category GLES1.1 GLES1.1:OES_fixed_point + +name Orthof +return void +param left GLfloat +param right GLfloat +param bottom GLfloat +param top GLfloat +param zNear GLfloat +param zFar GLfloat +convertalias Ortho +convertparams GLdouble left right bottom top zNear zFar +category GLES1.1 GLES1.1:OES_single_precision + +name Orthox +return void +param left GLfixed +param right GLfixed +param bottom GLfixed +param top GLfixed +param zNear GLfixed +param zFar GLfixed +convertalias Ortho +convertparams GLdouble left right bottom top zNear zFar +category GLES1.1 GLES1.1:OES_fixed_point + +name PopMatrix +return void +category GLES1.1 + +name PushMatrix +return void +category GLES1.1 + +name Rotatef +return void +param angle GLfloat +param x GLfloat +param y GLfloat +param z GLfloat +category 1.0 GLES1.1 + +name Rotatex +return void +param angle GLfixed +param x GLfixed +param y GLfixed +param z GLfixed +convertalias Rotatef +convertparams GLfloat angle x y z +category GLES1.1 GLES1.1:OES_fixed_point + +name Scalef +return void +param x GLfloat +param y GLfloat +param z GLfloat +category 1.0 GLES1.1 + +name Scalex +return void +param x GLfixed +param y GLfixed +param z GLfixed +convertalias Scalef +convertparams GLfloat x y z +category GLES1.1 GLES1.1:OES_fixed_point + +name Translatef +return void +param x GLfloat +param y GLfloat +param z GLfloat +category 1.0 GLES1.1 + +name Translatex +return void +param x GLfixed +param y GLfixed +param z GLfixed +convertalias Translatef +convertparams GLfloat x y z +category GLES1.1 GLES1.1:OES_fixed_point + +name Viewport +return void +param x GLint +param y GLint +param width GLsizei +param height GLsizei +category 1.0 GLES1.1 GLES2.0 + +name ColorPointer +return void +param size GLint +param type GLenum +param stride GLsizei +paramlist stride 0 +param pointer const GLvoid * +checkparam size /GL_INVALID_VALUE 4 +checkparam type GL_UNSIGNED_BYTE GL_FIXED GL_FLOAT +# OES_vertex_half_float: its values aren't in glext.h yet +#checkparam type GL_HALF_FLOAT_OES +category 1.1 GLES1.1 + +name DisableClientState +return void +param array GLenum +checkparam array GL_COLOR_ARRAY GL_NORMAL_ARRAY GL_TEXTURE_COORD_ARRAY GL_VERTEX_ARRAY +# OES_matrix_palette +checkparam array GL_MATRIX_INDEX_ARRAY_OES GL_WEIGHT_ARRAY_OES +# OES_point_size_array +checkparam array GL_POINT_SIZE_ARRAY_OES +category 1.1 GLES1.1 + +name DrawArrays +return void +param mode GLenum +checkparam mode GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES +param first GLint +param count GLsizei +category 1.1 GLES1.1 GLES2.0 + +name DrawElements +return void +param mode GLenum +checkparam mode GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_LINES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_TRIANGLES +param count GLsizei +param type GLenum +checkparam type GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT +param indices const GLvoid * +# OES_element_index_uint - not in GLES1.1 extension headers yet +checkparam type GLES2.0:GL_UNSIGNED_INT +category 1.1 GLES1.1 GLES2.0 + +name EnableClientState +return void +param array GLenum +checkparam array GL_COLOR_ARRAY GL_NORMAL_ARRAY GL_TEXTURE_COORD_ARRAY GL_VERTEX_ARRAY +# OES_matrix_palette +checkparam array GL_MATRIX_INDEX_ARRAY_OES GL_WEIGHT_ARRAY_OES +# OES_point_size_array +checkparam array GL_POINT_SIZE_ARRAY_OES +category 1.1 GLES1.1 + +name GetPointerv +return void +param pname GLenum +checkparam pname GL_COLOR_ARRAY_POINTER GL_NORMAL_ARRAY_POINTER GL_TEXTURE_COORD_ARRAY_POINTER GL_VERTEX_ARRAY_POINTER +param params GLvoid ** +props get +# OES_matrix_palette +checkparam pname GL_MATRIX_INDEX_ARRAY_POINTER_OES GL_WEIGHT_ARRAY_POINTER_OES +# OES_point_size_array +checkparam pname GL_POINT_SIZE_ARRAY_POINTER_OES +category 1.1 GLES1.1 + +name Normal3f +aliasprefix _vbo_ +return void +param nx GLfloat +param ny GLfloat +param nz GLfloat +category GLES1.1 + +name Normal3x +aliasprefix _vbo_ +return void +param nx GLfixed +param ny GLfixed +param nz GLfixed +convertalias Normal3f +convertparams GLfloat nx ny nz +category GLES1.1 GLES1.1:OES_fixed_point + +name NormalPointer +return void +param type GLenum +checkparam type GL_BYTE GL_SHORT GL_FIXED GL_FLOAT +param stride GLsizei +param pointer const GLvoid * +# OES_vertex_half_float - not yet in glext.h +#checkparam type GL_HALF_FLOAT_OES +category 1.1 GLES1.1 + +name TexCoordPointer +return void +param size GLint +param type GLenum +param stride GLsizei +param pointer const GLvoid * +checkparam size /GL_INVALID_VALUE 2 3 4 +checkparam type GL_BYTE GL_SHORT GL_FIXED GL_FLOAT +# OES_vertex_half_float - not yet in glext.h +#checkparam type GL_HALF_FLOAT_OES +category 1.1 GLES1.1 + +name VertexPointer +return void +param size GLint +param type GLenum +param stride GLsizei +param pointer const GLvoid * +checkparam size /GL_INVALID_VALUE 2 3 4 +checkparam type GL_BYTE GL_SHORT GL_FIXED GL_FLOAT +# OES_vertex_half_float - not yet in glext.h +#checkparam type GL_HALF_FLOAT_OES +category 1.1 GLES1.1 + +name PolygonOffset +return void +param factor GLfloat +param units GLfloat +category 1.1 GLES1.1 GLES2.0 + +name PolygonOffsetx +return void +param factor GLfixed +param units GLfixed +convertalias PolygonOffset +convertparams GLfloat factor units +category GLES1.1 GLES1.1:OES_fixed_point + +name CopyTexImage2D +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Z GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +param level GLint +param internalFormat GLenum +param x GLint +param y GLint +param width GLsizei +param height GLsizei +param border GLint +checkparam internalFormat /GL_INVALID_VALUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_RGBA +checkparam border /GL_INVALID_VALUE 0 +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES +# OES_depth_texture +checkparam internalFormat GLES2.0:GL_DEPTH_COMPONENT +category GLES1.1 GLES2.0 + +name CopyTexSubImage2D +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Z GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +param level GLint +param xoffset GLint +param yoffset GLint +param x GLint +param y GLint +param width GLsizei +param height GLsizei +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES +category GLES1.1 GLES2.0 + +name TexSubImage2D +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Z GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param level GLint +param xoffset GLint +param yoffset GLint +param width GLsizei +param height GLsizei +param format GLenum +param type GLenum +param pixels const GLvoid * +checkparam format /GL_INVALID_VALUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_RGBA +checkdependentparam format GL_RGBA type GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_5_5_5_1 +checkdependentparam format GL_RGB type GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT_5_6_5 +checkdependentparam format GL_LUMINANCE_ALPHA type GL_UNSIGNED_BYTE +checkdependentparam format GL_LUMINANCE type GL_UNSIGNED_BYTE +checkdependentparam format GL_ALPHA type GL_UNSIGNED_BYTE +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES +# OES_texture_float +checkdependentparam format GL_ALPHA type GL_FLOAT +checkdependentparam format GL_RGB type GL_FLOAT +checkdependentparam format GL_RGBA type GL_FLOAT +checkdependentparam format GL_LUMINANCE type GL_FLOAT +checkdependentparam format GL_LUMINANCE_ALPHA type GL_FLOAT +# OES_texture_half_float +checkdependentparam format GL_ALPHA type GLES2.0:GL_HALF_FLOAT_OES +checkdependentparam format GL_RGB type GLES2.0:GL_HALF_FLOAT_OES +checkdependentparam format GL_RGBA type GLES2.0:GL_HALF_FLOAT_OES +checkdependentparam format GL_LUMINANCE type GLES2.0:GL_HALF_FLOAT_OES +checkdependentparam format GL_LUMINANCE_ALPHA type GLES2.0:GL_HALF_FLOAT_OES +# EXT_texture_type_2_10_10_10_REV +checkdependentparam format GL_RGBA type GLES2.0:GL_UNSIGNED_INT_2_10_10_10_REV_EXT +# OES_depth_texture +checkdependentparam format GL_DEPTH_COMPONENT type GLES2.0:GL_UNSIGNED_SHORT GLES2.0:GL_UNSIGNED_INT +category GLES1.1 GLES2.0 + +name BindTexture +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +param texture GLuint +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +category GLES1.1 GLES2.0 + +name DeleteTextures +return void +param n GLsizei +param textures const GLuint * +category 1.1 GLES1.1 GLES2.0 + +name GenTextures +return void +param n GLsizei +param textures GLuint * +props get +category 1.1 GLES1.1 GLES2.0 + +name IsTexture +return GLboolean +param texture GLuint +props get +category 1.1 GLES1.1 GLES2.0 + +name BlendColor +return void +param red GLclampf +param green GLclampf +param blue GLclampf +param alpha GLclampf +category 1.2 GLES2.0 + +name BlendEquation +return void +param mode GLenum +checkparam mode GLES1.1:GL_FUNC_ADD_OES GLES1.1:GL_FUNC_SUBTRACT_OES GLES1.1:GL_FUNC_REVERSE_SUBTRACT_OES +checkparam mode GLES2.0:GL_FUNC_ADD GLES2.0:GL_FUNC_SUBTRACT GLES2.0:GL_FUNC_REVERSE_SUBTRACT +category GLES1.1:OES_blend_subtract GLES2.0 + +name BlendEquationSeparate +alias BlendEquationSeparateEXT +return void +param modeRGB GLenum +param modeAlpha GLenum +checkparam modeRGB GLES1.1:GL_FUNC_ADD_OES GLES1.1:GL_FUNC_SUBTRACT_OES GLES1.1:GL_FUNC_REVERSE_SUBTRACT_OES +checkparam modeAlpha GLES1.1:GL_FUNC_ADD_OES GLES1.1:GL_FUNC_SUBTRACT_OES GLES1.1:GL_FUNC_REVERSE_SUBTRACT_OES +checkparam modeRGB GLES1.1:GL_FUNC_ADD_OES GLES1.1:GL_FUNC_SUBTRACT_OES GLES1.1:GL_FUNC_REVERSE_SUBTRACT_OES +checkparam modeAlpha GLES1.1:GL_FUNC_ADD_OES GLES1.1:GL_FUNC_SUBTRACT_OES GLES1.1:GL_FUNC_REVERSE_SUBTRACT_OES +checkparam modeRGB GLES2.0:GL_FUNC_ADD GLES2.0:GL_FUNC_SUBTRACT GLES2.0:GL_FUNC_REVERSE_SUBTRACT +checkparam modeAlpha GLES2.0:GL_FUNC_ADD GLES2.0:GL_FUNC_SUBTRACT GLES2.0:GL_FUNC_REVERSE_SUBTRACT +checkparam modeRGB GLES2.0:GL_FUNC_ADD GLES2.0:GL_FUNC_SUBTRACT GLES2.0:GL_FUNC_REVERSE_SUBTRACT +checkparam modeAlpha GLES2.0:GL_FUNC_ADD GLES2.0:GL_FUNC_SUBTRACT GLES2.0:GL_FUNC_REVERSE_SUBTRACT +category GLES1.1:OES_blend_equation_separate GLES2.0 + +name TexImage3D +return void +param target GLenum +checkparam target GL_TEXTURE_3D_OES +param level GLint +param internalFormat GLenum +checkparam internalFormat GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_RGBA +param width GLsizei +param height GLsizei +param depth GLsizei +param border GLint +param format GLenum +param type GLenum +param pixels const GLvoid * +# OES_texture_float +checkparam type GL_FLOAT +# OES_texture_half_float +checkparam type GL_HALF_FLOAT_OES +category GLES2.0:OES_texture_3D + +name TexSubImage3D +return void +param target GLenum +param level GLint +param xoffset GLint +param yoffset GLint +param zoffset GLint +param width GLsizei +param height GLsizei +param depth GLsizei +param format GLenum +param type GLenum +param pixels const GLvoid * +# OES_texture_float +checkparam type GL_FLOAT +# OES_texture_half_float +checkparam type GL_HALF_FLOAT_OES +category GLES2.0:OES_texture_3D + +name CopyTexSubImage3D +return void +param target GLenum +checkparam target GL_TEXTURE_3D_OES +param level GLint +param xoffset GLint +param yoffset GLint +param zoffset GLint +param x GLint +param y GLint +param width GLsizei +param height GLsizei +category GLES2.0:OES_texture_3D + +name MultiTexCoord4x +return void +param texture GLenum +checkparam texture GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 +param s GLfixed +param t GLfixed +param r GLfixed +param q GLfixed +aliasprefix _vbo_ +convertalias MultiTexCoord4f +convertparams GLfloat s t r q +category GLES1.1 GLES1.1:OES_fixed_point + +name CompressedTexImage3D +alias CompressedTexImage3DARB +return void +param target GLenum +checkparam target GL_TEXTURE_3D_OES +param level GLint +param internalFormat GLenum +checkparam internalFormat GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_RGB GL_RGBA +param width GLsizei +param height GLsizei +param depth GLsizei +param border GLint +param imagesize GLsizei +param data const GLvoid * +# AMD_compressed_3DC_texture +checkparam internalFormat GL_3DC_X_AMD GL_3DC_XY_AMD +# AMD_compressed_ATC_texture +checkparam internalFormat GL_ATC_RGB_AMD GL_ATC_RGBA_EXPLICIT_ALPHA_AMD GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD +category GLES2.0:OES_texture_3D + +name CompressedTexSubImage3D +alias CompressedTexSubImage3DARB +return void +param target GLenum +checkparam target GL_TEXTURE_3D_OES +param level GLint +param xoffset GLint +param yoffset GLint +param zoffset GLint +param width GLsizei +param height GLsizei +param depth GLsizei +param format GLenum +param imagesize GLsizei +param data const GLvoid * +category GLES2.0:OES_texture_3D + +name ActiveTexture +alias ActiveTextureARB +return void +param texture GLenum +checkparam texture GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +category 1.3 GLES1.1 GLES2.0 + +name ClientActiveTexture +alias ClientActiveTextureARB +return void +param texture GLenum +checkparam texture GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +category 1.3 GLES1.1 + +name MultiTexCoord4f +aliasprefix _vbo_ +return void +param texture GLenum +checkparam texture GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 +param s GLfloat +param t GLfloat +param r GLfloat +param q GLfloat +category 1.3 GLES1.1 + +name SampleCoverage +alias SampleCoverageARB +return void +param value GLclampf +param invert GLboolean +category 1.3 GLES1.1 GLES2.0 + +name SampleCoveragex +return void +param value GLclampx +param invert GLboolean +convertalias SampleCoverageARB +convertparams GLclampf value +category GLES1.1 GLES1.1:OES_fixed_point + +name CompressedTexImage2D +alias CompressedTexImage2DARB +return void +param target GLenum +param level GLint +param internalFormat GLenum +param width GLsizei +param height GLsizei +param border GLint +param imageSize GLsizei +param data const GLvoid * +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Z GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +checkparam border /GL_INVALID_VALUE 0 +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES +# OES_compressed_paletted_texture +checkparam internalFormat /GL_INVALID_VALUE GL_PALETTE4_RGB8_OES GL_PALETTE4_RGBA8_OES GL_PALETTE4_R5_G6_B5_OES GL_PALETTE4_RGBA4_OES GL_PALETTE4_RGB5_A1_OES GL_PALETTE8_RGB8_OES GL_PALETTE8_RGBA8_OES GL_PALETTE8_R5_G6_B5_OES GL_PALETTE8_RGBA4_OES GL_PALETTE8_RGB5_A1_OES +# OES_compressed_ETC1_RGB8_texture +checkparam internalFormat GL_ETC1_RGB8_OES +# AMD_compressed_3DC_texture +checkparam internalFormat GL_3DC_X_AMD GL_3DC_XY_AMD +# AMD_compressed_ATC_texture (GLES2.0 only?) +checkparam internalFormat GL_ATC_RGB_AMD GL_ATC_RGBA_EXPLICIT_ALPHA_AMD GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD +category GLES1.1 GLES2.0 + +name CompressedTexSubImage2D +alias CompressedTexSubImage2DARB +return void +param target GLenum +param level GLint +param xoffset GLint +param yoffset GLint +param width GLsizei +param height GLsizei +param format GLenum +param imageSize GLsizei +param data const GLvoid * +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Z GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +checkparam format GL_PALETTE4_RGB8_OES GL_PALETTE4_RGBA8_OES GL_PALETTE4_R5_G6_B5_OES GL_PALETTE4_RGBA4_OES GL_PALETTE4_RGB5_A1_OES GL_PALETTE8_RGB8_OES GL_PALETTE8_RGBA8_OES GL_PALETTE8_R5_G6_B5_OES GL_PALETTE8_RGBA4_OES GL_PALETTE8_RGB5_A1_OES +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES +category GLES1.1 GLES2.0 + +name BlendFuncSeparate +alias BlendFuncSeparateEXT +return void +param srcRGB GLenum +param dstRGB GLenum +param srcAlpha GLenum +param dstAlpha GLenum +checkparam srcRGB GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_SRC_ALPHA_SATURATE GLES2.0:GL_CONSTANT_COLOR GLES2.0:GL_ONE_MINUS_CONSTANT_COLOR GLES2.0:GL_CONSTANT_ALPHA GLES2.0:GL_ONE_MINUS_CONSTANT_ALPHA +checkparam dstRGB GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GLES2.0:GL_CONSTANT_COLOR GLES2.0:GL_ONE_MINUS_CONSTANT_COLOR GLES2.0:GL_CONSTANT_ALPHA GLES2.0:GL_ONE_MINUS_CONSTANT_ALPHA +checkparam srcAlpha GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_SRC_ALPHA_SATURATE GLES2.0:GL_CONSTANT_COLOR GLES2.0:GL_ONE_MINUS_CONSTANT_COLOR GLES2.0:GL_CONSTANT_ALPHA GLES2.0:GL_ONE_MINUS_CONSTANT_ALPHA +checkparam dstAlpha GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GLES2.0:GL_CONSTANT_COLOR GLES2.0:GL_ONE_MINUS_CONSTANT_COLOR GLES2.0:GL_CONSTANT_ALPHA GLES2.0:GL_ONE_MINUS_CONSTANT_ALPHA +category GLES1.1:OES_blend_func_separate GLES2.0 + +name PointParameterf +return void +param pname GLenum +checkparam pname GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE +param param GLfloat +category 1.4 GLES1.1 + +name PointParameterfv +return void +param pname GLenum +checkparam pname GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE GL_POINT_DISTANCE_ATTENUATION +param params const GLfloat * +dependentvector params 1 pname GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE +dependentvector params 3 pname GL_POINT_DISTANCE_ATTENUATION +category 1.4 GLES1.1 + +name PointParameterx +return void +param pname GLenum +checkparam pname GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE +param param GLfixed +convertalias PointParameterf +convertparams GLfloat param +category GLES1.1 GLES1.1:OES_fixed_point + +name PointParameterxv +return void +param pname GLenum +checkparam pname GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE GL_POINT_DISTANCE_ATTENUATION +param params const GLfixed * +dependentvector params 1 pname GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE +dependentvector params 3 pname GL_POINT_DISTANCE_ATTENUATION +convertalias PointParameterfv +convertparams GLfloat params +category GLES1.1 GLES1.1:OES_fixed_point + +name VertexAttrib1f +aliasprefix _vbo_ +return void +param index GLuint +param x GLfloat +category GLES2.0 + +name VertexAttrib2f +aliasprefix _vbo_ +return void +param index GLuint +param x GLfloat +param y GLfloat +category GLES2.0 + +name VertexAttrib3f +aliasprefix _vbo_ +return void +param index GLuint +param x GLfloat +param y GLfloat +param z GLfloat +category GLES2.0 + +name VertexAttrib4f +aliasprefix _vbo_ +return void +param index GLuint +param x GLfloat +param y GLfloat +param z GLfloat +param w GLfloat +category GLES2.0 + +name VertexAttrib1fv +aliasprefix _vbo_ +return void +param index GLuint +param v const GLfloat * +vector v 1 +category GLES2.0 + +name VertexAttrib2fv +aliasprefix _vbo_ +return void +param index GLuint +param v const GLfloat * +vector v 2 +category GLES2.0 + +name VertexAttrib3fv +aliasprefix _vbo_ +return void +param index GLuint +param v const GLfloat * +vector v 3 +category GLES2.0 + +name VertexAttrib4fv +aliasprefix _vbo_ +return void +param index GLuint +param v const GLfloat * +vector v 4 +category GLES2.0 + +name VertexAttribPointer +alias VertexAttribPointerARB +return void +param index GLuint +param size GLint +checkparam size /GL_INVALID_VALUE 1 2 3 4 +param type GLenum +checkparam type /GL_INVALID_VALUE GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_FIXED GL_FLOAT +param normalized GLboolean +param stride GLsizei +param pointer const GLvoid * +# OES_vertex_half_float +checkparam type GL_HALF_FLOAT_OES +# OES_vertex_type_10_10_10_2 +checkdependentparam type GL_UNSIGNED_INT_10_10_10_2_OES size /GL_INVALID_VALUE 3 4 +checkdependentparam type GL_INT_10_10_10_2_OES size /GL_INVALID_VALUE 3 4 +category GLES2.0 + +name EnableVertexAttribArray +alias EnableVertexAttribArrayARB +return void +param index GLuint +category GLES2.0 + +name DisableVertexAttribArray +alias DisableVertexAttribArrayARB +return void +param index GLuint +category GLES2.0 + +name IsProgram +return GLboolean +param program GLuint +props get +category GLES2.0 + +name GetProgramiv +return void +param program GLuint +param pname GLenum +checkparam pname GL_DELETE_STATUS GL_LINK_STATUS GL_VALIDATE_STATUS GL_INFO_LOG_LENGTH GL_ATTACHED_SHADERS GL_ACTIVE_ATTRIBUTES GL_ACTIVE_ATTRIBUTE_MAX_LENGTH GL_ACTIVE_UNIFORMS GL_ACTIVE_UNIFORM_MAX_LENGTH +param params GLint * +props get +# OES_get_program_binary +checkparam pname GL_PROGRAM_BINARY_LENGTH_OES +category GLES2.0 + +name GetVertexAttribfv +alias GetVertexAttribfvARB +return void +param index GLuint +param pname GLenum +param params GLfloat * +dependentvector params 1 pname GL_VERTEX_ATTRIB_ARRAY_ENABLED GL_VERTEX_ATTRIB_ARRAY_SIZE GL_VERTEX_ATTRIB_ARRAY_STRIDE GL_VERTEX_ATTRIB_ARRAY_TYPE GL_VERTEX_ATTRIB_ARRAY_NORMALIZED GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING +dependentvector params 16? pname GL_CURRENT_VERTEX_ATTRIB +props get +category GLES2.0 + +name GetVertexAttribiv +alias GetVertexAttribivARB +return void +param index GLuint +param pname GLenum +param params GLint * +dependentvector params 1 pname GL_VERTEX_ATTRIB_ARRAY_ENABLED GL_VERTEX_ATTRIB_ARRAY_SIZE GL_VERTEX_ATTRIB_ARRAY_STRIDE GL_VERTEX_ATTRIB_ARRAY_TYPE GL_VERTEX_ATTRIB_ARRAY_NORMALIZED GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING GL_CURRENT_VERTEX_ATTRIB +props get +category GLES2.0 + +name GetVertexAttribPointerv +alias GetVertexAttribPointervARB +return void +param index GLuint +param pname GLenum +checkparam pname GL_VERTEX_ATTRIB_ARRAY_POINTER +param pointer GLvoid ** +props get +category GLES2.0 + +name GetBufferPointerv +alias GetBufferPointervARB +return void +param target GLenum +checkparam target GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER +param pname GLenum +checkparam pname GL_BUFFER_MAP_POINTER_OES +param params GLvoid ** +props get +category GLES1.1:OES_mapbuffer GLES2.0:OES_mapbuffer + +name MapBuffer +alias MapBufferARB +return void * +param target GLenum +checkparam target GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER +param access GLenum +checkparam access GL_WRITE_ONLY_OES +props get +category GLES1.1:OES_mapbuffer GLES2.0:OES_mapbuffer + +name UnmapBuffer +alias UnmapBufferARB +return GLboolean +param target GLenum +checkparam target GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER +props get +category GLES1.1:OES_mapbuffer GLES2.0:OES_mapbuffer + +name BindBuffer +alias BindBufferARB +return void +param target GLenum +checkparam target GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER +param buffer GLuint +category 1.5 GLES1.1 GLES2.0 + +name BufferData +alias BufferDataARB +return void +param target GLenum +checkparam target GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER +param size GLsizeiptr +param data const GLvoid * +param usage GLenum +checkparam usage GL_STATIC_DRAW GL_DYNAMIC_DRAW GLES2.0:GL_STREAM_DRAW +category GLES1.1 GLES2.0 + +name BufferSubData +alias BufferSubDataARB +return void +param target GLenum +checkparam target GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER +param offset GLintptr +param size GLsizeiptr +param data const GLvoid * +category 1.5 GLES1.1 GLES2.0 + +name DeleteBuffers +return void +param n GLsizei +param buffer const GLuint * +category 1.5 GLES1.1 GLES2.0 +alias DeleteBuffersARB + +name GenBuffers +alias GenBuffersARB +return void +param n GLsizei +param buffer GLuint * +props get +category 1.5 GLES1.1 GLES2.0 + +name GetBufferParameteriv +alias GetBufferParameterivARB +return void +param target GLenum +checkparam target GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER +param pname GLenum +checkparam pname GL_BUFFER_SIZE GL_BUFFER_USAGE +param params GLint * +props get +# OES_mapbuffer +checkparam pname GL_BUFFER_ACCESS_OES GL_BUFFER_MAPPED_OES +category 1.5 GLES1.1 GLES2.0 + +name IsBuffer +alias IsBufferARB +return GLboolean +param buffer GLuint +paramlist buffer 0 +props get +category 1.5 GLES1.1 GLES2.0 + +name CreateShader +return GLuint +param type GLenum +checkparam type GL_VERTEX_SHADER GL_FRAGMENT_SHADER +category GLES2.0 + +name ShaderSource +alias ShaderSourceARB +return void +param shader GLuint +param count GLsizei +param string const GLchar ** +param length const int * +category GLES2.0 + +name CompileShader +alias CompileShaderARB +return void +param shader GLuint +category GLES2.0 + +name ReleaseShaderCompiler +return void +category GLES2.0 + +name DeleteShader +return void +param shader GLuint +category GLES2.0 + +name ShaderBinary +return void +param n GLsizei +param shaders const GLuint * +param binaryformat GLenum +param binary const GLvoid * +param length GLsizei +category GLES2.0 + +name CreateProgram +return GLuint +category GLES2.0 + +name AttachShader +return void +param program GLuint +param shader GLuint +category GLES2.0 + +name DetachShader +return void +param program GLuint +param shader GLuint +category GLES2.0 + +name LinkProgram +alias LinkProgramARB +return void +param program GLuint +category GLES2.0 + +name UseProgram +alias UseProgramObjectARB +return void +param program GLuint +category GLES2.0 + +name DeleteProgram +return void +param program GLuint +category GLES2.0 + +name GetActiveAttrib +alias GetActiveAttribARB +return void +param program GLuint +param index GLuint +param bufSize GLsizei +param length GLsizei * +param size GLint * +param type GLenum * +param name GLchar * +props get +category GLES2.0 + +name GetAttribLocation +alias GetAttribLocationARB +return GLint +param program GLuint +param name const char * +props get +category GLES2.0 + +name BindAttribLocation +alias BindAttribLocationARB +return void +param program GLuint +param index GLuint +param name const char * +category GLES2.0 + +name GetUniformLocation +alias GetUniformLocationARB +return GLint +param program GLuint +param name const char * +props get +category GLES2.0 + +name GetActiveUniform +alias GetActiveUniformARB +return void +param program GLuint +param index GLuint +param bufSize GLsizei +param length GLsizei * +param size GLint * +param type GLenum * +param name GLchar * +props get +category GLES2.0 + +name Uniform1f +alias Uniform1fARB +return void +param location GLint +param v0 GLfloat +category GLES2.0 + +name Uniform2f +alias Uniform2fARB +return void +return void +param location GLint +param v0 GLfloat +param v1 GLfloat +category GLES2.0 + +name Uniform3f +alias Uniform3fARB +return void +return void +param location GLint +param v0 GLfloat +param v1 GLfloat +param v2 GLfloat +category GLES2.0 + +name Uniform4f +alias Uniform4fARB +return void +return void +param location GLint +param v0 GLfloat +param v1 GLfloat +param v2 GLfloat +param v3 GLfloat +category GLES2.0 + +name Uniform1i +alias Uniform1iARB +return void +param location GLint +param v0 GLint +category GLES2.0 + +name Uniform2i +alias Uniform2iARB +return void +param location GLint +param v0 GLint +param v1 GLint +category GLES2.0 + +name Uniform3i +alias Uniform3iARB +return void +param location GLint +param v0 GLint +param v1 GLint +param v2 GLint +category GLES2.0 + +name Uniform4i +alias Uniform4iARB +return void +param location GLint +param v0 GLint +param v1 GLint +param v2 GLint +param v3 GLint +category GLES2.0 + +name Uniform1fv +alias Uniform1fvARB +return void +param location GLint +param count GLsizei +param values const GLfloat * +category GLES2.0 + +name Uniform2fv +alias Uniform2fvARB +return void +param location GLint +param count GLsizei +param values const GLfloat * +category GLES2.0 + +name Uniform3fv +alias Uniform3fvARB +return void +param location GLint +param count GLsizei +param values const GLfloat * +category GLES2.0 + +name Uniform4fv +alias Uniform4fvARB +return void +param location GLint +param count GLsizei +param values const GLfloat * +category GLES2.0 + +name Uniform1iv +alias Uniform1ivARB +return void +param location GLint +param count GLsizei +param values const GLint * +category GLES2.0 + +name Uniform2iv +alias Uniform2ivARB +return void +param location GLint +param count GLsizei +param values const GLint * +category GLES2.0 + +name Uniform3iv +alias Uniform3ivARB +return void +param location GLint +param count GLsizei +param values const GLint * +category GLES2.0 + +name Uniform4iv +alias Uniform4ivARB +return void +param location GLint +param count GLsizei +param values const GLint * +category GLES2.0 + +name UniformMatrix2fv +alias UniformMatrix2fvARB +return void +param location GLint +param count GLsizei +param transpose GLboolean +param value const GLfloat * +category GLES2.0 + +name UniformMatrix3fv +alias UniformMatrix3fvARB +return void +param location GLint +param count GLsizei +param transpose GLboolean +param value const GLfloat * +category GLES2.0 + +name UniformMatrix4fv +alias UniformMatrix4fvARB +return void +param location GLint +param count GLsizei +param transpose GLboolean +param value const GLfloat * +category GLES2.0 + +name ValidateProgram +alias ValidateProgramARB +return void +param program GLuint +category GLES2.0 + +name GenerateMipmap +alias GenerateMipmapEXT +return void +param target GLenum +checkparam target GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP +# OES_texture_cube_map +checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +category GLES1.1:OES_framebuffer_object GLES2.0 + + +name BindFramebuffer +alias BindFramebufferEXT +return void +param target GLenum +checkparam target GLES1.1:GL_FRAMEBUFFER_OES GLES2.0:GL_FRAMEBUFFER +param framebuffer GLuint +category GLES1.1:OES_framebuffer_object GLES2.0 + +name DeleteFramebuffers +alias DeleteFramebuffersEXT +return void +param n GLsizei +param framebuffers const GLuint * +category GLES2.0 GLES1.1:OES_framebuffer_object + +name GenFramebuffers +alias GenFramebuffersEXT +return void +param n GLsizei +param ids GLuint * +category GLES2.0 GLES1.1:OES_framebuffer_object + +name BindRenderbuffer +alias BindRenderbufferEXT +return void +param target GLenum +checkparam target GLES1.1:GL_RENDERBUFFER_OES GLES2.0:GL_RENDERBUFFER +param renderbuffer GLuint +category GLES1.1:OES_framebuffer_object GLES2.0 + +name DeleteRenderbuffers +alias DeleteRenderbuffersEXT +return void +param n GLsizei +param renderbuffers const GLuint * +category GLES2.0 GLES1.1:OES_framebuffer_object + +name GenRenderbuffers +alias GenRenderbuffersEXT +return void +param n GLsizei +param renderbuffers GLuint * +category GLES2.0 GLES1.1:OES_framebuffer_object + +name RenderbufferStorage +alias RenderbufferStorageEXT +return void +param target GLenum +checkparam target GLES1.1:GL_RENDERBUFFER_OES GLES2.0:GL_RENDERBUFFER +param internalFormat GLenum +checkparam internalFormat GL_DEPTH_COMPONENT16_OES GL_RGBA4_OES GL_RGB5_A1_OES GL_RGB565_OES +param width GLsizei +param height GLsizei +# OES_depth24 +checkparam internalFormat GL_DEPTH_COMPONENT24_OES +# OES_depth32 +checkparam internalFormat GL_DEPTH_COMPONENT32_OES +# OES_rgb8_rgba8 +checkparam internalFormat GL_RGB8_OES GL_RGBA8_OES +# OES_stencil1 +checkparam internalFormat GL_STENCIL_INDEX1_OES +# OES_stencil4 +checkparam internalFormat GL_STENCIL_INDEX4_OES +# OES_stencil8 +checkparam internalFormat GL_STENCIL_INDEX8_OES +# OES_packed_depth_stencil - not in glext.h yet +checkparam internalFormat GLES2.0:GL_DEPTH24_STENCIL8_OES +category GLES1.1:OES_framebuffer_object GLES2.0 + +name FramebufferRenderbuffer +alias FramebufferRenderbufferEXT +return void +param target GLenum +checkparam target GLES1.1:GL_FRAMEBUFFER_OES GLES2.0:GL_FRAMEBUFFER +param attachment GLenum +checkparam attachment GLES1.1:GL_COLOR_ATTACHMENT0_OES GLES1.1:GL_DEPTH_ATTACHMENT_OES GLES1.1:GL_STENCIL_ATTACHMENT_OES +checkparam attachment GLES2.0:GL_COLOR_ATTACHMENT0 GLES2.0:GL_DEPTH_ATTACHMENT GLES2.0:GL_STENCIL_ATTACHMENT +param renderbuffertarget GLenum +checkparam renderbuffertarget GLES1.1:GL_RENDERBUFFER_OES GLES2.0:GL_RENDERBUFFER +param renderbuffer GLuint +category GLES1.1:OES_framebuffer_object GLES2.0 + +name FramebufferTexture2D +alias FramebufferTexture2DEXT +return void +param target GLenum +checkparam target GLES1.1:GL_FRAMEBUFFER_OES GLES2.0:GL_FRAMEBUFFER +param attachment GLenum +checkparam attachment GLES1.1:GL_COLOR_ATTACHMENT0_OES GLES1.1:GL_DEPTH_ATTACHMENT_OES GLES1.1:GL_STENCIL_ATTACHMENT_OES +checkparam attachment GLES2.0:GL_COLOR_ATTACHMENT0 GLES2.0:GL_DEPTH_ATTACHMENT GLES2.0:GL_STENCIL_ATTACHMENT +param textarget GLenum +checkparam textarget /GL_INVALID_OPERATION GL_TEXTURE_2D GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_POSITIVE_Z GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_X GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GLES2.0:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z +param texture GLuint +param level GLint +# OES_texture_cube_map +checkparam textarget GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES GLES1.1:GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES +# According to the base specification, "level" must be 0. But +# extension GL_OES_fbo_render_mipmap lifts that restriction, +# so no restriction is placed here. +category GLES1.1:OES_framebuffer_object GLES2.0 + +name FramebufferTexture3D +alias FramebufferTexture3DEXT +return void +param target GLenum +param attachment GLenum +param textarget GLenum +param texture GLuint +param level GLint +param zoffset GLint +category GLES2.0:OES_texture_3D + +name CheckFramebufferStatus +alias CheckFramebufferStatusEXT +return GLenum +param target GLenum +checkparam target GLES1.1:GL_FRAMEBUFFER_OES GLES2.0:GL_FRAMEBUFFER +props get +category GLES1.1:OES_framebuffer_object GLES2.0 + +# One for GLES1.1 extension, one for GLES2.0 core +name GetFramebufferAttachmentParameteriv +alias GetFramebufferAttachmentParameterivEXT +return void +param target GLenum +checkparam target GLES1.1:GL_FRAMEBUFFER_OES GLES2.0:GL_FRAMEBUFFER +param attachment GLenum +param pname GLenum +param params GLint * +props get +dependentvector params 1 pname GLES1.1:GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES GLES1.1:GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES GLES1.1:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES GLES1.1:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES +dependentvector params 1 pname GLES2.0:GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE GLES2.0:GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME GLES2.0:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL GLES2.0:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE +# OES_texture3D +dependentvector params 1 pname GLES2.0:GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES +category GLES1.1:OES_framebuffer_object GLES2.0 + +name GetRenderbufferParameteriv +alias GetRenderbufferParameterivEXT +return void +param target GLenum +checkparam target GLES1.1:GL_RENDERBUFFER_OES GLES2.0:GL_RENDERBUFFER +param pname GLenum +param params GLint * +props get +dependentvector params 1 pname GLES1.1:GL_RENDERBUFFER_WIDTH_OES GLES1.1:GL_RENDERBUFFER_HEIGHT_OES GLES1.1:GL_RENDERBUFFER_INTERNAL_FORMAT_OES GLES1.1:GL_RENDERBUFFER_RED_SIZE_OES GLES1.1:GL_RENDERBUFFER_GREEN_SIZE_OES GLES1.1:GL_RENDERBUFFER_BLUE_SIZE_OES GLES1.1:GL_RENDERBUFFER_ALPHA_SIZE_OES GLES1.1:GL_RENDERBUFFER_DEPTH_SIZE_OES GLES1.1:GL_RENDERBUFFER_STENCIL_SIZE_OES +dependentvector params 1 pname GLES2.0:GL_RENDERBUFFER_WIDTH GLES2.0:GL_RENDERBUFFER_HEIGHT GLES2.0:GL_RENDERBUFFER_INTERNAL_FORMAT GLES2.0:GL_RENDERBUFFER_RED_SIZE GLES2.0:GL_RENDERBUFFER_GREEN_SIZE GLES2.0:GL_RENDERBUFFER_BLUE_SIZE GLES2.0:GL_RENDERBUFFER_ALPHA_SIZE GLES2.0:GL_RENDERBUFFER_DEPTH_SIZE GLES2.0:GL_RENDERBUFFER_STENCIL_SIZE +category GLES1.1:OES_framebuffer_object GLES2.0 + +name IsRenderbuffer +alias IsRenderbufferEXT +return GLboolean +param renderbuffer GLuint +props get +category GLES2.0 GLES1.1:OES_framebuffer_object + +name IsFramebuffer +alias IsFramebufferEXT +return GLboolean +param framebuffer GLuint +props get +category GLES2.0 GLES1.1:OES_framebuffer_object + +name IsShader +return GLboolean +param shader GLuint +props get +category GLES2.0 + +name GetShaderiv +return void +param shader GLuint +param pname GLenum +param params GLint * +props get +checkparam pname GL_SHADER_TYPE GL_COMPILE_STATUS GL_DELETE_STATUS GL_INFO_LOG_LENGTH GL_SHADER_SOURCE_LENGTH +category GLES2.0 + +name GetAttachedShaders +return void +param program GLuint +param maxCount GLsizei +param count GLsizei * +param shaders GLuint * +props get +category GLES2.0 + +name GetShaderInfoLog +return void +param shader GLuint +param bufSize GLsizei +param length GLsizei * +param infoLog GLchar * +props get +category GLES2.0 + +name GetProgramInfoLog +return void +param program GLuint +param bufSize GLsizei +param length GLsizei * +param infoLog GLchar * +props get +category GLES2.0 + +name GetShaderSource +alias GetShaderSourceARB +return void +param shader GLuint +param bufSize GLsizei +param length GLsizei * +param source GLchar * +props get +category GLES2.0 + +name GetShaderPrecisionFormat +return void +param shadertype GLenum +param precisiontype GLenum +param range GLint * +param precision GLint * +props get +checkparam shadertype GL_VERTEX_SHADER GL_FRAGMENT_SHADER +checkparam precisiontype GL_LOW_FLOAT GL_MEDIUM_FLOAT GL_HIGH_FLOAT GL_LOW_INT GL_MEDIUM_INT GL_HIGH_INT +category GLES2.0 + +name GetUniformfv +alias GetUniformfvARB +return void +param program GLuint +param location GLint +param params GLfloat * +props get +category GLES2.0 + +name GetUniformiv +alias GetUniformivARB +return void +param program GLuint +param location GLint +param params GLint * +props get +category GLES2.0 + +name QueryMatrixx +return GLbitfield +param mantissa GLfixed * +vector mantissa 16 +param exponent GLint * +vector exponent 16 +props get +category GLES1.1:OES_query_matrix + +# We don't support OES_get_program_binary yet either +#name GetProgramBinary +#return void +#param program GLuint +#param bufSize GLsizei +#param length GLsizei * +#param binaryFormat GLenum * +#param binary GLvoid * +#category GLES2.0:OES_get_program_binary +# +#name ProgramBinary +#return void +#param program GLuint +#param binaryFormat GLenum +#param binary const GLvoid * +#param length GLint +#category GLES2.0:OES_get_program_binary diff --git a/src/mesa/es/main/apiutil.py b/src/mesa/es/main/apiutil.py new file mode 100644 index 0000000000..7fb1afc3a8 --- /dev/null +++ b/src/mesa/es/main/apiutil.py @@ -0,0 +1,1117 @@ + +# apiutil.py +# +# This file defines a bunch of utility functions for OpenGL API code +# generation. + +import sys, string, re + + +#====================================================================== + +def CopyrightC( ): + print """/* Copyright (c) 2001, Stanford University + All rights reserved. + + See the file LICENSE.txt for information on redistributing this software. */ + """ + +def CopyrightDef( ): + print """; Copyright (c) 2001, Stanford University + ; All rights reserved. + ; + ; See the file LICENSE.txt for information on redistributing this software. + """ + + +#====================================================================== + +class APIFunction: + """Class to represent a GL API function (name, return type, + parameters, etc).""" + def __init__(self): + self.name = '' + self.returnType = '' + self.category = '' + self.categories = [] + self.offset = -1 + self.alias = '' + self.vectoralias = '' + self.convertalias = '' + self.aliasprefix = '' + self.params = [] + self.paramlist = [] + self.paramvec = [] + self.paramaction = [] + self.paramprop = [] + self.paramset = [] + self.props = [] + self.chromium = [] + +def FindParamIndex(params, paramName): + """Given a function record, find the index of a named parameter""" + for i in range (len(params)): + if paramName == params[i][0]: + return i + # If we get here, there was no such parameter + return None + +def SetTupleIndex(tuple, index, value): + t = () + for i in range(len(tuple)): + if i == index: + t += (value,) + else: + t += (tuple[i],) + return t + +def VersionSpecificValues(category, values): + selectedValues = [] + for value in values: + # Version-specific values are prefixed with the version + # number, e.g. GLES1.0:GL_TEXTURE_CUBE_MAP_OES + splitValue = value.split(":") + if len(splitValue) == 2: + if category != None and splitValue[0] != category: + # Don't want this one. + continue + else: + selectedValues.append(splitValue[1]) + else: + selectedValues.append(value) + return selectedValues + +def ProcessSpecFile(filename, userFunc, category = None): + """Open the named API spec file and call userFunc(record, category) for each record + processed.""" + specFile = open(filename, "r") + if not specFile: + print >>sys.stderr, "Error: couldn't open %s file!" % filename + sys.exit() + + record = APIFunction() + + for line in specFile.readlines(): + + # split line into tokens + tokens = string.split(line) + + if len(tokens) > 0 and line[0] != '#': + + if tokens[0] == 'name': + if record.name != '': + # process the old function now + userFunc(record, category) + # reset the record + record = APIFunction() + + record.name = tokens[1] + + elif tokens[0] == 'return': + record.returnType = string.join(tokens[1:], ' ') + + elif tokens[0] == 'param': + name = tokens[1] + type = string.join(tokens[2:], ' ') + vecSize = 0 + record.params.append((name, type, vecSize, None, [], None)) + + elif tokens[0] == 'paramprop': + name = tokens[1] + str = tokens[2:] + enums = [] + for i in range(len(str)): + enums.append(str[i]) + record.paramprop.append((name, enums)) + + elif tokens[0] == 'paramlist': + name = tokens[1] + str = tokens[2:] + list = [] + for i in range(len(str)): + list.append(str[i]) + record.paramlist.append((name,list)) + + elif tokens[0] == 'paramvec': + name = tokens[1] + str = tokens[2:] + vec = [] + for i in range(len(str)): + vec.append(str[i]) + record.paramvec.append((name,vec)) + + elif tokens[0] == 'paramset': + line = tokens[1:] + result = [] + for i in range(len(line)): + tset = line[i] + if tset == '[': + nlist = [] + elif tset == ']': + result.append(nlist) + nlist = [] + else: + nlist.append(tset) + if result != []: + record.paramset.append(result) + + elif tokens[0] == 'paramaction': + name = tokens[1] + str = tokens[2:] + list = [] + for i in range(len(str)): + list.append(str[i]) + record.paramaction.append((name,list)) + + elif tokens[0] == 'category': + record.category = tokens[1] + record.categories = tokens[1:] + + elif tokens[0] == 'offset': + if tokens[1] == '?': + record.offset = -2 + else: + record.offset = int(tokens[1]) + + elif tokens[0] == 'alias': + record.alias = tokens[1] + + elif tokens[0] == 'vectoralias': + record.vectoralias = tokens[1] + + elif tokens[0] == 'convertalias': + record.convertalias = tokens[1] + + elif tokens[0] == 'aliasprefix': + record.aliasprefix = tokens[1] + + elif tokens[0] == 'props': + record.props = tokens[1:] + + elif tokens[0] == 'chromium': + record.chromium = tokens[1:] + + elif tokens[0] == 'vector': + vecName = tokens[1] + vecSize = int(tokens[2]) + index = FindParamIndex(record.params, vecName) + if index == None: + print >>sys.stderr, "Can't find vector '%s' for function '%s'" % (vecName, record.name) + # Adjust just the vector size + record.params[index] = SetTupleIndex(record.params[index], 2, vecSize) + + elif tokens[0] == 'dependentvector': + dependentVecName = tokens[1] + # the dependentVecSize may be an int + # expression + dependentVecSize = tokens[2] + controllingParam = tokens[3] + controllingParamIndex = FindParamIndex(record.params, controllingParam) + if controllingParamIndex == None: + print >>sys.stderr, "Can't find controlling param '%s' for function '%s'" % (controllingParam, record.name) + controllingValues = tokens[4:] + + # Remember that all of the controllingValues + # are valid values for the controllingParam. + # We may be duplicating controllingValues + # here (i.e. if we get them from different + # places); we'll sort them out later. + validValues = record.params[controllingParamIndex][4] + for value in VersionSpecificValues(category, controllingValues): + validValues.append((value, dependentVecSize, dependentVecName, [], None, None)) + # Don't need to reassign validValues back + # to the tuple - it's a shallow pointer, + # so the tuple is already modified. + # (And attempting to do so would produce an + # error anyway.) + + elif tokens[0] == "dependentnovalueconvert": + paramName = tokens[1] + controllingParamName = tokens[2] + controllingValues = tokens[3:] + + controllingParamIndex = FindParamIndex(record.params, controllingParamName) + if controllingParamIndex == None: + print >>sys.stderr, "Can't find controlling param '%s' for function '%s'" % (controllingParamName, record.name) + + validValues = record.params[controllingParamIndex][4] + for value in VersionSpecificValues(category, controllingValues): + validValues.append((value, None, None, [], None, "noconvert")) + + + + elif tokens[0] == 'checkparam': + paramName = tokens[1] + values = tokens[2:] + paramIndex = FindParamIndex(record.params, paramName) + if paramIndex == None: + print >>sys.stderr, "Can't find checked param '%s' for function '%s'" % (paramName, record.name) + + errorCode = None + + # We may be duplicating valid values here; + # just add all values to the existing + # record, and we'll prune out duplicates + # later + validValues = record.params[paramIndex][4] + + # A /GL_* value represents an error, not + # a real value. Look through the values + # and only append the non-error values. + for v in VersionSpecificValues(category, values): + if v[0] == "/": + errorCode = v[1:] + else: + validValues.append((v, None, None, [], errorCode, None)) + # Don't need to reassign validValues back + # to the parameter tuple - it's a shallow pointer, + # so the tuple is already modified. + # (And attempting to do so would produce an + # error anyway.) + + elif tokens[0] == 'checkdependentparam': + paramName = tokens[1] + controllingValue = tokens[2] + dependentParamName = tokens[3] + validDependentValues = tokens[4:] + errorCode = None + + # A /GL_* value represents an error, not + # a real value. Look through the values + # and only append the non-error values. + validDependentValues = [] + for v in tokens[4:]: + if v[0] == "/": + errorCode = v[1:] + else: + validDependentValues.append(v) + + paramIndex = FindParamIndex(record.params, paramName) + if paramIndex == None: + print >>sys.stderr, "Can't find dependent param '%s' for function '%s'" % (paramName, record.name) + + validValues = record.params[paramIndex][4] + # We may be duplicating valid values here; + # we'll sort them out later. Avoid + # adding a controlling value record + # at all if there are no values + # in the list of values (so that + # controlling values with only + # version-specific values listed + # end up as version-specific + # themselves). + versionSpecificValues = VersionSpecificValues(category, validDependentValues) + if versionSpecificValues != []: + validValues.append((controllingValue, None, dependentParamName, versionSpecificValues, errorCode, None)) + # Don't need to reassign validValues back + # to the tuple - it's a shallow pointer, + # so the tuple is already modified. + # (And attempting to do so would produce an + # error anyway.) + + elif tokens[0] == 'convertparams': + convertToType = tokens[1] + # Replace the conversion type in each named + # parameter + for paramName in tokens[2:]: + paramIndex = FindParamIndex(record.params, paramName) + if paramIndex == None: + print >>sys.stderr, "Can't find converted param '%s' for function '%s'" % (paramName, record.name) + # Tuples don't support item assignment, + # so to replace scalar values in a + # tuple, you have to reassign the + # whole friggin' thing. + record.params[paramIndex] = SetTupleIndex(record.params[paramIndex], 3, convertToType) + + else: + print >>sys.stderr, 'Invalid token %s after function %s' % (tokens[0], record.name) + #endif + #endif + #endfor + + # Call the user function for the last record, if we still have one + # lying around nearly finished + if record.name != '': + # process the function now + userFunc(record, category) + specFile.close() +#enddef + + +# Dictionary [name] of APIFunction: +__FunctionDict = {} + +# Dictionary [name] of name +__VectorVersion = {} + +# Reverse mapping of function name aliases +__ReverseAliases = {} + +def CheckCategories(category, categories): + for c in categories: + if category == c.split(":")[0]: + return 1 + + return 0 + +def AddFunction(record, category): + # If there is a category, we only want records from that category. + # Note that a category may be in the form "GLES1.1:OES_extension_name", + # which means that the function is supported as an extension in + # GLES1.1... + if category and not CheckCategories(category, record.categories): + return + + # Don't allow duplicates + if __FunctionDict.has_key(record.name): + print >>sys.stderr, "Duplicate record name '%s' ignored" % record.name + return + + # Clean up a bit. We collected valid values for parameters + # on the fly; it's quite possible that there are duplicates. + # If there are, collect them together. + # + # We're also going to keep track of all the dependent values + # that can show up for a parameter; the number of GLenum values + # (identified with a prefixed "GL_") affects how parameter + # value conversion happens, as GLenum values are not scaled + # when converted to or from GLfixed values, the way integer + # and floating point values are. + paramValueConversion = {} + + for i in range(len(record.params)): + foundValidValues = {} + + (name, type, maxVecSize, convertToType, validValues, valueConversion) = record.params[i] + for (controllingValue, vecSize, dependentParamName, dependentValues, errorCode, valueConvert) in validValues: + # Keep track of the maximum vector size for the + # *dependent* parameter, not for the controlling + # parameter. Note that the dependent parameter + # may be an expression - in this case, don't + # consider it. + if dependentParamName != None and vecSize != None and vecSize.isdigit(): + dependentParamIndex = FindParamIndex(record.params, dependentParamName) + if dependentParamIndex == None: + print >>sys.stderr, "Couldn't find dependent parameter '%s' of function '%s'" % (dependentParamName, record.name) + (dName, dType, dMaxVecSize, dConvert, dValid, dValueConversion) = record.params[dependentParamIndex] + if dMaxVecSize == None or int(vecSize) > dMaxVecSize: + dMaxVecSize = int(vecSize) + record.params[dependentParamIndex] = (dName, dType, dMaxVecSize, dConvert, dValid, dValueConversion) + + # Make sure an entry for the controlling value + # exists in the foundValidValues dictionary + if controllingValue in foundValidValues: + # The value was already there. Merge the + # two together, giving errors if needed. + (oldControllingValue, oldVecSize, oldDependentParamName, oldDependentValues, oldErrorCode, oldValueConvert) = foundValidValues[controllingValue] + + # Make sure the vector sizes are compatible; + # either one should be None (and be + # overridden by the other), or they should + # match exactly. If one is not an + # integer (this can happen if the + # dependent value is an integer expression, + # which occurs a couple of times), don't + # use it. + if oldVecSize == None: + oldVecSize = vecSize + elif vecSize != None and vecSize != oldVecSize: + print >>sys.stderr, "Found two different vector sizes (%s and %s) for the same controlling value '%s' of the same parameter '%s' of function '%s'" % (oldVecSize, vecSize, controllingValue, name, record.name) + + # Same for the dependent parameter name. + if oldDependentParamName == None: + oldDependentParamName = dependentParamName + elif dependentParamName != None and dependentParamName != oldDependentParamName: + print >>sys.stderr, "Found two different dependent parameter names (%s and %s) for the same controlling value '%s' of the same parameter '%s' of function '%s'" % (oldDependentParamName, dependentParamName, controllingValue, name, record.name) + + # And for the error code. + if oldErrorCode == None: + oldErrorCode = errorCode + elif errorCode != None and errorCode != oldErrorCode: + print >>sys.stderr, "Found two different error codes(%s and %s) for the same controlling value '%s' of the same parameter '%s' of function '%s'" % (oldErrorCode, errorCode, controllingValue, name, record.name) + + # And for the value conversion flag + if oldValueConvert == None: + oldValueConvert = valueConvert + elif valueConvert != None and valueConvert != oldValueConvert: + print >>sys.stderr, "Found two different value conversions(%s and %s) for the same controlling value '%s' of the same parameter '%s' of function '%s'" % (oldValueConvert, valueConvert, controllingValue, name, record.name) + + # Combine the dependentValues together + # directly, but uniquely + for value in dependentValues: + if value not in oldDependentValues: + oldDependentValues.append(value) + + # Stick the combined value back into the + # dictionary. We'll sort it back to the + # array later. + foundValidValues[oldControllingValue] = (oldControllingValue, oldVecSize, oldDependentParamName, oldDependentValues, oldErrorCode, oldValueConvert) + else: # new controlling value + # Just add it to the dictionary so we don't + # add the same value more than once. + foundValidValues[controllingValue] = (controllingValue, vecSize, dependentParamName, dependentValues, errorCode, valueConvert) + # endif a new controlling value + + # endfor all valid values for this parameter + + # Now the foundValidValues[] dictionary holds all the + # pruned values (at most one for each valid value). + # But the validValues[] array still holds the order, + # which we want to maintain. Go through the validValues + # array just for the names of the controlling values; + # add any uncopied values to the prunedValidValues array. + prunedValidValues = [] + + for (controllingValue, vecSize, dependentParamName, dependentValues, errorCode, valueConvert) in validValues: + if controllingValue in foundValidValues: + prunedValidValues.append(foundValidValues[controllingValue]) + # Delete it from the dictionary so it isn't + # copied again. + del foundValidValues[controllingValue] + + # Each parameter that is being converted may have a + # subset of values that are GLenums and are never + # converted. In some cases, the parameter will + # be implicitly determined to be such, by examining + # the listed possible values and determining for + # any particular controlling value whether there are + # any GLenum-valued allowed values. + # + # In other cases, the parameter will be explicitly + # marked as such with the "dependentnovalueconvert" flag; + # this is the way it has to be done with queries (which + # cannot list a valid list of values to be passed, + # because values are returned, not passed). + # + # For each value of controlling GLenum, we'll also + # need to know whether its dependent values are + # always converted (none of its values require + # GLenums to be passed in dependent parameters), + # never converted (all of its values require GLenums), + # or sometimes converted. + numNoConvertValues = 0 + allDependentParams = [] + for j in range(len(prunedValidValues)): + (controllingValue, vecSize, dependentParamName, dependentValues, errorCode, valueConvert) = prunedValidValues[j] + if dependentParamName != None and dependentParamName not in allDependentParams: + allDependentParams.append(dependentParamName) + + # Check for an explicit noconvert marking... + if valueConvert == "noconvert": + numNoConvertValues += 1 + else: + # Or check for an implicit one. + for value in dependentValues: + if value[0:3] == "GL_": + valueConvert = "noconvert" + prunedValidValues[j] = (controllingValue, vecSize, dependentParamName, dependentValues, errorCode, valueConvert) + numNoConvertValues += 1 + break + + # For each named dependent param, set the value conversion + # flag based on whether all values, none, or some need + # value conversion. This value is set stepwise + # for each parameter examined - + for dp in allDependentParams: + if numNoConvertValues == 0: + if not paramValueConversion.has_key(dp): + paramValueConversion[dp] = "all" + elif paramValueConversion[dp] == "none": + paramValueConversion[dp] = "some" + elif numNoConvertValues == len(prunedValidValues): + if not paramValueConversion.has_key(dp): + paramValueConversion[dp] = "none" + elif paramValueConversion[dp] == "all": + paramValueConversion[dp] = "some" + else: + paramValueConversion[dp] = "some" + + # Save away the record. Save a placeholder in the + # valueConversion field - we can't set that until we've + # examined all the parameters. + record.params[i] = (name, type, maxVecSize, convertToType, prunedValidValues, None) + + # endfor each param of the passed-in function record + + # One more pass: for each parameter, if it is a parameter that + # needs conversion, save its value conversion type ("all", "none", + # or "some"). We only have to worry about conditional value + # conversion for GLfixed parameters; in all other cases, we + # either don't convert at all (for non-converting parameters) or + # we convert everything. + for i in range(len(record.params)): + (name, type, maxVecSize, convertToType, validValues, valueConversion) = record.params[i] + if convertToType == None: + valueConversion = None + elif paramValueConversion.has_key(name): + valueConversion = paramValueConversion[name] + else: + valueConversion = "all" + + record.params[i] = (name, type, maxVecSize, convertToType, validValues, valueConversion) + + # We're done cleaning up! + # Add the function to the permanent record and we're done. + __FunctionDict[record.name] = record + + +def GetFunctionDict(specFile = "", category = None): + if not specFile: + specFile = "../glapi_parser/APIspec.txt" + if len(__FunctionDict) == 0: + ProcessSpecFile(specFile, AddFunction, category) + # Look for vector aliased functions + for func in __FunctionDict.keys(): + va = __FunctionDict[func].vectoralias + if va != '': + __VectorVersion[va] = func + #endif + + # and look for regular aliases (for glloader) + a = __FunctionDict[func].alias + if a: + __ReverseAliases[a] = func + #endif + #endfor + #endif + return __FunctionDict + + +def GetAllFunctions(specFile = "", category = None): + """Return sorted list of all functions known to Chromium.""" + d = GetFunctionDict(specFile, category) + funcs = [] + for func in d.keys(): + rec = d[func] + if not "omit" in rec.chromium: + funcs.append(func) + funcs.sort() + return funcs + + +def GetDispatchedFunctions(specFile = "", category = None): + """Return sorted list of all functions handled by SPU dispatch table.""" + d = GetFunctionDict(specFile, category) + funcs = [] + for func in d.keys(): + rec = d[func] + if (not "omit" in rec.chromium and + not "stub" in rec.chromium and + rec.alias == ''): + funcs.append(func) + funcs.sort() + return funcs + +#====================================================================== + +def ReturnType(funcName): + """Return the C return type of named function. + Examples: "void" or "const GLubyte *". """ + d = GetFunctionDict() + return d[funcName].returnType + + +def Parameters(funcName): + """Return list of tuples (name, type, vecSize) of function parameters. + Example: if funcName=="ClipPlane" return + [ ("plane", "GLenum", 0), ("equation", "const GLdouble *", 4) ] """ + d = GetFunctionDict() + return d[funcName].params + +def ParamAction(funcName): + """Return list of names of actions for testing. + For PackerTest only.""" + d = GetFunctionDict() + return d[funcName].paramaction + +def ParamList(funcName): + """Return list of tuples (name, list of values) of function parameters. + For PackerTest only.""" + d = GetFunctionDict() + return d[funcName].paramlist + +def ParamVec(funcName): + """Return list of tuples (name, vector of values) of function parameters. + For PackerTest only.""" + d = GetFunctionDict() + return d[funcName].paramvec + +def ParamSet(funcName): + """Return list of tuples (name, list of values) of function parameters. + For PackerTest only.""" + d = GetFunctionDict() + return d[funcName].paramset + + +def Properties(funcName): + """Return list of properties of the named GL function.""" + d = GetFunctionDict() + return d[funcName].props + +def AllWithProperty(property): + """Return list of functions that have the named property.""" + funcs = [] + for funcName in GetDispatchedFunctions(): + if property in Properties(funcName): + funcs.append(funcName) + return funcs + +def Category(funcName): + """Return the primary category of the named GL function.""" + d = GetFunctionDict() + return d[funcName].category + +def Categories(funcName): + """Return all the categories of the named GL function.""" + d = GetFunctionDict() + return d[funcName].categories + +def ChromiumProps(funcName): + """Return list of Chromium-specific properties of the named GL function.""" + d = GetFunctionDict() + return d[funcName].chromium + +def ParamProps(funcName): + """Return list of Parameter-specific properties of the named GL function.""" + d = GetFunctionDict() + return d[funcName].paramprop + +def Alias(funcName): + """Return the function that the named function is an alias of. + Ex: Alias('DrawArraysEXT') = 'DrawArrays'. + """ + d = GetFunctionDict() + return d[funcName].alias + +def AliasPrefix(funcName): + """Return the function that the named function is an alias of. + Ex: Alias('DrawArraysEXT') = 'DrawArrays'. + """ + d = GetFunctionDict() + if d[funcName].aliasprefix == '': + return "_mesa_" + else: + return d[funcName].aliasprefix + +def ReverseAlias(funcName): + """Like Alias(), but the inverse.""" + d = GetFunctionDict() + if funcName in __ReverseAliases.keys(): + return __ReverseAliases[funcName] + else: + return '' + +def NonVectorFunction(funcName): + """Return the non-vector version of the given function, or ''. + For example: NonVectorFunction("Color3fv") = "Color3f".""" + d = GetFunctionDict() + return d[funcName].vectoralias + +def ConversionFunction(funcName): + """Return a function that can be used to implement the + given function, using different types. + For example: ConvertedFunction("Color4x") = "Color4f".""" + d = GetFunctionDict() + return d[funcName].convertalias + +def VectorFunction(funcName): + """Return the vector version of the given non-vector-valued function, + or ''. + For example: VectorVersion("Color3f") = "Color3fv".""" + d = GetFunctionDict() + if funcName in __VectorVersion.keys(): + return __VectorVersion[funcName] + else: + return '' + +def GetCategoryWrapper(func_name): + """Return a C preprocessor token to test in order to wrap code. + This handles extensions. + Example: GetTestWrapper("glActiveTextureARB") = "CR_multitexture" + Example: GetTestWrapper("glBegin") = "" + """ + cat = Category(func_name) + if (cat == "1.0" or + cat == "1.1" or + cat == "1.2" or + cat == "Chromium" or + cat == "GL_chromium"): + return '' + elif cat[0] =='1': + # i.e. OpenGL 1.3 or 1.4 or 1.5 + return "OPENGL_VERSION_" + string.replace(cat, ".", "_") + else: + assert cat != '' + return string.replace(cat, "GL_", "") + + +def CanCompile(funcName): + """Return 1 if the function can be compiled into display lists, else 0.""" + props = Properties(funcName) + if ("nolist" in props or + "get" in props or + "setclient" in props): + return 0 + else: + return 1 + +def HasChromiumProperty(funcName, propertyList): + """Return 1 if the function or any alias has any property in the + propertyList""" + for funcAlias in [funcName, NonVectorFunction(funcName), VectorFunction(funcName)]: + if funcAlias: + props = ChromiumProps(funcAlias) + for p in propertyList: + if p in props: + return 1 + return 0 + +def CanPack(funcName): + """Return 1 if the function can be packed, else 0.""" + return HasChromiumProperty(funcName, ['pack', 'extpack', 'expandpack']) + +def HasPackOpcode(funcName): + """Return 1 if the function has a true pack opcode""" + return HasChromiumProperty(funcName, ['pack', 'extpack']) + +def SetsState(funcName): + """Return 1 if the function sets server-side state, else 0.""" + props = Properties(funcName) + + # Exceptions. The first set of these functions *do* have + # server-side state-changing effects, but will be missed + # by the general query, because they either render (e.g. + # Bitmap) or do not compile into display lists (e.g. all the others). + # + # The second set do *not* have server-side state-changing + # effects, despite the fact that they do not render + # and can be compiled. They are control functions + # that are not trackable via state. + if funcName in ['Bitmap', 'DeleteTextures', 'FeedbackBuffer', + 'RenderMode', 'BindBufferARB', 'DeleteFencesNV']: + return 1 + elif funcName in ['ExecuteProgramNV']: + return 0 + + # All compilable functions that do not render and that do + # not set or use client-side state (e.g. DrawArrays, et al.), set + # server-side state. + if CanCompile(funcName) and "render" not in props and "useclient" not in props and "setclient" not in props: + return 1 + + # All others don't set server-side state. + return 0 + +def SetsClientState(funcName): + """Return 1 if the function sets client-side state, else 0.""" + props = Properties(funcName) + if "setclient" in props: + return 1 + return 0 + +def SetsTrackedState(funcName): + """Return 1 if the function sets state that is tracked by + the state tracker, else 0.""" + # These functions set state, but aren't tracked by the state + # tracker for various reasons: + # - because the state tracker doesn't manage display lists + # (e.g. CallList and CallLists) + # - because the client doesn't have information about what + # the server supports, so the function has to go to the + # server (e.g. CompressedTexImage calls) + # - because they require a round-trip to the server (e.g. + # the CopyTexImage calls, SetFenceNV, TrackMatrixNV) + if funcName in [ + 'CopyTexImage1D', 'CopyTexImage2D', + 'CopyTexSubImage1D', 'CopyTexSubImage2D', 'CopyTexSubImage3D', + 'CallList', 'CallLists', + 'CompressedTexImage1DARB', 'CompressedTexSubImage1DARB', + 'CompressedTexImage2DARB', 'CompressedTexSubImage2DARB', + 'CompressedTexImage3DARB', 'CompressedTexSubImage3DARB', + 'SetFenceNV' + ]: + return 0 + + # Anything else that affects client-side state is trackable. + if SetsClientState(funcName): + return 1 + + # Anything else that doesn't set state at all is certainly + # not trackable. + if not SetsState(funcName): + return 0 + + # Per-vertex state isn't tracked the way other state is + # tracked, so it is specifically excluded. + if "pervertex" in Properties(funcName): + return 0 + + # Everything else is fine + return 1 + +def UsesClientState(funcName): + """Return 1 if the function uses client-side state, else 0.""" + props = Properties(funcName) + if "pixelstore" in props or "useclient" in props: + return 1 + return 0 + +def IsQuery(funcName): + """Return 1 if the function returns information to the user, else 0.""" + props = Properties(funcName) + if "get" in props: + return 1 + return 0 + +def FuncGetsState(funcName): + """Return 1 if the function gets GL state, else 0.""" + d = GetFunctionDict() + props = Properties(funcName) + if "get" in props: + return 1 + else: + return 0 + +def IsPointer(dataType): + """Determine if the datatype is a pointer. Return 1 or 0.""" + if string.find(dataType, "*") == -1: + return 0 + else: + return 1 + + +def PointerType(pointerType): + """Return the type of a pointer. + Ex: PointerType('const GLubyte *') = 'GLubyte' + """ + t = string.split(pointerType, ' ') + if t[0] == "const": + t[0] = t[1] + return t[0] + + + + +def OpcodeName(funcName): + """Return the C token for the opcode for the given function.""" + return "CR_" + string.upper(funcName) + "_OPCODE" + + +def ExtendedOpcodeName(funcName): + """Return the C token for the extended opcode for the given function.""" + return "CR_" + string.upper(funcName) + "_EXTEND_OPCODE" + + + + +#====================================================================== + +def MakeCallString(params): + """Given a list of (name, type, vectorSize) parameters, make a C-style + formal parameter string. + Ex return: 'index, x, y, z'. + """ + result = '' + i = 1 + n = len(params) + for (name, type, vecSize, convertToType, validValues, valueConversion) in params: + result += name + if i < n: + result = result + ', ' + i += 1 + #endfor + return result +#enddef + + +def MakeDeclarationString(params): + """Given a list of (name, type, vectorSize) parameters, make a C-style + parameter declaration string. + Ex return: 'GLuint index, GLfloat x, GLfloat y, GLfloat z'. + """ + n = len(params) + if n == 0: + return 'void' + else: + result = '' + i = 1 + for (name, type, vecSize, convertToType, validValues, valueConversion) in params: + result = result + type + ' ' + name + if i < n: + result = result + ', ' + i += 1 + #endfor + return result + #endif +#enddef + + +def MakePrototypeString(params): + """Given a list of (name, type, vectorSize) parameters, make a C-style + parameter prototype string (types only). + Ex return: 'GLuint, GLfloat, GLfloat, GLfloat'. + """ + n = len(params) + if n == 0: + return 'void' + else: + result = '' + i = 1 + for (name, type, vecSize, convertToType, validValues, valueConversion) in params: + result = result + type + # see if we need a comma separator + if i < n: + result = result + ', ' + i += 1 + #endfor + return result + #endif +#enddef + + +#====================================================================== + +__lengths = { + 'GLbyte': 1, + 'GLubyte': 1, + 'GLshort': 2, + 'GLushort': 2, + 'GLint': 4, + 'GLuint': 4, + 'GLfloat': 4, + 'GLclampf': 4, + 'GLdouble': 8, + 'GLclampd': 8, + 'GLenum': 4, + 'GLboolean': 1, + 'GLsizei': 4, + 'GLbitfield': 4, + 'void': 0, # XXX why? + 'int': 4, + 'GLintptrARB': 4, # XXX or 8 bytes? + 'GLsizeiptrARB': 4 # XXX or 8 bytes? +} + +def sizeof(type): + """Return size of C datatype, in bytes.""" + if not type in __lengths.keys(): + print >>sys.stderr, "%s not in lengths!" % type + return __lengths[type] + + +#====================================================================== +align_types = 1 + +def FixAlignment( pos, alignment ): + # if we want double-alignment take word-alignment instead, + # yes, this is super-lame, but we know what we are doing + if alignment > 4: + alignment = 4 + if align_types and alignment and ( pos % alignment ): + pos += alignment - ( pos % alignment ) + return pos + +def WordAlign( pos ): + return FixAlignment( pos, 4 ) + +def PointerSize(): + return 8 # Leave room for a 64 bit pointer + +def PacketLength( params ): + len = 0 + for (name, type, vecSize, convertToType, validValues, valueConversion) in params: + if IsPointer(type): + size = PointerSize() + else: + assert string.find(type, "const") == -1 + size = sizeof(type) + len = FixAlignment( len, size ) + size + len = WordAlign( len ) + return len + +#====================================================================== + +__specials = {} + +def LoadSpecials( filename ): + table = {} + try: + f = open( filename, "r" ) + except: + __specials[filename] = {} + print >>sys.stderr, "%s not present" % filename + return {} + + for line in f.readlines(): + line = string.strip(line) + if line == "" or line[0] == '#': + continue + table[line] = 1 + + __specials[filename] = table + return table + + +def FindSpecial( filename, glName ): + table = {} + try: + table = __specials[filename] + except KeyError: + table = LoadSpecials( filename ) + + try: + if (table[glName] == 1): + return 1 + else: + return 0 #should never happen + except KeyError: + return 0 + + +def AllSpecials( table_file ): + table = {} + filename = table_file + "_special" + try: + table = __specials[filename] + except KeyError: + table = LoadSpecials( filename ) + + keys = table.keys() + keys.sort() + return keys + + +def AllSpecials( table_file ): + filename = table_file + "_special" + table = {} + try: + table = __specials[filename] + except KeyError: + table = LoadSpecials(filename) + + ret = table.keys() + ret.sort() + return ret + + +def NumSpecials( table_file ): + filename = table_file + "_special" + table = {} + try: + table = __specials[filename] + except KeyError: + table = LoadSpecials(filename) + return len(table.keys()) + +def PrintRecord(record): + argList = MakeDeclarationString(record.params) + if record.category == "Chromium": + prefix = "cr" + else: + prefix = "gl" + print '%s %s%s(%s);' % (record.returnType, prefix, record.name, argList ) + if len(record.props) > 0: + print ' /* %s */' % string.join(record.props, ' ') + +#ProcessSpecFile("APIspec.txt", PrintRecord) + diff --git a/src/mesa/es/main/es1_special b/src/mesa/es/main/es1_special new file mode 100644 index 0000000000..4cc97c30f3 --- /dev/null +++ b/src/mesa/es/main/es1_special @@ -0,0 +1,8 @@ +# GetString is always special. +GetString +# CompressedTexImage2D calls out to two different functions based on +# whether the image is a paletted image or not +CompressedTexImage2D +# QueryMatrixx returns values in an unusual, decomposed, fixed-value +# form; it has its own code for this +QueryMatrixx diff --git a/src/mesa/es/main/es2_special b/src/mesa/es/main/es2_special new file mode 100644 index 0000000000..8de76a3735 --- /dev/null +++ b/src/mesa/es/main/es2_special @@ -0,0 +1,5 @@ +# GetString must always have its own implementation, so we return our +# implementation values instead of Mesa's. +GetString +CompressedTexImage2D +RenderbufferStorage diff --git a/src/mesa/es/main/es_cpaltex.c b/src/mesa/es/main/es_cpaltex.c new file mode 100644 index 0000000000..0d6f7410c3 --- /dev/null +++ b/src/mesa/es/main/es_cpaltex.c @@ -0,0 +1,240 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + **************************************************************************/ + + +/** + * Code to convert compressed/paletted texture images to ordinary 4-byte RGBA. + * See the GL_OES_compressed_paletted_texture spec at + * http://khronos.org/registry/gles/extensions/OES/OES_compressed_paletted_texture.txt + */ + + +#include +#include +#include "GLES/gl.h" +#include "GLES/glext.h" + + +void GL_APIENTRY _es_CompressedTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); + +void GL_APIENTRY _mesa_TexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +void GL_APIENTRY _mesa_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); + + +static const struct { + GLenum format; + GLuint palette_size; + GLuint size; +} formats[] = { + { GL_PALETTE4_RGB8_OES, 16, 3 }, + { GL_PALETTE4_RGBA8_OES, 16, 4 }, + { GL_PALETTE4_R5_G6_B5_OES, 16, 2 }, + { GL_PALETTE4_RGBA4_OES, 16, 2 }, + { GL_PALETTE4_RGB5_A1_OES, 16, 2 }, + { GL_PALETTE8_RGB8_OES, 256, 3 }, + { GL_PALETTE8_RGBA8_OES, 256, 4 }, + { GL_PALETTE8_R5_G6_B5_OES, 256, 2 }, + { GL_PALETTE8_RGBA4_OES, 256, 2 }, + { GL_PALETTE8_RGB5_A1_OES, 256, 2 } +}; + + +/** + * Get a color/entry from the palette. Convert to GLubyte/RGBA format. + */ +static void +get_palette_entry(GLenum format, const void *palette, GLuint index, + GLubyte rgba[4]) +{ + switch (format) { + case GL_PALETTE4_RGB8_OES: + case GL_PALETTE8_RGB8_OES: + { + const GLubyte *pal = (const GLubyte *) palette; + rgba[0] = pal[index * 3 + 0]; + rgba[1] = pal[index * 3 + 1]; + rgba[2] = pal[index * 3 + 2]; + rgba[3] = 255; + } + break; + case GL_PALETTE4_RGBA8_OES: + case GL_PALETTE8_RGBA8_OES: + { + const GLubyte *pal = (const GLubyte *) palette; + rgba[0] = pal[index * 4 + 0]; + rgba[1] = pal[index * 4 + 1]; + rgba[2] = pal[index * 4 + 2]; + rgba[3] = pal[index * 4 + 3]; + } + break; + case GL_PALETTE4_R5_G6_B5_OES: + case GL_PALETTE8_R5_G6_B5_OES: + { + const GLushort *pal = (const GLushort *) palette; + const GLushort color = pal[index]; + rgba[0] = ((color >> 8) & 0xf8) | ((color >> 11) & 0x3); + rgba[1] = ((color >> 3) & 0xfc) | ((color >> 1 ) & 0x3); + rgba[2] = ((color << 3) & 0xf8) | ((color ) & 0x7); + rgba[3] = 255; + } + break; + case GL_PALETTE4_RGBA4_OES: + case GL_PALETTE8_RGBA4_OES: + { + const GLushort *pal = (const GLushort *) palette; + const GLushort color = pal[index]; + rgba[0] = ((color & 0xf000) >> 8) | ((color & 0xf000) >> 12); + rgba[1] = ((color & 0x0f00) >> 4) | ((color & 0x0f00) >> 8); + rgba[2] = ((color & 0x00f0) ) | ((color & 0x00f0) >> 4); + rgba[3] = ((color & 0x000f) << 4) | ((color & 0x000f) ); + } + break; + case GL_PALETTE4_RGB5_A1_OES: + case GL_PALETTE8_RGB5_A1_OES: + { + const GLushort *pal = (const GLushort *) palette; + const GLushort color = pal[index]; + rgba[0] = ((color >> 8) & 0xf8) | ((color >> 11) & 0x7); + rgba[1] = ((color >> 3) & 0xf8) | ((color >> 6) & 0x7); + rgba[2] = ((color << 2) & 0xf8) | ((color >> 1) & 0x7); + rgba[3] = (color & 0x1) * 255; + } + break; + default: + assert(0); + } +} + + +/** + * Convert paletted texture to simple GLubyte/RGBA format. + */ +static void +paletted_to_rgba(GLenum src_format, + const void *palette, + const void *indexes, + GLsizei width, GLsizei height, + GLubyte *rgba) +{ + GLuint pal_ents, i; + + assert(src_format >= GL_PALETTE4_RGB8_OES); + assert(src_format <= GL_PALETTE8_RGB5_A1_OES); + assert(formats[src_format - GL_PALETTE4_RGB8_OES].format == src_format); + + pal_ents = formats[src_format - GL_PALETTE4_RGB8_OES].palette_size; + + if (pal_ents == 16) { + /* 4 bits per index */ + const GLubyte *ind = (const GLubyte *) indexes; + + if (width * height == 1) { + /* special case the only odd-sized image */ + GLuint index0 = ind[0] >> 4; + get_palette_entry(src_format, palette, index0, rgba); + return; + } + /* two pixels per iteration */ + for (i = 0; i < width * height / 2; i++) { + GLuint index0 = ind[i] >> 4; + GLuint index1 = ind[i] & 0xf; + get_palette_entry(src_format, palette, index0, rgba + i * 8); + get_palette_entry(src_format, palette, index1, rgba + i * 8 + 4); + } + } + else { + /* 8 bits per index */ + const GLubyte *ind = (const GLubyte *) indexes; + for (i = 0; i < width * height; i++) { + GLuint index = ind[i]; + get_palette_entry(src_format, palette, index, rgba + i * 4); + } + } +} + + +/** + * Convert a call to glCompressedTexImage2D() where internalFormat is a + * compressed palette format into a regular GLubyte/RGBA glTexImage2D() call. + */ +static void +cpal_compressed_teximage2d(GLenum target, GLint level, + GLenum internalFormat, + GLsizei width, GLsizei height, + const void *pixels) +{ + GLuint pal_ents, pal_ent_size, pal_bytes; + const GLint num_levels = level + 1; + GLint lvl; + const GLubyte *indexes; + + assert(internalFormat >= GL_PALETTE4_RGB8_OES); + assert(internalFormat <= GL_PALETTE8_RGB5_A1_OES); + assert(formats[internalFormat - GL_PALETTE4_RGB8_OES].format == internalFormat); + + pal_ents = formats[internalFormat - GL_PALETTE4_RGB8_OES].palette_size; + pal_ent_size = formats[internalFormat - GL_PALETTE4_RGB8_OES].size; + pal_bytes = pal_ents * pal_ent_size; + + /* first image follows the palette */ + indexes = (const GLubyte *) pixels + pal_bytes; + + /* No worries about glPixelStore state since the only supported parameter is + * GL_UNPACK_ALIGNMENT and it doesn't matter when unpacking GLubyte/RGBA. + */ + + for (lvl = 0; lvl < num_levels; lvl++) { + /* Allocate GLubyte/RGBA dest image buffer */ + GLubyte *rgba = (GLubyte *) malloc(width * height * 4); + + if (pixels) + paletted_to_rgba(internalFormat, pixels, indexes, width, height, rgba); + + _mesa_TexImage2D(target, lvl, GL_RGBA, width, height, 0, + GL_RGBA, GL_UNSIGNED_BYTE, rgba); + + free(rgba); + + /* advance index pointer to point to next src mipmap */ + if (pal_ents == 4) + indexes += width * height / 2; + else + indexes += width * height; + + /* next mipmap level size */ + if (width > 1) + width /= 2; + if (height > 1) + height /= 2; + } +} + + +void GL_APIENTRY +_es_CompressedTexImage2D(GLenum target, GLint level, GLenum internalFormat, + GLsizei width, GLsizei height, GLint border, + GLsizei imageSize, const GLvoid *data) +{ + switch (internalFormat) { + case GL_PALETTE4_RGB8_OES: + case GL_PALETTE4_RGBA8_OES: + case GL_PALETTE4_R5_G6_B5_OES: + case GL_PALETTE4_RGBA4_OES: + case GL_PALETTE4_RGB5_A1_OES: + case GL_PALETTE8_RGB8_OES: + case GL_PALETTE8_RGBA8_OES: + case GL_PALETTE8_R5_G6_B5_OES: + case GL_PALETTE8_RGBA4_OES: + case GL_PALETTE8_RGB5_A1_OES: + cpal_compressed_teximage2d(target, level, internalFormat, + width, height, data); + break; + default: + _mesa_CompressedTexImage2DARB(target, level, internalFormat, + width, height, border, imageSize, data); + } +} diff --git a/src/mesa/es/main/es_fbo.c b/src/mesa/es/main/es_fbo.c new file mode 100644 index 0000000000..545c46ca99 --- /dev/null +++ b/src/mesa/es/main/es_fbo.c @@ -0,0 +1,37 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + **************************************************************************/ + + +#include "GLES2/gl2.h" +#include "GLES2/gl2ext.h" + + +extern void GL_APIENTRY _es_RenderbufferStorage(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); + +extern void GL_APIENTRY _mesa_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); + + +void GL_APIENTRY +_es_RenderbufferStorage(GLenum target, GLenum internalFormat, + GLsizei width, GLsizei height) +{ + switch (internalFormat) { + case GL_RGBA4: + case GL_RGB5_A1: + case GL_RGB565: + internalFormat = GL_RGBA; + break; + case GL_STENCIL_INDEX1_OES: + case GL_STENCIL_INDEX4_OES: + case GL_STENCIL_INDEX8: + internalFormat = GL_STENCIL_INDEX; + break; + default: + ; /* no op */ + } + _mesa_RenderbufferStorageEXT(target, internalFormat, width, height); +} diff --git a/src/mesa/es/main/es_generator.py b/src/mesa/es/main/es_generator.py new file mode 100644 index 0000000000..2e38b59d9e --- /dev/null +++ b/src/mesa/es/main/es_generator.py @@ -0,0 +1,773 @@ +#************************************************************************* +# Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. +# All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# TUNGSTEN GRAPHICS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +#************************************************************************* + + +import sys, os +import apiutil + +# These dictionary entries are used for automatic conversion. +# The string will be used as a format string with the conversion +# variable. +Converters = { + 'GLfloat': { + 'GLdouble': "(GLdouble) (%s)", + 'GLfixed' : "(GLint) (%s * 65536)", + }, + 'GLfixed': { + 'GLfloat': "(GLfloat) (%s / 65536.0f)", + 'GLdouble': "(GLdouble) (%s / 65536.0)", + }, + 'GLdouble': { + 'GLfloat': "(GLfloat) (%s)", + 'GLfixed': "(GLfixed) (%s * 65536)", + }, + 'GLclampf': { + 'GLclampd': "(GLclampd) (%s)", + 'GLclampx': "(GLclampx) (%s * 65536)", + }, + 'GLclampx': { + 'GLclampf': "(GLclampf) (%s / 65536.0f)", + 'GLclampd': "(GLclampd) (%s / 65536.0)", + }, + 'GLubyte': { + 'GLfloat': "(GLfloat) (%s / 255.0f)", + }, +} + +def GetBaseType(type): + typeTokens = type.split(' ') + baseType = None + typeModifiers = [] + for t in typeTokens: + if t in ['const', '*']: + typeModifiers.append(t) + else: + baseType = t + return (baseType, typeModifiers) + +def ConvertValue(value, fromType, toType): + """Returns a string that represents the given parameter string, + type-converted if necessary.""" + + if not Converters.has_key(fromType): + print >> sys.stderr, "No base converter for type '%s' found. Ignoring." % fromType + return value + + if not Converters[fromType].has_key(toType): + print >> sys.stderr, "No converter found for type '%s' to type '%s'. Ignoring." % (fromType, toType) + return value + + # This part is simple. Return the proper conversion. + conversionString = Converters[fromType][toType] + return conversionString % value + +def GetLoopSizeExpression(funcName, paramName, paramMaxVecSize): + # The VariantArrays() list will have all the information (for all + # parameters) on how to calculate variant array sizes. + variantArrays = apiutil.VariantArrays(funcName) + defaultSize = paramMaxVecSize + loopSizeExpression = '' + + # There can be many different entries in the variantArrays for the + # same parameter. We have to look at all of them and pick out the + # ones of interest. + for (variantName, variantSize, controllingParam, controllingValues) in variantArrays: + if paramName == variantName: + # This variant specification applies to us. It may be of + # the form "param size default", meaning that the value should + # replace the default size, or it may be + # "param size controlParam value...", in which case the size should + # be used if the controlParam has any one of the given values. + if len(controllingValues) == 0: + defaultSize = variantSize + else: + # Create a compound conditional that expresses + # all the possible values in the list + conditional = '' + for value in controllingValues: + if len(conditional) > 0: + conditional = conditional + " || " + conditional = conditional + "%s == %s" % (controllingParam, value) + + # Add the possibly compound conditional and + # the associated vector size to the + # loop control expression + loopSizeExpression = loopSizeExpression + "(%s) ? %s : " % (conditional, variantSize) + + # end if the name matches + # end for the list of all variant array declarations + + # Return the expression that returns the actual size of the + # array. Note that 'loopSizeExpression' will already have a + # trailing ": " if it is nonempty. + if len(loopSizeExpression) > 0: + return "(%s%s)" % (loopSizeExpression, defaultSize) + else: + return "%s" % defaultSize + +FormatStrings = { + 'GLenum' : '0x%x', + 'GLfloat' : '%f', + 'GLint' : '%d', + 'GLbitfield' : '0x%x', +} +def GetFormatString(type): + if FormatStrings.has_key(type): + return FormatStrings[type] + else: + return None + + +###################################################################### +# Version-specific values to be used in the main script +# header: which header file to include +# api: what text specifies an API-level function +# special: the name of the "specials" file +VersionSpecificValues = { + 'GLES1.1' : { + 'description' : 'GLES1.1 functions', + 'header' : 'GLES/gl.h', + 'extheader' : 'GLES/glext.h', + 'special' : 'es1_special', + }, + 'GLES2.0': { + 'description' : 'GLES2.0 functions', + 'header' : 'GLES2/gl2.h', + 'extheader' : 'GLES2/gl2ext.h', + 'special' : 'es2_special', + } +} + + +###################################################################### +# Main code for the script begins here. + +# Get the name of the program (without the directory part) for use in +# error messages. +program = os.path.basename(sys.argv[0]) + +# We assume that the directory that the Python script is in also +# houses the "special" files. +programDir = os.path.dirname(sys.argv[0]) + +# Set default values +verbose = 0 +functionList = "APIspec.txt" +version = "GLES1.1" + +# Allow for command-line switches +import getopt, time +options = "hvV:S:" +try: + optlist, args = getopt.getopt(sys.argv[1:], options) +except getopt.GetoptError, message: + sys.stderr.write("%s: %s. Use -h for help.\n" % (program, message)) + sys.exit(1) + +for option, optarg in optlist: + if option == "-h": + sys.stderr.write("Usage: %s [-%s]\n" % (program, options)) + sys.stderr.write("Parse an API specification file and generate wrapper functions for a given GLES version\n") + sys.stderr.write("-h gives help\n") + sys.stderr.write("-v is verbose\n") + sys.stderr.write("-V specifies GLES version to generate [%s]:\n" % version) + for key in VersionSpecificValues.keys(): + sys.stderr.write(" %s - %s\n" % (key, VersionSpecificValues[key]['description'])) + sys.stderr.write("-S specifies API specification file to use [%s]\n" % functionList) + sys.exit(1) + elif option == "-v": + verbose += 1 + elif option == "-V": + version = optarg + elif option == "-S": + functionList = optarg + +# Beyond switches, we support no further command-line arguments +if len(args) > 0: + sys.stderr.write("%s: only switch arguments are supported - use -h for help\n" % program) + sys.exit(1) + +# If we don't have a valid version, abort. +if not VersionSpecificValues.has_key(version): + sys.stderr.write("%s: version '%s' is not valid - use -h for help\n" % (program, version)) + sys.exit(1) + +# Grab the version-specific items we need to use +versionHeader = VersionSpecificValues[version]['header'] +versionExtHeader = VersionSpecificValues[version]['extheader'] +versionSpecial = VersionSpecificValues[version]['special'] + +# We're probably being invoked from a different directory, +# so look for the "special" file in the same directory that +# holds the Python script +specialFile = os.path.join(programDir, versionSpecial) +if not os.path.isfile(specialFile): + sys.stderr.write("%s: can't find special file '%s' for version '%s' - aborting" % (program, specialFile, version)) + sys.exit(1) + +allSpecials = apiutil.AllSpecials(specialFile.split("_")[0]) + +# If we get to here, we're good to go. The "version" parameter +# directs GetDispatchedFunctions to only allow functions from +# that "category" (version in our parlance). This allows +# functions with different declarations in different categories +# to exist (glTexImage2D, for example, is different between +# GLES1 and GLES2). +keys = apiutil.GetAllFunctions(functionList, version) + +print """/* DO NOT EDIT ************************************************* + * THIS FILE AUTOMATICALLY GENERATED BY THE %s SCRIPT + * API specification file: %s + * GLES version: %s + * date: %s + */ +""" % (program, functionList, version, time.strftime("%Y-%m-%d %H:%M:%S")) + +# The headers we choose are version-specific. +print """ +#include "%s" +#include "%s" +""" % (versionHeader, versionExtHeader) + +# Everyone needs these types. +print """ +/* These types are needed for the Mesa veneer, but are not defined in + * the standard GLES headers. + */ +typedef double GLdouble; +typedef double GLclampd; + +/* This type is normally in glext.h, but needed here */ +typedef char GLchar; + +/* Mesa error handling requires these */ +extern void *_mesa_get_current_context(void); +extern void _mesa_error(void *ctx, GLenum error, const char *fmtString, ... ); + +#include "main/compiler.h" +#include "main/api_exec.h" + +#include "glapi/dispatch.h" + +typedef void (*_glapi_proc)(void); /* generic function pointer */ +""" + +# All variant-length arrays in the GLES API are controlled by some +# selector parameter. Almost all of those are constant length based +# on the selector parameter (e.g., in glFogfv(), if the "pname" +# parameter is GL_FOG_COLOR, the "params" array is considered to be +# 4 floats long; for any other value of "pname", the "params' array +# is considered to be 1 float long. +# +# There are a very few instances where the selector parameter chooses +# a runtime-determined value: +# glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS) +# glGetIntegerv(GL_SHADER_BINARY_FORMATS) +# plus the glGetBooleanv, glGetFloatv, glGetFixedv counterparts. +# +# The number of formats in both cases is not a constant, but is a +# runtime-determined value (based on the return value of +# glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS) or +# glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS). +# +# Rather than hard-code some value (and risk memory errors when we +# overshoot arrays), in these cases we'll use a constant expresssion +# (e.g. _get_size(GL_NUM_COMPRESSED_TEXTURE_FORMATS)) to get the +# value of the variant array. Note, though, that in these cases the +# "vector" parameter should be set to some size large enough to hold +# all values (and must be set for GLfixed-based conversions, which +# need it to define an auxiliary array size). +# +# Here's the function itself. Although we only need a couple of values, +# we'll make it general. +print """ +extern void GLAPIENTRY _mesa_GetIntegerv(GLenum, GLint *); +static INLINE unsigned int _get_size(GLenum pname) +{ + /* In case of error, make sure the value returned is 0. */ + GLint value = 0; + _mesa_GetIntegerv(pname, &value); + return (unsigned int) value; +} +""" + +# Finally we get to the all-important functions +print """/************************************************************* + * Generated functions begin here + */ +""" +for funcName in keys: + if verbose > 0: sys.stderr.write("%s: processing function %s\n" % (program, funcName)) + + # start figuring out what this function will look like. + returnType = apiutil.ReturnType(funcName) + props = apiutil.Properties(funcName) + params = apiutil.Parameters(funcName) + declarationString = apiutil.MakeDeclarationString(params) + + # In case of error, a function may have to return. Make + # sure we have valid return values in this case. + if returnType == "void": + errorReturn = "return" + elif returnType == "GLboolean": + errorReturn = "return GL_FALSE" + else: + errorReturn = "return (%s) 0" % returnType + + # These are the output of this large calculation block. + # passthroughDeclarationString: a typed set of parameters that + # will be used to create the "extern" reference for the + # underlying Mesa or support function. Note that as generated + # these have an extra ", " at the beginning, which will be + # removed before use. + # + # passthroughDeclarationString: an untyped list of parameters + # that will be used to call the underlying Mesa or support + # function (including references to converted parameters). + # This will also be generated with an extra ", " at the + # beginning, which will be removed before use. + # + # variables: C code to create any local variables determined to + # be necessary. + # conversionCodeOutgoing: C code to convert application parameters + # to a necessary type before calling the underlying support code. + # May be empty if no conversion is required. + # conversionCodeIncoming: C code to do the converse: convert + # values returned by underlying Mesa code to the types needed + # by the application. + # Note that *either* the conversionCodeIncoming will be used (for + # generated query functions), *or* the conversionCodeOutgoing will + # be used (for generated non-query functions), never both. + passthroughFuncName = "" + passthroughDeclarationString = "" + passthroughCallString = "" + variables = [] + conversionCodeOutgoing = [] + conversionCodeIncoming = [] + switchCode = [] + + # Calculate the name of the underlying support function to call. + # By default, the passthrough function is named _mesa_. + # We're allowed to override the prefix and/or the function name + # for each function record, though. The "ConversionFunction" + # utility is poorly named, BTW... + aliasprefix = apiutil.AliasPrefix(funcName) + alias = apiutil.ConversionFunction(funcName) + if not alias: + # There may still be a Mesa alias for the function + if apiutil.Alias(funcName): + passthroughFuncName = "%s%s" % (aliasprefix, apiutil.Alias(funcName)) + else: + passthroughFuncName = "%s%s" % (aliasprefix, funcName) + else: # a specific alias is provided + passthroughFuncName = "%s%s" % (aliasprefix, alias) + + # Look at every parameter: each one may have only specific + # allowed values, or dependent parameters to check, or + # variant-sized vector arrays to calculate + for (paramName, paramType, paramMaxVecSize, paramConvertToType, paramValidValues, paramValueConversion) in params: + # We'll need this below if we're doing conversions + (paramBaseType, paramTypeModifiers) = GetBaseType(paramType) + + # Conversion management. + # We'll handle three cases, easiest to hardest: a parameter + # that doesn't require conversion, a scalar parameter that + # requires conversion, and a vector parameter that requires + # conversion. + if paramConvertToType == None: + # Unconverted parameters are easy, whether they're vector + # or scalar - just add them to the call list. No conversions + # or anything to worry about. + passthroughDeclarationString += ", %s %s" % (paramType, paramName) + passthroughCallString += ", %s" % paramName + + elif paramMaxVecSize == 0: # a scalar parameter that needs conversion + # A scalar to hold a converted parameter + variables.append(" %s converted_%s;" % (paramConvertToType, paramName)) + + # Outgoing conversion depends on whether we have to conditionally + # perform value conversion. + if paramValueConversion == "none": + conversionCodeOutgoing.append(" converted_%s = (%s) %s;" % (paramName, paramConvertToType, paramName)) + elif paramValueConversion == "some": + # We'll need a conditional variable to keep track of + # whether we're converting values or not. + if (" int convert_%s_value = 1;" % paramName) not in variables: + variables.append(" int convert_%s_value = 1;" % paramName) + + # Write code based on that conditional. + conversionCodeOutgoing.append(" if (convert_%s_value) {" % paramName) + conversionCodeOutgoing.append(" converted_%s = %s;" % (paramName, ConvertValue(paramName, paramBaseType, paramConvertToType))) + conversionCodeOutgoing.append(" } else {") + conversionCodeOutgoing.append(" converted_%s = (%s) %s;" % (paramName, paramConvertToType, paramName)) + conversionCodeOutgoing.append(" }") + else: # paramValueConversion == "all" + conversionCodeOutgoing.append(" converted_%s = %s;" % (paramName, ConvertValue(paramName, paramBaseType, paramConvertToType))) + + # Note that there can be no incoming conversion for a + # scalar parameter; changing the scalar will only change + # the local value, and won't ultimately change anything + # that passes back to the application. + + # Call strings. The unusual " ".join() call will join the + # array of parameter modifiers with spaces as separators. + passthroughDeclarationString += ", %s %s %s" % (paramConvertToType, " ".join(paramTypeModifiers), paramName) + passthroughCallString += ", converted_%s" % paramName + + else: # a vector parameter that needs conversion + # We'll need an index variable for conversions + if " register unsigned int i;" not in variables: + variables.append(" register unsigned int i;") + + # This variable will hold the (possibly variant) size of + # this array needing conversion. By default, we'll set + # it to the maximal size (which is correct for functions + # with a constant-sized vector parameter); for true + # variant arrays, we'll modify it with other code. + variables.append(" unsigned int n_%s = %d;" % (paramName, paramMaxVecSize)) + + # This array will hold the actual converted values. + variables.append(" %s converted_%s[%d];" % (paramConvertToType, paramName, paramMaxVecSize)) + + # Again, we choose the conversion code based on whether we + # have to always convert values, never convert values, or + # conditionally convert values. + if paramValueConversion == "none": + conversionCodeOutgoing.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeOutgoing.append(" converted_%s[i] = (%s) %s[i];" % (paramName, paramConvertToType, paramName)) + conversionCodeOutgoing.append(" }") + elif paramValueConversion == "some": + # We'll need a conditional variable to keep track of + # whether we're converting values or not. + if (" int convert_%s_value = 1;" % paramName) not in variables: + variables.append(" int convert_%s_value = 1;" % paramName) + # Write code based on that conditional. + conversionCodeOutgoing.append(" if (convert_%s_value) {" % paramName) + conversionCodeOutgoing.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeOutgoing.append(" converted_%s[i] = %s;" % (paramName, ConvertValue("%s[i]" % paramName, paramBaseType, paramConvertToType))) + conversionCodeOutgoing.append(" }") + conversionCodeOutgoing.append(" } else {") + conversionCodeOutgoing.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeOutgoing.append(" converted_%s[i] = (%s) %s[i];" % (paramName, paramConvertToType, paramName)) + conversionCodeOutgoing.append(" }") + conversionCodeOutgoing.append(" }") + else: # paramValueConversion == "all" + conversionCodeOutgoing.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeOutgoing.append(" converted_%s[i] = %s;" % (paramName, ConvertValue("%s[i]" % paramName, paramBaseType, paramConvertToType))) + + conversionCodeOutgoing.append(" }") + + # If instead we need an incoming conversion (i.e. results + # from Mesa have to be converted before handing back + # to the application), this is it. Fortunately, we don't + # have to worry about conditional value conversion - the + # functions that do (e.g. glGetFixedv()) are handled + # specially, outside this code generation. + # + # Whether we use incoming conversion or outgoing conversion + # is determined later - we only ever use one or the other. + + if paramValueConversion == "none": + conversionCodeIncoming.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeIncoming.append(" %s[i] = (%s) converted_%s[i];" % (paramName, paramConvertToType, paramName)) + conversionCodeIncoming.append(" }") + elif paramValueConversion == "some": + # We'll need a conditional variable to keep track of + # whether we're converting values or not. + if (" int convert_%s_value = 1;" % paramName) not in variables: + variables.append(" int convert_%s_value = 1;" % paramName) + + # Write code based on that conditional. + conversionCodeIncoming.append(" if (convert_%s_value) {" % paramName) + conversionCodeIncoming.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeIncoming.append(" %s[i] = %s;" % (paramName, ConvertValue("converted_%s[i]" % paramName, paramConvertToType, paramBaseType))) + conversionCodeIncoming.append(" }") + conversionCodeIncoming.append(" } else {") + conversionCodeIncoming.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeIncoming.append(" %s[i] = (%s) converted_%s[i];" % (paramName, paramBaseType, paramName)) + conversionCodeIncoming.append(" }") + conversionCodeIncoming.append(" }") + else: # paramValueConversion == "all" + conversionCodeIncoming.append(" for (i = 0; i < n_%s; i++) {" % paramName) + conversionCodeIncoming.append(" %s[i] = %s;" % (paramName, ConvertValue("converted_%s[i]" % paramName, paramConvertToType, paramBaseType))) + conversionCodeIncoming.append(" }") + + # Call strings. The unusual " ".join() call will join the + # array of parameter modifiers with spaces as separators. + passthroughDeclarationString += ", %s %s %s" % (paramConvertToType, " ".join(paramTypeModifiers), paramName) + passthroughCallString += ", converted_%s" % paramName + + # endif conversion management + + # Parameter checking. If the parameter has a specific list of + # valid values, we have to make sure that the passed-in values + # match these, or we make an error. + if len(paramValidValues) > 0: + # We're about to make a big switch statement with an + # error at the end. By default, the error is GL_INVALID_ENUM, + # unless we find a "case" statement in the middle with a + # non-GLenum value. + errorDefaultCase = "GL_INVALID_ENUM" + + # This parameter has specific valid values. Make a big + # switch statement to handle it. Note that the original + # parameters are always what is checked, not the + # converted parameters. + switchCode.append(" switch(%s) {" % paramName) + + for valueIndex in range(len(paramValidValues)): + (paramValue, dependentVecSize, dependentParamName, dependentValidValues, errorCode, valueConvert) = paramValidValues[valueIndex] + + # We're going to need information on the dependent param + # as well. + if dependentParamName: + depParamIndex = apiutil.FindParamIndex(params, dependentParamName) + if depParamIndex == None: + sys.stderr.write("%s: can't find dependent param '%s' for function '%s'\n" % (program, dependentParamName, funcName)) + + (depParamName, depParamType, depParamMaxVecSize, depParamConvertToType, depParamValidValues, depParamValueConversion) = params[depParamIndex] + else: + (depParamName, depParamType, depParamMaxVecSize, depParamConvertToType, depParamValidValues, depParamValueConversion) = (None, None, None, None, [], None) + + # This is a sneaky trick. It's valid syntax for a parameter + # that is *not* going to be converted to be declared + # with a dependent vector size; but in this case, the + # dependent vector size is unused and unnecessary. + # So check for this and ignore the dependent vector size + # if the parameter is not going to be converted. + if depParamConvertToType: + usedDependentVecSize = dependentVecSize + else: + usedDependentVecSize = None + + # We'll peek ahead at the next parameter, to see whether + # we can combine cases + if valueIndex + 1 < len(paramValidValues) : + (nextParamValue, nextDependentVecSize, nextDependentParamName, nextDependentValidValues, nextErrorCode, nextValueConvert) = paramValidValues[valueIndex + 1] + if depParamConvertToType: + usedNextDependentVecSize = nextDependentVecSize + else: + usedNextDependentVecSize = None + + # Create a case for this value. As a mnemonic, + # if we have a dependent vector size that we're ignoring, + # add it as a comment. + if usedDependentVecSize == None and dependentVecSize != None: + switchCode.append(" case %s: /* size %s */" % (paramValue, dependentVecSize)) + else: + switchCode.append(" case %s:" % paramValue) + + # If this is not a GLenum case, then switch our error + # if no value is matched to be GL_INVALID_VALUE instead + # of GL_INVALID_ENUM. (Yes, this does get confused + # if there are both values and GLenums in the same + # switch statement, which shouldn't happen.) + if paramValue[0:3] != "GL_": + errorDefaultCase = "GL_INVALID_VALUE" + + # If all the remaining parameters are identical to the + # next set, then we're done - we'll just create the + # official code on the next pass through, and the two + # cases will share the code. + if valueIndex + 1 < len(paramValidValues) and usedDependentVecSize == usedNextDependentVecSize and dependentParamName == nextDependentParamName and dependentValidValues == nextDependentValidValues and errorCode == nextErrorCode and valueConvert == nextValueConvert: + continue + + # Otherwise, we'll have to generate code for this case. + # Start off with a check: if there is a dependent parameter, + # and a list of valid values for that parameter, we need + # to generate an error if something other than one + # of those values is passed. + if len(dependentValidValues) > 0: + conditional="" + + # If the parameter being checked is actually an array, + # check only its first element. + if depParamMaxVecSize == 0: + valueToCheck = dependentParamName + else: + valueToCheck = "%s[0]" % dependentParamName + + for v in dependentValidValues: + conditional += " && %s != %s" % (valueToCheck, v) + switchCode.append(" if (%s) {" % conditional[4:]) + if errorCode == None: + errorCode = "GL_INVALID_ENUM" + switchCode.append(' _mesa_error(_mesa_get_current_context(), %s, "gl%s(%s=0x%s)", %s);' % (errorCode, funcName, paramName, "%x", paramName)) + switchCode.append(" %s;" % errorReturn) + switchCode.append(" }") + # endif there are dependent valid values + + # The dependent parameter may require conditional + # value conversion. If it does, and we don't want + # to convert values, we'll have to generate code for that + if depParamValueConversion == "some" and valueConvert == "noconvert": + switchCode.append(" convert_%s_value = 0;" % dependentParamName) + + # If there's a dependent vector size for this parameter + # that we're actually going to use (i.e. we need conversion), + # mark it. + if usedDependentVecSize: + switchCode.append(" n_%s = %s;" % (dependentParamName, dependentVecSize)) + + # In all cases, break out of the switch if any valid + # value is found. + switchCode.append(" break;") + + + # Need a default case to catch all the other, invalid + # parameter values. These will all generate errors. + switchCode.append(" default:") + if errorCode == None: + errorCode = "GL_INVALID_ENUM" + formatString = GetFormatString(paramType) + if formatString == None: + switchCode.append(' _mesa_error(_mesa_get_current_context(), %s, "gl%s(%s)");' % (errorCode, funcName, paramName)) + else: + switchCode.append(' _mesa_error(_mesa_get_current_context(), %s, "gl%s(%s=%s)", %s);' % (errorCode, funcName, paramName, formatString, paramName)) + switchCode.append(" %s;" % errorReturn) + + # End of our switch code. + switchCode.append(" }") + + # endfor every recognized parameter value + + # endfor every param + + # Here, the passthroughDeclarationString and passthroughCallString + # are complete; remove the extra ", " at the front of each. + passthroughDeclarationString = passthroughDeclarationString[2:] + passthroughCallString = passthroughCallString[2:] + + # The Mesa functions are scattered across all the Mesa + # header files. The easiest way to manage declarations + # is to create them ourselves. + if funcName not in allSpecials: + print "extern %s GLAPIENTRY %s(%s);" % (returnType, passthroughFuncName, passthroughDeclarationString) + + # A function may be a core function (i.e. it exists in + # the core specification), a core addition (extension + # functions added officially to the core), a required + # extension (usually an extension for an earlier version + # that has been officially adopted), or an optional extension. + # + # Core functions have a simple category (e.g. "GLES1.1"); + # we generate only a simple callback for them. + # + # Core additions have two category listings, one simple + # and one compound (e.g. ["GLES1.1", "GLES1.1:OES_fixed_point"]). + # We generate the core function, and also an extension function. + # + # Required extensions and implemented optional extensions + # have a single compound category "GLES1.1:OES_point_size_array". + # For these we generate just the extension function. + for categorySpec in apiutil.Categories(funcName): + compoundCategory = categorySpec.split(":") + + # This category isn't for us, if the base category doesn't match + # our version + if compoundCategory[0] != version: + continue + + # Otherwise, determine if we're writing code for a core + # function (no suffix) or an extension function. + if len(compoundCategory) == 1: + # This is a core function + extensionName = None + fullFuncName = "_es_" + funcName + else: + # This is an extension function. We'll need to append + # the extension suffix. + extensionName = compoundCategory[1] + extensionSuffix = extensionName.split("_")[0] + fullFuncName = "_es_" + funcName + extensionSuffix + + # Now the generated function. The text used to mark an API-level + # function, oddly, is version-specific. + if extensionName: + print "/* Extension %s */" % extensionName + + if funcName in allSpecials: + print "/* this function is special and is defined elsewhere */" + print "extern %s %s(%s);" % (returnType, fullFuncName, declarationString) + print + continue + + print "static %s %s(%s)" % (returnType, fullFuncName, declarationString) + print "{" + + # Start printing our code pieces. Start with any local + # variables we need. This unusual syntax joins the + # lines in the variables[] array with the "\n" separator. + if len(variables) > 0: + print "\n".join(variables) + "\n" + + # If there's any sort of parameter checking or variable + # array sizing, the switch code will contain it. + if len(switchCode) > 0: + print "\n".join(switchCode) + "\n" + + # In the case of an outgoing conversion (i.e. parameters must + # be converted before calling the underlying Mesa function), + # use the appropriate code. + if "get" not in props and len(conversionCodeOutgoing) > 0: + print "\n".join(conversionCodeOutgoing) + "\n" + + # Call the Mesa function. Note that there are very few functions + # that return a value (i.e. returnType is not "void"), and that + # none of them require incoming translation; so we're safe + # to generate code that directly returns in those cases, + # even though it's not completely independent. + + if returnType == "void": + print " %s(%s);" % (passthroughFuncName, passthroughCallString) + else: + print " return %s(%s);" % (passthroughFuncName, passthroughCallString) + + # If the function is one that returns values (i.e. "get" in props), + # it might return values of a different type than we need, that + # require conversion before passing back to the application. + if "get" in props and len(conversionCodeIncoming) > 0: + print "\n".join(conversionCodeIncoming) + + # All done. + print "}" + print + # end for each category provided for a function + +# end for each function + +print "void" +print "_mesa_init_exec_table(struct _glapi_table *exec)" +print "{" +for func in keys: + for spec in apiutil.Categories(func): + ext = spec.split(":") + # version does not match + if ext.pop(0) != version: + continue + entry = func + if ext: + suffix = ext[0].split("_")[0] + entry += suffix + print " SET_%s(exec, _es_%s);" % (entry, entry) +print "}" diff --git a/src/mesa/es/main/es_query_matrix.c b/src/mesa/es/main/es_query_matrix.c new file mode 100644 index 0000000000..82b6fe7ab9 --- /dev/null +++ b/src/mesa/es/main/es_query_matrix.c @@ -0,0 +1,199 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + **************************************************************************/ + + +/** + * Code to implement GL_OES_query_matrix. See the spec at: + * http://www.khronos.org/registry/gles/extensions/OES/OES_query_matrix.txt + */ + + +#include +#include +#include "GLES/gl.h" +#include "GLES/glext.h" + + +/** + * This is from the GL_OES_query_matrix extension specification: + * + * GLbitfield glQueryMatrixxOES( GLfixed mantissa[16], + * GLint exponent[16] ) + * mantissa[16] contains the contents of the current matrix in GLfixed + * format. exponent[16] contains the unbiased exponents applied to the + * matrix components, so that the internal representation of component i + * is close to mantissa[i] * 2^exponent[i]. The function returns a status + * word which is zero if all the components are valid. If + * status & (1< + +enum {FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL, FP_NORMAL} +fpclassify(double x) +{ + switch(_fpclass(x)) { + case _FPCLASS_SNAN: /* signaling NaN */ + case _FPCLASS_QNAN: /* quiet NaN */ + return FP_NAN; + case _FPCLASS_NINF: /* negative infinity */ + case _FPCLASS_PINF: /* positive infinity */ + return FP_INFINITE; + case _FPCLASS_NN: /* negative normal */ + case _FPCLASS_PN: /* positive normal */ + return FP_NORMAL; + case _FPCLASS_ND: /* negative denormalized */ + case _FPCLASS_PD: /* positive denormalized */ + return FP_SUBNORMAL; + case _FPCLASS_NZ: /* negative zero */ + case _FPCLASS_PZ: /* positive zero */ + return FP_ZERO; + default: + /* Should never get here; but if we do, this will guarantee + * that the pattern is not treated like a number. + */ + return FP_NAN; + } +} +#endif + +extern GLbitfield GL_APIENTRY _es_QueryMatrixxOES(GLfixed mantissa[16], GLint exponent[16]); + +/* The Mesa functions we'll need */ +extern void GL_APIENTRY _mesa_GetIntegerv(GLenum pname, GLint *params); +extern void GL_APIENTRY _mesa_GetFloatv(GLenum pname, GLfloat *params); + +GLbitfield GL_APIENTRY _es_QueryMatrixxOES(GLfixed mantissa[16], GLint exponent[16]) +{ + GLfloat matrix[16]; + GLint tmp; + GLenum currentMode = GL_FALSE; + GLenum desiredMatrix = GL_FALSE; + /* The bitfield returns 1 for each component that is invalid (i.e. + * NaN or Inf). In case of error, everything is invalid. + */ + GLbitfield rv; + register unsigned int i; + unsigned int bit; + + /* This data structure defines the mapping between the current matrix + * mode and the desired matrix identifier. + */ + static struct { + GLenum currentMode; + GLenum desiredMatrix; + } modes[] = { + {GL_MODELVIEW, GL_MODELVIEW_MATRIX}, + {GL_PROJECTION, GL_PROJECTION_MATRIX}, + {GL_TEXTURE, GL_TEXTURE_MATRIX}, +#if 0 + /* this doesn't exist in GLES */ + {GL_COLOR, GL_COLOR_MATRIX}, +#endif + }; + + /* Call Mesa to get the current matrix in floating-point form. First, + * we have to figure out what the current matrix mode is. + */ + _mesa_GetIntegerv(GL_MATRIX_MODE, &tmp); + currentMode = (GLenum) tmp; + + /* The mode is either GL_FALSE, if for some reason we failed to query + * the mode, or a given mode from the above table. Search for the + * returned mode to get the desired matrix; if we don't find it, + * we can return immediately, as _mesa_GetInteger() will have + * logged the necessary error already. + */ + for (i = 0; i < sizeof(modes)/sizeof(modes[0]); i++) { + if (modes[i].currentMode == currentMode) { + desiredMatrix = modes[i].desiredMatrix; + break; + } + } + if (desiredMatrix == GL_FALSE) { + /* Early error means all values are invalid. */ + return 0xffff; + } + + /* Now pull the matrix itself. */ + _mesa_GetFloatv(desiredMatrix, matrix); + + rv = 0; + for (i = 0, bit = 1; i < 16; i++, bit<<=1) { + float normalizedFraction; + int exp; + + switch (fpclassify(matrix[i])) { + /* A "subnormal" or denormalized number is too small to be + * represented in normal format; but despite that it's a + * valid floating point number. FP_ZERO and FP_NORMAL + * are both valid as well. We should be fine treating + * these three cases as legitimate floating-point numbers. + */ + case FP_SUBNORMAL: + case FP_NORMAL: + case FP_ZERO: + normalizedFraction = (GLfloat)frexp(matrix[i], &exp); + mantissa[i] = FLOAT_TO_FIXED(normalizedFraction); + exponent[i] = (GLint) exp; + break; + + /* If the entry is not-a-number or an infinity, then the + * matrix component is invalid. The invalid flag for + * the component is already set; might as well set the + * other return values to known values. We'll set + * distinct values so that a savvy end user could determine + * whether the matrix component was a NaN or an infinity, + * but this is more useful for debugging than anything else + * since the standard doesn't specify any such magic + * values to return. + */ + case FP_NAN: + mantissa[i] = INT_TO_FIXED(0); + exponent[i] = (GLint) 0; + rv |= bit; + break; + + case FP_INFINITE: + /* Return +/- 1 based on whether it's a positive or + * negative infinity. + */ + if (matrix[i] > 0) { + mantissa[i] = INT_TO_FIXED(1); + } + else { + mantissa[i] = -INT_TO_FIXED(1); + } + exponent[i] = (GLint) 0; + rv |= bit; + break; + + /* We should never get here; but here's a catching case + * in case fpclassify() is returnings something unexpected. + */ + default: + mantissa[i] = INT_TO_FIXED(2); + exponent[i] = (GLint) 0; + rv |= bit; + break; + } + + } /* for each component */ + + /* All done */ + return rv; +} diff --git a/src/mesa/es/main/get_gen.py b/src/mesa/es/main/get_gen.py new file mode 100644 index 0000000000..516facc8a3 --- /dev/null +++ b/src/mesa/es/main/get_gen.py @@ -0,0 +1,785 @@ +#!/usr/bin/env python + +# Mesa 3-D graphics library +# +# Copyright (C) 1999-2006 Brian Paul All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +# This script is used to generate the get.c file: +# python get_gen.py > get.c + + +import string +import sys + + +GLint = 1 +GLenum = 2 +GLfloat = 3 +GLdouble = 4 +GLboolean = 5 +GLfloatN = 6 # A normalized value, such as a color or depth range + + +TypeStrings = { + GLint : "GLint", + GLenum : "GLenum", + GLfloat : "GLfloat", + GLdouble : "GLdouble", + GLboolean : "GLboolean" +} + + +# Each entry is a tuple of: +# - the GL state name, such as GL_CURRENT_COLOR +# - the state datatype, one of GLint, GLfloat, GLboolean or GLenum +# - list of code fragments to get the state, such as ["ctx->Foo.Bar"] +# - optional extra code or empty string +# - optional extensions to check, or None +# + +# Present in ES 1.x and 2.x: +StateVars_common = [ + ( "GL_ALPHA_BITS", GLint, ["ctx->DrawBuffer->Visual.alphaBits"], + "", None ), + ( "GL_BLEND", GLboolean, ["ctx->Color.BlendEnabled"], "", None ), + ( "GL_BLEND_SRC", GLenum, ["ctx->Color.BlendSrcRGB"], "", None ), + ( "GL_BLUE_BITS", GLint, ["ctx->DrawBuffer->Visual.blueBits"], "", None ), + ( "GL_COLOR_CLEAR_VALUE", GLfloatN, + [ "ctx->Color.ClearColor[0]", + "ctx->Color.ClearColor[1]", + "ctx->Color.ClearColor[2]", + "ctx->Color.ClearColor[3]" ], "", None ), + ( "GL_COLOR_WRITEMASK", GLint, + [ "ctx->Color.ColorMask[RCOMP] ? 1 : 0", + "ctx->Color.ColorMask[GCOMP] ? 1 : 0", + "ctx->Color.ColorMask[BCOMP] ? 1 : 0", + "ctx->Color.ColorMask[ACOMP] ? 1 : 0" ], "", None ), + ( "GL_CULL_FACE", GLboolean, ["ctx->Polygon.CullFlag"], "", None ), + ( "GL_CULL_FACE_MODE", GLenum, ["ctx->Polygon.CullFaceMode"], "", None ), + ( "GL_DEPTH_BITS", GLint, ["ctx->DrawBuffer->Visual.depthBits"], + "", None ), + ( "GL_DEPTH_CLEAR_VALUE", GLfloatN, ["ctx->Depth.Clear"], "", None ), + ( "GL_DEPTH_FUNC", GLenum, ["ctx->Depth.Func"], "", None ), + ( "GL_DEPTH_RANGE", GLfloatN, + [ "ctx->Viewport.Near", "ctx->Viewport.Far" ], "", None ), + ( "GL_DEPTH_TEST", GLboolean, ["ctx->Depth.Test"], "", None ), + ( "GL_DEPTH_WRITEMASK", GLboolean, ["ctx->Depth.Mask"], "", None ), + ( "GL_DITHER", GLboolean, ["ctx->Color.DitherFlag"], "", None ), + ( "GL_FRONT_FACE", GLenum, ["ctx->Polygon.FrontFace"], "", None ), + ( "GL_GREEN_BITS", GLint, ["ctx->DrawBuffer->Visual.greenBits"], + "", None ), + ( "GL_LINE_WIDTH", GLfloat, ["ctx->Line.Width"], "", None ), + ( "GL_ALIASED_LINE_WIDTH_RANGE", GLfloat, + ["ctx->Const.MinLineWidth", + "ctx->Const.MaxLineWidth"], "", None ), + ( "GL_MAX_ELEMENTS_INDICES", GLint, ["ctx->Const.MaxArrayLockSize"], "", None ), + ( "GL_MAX_ELEMENTS_VERTICES", GLint, ["ctx->Const.MaxArrayLockSize"], "", None ), + + ( "GL_MAX_TEXTURE_SIZE", GLint, ["1 << (ctx->Const.MaxTextureLevels - 1)"], "", None ), + ( "GL_MAX_VIEWPORT_DIMS", GLint, + ["ctx->Const.MaxViewportWidth", "ctx->Const.MaxViewportHeight"], + "", None ), + ( "GL_PACK_ALIGNMENT", GLint, ["ctx->Pack.Alignment"], "", None ), + ( "GL_ALIASED_POINT_SIZE_RANGE", GLfloat, + ["ctx->Const.MinPointSize", + "ctx->Const.MaxPointSize"], "", None ), + ( "GL_POLYGON_OFFSET_FACTOR", GLfloat, ["ctx->Polygon.OffsetFactor "], "", None ), + ( "GL_POLYGON_OFFSET_UNITS", GLfloat, ["ctx->Polygon.OffsetUnits "], "", None ), + ( "GL_RED_BITS", GLint, ["ctx->DrawBuffer->Visual.redBits"], "", None ), + ( "GL_SCISSOR_BOX", GLint, + ["ctx->Scissor.X", + "ctx->Scissor.Y", + "ctx->Scissor.Width", + "ctx->Scissor.Height"], "", None ), + ( "GL_SCISSOR_TEST", GLboolean, ["ctx->Scissor.Enabled"], "", None ), + ( "GL_STENCIL_BITS", GLint, ["ctx->DrawBuffer->Visual.stencilBits"], "", None ), + ( "GL_STENCIL_CLEAR_VALUE", GLint, ["ctx->Stencil.Clear"], "", None ), + ( "GL_STENCIL_FAIL", GLenum, + ["ctx->Stencil.FailFunc[ctx->Stencil.ActiveFace]"], "", None ), + ( "GL_STENCIL_FUNC", GLenum, + ["ctx->Stencil.Function[ctx->Stencil.ActiveFace]"], "", None ), + ( "GL_STENCIL_PASS_DEPTH_FAIL", GLenum, + ["ctx->Stencil.ZFailFunc[ctx->Stencil.ActiveFace]"], "", None ), + ( "GL_STENCIL_PASS_DEPTH_PASS", GLenum, + ["ctx->Stencil.ZPassFunc[ctx->Stencil.ActiveFace]"], "", None ), + ( "GL_STENCIL_REF", GLint, + ["ctx->Stencil.Ref[ctx->Stencil.ActiveFace]"], "", None ), + ( "GL_STENCIL_TEST", GLboolean, ["ctx->Stencil.Enabled"], "", None ), + ( "GL_STENCIL_VALUE_MASK", GLint, + ["ctx->Stencil.ValueMask[ctx->Stencil.ActiveFace]"], "", None ), + ( "GL_STENCIL_WRITEMASK", GLint, + ["ctx->Stencil.WriteMask[ctx->Stencil.ActiveFace]"], "", None ), + ( "GL_SUBPIXEL_BITS", GLint, ["ctx->Const.SubPixelBits"], "", None ), + ( "GL_TEXTURE_BINDING_2D", GLint, + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name"], "", None ), + ( "GL_UNPACK_ALIGNMENT", GLint, ["ctx->Unpack.Alignment"], "", None ), + ( "GL_VIEWPORT", GLint, [ "ctx->Viewport.X", "ctx->Viewport.Y", + "ctx->Viewport.Width", "ctx->Viewport.Height" ], "", None ), + + # GL_ARB_multitexture + ( "GL_ACTIVE_TEXTURE_ARB", GLint, + [ "GL_TEXTURE0_ARB + ctx->Texture.CurrentUnit"], "", ["ARB_multitexture"] ), + + # Note that all the OES_* extensions require that the Mesa + # "struct gl_extensions" include a member with the name of + # the extension. That structure does not yet include OES + # extensions (and we're not sure whether it will). If + # it does, all the OES_* extensions below should mark the + # dependency. + + # OES_texture_cube_map + ( "GL_TEXTURE_BINDING_CUBE_MAP_ARB", GLint, + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name"], + "", None), + ( "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB", GLint, + ["(1 << (ctx->Const.MaxCubeTextureLevels - 1))"], + "", None), + + # OES_blend_subtract + ( "GL_BLEND_SRC_RGB_EXT", GLenum, ["ctx->Color.BlendSrcRGB"], "", None), + ( "GL_BLEND_DST_RGB_EXT", GLenum, ["ctx->Color.BlendDstRGB"], "", None), + ( "GL_BLEND_SRC_ALPHA_EXT", GLenum, ["ctx->Color.BlendSrcA"], "", None), + ( "GL_BLEND_DST_ALPHA_EXT", GLenum, ["ctx->Color.BlendDstA"], "", None), + + # GL_BLEND_EQUATION_RGB, which is what we're really after, + # is defined identically to GL_BLEND_EQUATION. + ( "GL_BLEND_EQUATION", GLenum, ["ctx->Color.BlendEquationRGB "], "", None), + ( "GL_BLEND_EQUATION_ALPHA_EXT", GLenum, ["ctx->Color.BlendEquationA "], + "", None), + + # GL_ARB_texture_compression */ +# ( "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB", GLint, +# ["_mesa_get_compressed_formats(ctx, NULL, GL_FALSE)"], +# "", ["ARB_texture_compression"] ), +# ( "GL_COMPRESSED_TEXTURE_FORMATS_ARB", GLenum, +# [], +# """GLint formats[100]; +# GLuint i, n = _mesa_get_compressed_formats(ctx, formats, GL_FALSE); +# ASSERT(n <= 100); +# for (i = 0; i < n; i++) +# params[i] = ENUM_TO_INT(formats[i]);""", +# ["ARB_texture_compression"] ), + + # GL_ARB_multisample + ( "GL_SAMPLE_ALPHA_TO_COVERAGE_ARB", GLboolean, + ["ctx->Multisample.SampleAlphaToCoverage"], "", ["ARB_multisample"] ), + ( "GL_SAMPLE_COVERAGE_ARB", GLboolean, + ["ctx->Multisample.SampleCoverage"], "", ["ARB_multisample"] ), + ( "GL_SAMPLE_COVERAGE_VALUE_ARB", GLfloat, + ["ctx->Multisample.SampleCoverageValue"], "", ["ARB_multisample"] ), + ( "GL_SAMPLE_COVERAGE_INVERT_ARB", GLboolean, + ["ctx->Multisample.SampleCoverageInvert"], "", ["ARB_multisample"] ), + ( "GL_SAMPLE_BUFFERS_ARB", GLint, + ["ctx->DrawBuffer->Visual.sampleBuffers"], "", ["ARB_multisample"] ), + ( "GL_SAMPLES_ARB", GLint, + ["ctx->DrawBuffer->Visual.samples"], "", ["ARB_multisample"] ), + + + # GL_SGIS_generate_mipmap + ( "GL_GENERATE_MIPMAP_HINT_SGIS", GLenum, ["ctx->Hint.GenerateMipmap"], + "", ["SGIS_generate_mipmap"] ), + + # GL_ARB_vertex_buffer_object + ( "GL_ARRAY_BUFFER_BINDING_ARB", GLint, + ["ctx->Array.ArrayBufferObj->Name"], "", ["ARB_vertex_buffer_object"] ), + # GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB - not supported + ( "GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB", GLint, + ["ctx->Array.ElementArrayBufferObj->Name"], + "", ["ARB_vertex_buffer_object"] ), + + # GL_OES_read_format + ( "GL_IMPLEMENTATION_COLOR_READ_TYPE_OES", GLint, + ["ctx->Const.ColorReadType"], "", None), + ( "GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES", GLint, + ["ctx->Const.ColorReadFormat"], "", None), + + # GL_OES_framebuffer_object + ( "GL_FRAMEBUFFER_BINDING_EXT", GLint, ["ctx->DrawBuffer->Name"], "", + None), + ( "GL_RENDERBUFFER_BINDING_EXT", GLint, + ["ctx->CurrentRenderbuffer ? ctx->CurrentRenderbuffer->Name : 0"], "", + None), + ( "GL_MAX_RENDERBUFFER_SIZE_EXT", GLint, + ["ctx->Const.MaxRenderbufferSize"], "", + None), + + # OpenGL ES 1/2 special: + ( "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB", GLint, + [ "ARRAY_SIZE(compressed_formats)" ], + "", + None ), + + ("GL_COMPRESSED_TEXTURE_FORMATS_ARB", GLint, + [], + """ + int i; + for (i = 0; i < ARRAY_SIZE(compressed_formats); i++) { + params[i] = compressed_formats[i]; + }""", + None ), + + ( "GL_POLYGON_OFFSET_FILL", GLboolean, ["ctx->Polygon.OffsetFill"], "", None ), + +] + +# Only present in ES 1.x: +StateVars_es1 = [ + ( "GL_MAX_LIGHTS", GLint, ["ctx->Const.MaxLights"], "", None ), + ( "GL_LIGHT0", GLboolean, ["ctx->Light.Light[0].Enabled"], "", None ), + ( "GL_LIGHT1", GLboolean, ["ctx->Light.Light[1].Enabled"], "", None ), + ( "GL_LIGHT2", GLboolean, ["ctx->Light.Light[2].Enabled"], "", None ), + ( "GL_LIGHT3", GLboolean, ["ctx->Light.Light[3].Enabled"], "", None ), + ( "GL_LIGHT4", GLboolean, ["ctx->Light.Light[4].Enabled"], "", None ), + ( "GL_LIGHT5", GLboolean, ["ctx->Light.Light[5].Enabled"], "", None ), + ( "GL_LIGHT6", GLboolean, ["ctx->Light.Light[6].Enabled"], "", None ), + ( "GL_LIGHT7", GLboolean, ["ctx->Light.Light[7].Enabled"], "", None ), + ( "GL_LIGHTING", GLboolean, ["ctx->Light.Enabled"], "", None ), + ( "GL_LIGHT_MODEL_AMBIENT", GLfloatN, + ["ctx->Light.Model.Ambient[0]", + "ctx->Light.Model.Ambient[1]", + "ctx->Light.Model.Ambient[2]", + "ctx->Light.Model.Ambient[3]"], "", None ), + ( "GL_LIGHT_MODEL_TWO_SIDE", GLboolean, ["ctx->Light.Model.TwoSide"], "", None ), + ( "GL_ALPHA_TEST", GLboolean, ["ctx->Color.AlphaEnabled"], "", None ), + ( "GL_ALPHA_TEST_FUNC", GLenum, ["ctx->Color.AlphaFunc"], "", None ), + ( "GL_ALPHA_TEST_REF", GLfloatN, ["ctx->Color.AlphaRef"], "", None ), + ( "GL_BLEND_DST", GLenum, ["ctx->Color.BlendDstRGB"], "", None ), + ( "GL_MAX_CLIP_PLANES", GLint, ["ctx->Const.MaxClipPlanes"], "", None ), + ( "GL_CLIP_PLANE0", GLboolean, + [ "(ctx->Transform.ClipPlanesEnabled >> 0) & 1" ], "", None ), + ( "GL_CLIP_PLANE1", GLboolean, + [ "(ctx->Transform.ClipPlanesEnabled >> 1) & 1" ], "", None ), + ( "GL_CLIP_PLANE2", GLboolean, + [ "(ctx->Transform.ClipPlanesEnabled >> 2) & 1" ], "", None ), + ( "GL_CLIP_PLANE3", GLboolean, + [ "(ctx->Transform.ClipPlanesEnabled >> 3) & 1" ], "", None ), + ( "GL_CLIP_PLANE4", GLboolean, + [ "(ctx->Transform.ClipPlanesEnabled >> 4) & 1" ], "", None ), + ( "GL_CLIP_PLANE5", GLboolean, + [ "(ctx->Transform.ClipPlanesEnabled >> 5) & 1" ], "", None ), + ( "GL_COLOR_MATERIAL", GLboolean, + ["ctx->Light.ColorMaterialEnabled"], "", None ), + ( "GL_CURRENT_COLOR", GLfloatN, + [ "ctx->Current.Attrib[VERT_ATTRIB_COLOR0][0]", + "ctx->Current.Attrib[VERT_ATTRIB_COLOR0][1]", + "ctx->Current.Attrib[VERT_ATTRIB_COLOR0][2]", + "ctx->Current.Attrib[VERT_ATTRIB_COLOR0][3]" ], + "FLUSH_CURRENT(ctx, 0);", None ), + ( "GL_CURRENT_NORMAL", GLfloatN, + [ "ctx->Current.Attrib[VERT_ATTRIB_NORMAL][0]", + "ctx->Current.Attrib[VERT_ATTRIB_NORMAL][1]", + "ctx->Current.Attrib[VERT_ATTRIB_NORMAL][2]"], + "FLUSH_CURRENT(ctx, 0);", None ), + ( "GL_CURRENT_TEXTURE_COORDS", GLfloat, + ["ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][0]", + "ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][1]", + "ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][2]", + "ctx->Current.Attrib[VERT_ATTRIB_TEX0 + texUnit][3]"], + "const GLuint texUnit = ctx->Texture.CurrentUnit;", None ), + ( "GL_DISTANCE_ATTENUATION_EXT", GLfloat, + ["ctx->Point.Params[0]", + "ctx->Point.Params[1]", + "ctx->Point.Params[2]"], "", None ), + ( "GL_FOG", GLboolean, ["ctx->Fog.Enabled"], "", None ), + ( "GL_FOG_COLOR", GLfloatN, + [ "ctx->Fog.Color[0]", + "ctx->Fog.Color[1]", + "ctx->Fog.Color[2]", + "ctx->Fog.Color[3]" ], "", None ), + ( "GL_FOG_DENSITY", GLfloat, ["ctx->Fog.Density"], "", None ), + ( "GL_FOG_END", GLfloat, ["ctx->Fog.End"], "", None ), + ( "GL_FOG_HINT", GLenum, ["ctx->Hint.Fog"], "", None ), + ( "GL_FOG_MODE", GLenum, ["ctx->Fog.Mode"], "", None ), + ( "GL_FOG_START", GLfloat, ["ctx->Fog.Start"], "", None ), + ( "GL_LINE_SMOOTH", GLboolean, ["ctx->Line.SmoothFlag"], "", None ), + ( "GL_LINE_SMOOTH_HINT", GLenum, ["ctx->Hint.LineSmooth"], "", None ), + ( "GL_LINE_WIDTH_RANGE", GLfloat, + ["ctx->Const.MinLineWidthAA", + "ctx->Const.MaxLineWidthAA"], "", None ), + ( "GL_COLOR_LOGIC_OP", GLboolean, ["ctx->Color.ColorLogicOpEnabled"], "", None ), + ( "GL_LOGIC_OP_MODE", GLenum, ["ctx->Color.LogicOp"], "", None ), + ( "GL_MATRIX_MODE", GLenum, ["ctx->Transform.MatrixMode"], "", None ), + + ( "GL_MAX_MODELVIEW_STACK_DEPTH", GLint, ["MAX_MODELVIEW_STACK_DEPTH"], "", None ), + ( "GL_MAX_PROJECTION_STACK_DEPTH", GLint, ["MAX_PROJECTION_STACK_DEPTH"], "", None ), + ( "GL_MAX_TEXTURE_STACK_DEPTH", GLint, ["MAX_TEXTURE_STACK_DEPTH"], "", None ), + ( "GL_MODELVIEW_MATRIX", GLfloat, + [ "matrix[0]", "matrix[1]", "matrix[2]", "matrix[3]", + "matrix[4]", "matrix[5]", "matrix[6]", "matrix[7]", + "matrix[8]", "matrix[9]", "matrix[10]", "matrix[11]", + "matrix[12]", "matrix[13]", "matrix[14]", "matrix[15]" ], + "const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m;", None ), + ( "GL_MODELVIEW_STACK_DEPTH", GLint, ["ctx->ModelviewMatrixStack.Depth + 1"], "", None ), + ( "GL_NORMALIZE", GLboolean, ["ctx->Transform.Normalize"], "", None ), + ( "GL_PACK_SKIP_IMAGES_EXT", GLint, ["ctx->Pack.SkipImages"], "", None ), + ( "GL_PERSPECTIVE_CORRECTION_HINT", GLenum, + ["ctx->Hint.PerspectiveCorrection"], "", None ), + ( "GL_POINT_SIZE", GLfloat, ["ctx->Point.Size"], "", None ), + ( "GL_POINT_SIZE_RANGE", GLfloat, + ["ctx->Const.MinPointSizeAA", + "ctx->Const.MaxPointSizeAA"], "", None ), + ( "GL_POINT_SMOOTH", GLboolean, ["ctx->Point.SmoothFlag"], "", None ), + ( "GL_POINT_SMOOTH_HINT", GLenum, ["ctx->Hint.PointSmooth"], "", None ), + ( "GL_POINT_SIZE_MIN_EXT", GLfloat, ["ctx->Point.MinSize"], "", None ), + ( "GL_POINT_SIZE_MAX_EXT", GLfloat, ["ctx->Point.MaxSize"], "", None ), + ( "GL_POINT_FADE_THRESHOLD_SIZE_EXT", GLfloat, + ["ctx->Point.Threshold"], "", None ), + ( "GL_PROJECTION_MATRIX", GLfloat, + [ "matrix[0]", "matrix[1]", "matrix[2]", "matrix[3]", + "matrix[4]", "matrix[5]", "matrix[6]", "matrix[7]", + "matrix[8]", "matrix[9]", "matrix[10]", "matrix[11]", + "matrix[12]", "matrix[13]", "matrix[14]", "matrix[15]" ], + "const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m;", None ), + ( "GL_PROJECTION_STACK_DEPTH", GLint, + ["ctx->ProjectionMatrixStack.Depth + 1"], "", None ), + ( "GL_RESCALE_NORMAL", GLboolean, + ["ctx->Transform.RescaleNormals"], "", None ), + ( "GL_SHADE_MODEL", GLenum, ["ctx->Light.ShadeModel"], "", None ), + ( "GL_TEXTURE_2D", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_2D)"], "", None ), + ( "GL_TEXTURE_MATRIX", GLfloat, + ["matrix[0]", "matrix[1]", "matrix[2]", "matrix[3]", + "matrix[4]", "matrix[5]", "matrix[6]", "matrix[7]", + "matrix[8]", "matrix[9]", "matrix[10]", "matrix[11]", + "matrix[12]", "matrix[13]", "matrix[14]", "matrix[15]" ], + "const GLfloat *matrix = ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m;", None ), + ( "GL_TEXTURE_STACK_DEPTH", GLint, + ["ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Depth + 1"], "", None ), + ( "GL_VERTEX_ARRAY", GLboolean, ["ctx->Array.ArrayObj->Vertex.Enabled"], "", None ), + ( "GL_VERTEX_ARRAY_SIZE", GLint, ["ctx->Array.ArrayObj->Vertex.Size"], "", None ), + ( "GL_VERTEX_ARRAY_TYPE", GLenum, ["ctx->Array.ArrayObj->Vertex.Type"], "", None ), + ( "GL_VERTEX_ARRAY_STRIDE", GLint, ["ctx->Array.ArrayObj->Vertex.Stride"], "", None ), + ( "GL_NORMAL_ARRAY", GLenum, ["ctx->Array.ArrayObj->Normal.Enabled"], "", None ), + ( "GL_NORMAL_ARRAY_TYPE", GLenum, ["ctx->Array.ArrayObj->Normal.Type"], "", None ), + ( "GL_NORMAL_ARRAY_STRIDE", GLint, ["ctx->Array.ArrayObj->Normal.Stride"], "", None ), + ( "GL_COLOR_ARRAY", GLboolean, ["ctx->Array.ArrayObj->Color.Enabled"], "", None ), + ( "GL_COLOR_ARRAY_SIZE", GLint, ["ctx->Array.ArrayObj->Color.Size"], "", None ), + ( "GL_COLOR_ARRAY_TYPE", GLenum, ["ctx->Array.ArrayObj->Color.Type"], "", None ), + ( "GL_COLOR_ARRAY_STRIDE", GLint, ["ctx->Array.ArrayObj->Color.Stride"], "", None ), + ( "GL_TEXTURE_COORD_ARRAY", GLboolean, + ["ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled"], "", None ), + ( "GL_TEXTURE_COORD_ARRAY_SIZE", GLint, + ["ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Size"], "", None ), + ( "GL_TEXTURE_COORD_ARRAY_TYPE", GLenum, + ["ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Type"], "", None ), + ( "GL_TEXTURE_COORD_ARRAY_STRIDE", GLint, + ["ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Stride"], "", None ), + # GL_ARB_multitexture + ( "GL_MAX_TEXTURE_UNITS_ARB", GLint, + ["ctx->Const.MaxTextureUnits"], "", ["ARB_multitexture"] ), + ( "GL_CLIENT_ACTIVE_TEXTURE_ARB", GLint, + ["GL_TEXTURE0_ARB + ctx->Array.ActiveTexture"], "", ["ARB_multitexture"] ), + # OES_texture_cube_map + ( "GL_TEXTURE_CUBE_MAP_ARB", GLboolean, + ["_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB)"], "", None), + ( "GL_TEXTURE_GEN_S", GLboolean, + ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)"], "", None), + ( "GL_TEXTURE_GEN_T", GLboolean, + ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0)"], "", None), + ( "GL_TEXTURE_GEN_R", GLboolean, + ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0)"], "", None), + # ARB_multisample + ( "GL_MULTISAMPLE_ARB", GLboolean, + ["ctx->Multisample.Enabled"], "", ["ARB_multisample"] ), + ( "GL_SAMPLE_ALPHA_TO_ONE_ARB", GLboolean, + ["ctx->Multisample.SampleAlphaToOne"], "", ["ARB_multisample"] ), + + ( "GL_VERTEX_ARRAY_BUFFER_BINDING_ARB", GLint, + ["ctx->Array.ArrayObj->Vertex.BufferObj->Name"], "", ["ARB_vertex_buffer_object"] ), + ( "GL_NORMAL_ARRAY_BUFFER_BINDING_ARB", GLint, + ["ctx->Array.ArrayObj->Normal.BufferObj->Name"], "", ["ARB_vertex_buffer_object"] ), + ( "GL_COLOR_ARRAY_BUFFER_BINDING_ARB", GLint, + ["ctx->Array.ArrayObj->Color.BufferObj->Name"], "", ["ARB_vertex_buffer_object"] ), + ( "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB", GLint, + ["ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].BufferObj->Name"], + "", ["ARB_vertex_buffer_object"] ), + + # OES_point_sprite + ( "GL_POINT_SPRITE_NV", GLboolean, ["ctx->Point.PointSprite"], # == GL_POINT_SPRITE_ARB + "", None), + + # GL_ARB_fragment_shader + ( "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB", GLint, + ["ctx->Const.FragmentProgram.MaxUniformComponents"], "", + ["ARB_fragment_shader"] ), + + # GL_ARB_vertex_shader + ( "GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB", GLint, + ["ctx->Const.VertexProgram.MaxUniformComponents"], "", + ["ARB_vertex_shader"] ), + ( "GL_MAX_VARYING_FLOATS_ARB", GLint, + ["ctx->Const.MaxVarying * 4"], "", ["ARB_vertex_shader"] ), + + # OES_matrix_get + ( "GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES", GLint, [], + """ + /* See GL_OES_matrix_get */ + { + const GLfloat *matrix = ctx->ModelviewMatrixStack.Top->m; + memcpy(params, matrix, 16 * sizeof(GLint)); + }""", + None), + + ( "GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES", GLint, [], + """ + /* See GL_OES_matrix_get */ + { + const GLfloat *matrix = ctx->ProjectionMatrixStack.Top->m; + memcpy(params, matrix, 16 * sizeof(GLint)); + }""", + None), + + ( "GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES", GLint, [], + """ + /* See GL_OES_matrix_get */ + { + const GLfloat *matrix = + ctx->TextureMatrixStack[ctx->Texture.CurrentUnit].Top->m; + memcpy(params, matrix, 16 * sizeof(GLint)); + }""", + None), + + # OES_point_size_array + ("GL_POINT_SIZE_ARRAY_OES", GLboolean, + ["ctx->Array.ArrayObj->PointSize.Enabled"], "", None), + ("GL_POINT_SIZE_ARRAY_TYPE_OES", GLenum, + ["ctx->Array.ArrayObj->PointSize.Type"], "", None), + ("GL_POINT_SIZE_ARRAY_STRIDE_OES", GLint, + ["ctx->Array.ArrayObj->PointSize.Stride"], "", None), + ("GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES", GLint, + ["ctx->Array.ArrayObj->PointSize.BufferObj->Name"], "", None), + + # GL_EXT_texture_filter_anisotropic + ( "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT", GLfloat, + ["ctx->Const.MaxTextureMaxAnisotropy"], "", ["EXT_texture_filter_anisotropic"]), + +] + +# Only present in ES 2.x: +StateVars_es2 = [ + # XXX These entries are not spec'ed for GLES 2, but are + # needed for Mesa's GLSL: + ( "GL_MAX_LIGHTS", GLint, ["ctx->Const.MaxLights"], "", None ), + ( "GL_MAX_CLIP_PLANES", GLint, ["ctx->Const.MaxClipPlanes"], "", None ), + ( "GL_MAX_TEXTURE_COORDS_ARB", GLint, # == GL_MAX_TEXTURE_COORDS_NV + ["ctx->Const.MaxTextureCoordUnits"], "", + ["ARB_fragment_program", "NV_fragment_program"] ), + ( "GL_MAX_DRAW_BUFFERS_ARB", GLint, + ["ctx->Const.MaxDrawBuffers"], "", ["ARB_draw_buffers"] ), + ( "GL_BLEND_COLOR_EXT", GLfloatN, + [ "ctx->Color.BlendColor[0]", + "ctx->Color.BlendColor[1]", + "ctx->Color.BlendColor[2]", + "ctx->Color.BlendColor[3]"], "", None ), + + # This is required for GLES2, but also needed for GLSL: + ( "GL_MAX_TEXTURE_IMAGE_UNITS_ARB", GLint, # == GL_MAX_TEXTURE_IMAGE_UNI + ["ctx->Const.MaxTextureImageUnits"], "", + ["ARB_fragment_program", "NV_fragment_program"] ), + + ( "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB", GLint, + ["ctx->Const.MaxVertexTextureImageUnits"], "", ["ARB_vertex_shader"] ), + ( "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB", GLint, + ["MAX_COMBINED_TEXTURE_IMAGE_UNITS"], "", ["ARB_vertex_shader"] ), + + # GL_ARB_shader_objects + # Actually, this token isn't part of GL_ARB_shader_objects, but is + # close enough for now. + ( "GL_CURRENT_PROGRAM", GLint, + ["ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0"], + "", ["ARB_shader_objects"] ), + + # OpenGL 2.0 + ( "GL_STENCIL_BACK_FUNC", GLenum, ["ctx->Stencil.Function[1]"], "", None ), + ( "GL_STENCIL_BACK_VALUE_MASK", GLint, ["ctx->Stencil.ValueMask[1]"], "", None ), + ( "GL_STENCIL_BACK_WRITEMASK", GLint, ["ctx->Stencil.WriteMask[1]"], "", None ), + ( "GL_STENCIL_BACK_REF", GLint, ["ctx->Stencil.Ref[1]"], "", None ), + ( "GL_STENCIL_BACK_FAIL", GLenum, ["ctx->Stencil.FailFunc[1]"], "", None ), + ( "GL_STENCIL_BACK_PASS_DEPTH_FAIL", GLenum, ["ctx->Stencil.ZFailFunc[1]"], "", None ), + ( "GL_STENCIL_BACK_PASS_DEPTH_PASS", GLenum, ["ctx->Stencil.ZPassFunc[1]"], "", None ), + + ( "GL_MAX_VERTEX_ATTRIBS_ARB", GLint, + ["ctx->Const.VertexProgram.MaxAttribs"], "", ["ARB_vertex_program"] ), + + # OES_texture_3D + ( "GL_TEXTURE_BINDING_3D", GLint, + ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name"], "", None), + ( "GL_MAX_3D_TEXTURE_SIZE", GLint, ["1 << (ctx->Const.Max3DTextureLevels - 1)"], "", None), + + # OES_standard_derivatives + ( "GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB", GLenum, + ["ctx->Hint.FragmentShaderDerivative"], "", ["ARB_fragment_shader"] ), + + # Unique to ES 2 (not in full GL) + ( "GL_MAX_FRAGMENT_UNIFORM_VECTORS", GLint, + ["ctx->Const.FragmentProgram.MaxUniformComponents / 4"], "", None), + ( "GL_MAX_VARYING_VECTORS", GLint, + ["ctx->Const.MaxVarying"], "", None), + ( "GL_MAX_VERTEX_UNIFORM_VECTORS", GLint, + ["ctx->Const.VertexProgram.MaxUniformComponents / 4"], "", None), + ( "GL_SHADER_COMPILER", GLint, ["1"], "", None), + # OES_get_program_binary + ( "GL_NUM_SHADER_BINARY_FORMATS", GLint, ["0"], "", None), + ( "GL_SHADER_BINARY_FORMATS", GLint, [], "", None), +] + + + +def ConversionFunc(fromType, toType): + """Return the name of the macro to convert between two data types.""" + if fromType == toType: + return "" + elif fromType == GLfloat and toType == GLint: + return "IROUND" + elif fromType == GLfloatN and toType == GLfloat: + return "" + elif fromType == GLint and toType == GLfloat: # but not GLfloatN! + return "(GLfloat)" + else: + if fromType == GLfloatN: + fromType = GLfloat + fromStr = TypeStrings[fromType] + fromStr = string.upper(fromStr[2:]) + toStr = TypeStrings[toType] + toStr = string.upper(toStr[2:]) + return fromStr + "_TO_" + toStr + + +def EmitGetFunction(stateVars, returnType): + """Emit the code to implement glGetBooleanv, glGetIntegerv or glGetFloatv.""" + assert (returnType == GLboolean or + returnType == GLint or + returnType == GLfloat) + + strType = TypeStrings[returnType] + # Capitalize first letter of return type + if returnType == GLint: + function = "_mesa_GetIntegerv" + elif returnType == GLboolean: + function = "_mesa_GetBooleanv" + elif returnType == GLfloat: + function = "_mesa_GetFloatv" + else: + abort() + + print "void GLAPIENTRY" + print "%s( GLenum pname, %s *params )" % (function, strType) + print "{" + print " GET_CURRENT_CONTEXT(ctx);" + print " ASSERT_OUTSIDE_BEGIN_END(ctx);" + print "" + print " if (!params)" + print " return;" + print "" + print " if (ctx->NewState)" + print " _mesa_update_state(ctx);" + print "" + print " switch (pname) {" + + for (name, varType, state, optionalCode, extensions) in stateVars: + print " case " + name + ":" + if extensions: + if len(extensions) == 1: + print (' CHECK_EXT1(%s, "%s");' % + (extensions[0], function)) + elif len(extensions) == 2: + print (' CHECK_EXT2(%s, %s, "%s");' % + (extensions[0], extensions[1], function)) + elif len(extensions) == 3: + print (' CHECK_EXT3(%s, %s, %s, "%s");' % + (extensions[0], extensions[1], extensions[2], function)) + else: + assert len(extensions) == 4 + print (' CHECK_EXT4(%s, %s, %s, %s, "%s");' % + (extensions[0], extensions[1], extensions[2], extensions[3], function)) + if optionalCode: + print " {" + print " " + optionalCode + conversion = ConversionFunc(varType, returnType) + n = len(state) + for i in range(n): + if conversion: + print " params[%d] = %s(%s);" % (i, conversion, state[i]) + else: + print " params[%d] = %s;" % (i, state[i]) + if optionalCode: + print " }" + print " break;" + + print " default:" + print ' _mesa_error(ctx, GL_INVALID_ENUM, "gl%s(pname=0x%%x)", pname);' % function + print " }" + print "}" + print "" + return + + + +def EmitHeader(): + """Print the get.c file header.""" + print """ +/*** + *** NOTE!!! DO NOT EDIT THIS FILE!!! IT IS GENERATED BY get_gen.py + ***/ + +#include "main/glheader.h" +#include "main/context.h" +#include "main/enable.h" +#include "main/extensions.h" +#include "main/fbobject.h" +#include "main/get.h" +#include "main/macros.h" +#include "main/mtypes.h" +#include "main/state.h" +#include "main/texcompress.h" + + +/* ES1 tokens that should be in gl.h but aren't */ +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 + + +/* ES2 special tokens */ +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_SHADER_COMPILER 0x8DFA +#define GL_PLATFORM_BINARY 0x8D63 +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 + + +#ifndef GL_OES_matrix_get +#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES 0x898D +#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES 0x898E +#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES 0x898F +#endif + +#ifndef GL_OES_compressed_paletted_texture +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif + + +#define FLOAT_TO_BOOLEAN(X) ( (X) ? GL_TRUE : GL_FALSE ) + +#define INT_TO_BOOLEAN(I) ( (I) ? GL_TRUE : GL_FALSE ) + +#define BOOLEAN_TO_INT(B) ( (GLint) (B) ) +#define BOOLEAN_TO_FLOAT(B) ( (B) ? 1.0F : 0.0F ) + + +/* + * Check if named extension is enabled, if not generate error and return. + */ +#define CHECK_EXT1(EXT1, FUNC) \\ + if (!ctx->Extensions.EXT1) { \\ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \\ + return; \\ + } + +/* + * Check if either of two extensions is enabled. + */ +#define CHECK_EXT2(EXT1, EXT2, FUNC) \\ + if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2) { \\ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \\ + return; \\ + } + +/* + * Check if either of three extensions is enabled. + */ +#define CHECK_EXT3(EXT1, EXT2, EXT3, FUNC) \\ + if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 && \\ + !ctx->Extensions.EXT3) { \\ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \\ + return; \\ + } + +/* + * Check if either of four extensions is enabled. + */ +#define CHECK_EXT4(EXT1, EXT2, EXT3, EXT4, FUNC) \\ + if (!ctx->Extensions.EXT1 && !ctx->Extensions.EXT2 && \\ + !ctx->Extensions.EXT3 && !ctx->Extensions.EXT4) { \\ + _mesa_error(ctx, GL_INVALID_ENUM, FUNC "(0x%x)", (int) pname); \\ + return; \\ + } + + + +/** + * List of compressed texture formats supported by ES. + */ +static GLenum compressed_formats[] = { + GL_PALETTE4_RGB8_OES, + GL_PALETTE4_RGBA8_OES, + GL_PALETTE4_R5_G6_B5_OES, + GL_PALETTE4_RGBA4_OES, + GL_PALETTE4_RGB5_A1_OES, + GL_PALETTE8_RGB8_OES, + GL_PALETTE8_RGBA8_OES, + GL_PALETTE8_R5_G6_B5_OES, + GL_PALETTE8_RGBA4_OES, + GL_PALETTE8_RGB5_A1_OES +}; + +#define ARRAY_SIZE(A) (sizeof(A) / sizeof(A[0])) + +""" + return + + +def EmitAll(stateVars): + EmitHeader() + EmitGetFunction(stateVars, GLboolean) + EmitGetFunction(stateVars, GLfloat) + EmitGetFunction(stateVars, GLint) + + +def main(args): + # Determine whether to generate ES1 or ES2 queries + if len(args) > 1 and args[1] == "1": + API = 1 + elif len(args) > 1 and args[1] == "2": + API = 2 + else: + API = 1 + #print "len args = %d API = %d" % (len(args), API) + + if API == 1: + vars = StateVars_common + StateVars_es1 + else: + vars = StateVars_common + StateVars_es2 + + EmitAll(vars) + + +main(sys.argv) diff --git a/src/mesa/es/main/mfeatures_es1.h b/src/mesa/es/main/mfeatures_es1.h new file mode 100644 index 0000000000..9c65596089 --- /dev/null +++ b/src/mesa/es/main/mfeatures_es1.h @@ -0,0 +1,115 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +/** + * \file mfeatures.h + * + * The #defines in this file enable/disable Mesa features needed + * for OpenGL ES 1.1. + */ + + +#ifndef MFEATURES_ES1_H +#define MFEATURES_ES1_H + +/* this file replaces main/mfeatures.h */ +#ifdef FEATURES_H +#error "main/mfeatures.h was wrongly included" +#endif +#define FEATURES_H + +#define ASSERT_NO_FEATURE() ASSERT(0) + +/* + * Enable/disable features (blocks of code) by setting FEATURE_xyz to 0 or 1. + */ +#ifndef _HAVE_FULL_GL +#define _HAVE_FULL_GL 1 +#endif + +#ifdef IN_DRI_DRIVER +#define FEATURE_remap_table 1 +#else +#define FEATURE_remap_table 0 +#endif + +#define FEATURE_accum 0 +#define FEATURE_arrayelt 0 +#define FEATURE_attrib 0 +#define FEATURE_beginend 0 +#define FEATURE_colortable 0 +#define FEATURE_convolve 0 +#define FEATURE_dispatch 1 +#define FEATURE_dlist 0 +#define FEATURE_draw_read_buffer 0 +#define FEATURE_drawpix 0 +#define FEATURE_eval 0 +#define FEATURE_feedback 0 +#define FEATURE_fixedpt 1 +#define FEATURE_histogram 0 +#define FEATURE_pixel 0 +#define FEATURE_point_size_array 1 +#define FEATURE_queryobj 0 +#define FEATURE_rastpos 0 +#define FEATURE_texgen 1 +#define FEATURE_texture_fxt1 0 +#define FEATURE_texture_s3tc 0 +#define FEATURE_userclip 1 +#define FEATURE_vertex_array_byte 1 +#define FEATURE_es2_glsl 0 + +#define FEATURE_ARB_fragment_program _HAVE_FULL_GL +#define FEATURE_ARB_vertex_buffer_object _HAVE_FULL_GL +#define FEATURE_ARB_vertex_program _HAVE_FULL_GL + +#define FEATURE_ARB_vertex_shader _HAVE_FULL_GL +#define FEATURE_ARB_fragment_shader _HAVE_FULL_GL +#define FEATURE_ARB_shader_objects (FEATURE_ARB_vertex_shader || FEATURE_ARB_fragment_shader) +#define FEATURE_ARB_shading_language_100 FEATURE_ARB_shader_objects +#define FEATURE_ARB_shading_language_120 FEATURE_ARB_shader_objects + +#define FEATURE_EXT_framebuffer_blit 0 +#define FEATURE_EXT_framebuffer_object _HAVE_FULL_GL +#define FEATURE_EXT_pixel_buffer_object _HAVE_FULL_GL +#define FEATURE_EXT_texture_sRGB 0 +#define FEATURE_ATI_fragment_shader 0 +#define FEATURE_MESA_program_debug _HAVE_FULL_GL +#define FEATURE_NV_fence 0 +#define FEATURE_NV_fragment_program 0 +#define FEATURE_NV_vertex_program 0 + +#define FEATURE_OES_framebuffer_object 1 +#define FEATURE_OES_mapbuffer 1 + +#define FEATURE_extra_context_init 1 + +/*@}*/ + + + + +#endif /* MFEATURES_ES1_H */ diff --git a/src/mesa/es/main/mfeatures_es2.h b/src/mesa/es/main/mfeatures_es2.h new file mode 100644 index 0000000000..6ed7b678dc --- /dev/null +++ b/src/mesa/es/main/mfeatures_es2.h @@ -0,0 +1,115 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +/** + * \file mfeatures.h + * + * The #defines in this file enable/disable Mesa features needed + * for OpenGL ES 2.0. + */ + + +#ifndef MFEATURES_ES2_H +#define MFEATURES_ES2_H + +/* this file replaces main/mfeatures.h */ +#ifdef FEATURES_H +#error "main/mfeatures.h was wrongly included" +#endif +#define FEATURES_H + +#define ASSERT_NO_FEATURE() ASSERT(0) + +/* + * Enable/disable features (blocks of code) by setting FEATURE_xyz to 0 or 1. + */ +#ifndef _HAVE_FULL_GL +#define _HAVE_FULL_GL 1 +#endif + +#ifdef IN_DRI_DRIVER +#define FEATURE_remap_table 1 +#else +#define FEATURE_remap_table 0 +#endif + +#define FEATURE_accum 0 +#define FEATURE_arrayelt 0 +#define FEATURE_attrib 0 +#define FEATURE_beginend 0 +#define FEATURE_colortable 0 +#define FEATURE_convolve 0 +#define FEATURE_dispatch 1 +#define FEATURE_dlist 0 +#define FEATURE_draw_read_buffer 0 +#define FEATURE_drawpix 0 +#define FEATURE_eval 0 +#define FEATURE_feedback 0 +#define FEATURE_fixedpt 1 +#define FEATURE_histogram 0 +#define FEATURE_pixel 0 +#define FEATURE_point_size_array 1 +#define FEATURE_queryobj 0 +#define FEATURE_rastpos 0 +#define FEATURE_texgen 1 +#define FEATURE_texture_fxt1 0 +#define FEATURE_texture_s3tc 0 +#define FEATURE_userclip 1 +#define FEATURE_vertex_array_byte 1 +#define FEATURE_es2_glsl 1 + +#define FEATURE_ARB_fragment_program _HAVE_FULL_GL +#define FEATURE_ARB_vertex_buffer_object _HAVE_FULL_GL +#define FEATURE_ARB_vertex_program _HAVE_FULL_GL + +#define FEATURE_ARB_vertex_shader _HAVE_FULL_GL +#define FEATURE_ARB_fragment_shader _HAVE_FULL_GL +#define FEATURE_ARB_shader_objects (FEATURE_ARB_vertex_shader || FEATURE_ARB_fragment_shader) +#define FEATURE_ARB_shading_language_100 FEATURE_ARB_shader_objects +#define FEATURE_ARB_shading_language_120 FEATURE_ARB_shader_objects + +#define FEATURE_EXT_framebuffer_blit 0 +#define FEATURE_EXT_framebuffer_object _HAVE_FULL_GL +#define FEATURE_EXT_pixel_buffer_object _HAVE_FULL_GL +#define FEATURE_EXT_texture_sRGB 0 +#define FEATURE_ATI_fragment_shader 0 +#define FEATURE_MESA_program_debug _HAVE_FULL_GL +#define FEATURE_NV_fence 0 +#define FEATURE_NV_fragment_program 0 +#define FEATURE_NV_vertex_program 0 + +#define FEATURE_OES_framebuffer_object 1 +#define FEATURE_OES_mapbuffer 1 + +#define FEATURE_extra_context_init 1 + +/*@}*/ + + + + +#endif /* MFEATURES_ES2_H */ diff --git a/src/mesa/es/main/specials_es1.c b/src/mesa/es/main/specials_es1.c new file mode 100644 index 0000000000..84d339ebf6 --- /dev/null +++ b/src/mesa/es/main/specials_es1.c @@ -0,0 +1,186 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * TUNGSTEN GRAPHICS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + **************************************************************************/ + + +#include "main/mtypes.h" +#include "main/context.h" +#include "main/imports.h" +#include "main/get.h" + + +extern const GLubyte * GLAPIENTRY _es_GetString(GLenum name); + + +static const GLubyte * +compute_es_version(void) +{ + GET_CURRENT_CONTEXT(ctx); + static const char es_1_0[] = "OpenGL ES-CM 1.0"; + static const char es_1_1[] = "OpenGL ES-CM 1.1"; + /* OpenGL ES 1.0 is derived from OpenGL 1.3 */ + const GLboolean ver_1_0 = (ctx->Extensions.ARB_multisample && + ctx->Extensions.ARB_multitexture && + ctx->Extensions.ARB_texture_compression && + ctx->Extensions.EXT_texture_env_add && + ctx->Extensions.ARB_texture_env_combine && + ctx->Extensions.ARB_texture_env_dot3); + /* OpenGL ES 1.1 is derived from OpenGL 1.5 */ + const GLboolean ver_1_1 = (ver_1_0 && + ctx->Extensions.EXT_point_parameters && + ctx->Extensions.SGIS_generate_mipmap && + ctx->Extensions.ARB_vertex_buffer_object); + if (ver_1_1) + return (const GLubyte *) es_1_1; + + if (!ver_1_0) + _mesa_problem(ctx, "Incomplete OpenGL ES 1.0 support."); + return (const GLubyte *) es_1_0; +} + + +static size_t +append_extension(char **str, const char *ext) +{ + char *s = *str; + size_t len = strlen(ext); + + if (s) { + memcpy(s, ext, len); + s[len++] = ' '; + s[len] = '\0'; + + *str += len; + } + else { + len++; + } + + return len; +} + + +static size_t +make_extension_string(const GLcontext *ctx, char *str) +{ + size_t len = 0; + + /* Core additions */ + len += append_extension(&str, "GL_OES_byte_coordinates"); + len += append_extension(&str, "GL_OES_fixed_point"); + len += append_extension(&str, "GL_OES_single_precision"); + len += append_extension(&str, "GL_OES_matrix_get"); + + /* 1.1 required extensions */ + len += append_extension(&str, "GL_OES_read_format"); + len += append_extension(&str, "GL_OES_compressed_paletted_texture"); + len += append_extension(&str, "GL_OES_point_size_array"); + len += append_extension(&str, "GL_OES_point_sprite"); + + /* 1.1 deprecated extensions */ + len += append_extension(&str, "GL_OES_query_matrix"); + + if (ctx->Extensions.EXT_blend_equation_separate) + len += append_extension(&str, "GL_OES_blend_equation_separate"); + if (ctx->Extensions.EXT_blend_func_separate) + len += append_extension(&str, "GL_OES_blend_func_separate"); + if (ctx->Extensions.EXT_blend_subtract) + len += append_extension(&str, "GL_OES_blend_subtract"); + + if (ctx->Extensions.EXT_stencil_wrap) + len += append_extension(&str, "GL_OES_stencil_wrap"); + + if (ctx->Extensions.ARB_texture_cube_map) + len += append_extension(&str, "GL_OES_texture_cube_map"); + if (ctx->Extensions.ARB_texture_env_crossbar) + len += append_extension(&str, "GL_OES_texture_env_crossbar"); + if (ctx->Extensions.ARB_texture_mirrored_repeat) + len += append_extension(&str, "GL_OES_texture_mirrored_repeat"); + + if (ctx->Extensions.ARB_framebuffer_object) { + len += append_extension(&str, "GL_OES_framebuffer_object"); + len += append_extension(&str, "GL_OES_depth24"); + len += append_extension(&str, "GL_OES_depth32"); + len += append_extension(&str, "GL_OES_fbo_render_mipmap"); + len += append_extension(&str, "GL_OES_rgb8_rgba8"); + len += append_extension(&str, "GL_OES_stencil1"); + len += append_extension(&str, "GL_OES_stencil4"); + len += append_extension(&str, "GL_OES_stencil8"); + } + + if (ctx->Extensions.EXT_vertex_array) + len += append_extension(&str, "GL_OES_element_index_uint"); + if (ctx->Extensions.ARB_vertex_buffer_object) + len += append_extension(&str, "GL_OES_mapbuffer"); + if (ctx->Extensions.EXT_texture_filter_anisotropic) + len += append_extension(&str, "GL_EXT_texture_filter_anisotropic"); + + if (ctx->Extensions.ARB_texture_non_power_of_two) + len += append_extension(&str, "GL_ARB_texture_non_power_of_two"); + if (ctx->Extensions.EXT_multi_draw_arrays) + len += append_extension(&str, "GL_EXT_multi_draw_arrays"); + + return len; +} + + +static const GLubyte * +compute_es_extensions(void) +{ + GET_CURRENT_CONTEXT(ctx); + + if (!ctx->Extensions.String) { + char *s; + unsigned int len; + + len = make_extension_string(ctx, NULL); + s = (char *) _mesa_malloc(len + 1); + if (!s) + return NULL; + make_extension_string(ctx, s); + ctx->Extensions.String = (const GLubyte *) s; + } + + return ctx->Extensions.String; +} + + +const GLubyte * GLAPIENTRY +_es_GetString(GLenum name) +{ + switch (name) { + case GL_VERSION: + return compute_es_version(); + case GL_EXTENSIONS: + return compute_es_extensions(); + default: + return _mesa_GetString(name); + } +} + + +void +_mesa_initialize_context_extra(GLcontext *ctx) +{ + /* nothing here */ +} diff --git a/src/mesa/es/main/specials_es2.c b/src/mesa/es/main/specials_es2.c new file mode 100644 index 0000000000..ef8c581618 --- /dev/null +++ b/src/mesa/es/main/specials_es2.c @@ -0,0 +1,176 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * TUNGSTEN GRAPHICS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + **************************************************************************/ + + +#include "main/mtypes.h" +#include "main/context.h" +#include "main/imports.h" +#include "main/get.h" + + +const GLubyte * GLAPIENTRY _es_GetString(GLenum name); + + +static const GLubyte * +compute_es_version(void) +{ + GET_CURRENT_CONTEXT(ctx); + static const char es_2_0[] = "OpenGL ES 2.0"; + /* OpenGL ES 2.0 is derived from OpenGL 2.0 */ + const GLboolean ver_2_0 = (ctx->Extensions.ARB_multisample && + ctx->Extensions.ARB_multitexture && + ctx->Extensions.ARB_texture_compression && + ctx->Extensions.ARB_texture_cube_map && + ctx->Extensions.ARB_texture_mirrored_repeat && + ctx->Extensions.EXT_blend_color && + ctx->Extensions.EXT_blend_func_separate && + ctx->Extensions.EXT_blend_minmax && + ctx->Extensions.EXT_blend_subtract && + ctx->Extensions.EXT_stencil_wrap && + ctx->Extensions.ARB_vertex_buffer_object && + ctx->Extensions.ARB_shader_objects && + ctx->Extensions.ARB_vertex_shader && + ctx->Extensions.ARB_fragment_shader && + ctx->Extensions.ARB_texture_non_power_of_two && + ctx->Extensions.EXT_blend_equation_separate); + if (!ver_2_0) + _mesa_problem(ctx, "Incomplete OpenGL ES 2.0 support."); + return (const GLubyte *) es_2_0; +} + + +static size_t +append_extension(char **str, const char *ext) +{ + char *s = *str; + size_t len = strlen(ext); + + if (s) { + memcpy(s, ext, len); + s[len++] = ' '; + s[len] = '\0'; + + *str += len; + } + else { + len++; + } + + return len; +} + + +static size_t +make_extension_string(const GLcontext *ctx, char *str) +{ + size_t len = 0; + + /* Core additions */ + len += append_extension(&str, "GL_OES_single_precision"); + + /* Required extensions */ + len += append_extension(&str, "GL_OES_compressed_paletted_texture"); + + if (ctx->Extensions.ARB_framebuffer_object) { + len += append_extension(&str, "GL_OES_framebuffer_object"); + len += append_extension(&str, "GL_OES_depth24"); + len += append_extension(&str, "GL_OES_depth32"); + len += append_extension(&str, "GL_OES_fbo_render_mipmap"); + len += append_extension(&str, "GL_OES_rgb8_rgba8"); + len += append_extension(&str, "GL_OES_stencil1"); + len += append_extension(&str, "GL_OES_stencil4"); + len += append_extension(&str, "GL_OES_stencil8"); + } + + if (ctx->Extensions.EXT_vertex_array) + len += append_extension(&str, "GL_OES_element_index_uint"); + if (ctx->Extensions.ARB_vertex_buffer_object) + len += append_extension(&str, "GL_OES_mapbuffer"); + + if (ctx->Extensions.EXT_texture3D) + len += append_extension(&str, "GL_OES_texture_3D"); + if (ctx->Extensions.ARB_texture_non_power_of_two) + len += append_extension(&str, "GL_OES_texture_npot"); + if (ctx->Extensions.EXT_texture_filter_anisotropic) + len += append_extension(&str, "GL_EXT_texture_filter_anisotropic"); + + len += append_extension(&str, "GL_EXT_texture_type_2_10_10_10_REV"); + if (ctx->Extensions.ARB_depth_texture) + len += append_extension(&str, "GL_OES_depth_texture"); + if (ctx->Extensions.EXT_packed_depth_stencil) + len += append_extension(&str, "GL_OES_packed_depth_stencil"); + if (ctx->Extensions.ARB_fragment_shader) + len += append_extension(&str, "GL_OES_standard_derivatives"); + + if (ctx->Extensions.EXT_multi_draw_arrays) + len += append_extension(&str, "GL_EXT_multi_draw_arrays"); + + return len; +} + + +static const GLubyte * +compute_es_extensions(void) +{ + GET_CURRENT_CONTEXT(ctx); + + if (!ctx->Extensions.String) { + char *s; + unsigned int len; + + len = make_extension_string(ctx, NULL); + s = (char *) _mesa_malloc(len + 1); + if (!s) + return NULL; + make_extension_string(ctx, s); + ctx->Extensions.String = (const GLubyte *) s; + } + + return ctx->Extensions.String; +} + +const GLubyte * GLAPIENTRY +_es_GetString(GLenum name) +{ + switch (name) { + case GL_VERSION: + return compute_es_version(); + case GL_SHADING_LANGUAGE_VERSION: + return (const GLubyte *) "OpenGL ES GLSL ES 1.0.16"; + case GL_EXTENSIONS: + return compute_es_extensions(); + default: + return _mesa_GetString(name); + } +} + + +void +_mesa_initialize_context_extra(GLcontext *ctx) +{ + ctx->FragmentProgram._MaintainTexEnvProgram = GL_TRUE; + ctx->VertexProgram._MaintainTnlProgram = GL_TRUE; + + ctx->Point.PointSprite = GL_TRUE; /* always on for ES 2.x */ +} diff --git a/src/mesa/es/main/stubs.c b/src/mesa/es/main/stubs.c new file mode 100644 index 0000000000..e7b8bc780f --- /dev/null +++ b/src/mesa/es/main/stubs.c @@ -0,0 +1,138 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * TUNGSTEN GRAPHICS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + **************************************************************************/ + + +/** + * Temporary stubs for "missing" mesa functions. + */ + + +#include "main/mtypes.h" +#include "main/imports.h" +#include "vbo/vbo.h" + +#define NEED_IMPLEMENT() do { \ + GET_CURRENT_CONTEXT(ctx); \ + _mesa_error(ctx, GL_INVALID_OPERATION, __FUNCTION__); \ + } while (0) + +#if FEATURE_accum +/* This is a sanity check that to be sure we're using the correct mfeatures.h + * header. We don't want to accidentally use the one from mainline Mesa. + */ +#error "The wrong mfeatures.h file is being included!" +#endif + + +/* silence compiler warnings */ +extern void GLAPIENTRY _vbo_Materialf(GLenum face, GLenum pname, GLfloat param); +extern void GLAPIENTRY _mesa_GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); +extern void GLAPIENTRY _mesa_ReleaseShaderCompiler(void); +extern void GLAPIENTRY _mesa_ShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length); +extern void GLAPIENTRY _vbo_VertexAttrib1f(GLuint indx, GLfloat x); +extern void GLAPIENTRY _vbo_VertexAttrib1fv(GLuint indx, const GLfloat* values); +extern void GLAPIENTRY _vbo_VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y); +extern void GLAPIENTRY _vbo_VertexAttrib2fv(GLuint indx, const GLfloat* values); +extern void GLAPIENTRY _vbo_VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z); +extern void GLAPIENTRY _vbo_VertexAttrib3fv(GLuint indx, const GLfloat* values); +extern void GLAPIENTRY _vbo_VertexAttrib4fv(GLuint indx, const GLfloat* values); + + +void GLAPIENTRY +_vbo_Materialf(GLenum face, GLenum pname, GLfloat param) +{ + _vbo_Materialfv(face, pname, ¶m); +} + + +void GLAPIENTRY +_mesa_GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, + GLint* range, GLint* precision) +{ + NEED_IMPLEMENT(); +} + + +void GLAPIENTRY +_mesa_ReleaseShaderCompiler(void) +{ + NEED_IMPLEMENT(); +} + + +void GLAPIENTRY +_mesa_ShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, + const void* binary, GLint length) +{ + NEED_IMPLEMENT(); +} + + +void GLAPIENTRY +_vbo_VertexAttrib1f(GLuint indx, GLfloat x) +{ + _vbo_VertexAttrib4f(indx, x, 0.0, 0.0, 1.0f); +} + + +void GLAPIENTRY +_vbo_VertexAttrib1fv(GLuint indx, const GLfloat* values) +{ + _vbo_VertexAttrib4f(indx, values[0], 0.0, 0.0, 1.0f); +} + + +void GLAPIENTRY +_vbo_VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) +{ + _vbo_VertexAttrib4f(indx, x, y, 0.0, 1.0f); +} + + +void GLAPIENTRY +_vbo_VertexAttrib2fv(GLuint indx, const GLfloat* values) +{ + _vbo_VertexAttrib4f(indx, values[0], values[1], 0.0, 1.0f); +} + + +void GLAPIENTRY +_vbo_VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) +{ + _vbo_VertexAttrib4f(indx, x, y, z, 1.0f); +} + + +void GLAPIENTRY +_vbo_VertexAttrib3fv(GLuint indx, const GLfloat* values) +{ + _vbo_VertexAttrib4f(indx, values[0], values[1], values[2], 1.0f); +} + + +void GLAPIENTRY +_vbo_VertexAttrib4fv(GLuint indx, const GLfloat* values) +{ + _vbo_VertexAttrib4f(indx, values[0], values[1], values[2], values[3]); +} diff --git a/src/mesa/es/sources.mak b/src/mesa/es/sources.mak new file mode 100644 index 0000000000..d12acaae80 --- /dev/null +++ b/src/mesa/es/sources.mak @@ -0,0 +1,164 @@ +include $(MESA)/sources.mak + +# LOCAL sources + +LOCAL_ES1_SOURCES := \ + main/api_exec_es1.c \ + main/get_es1.c \ + main/specials_es1.c \ + main/drawtex.c \ + main/es_cpaltex.c \ + main/es_fbo.c \ + main/es_query_matrix.c \ + main/stubs.c \ + glapi/glapi-es1/main/enums.c + +LOCAL_ES1_GALLIUM_SOURCES := \ + $(LOCAL_ES1_SOURCES) + +# always use local version of GLAPI_ASM_SOURCES +LOCAL_ES1_API_ASM := $(addprefix glapi/glapi-es1/, $(GLAPI_ASM_SOURCES)) + +LOCAL_ES1_INCLUDES := \ + -I. \ + -I./glapi/glapi-es1 \ + -I./state_tracker \ + -I$(MESA)/state_tracker + +LOCAL_ES2_SOURCES := \ + main/api_exec_es2.c \ + main/get_es2.c \ + main/specials_es2.c \ + main/es_cpaltex.c \ + main/es_fbo.c \ + main/stubs.c \ + glapi/glapi-es2/main/enums.c + +LOCAL_ES2_GALLIUM_SOURCES := \ + $(LOCAL_ES2_SOURCES) + +LOCAL_ES2_API_ASM := $(subst es1,es2, $(LOCAL_ES1_API_ASM)) +LOCAL_ES2_INCLUDES := $(subst es1,es2, $(LOCAL_ES1_INCLUDES)) + +# MESA sources + +MAIN_OMITTED := \ + main/api_exec.c \ + main/dlopen.c \ + main/enums.c \ + main/get.c +MAIN_SOURCES := $(filter-out $(MAIN_OMITTED), $(MAIN_SOURCES)) + +VBO_OMITTED := \ + vbo/vbo_save.c \ + vbo/vbo_save_api.c \ + vbo/vbo_save_draw.c \ + vbo/vbo_save_loopback.c +VBO_SOURCES := $(filter-out $(VBO_OMITTED), $(VBO_SOURCES)) + +STATETRACKER_OMITTED := \ + state_tracker/st_api.c \ + state_tracker/st_cb_drawpixels.c \ + state_tracker/st_cb_feedback.c \ + state_tracker/st_cb_rasterpos.c \ + state_tracker/st_draw_feedback.c +STATETRACKER_SOURCES := $(filter-out $(STATETRACKER_OMITTED), $(STATETRACKER_SOURCES)) + +SHADER_OMITTED := \ + shader/atifragshader.c \ + shader/nvfragparse.c \ + shader/nvprogram.c \ + shader/nvvertparse.c +SHADER_SOURCES := $(filter-out $(SHADER_OMITTED), $(SHADER_SOURCES)) + +MESA_ES1_SOURCES := \ + $(MAIN_SOURCES) \ + $(MATH_SOURCES) \ + $(MATH_XFORM_SOURCES) \ + $(VBO_SOURCES) \ + $(TNL_SOURCES) \ + $(SHADER_SOURCES) \ + $(SWRAST_SOURCES) \ + $(SWRAST_SETUP_SOURCES) \ + $(COMMON_DRIVER_SOURCES) \ + $(ASM_C_SOURCES) \ + $(SLANG_SOURCES) + +MESA_ES1_GALLIUM_SOURCES := \ + $(MAIN_SOURCES) \ + $(MATH_SOURCES) \ + $(VBO_SOURCES) \ + $(STATETRACKER_SOURCES) \ + $(SHADER_SOURCES) \ + ppc/common_ppc.c \ + x86/common_x86.c \ + $(SLANG_SOURCES) + +MESA_ES1_API_SOURCES := \ + $(GLAPI_SOURCES) + +MESA_ES1_INCLUDES := $(INCLUDE_DIRS) + +# remove LOCAL sources from MESA sources +MESA_ES1_SOURCES := $(filter-out $(LOCAL_ES1_SOURCES), $(MESA_ES1_SOURCES)) +MESA_ES1_GALLIUM_SOURCES := $(filter-out $(LOCAL_ES1_GALLIUM_SOURCES), $(MESA_ES1_GALLIUM_SOURCES)) + +# right now es2 and es1 share MESA sources +MESA_ES2_SOURCES := $(MESA_ES1_SOURCES) +MESA_ES2_GALLIUM_SOURCES := $(MESA_ES1_GALLIUM_SOURCES) +MESA_ES2_API_SOURCES := $(MESA_ES1_API_SOURCES) + +MESA_ES2_INCLUDES := $(MESA_ES1_INCLUDES) + +# asm is shared by any ES version and any library +MESA_ES_ASM := $(MESA_ASM_SOURCES) + +# collect sources, adjust the pathes +ES1_SOURCES := $(LOCAL_ES1_SOURCES) $(addprefix $(MESA)/,$(MESA_ES1_SOURCES)) +ES1_GALLIUM_SOURCES := $(LOCAL_ES1_GALLIUM_SOURCES) $(addprefix $(MESA)/,$(MESA_ES1_GALLIUM_SOURCES)) +ES1_API_SOURCES := $(addprefix $(MESA)/,$(MESA_ES1_API_SOURCES)) + +ES2_SOURCES := $(LOCAL_ES2_SOURCES) $(addprefix $(MESA)/,$(MESA_ES2_SOURCES)) +ES2_GALLIUM_SOURCES := $(LOCAL_ES2_GALLIUM_SOURCES) $(addprefix $(MESA)/,$(MESA_ES2_GALLIUM_SOURCES)) +ES2_API_SOURCES := $(addprefix $(MESA)/,$(MESA_ES2_API_SOURCES)) + +# collect includes +ES1_INCLUDES := $(LOCAL_ES1_INCLUDES) $(MESA_ES1_INCLUDES) +ES2_INCLUDES := $(LOCAL_ES2_INCLUDES) $(MESA_ES2_INCLUDES) + +# collect objects, including asm +ES1_OBJECTS := \ + $(LOCAL_ES1_SOURCES:.c=.o) \ + $(MESA_ES1_SOURCES:.c=.o) \ + $(MESA_ES_ASM:.S=.o) + +ES1_GALLIUM_OBJECTS := \ + $(LOCAL_ES1_GALLIUM_SOURCES:.c=.o) \ + $(MESA_ES1_GALLIUM_SOURCES:.c=.o) \ + $(MESA_ES_ASM:.S=.o) + +ES1_API_OBJECTS := \ + $(LOCAL_ES1_API_ASM:.S=.o) \ + $(MESA_ES1_API_SOURCES:.c=.o) + +ES2_OBJECTS := \ + $(LOCAL_ES2_SOURCES:.c=.o) \ + $(MESA_ES2_SOURCES:.c=.o) \ + $(MESA_ES_ASM:.S=.o) + +ES2_GALLIUM_OBJECTS := \ + $(LOCAL_ES2_GALLIUM_SOURCES:.c=.o) \ + $(MESA_ES2_GALLIUM_SOURCES:.c=.o) \ + $(MESA_ES_ASM:.S=.o) + +ES2_API_OBJECTS := \ + $(LOCAL_ES2_API_ASM:.S=.o) \ + $(MESA_ES2_API_SOURCES:.c=.o) + +# collect sources for makedepend +ES1_ALL_SOURCES := $(ES1_SOURCES) $(ES1_GALLIUM_SOURCES) $(ES1_API_SOURCES) +ES2_ALL_SOURCES := $(ES2_SOURCES) $(ES2_GALLIUM_SOURCES) $(ES2_API_SOURCES) + +# sort to remove duplicates +ES1_ALL_SOURCES := $(sort $(ES1_ALL_SOURCES)) +ES2_ALL_SOURCES := $(sort $(ES2_ALL_SOURCES)) -- cgit v1.2.3 From 34064756a5e2c8952c9de26eaebafddabd562540 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 22 Sep 2009 15:00:24 +0800 Subject: mesa/es: Add support for GL_OES_draw_texture. Signed-off-by: Chia-I Wu --- src/mesa/es/main/APIspec.txt | 77 ++++++++ src/mesa/es/main/drawtex.c | 148 +++++++++++++++ src/mesa/es/main/drawtex.h | 77 ++++++++ src/mesa/es/main/mfeatures_es1.h | 1 + src/mesa/es/main/mfeatures_es2.h | 1 + src/mesa/es/main/specials_es1.c | 5 + src/mesa/es/sources.mak | 4 +- src/mesa/es/state_tracker/st_cb_drawtex.c | 297 ++++++++++++++++++++++++++++++ src/mesa/es/state_tracker/st_cb_drawtex.h | 18 ++ src/mesa/main/dd.h | 10 + src/mesa/main/extensions.c | 3 + src/mesa/main/mtypes.h | 3 + src/mesa/state_tracker/st_context.c | 9 +- src/mesa/state_tracker/st_extensions.c | 4 + 14 files changed, 654 insertions(+), 3 deletions(-) create mode 100644 src/mesa/es/main/drawtex.c create mode 100644 src/mesa/es/main/drawtex.h create mode 100644 src/mesa/es/state_tracker/st_cb_drawtex.c create mode 100644 src/mesa/es/state_tracker/st_cb_drawtex.h (limited to 'src/mesa') diff --git a/src/mesa/es/main/APIspec.txt b/src/mesa/es/main/APIspec.txt index 86dd546f63..6d18ae67d9 100644 --- a/src/mesa/es/main/APIspec.txt +++ b/src/mesa/es/main/APIspec.txt @@ -412,6 +412,8 @@ checkdependentparam pname GL_TEXTURE_WRAP_T params GLES1.1:GL_MIRRORED_REPEAT_OE dependentvector params 1 pname GL_TEXTURE_MAX_ANISOTROPY_EXT # OES_texture_3D checkdependentparam pname GL_TEXTURE_WRAP_R_OES params GLES2.0:GL_CLAMP_TO_EDGE GLES2.0:GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +# OES_draw_texture - not in gl2ext.h +dependentvector params 4 pname GLES1.1:GL_TEXTURE_CROP_RECT_OES category GLES1.1 GLES2.0 name TexParameteri @@ -457,6 +459,8 @@ checkdependentparam pname GL_TEXTURE_WRAP_T params GLES1.1:GL_MIRRORED_REPEAT_OE dependentvector params 1 pname GL_TEXTURE_MAX_ANISOTROPY_EXT # OES_texture_3D checkdependentparam pname GL_TEXTURE_WRAP_R_OES params GLES2.0:GL_CLAMP_TO_EDGE GLES2.0:GL_REPEAT GLES2.0:GL_MIRRORED_REPEAT +# OES_draw_texture - not in gl2ext.h +dependentvector params 4 pname GLES1.1:GL_TEXTURE_CROP_RECT_OES category GLES1.1 GLES2.0 name TexParameterx @@ -498,6 +502,8 @@ checkdependentparam pname GL_TEXTURE_MAG_FILTER params GL_NEAREST GL_LINEAR checkdependentparam pname GL_GENERATE_MIPMAP params GL_TRUE GL_FALSE convertalias TexParameterfv convertparams GLfloat params +# OES_draw_texture +dependentvector params 4 pname GL_TEXTURE_CROP_RECT_OES # OES_texture_cube_map checkparam target GL_TEXTURE_CUBE_MAP_OES # OES_texture_mirrored_repeat @@ -1352,6 +1358,8 @@ param pname GLenum param params GLfloat * dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER GLES1.1:GL_GENERATE_MIPMAP props get +# OES_draw_texture - not in gl2ext.h +dependentvector params 4 pname GLES1.1:GL_TEXTURE_CROP_RECT_OES # OES_texture_cube_map checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES category GLES1.1 GLES2.0 @@ -1366,6 +1374,8 @@ dependentvector params 1 pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MI props get # OES_texture_cube_map checkparam target GLES1.1:GL_TEXTURE_CUBE_MAP_OES +# OES_draw_texture - not in gl2ext.h +dependentvector params 4 pname GLES1.1:GL_TEXTURE_CROP_RECT_OES # OES_texture_3D checkparam target GLES2.0:GL_TEXTURE_3D_OES category GLES1.1 GLES2.0 @@ -1383,6 +1393,8 @@ dependentnovalueconvert params pname GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXT props get # OES_texture_cube_map checkparam target GL_TEXTURE_CUBE_MAP_OES +# OES_draw_texture +dependentvector params 4 pname GL_TEXTURE_CROP_RECT_OES category GLES1.1 GLES1.1:OES_fixed_point # GLES1.1 and GLES2.0 have different capabilities @@ -2867,6 +2879,71 @@ vector exponent 16 props get category GLES1.1:OES_query_matrix +# OES_draw_texture +name DrawTexf +return void +param x GLfloat +param y GLfloat +param z GLfloat +param w GLfloat +param h GLfloat +category GLES1.1:OES_draw_texture + +name DrawTexi +return void +param x GLint +param y GLint +param z GLint +param w GLint +param h GLint +category GLES1.1:OES_draw_texture + +name DrawTexs +return void +param x GLshort +param y GLshort +param z GLshort +param w GLshort +param h GLshort +category GLES1.1:OES_draw_texture + +name DrawTexx +return void +param x GLfixed +param y GLfixed +param z GLfixed +param w GLfixed +param h GLfixed +convertalias DrawTexf +convertparams GLfloat x y z w h +category GLES1.1:OES_draw_texture + +name DrawTexfv +return void +param coords const GLfloat * +vector coords 5 +category GLES1.1:OES_draw_texture + +name DrawTexiv +return void +param coords const GLint * +vector coords 5 +category GLES1.1:OES_draw_texture + +name DrawTexsv +return void +param coords const GLshort * +vector coords 5 +category GLES1.1:OES_draw_texture + +name DrawTexxv +return void +param coords const GLfixed * +vector coords 5 +convertalias DrawTexfv +convertparams GLfloat coords +category GLES1.1:OES_draw_texture + # We don't support OES_get_program_binary yet either #name GetProgramBinary #return void diff --git a/src/mesa/es/main/drawtex.c b/src/mesa/es/main/drawtex.c new file mode 100644 index 0000000000..cbd41ca975 --- /dev/null +++ b/src/mesa/es/main/drawtex.c @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2009 Chia-I Wu + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "drawtex.h" +#include "main/state.h" +#include "main/imports.h" + +#include "glapi/dispatch.h" + + +#if FEATURE_OES_draw_texture + + +static void +draw_texture(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, + GLfloat width, GLfloat height) +{ + if (!ctx->Extensions.OES_draw_texture) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glDrawTex(unsupported)"); + return; + } + if (width <= 0.0f || height <= 0.0f) { + _mesa_error(ctx, GL_INVALID_VALUE, "glDrawTex(width or height <= 0)"); + return; + } + + if (ctx->NewState) + _mesa_update_state(ctx); + + ASSERT(ctx->Driver.DrawTex); + ctx->Driver.DrawTex(ctx, x, y, z, width, height); +} + + +void GLAPIENTRY +_mesa_DrawTexf(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, x, y, z, width, height); +} + + +void GLAPIENTRY +_mesa_DrawTexfv(const GLfloat *coords) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, coords[0], coords[1], coords[2], coords[3], coords[4]); +} + + +void GLAPIENTRY +_mesa_DrawTexi(GLint x, GLint y, GLint z, GLint width, GLint height) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, (GLfloat) x, (GLfloat) y, (GLfloat) z, + (GLfloat) width, (GLfloat) height); +} + + +void GLAPIENTRY +_mesa_DrawTexiv(const GLint *coords) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, (GLfloat) coords[0], (GLfloat) coords[1], + (GLfloat) coords[2], (GLfloat) coords[3], (GLfloat) coords[4]); +} + + +void GLAPIENTRY +_mesa_DrawTexs(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, (GLfloat) x, (GLfloat) y, (GLfloat) z, + (GLfloat) width, (GLfloat) height); +} + + +void GLAPIENTRY +_mesa_DrawTexsv(const GLshort *coords) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, (GLfloat) coords[0], (GLfloat) coords[1], + (GLfloat) coords[2], (GLfloat) coords[3], (GLfloat) coords[4]); +} + + +void GLAPIENTRY +_mesa_DrawTexx(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, + (GLfloat) x / 65536.0f, + (GLfloat) y / 65536.0f, + (GLfloat) z / 65536.0f, + (GLfloat) width / 65536.0f, + (GLfloat) height / 65536.0f); +} + + +void GLAPIENTRY +_mesa_DrawTexxv(const GLfixed *coords) +{ + GET_CURRENT_CONTEXT(ctx); + draw_texture(ctx, + (GLfloat) coords[0] / 65536.0f, + (GLfloat) coords[1] / 65536.0f, + (GLfloat) coords[2] / 65536.0f, + (GLfloat) coords[3] / 65536.0f, + (GLfloat) coords[4] / 65536.0f); +} + + +void +_mesa_init_drawtex_dispatch(struct _glapi_table *disp) +{ + SET_DrawTexfOES(disp, _mesa_DrawTexf); + SET_DrawTexfvOES(disp, _mesa_DrawTexfv); + SET_DrawTexiOES(disp, _mesa_DrawTexi); + SET_DrawTexivOES(disp, _mesa_DrawTexiv); + SET_DrawTexsOES(disp, _mesa_DrawTexs); + SET_DrawTexsvOES(disp, _mesa_DrawTexsv); + SET_DrawTexxOES(disp, _mesa_DrawTexx); + SET_DrawTexxvOES(disp, _mesa_DrawTexxv); +} + + +#endif /* FEATURE_OES_draw_texture */ diff --git a/src/mesa/es/main/drawtex.h b/src/mesa/es/main/drawtex.h new file mode 100644 index 0000000000..0f3bac38c7 --- /dev/null +++ b/src/mesa/es/main/drawtex.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2009 Chia-I Wu + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef DRAWTEX_H +#define DRAWTEX_H + + +#include "main/mtypes.h" + + +#if FEATURE_OES_draw_texture + +#define _MESA_INIT_DRAWTEX_FUNCTIONS(driver, impl) \ + do { \ + (driver)->DrawTex = impl ## DrawTex; \ + } while (0) + +extern void GLAPIENTRY +_mesa_DrawTexf(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); + +extern void GLAPIENTRY +_mesa_DrawTexfv(const GLfloat *coords); + +extern void GLAPIENTRY +_mesa_DrawTexi(GLint x, GLint y, GLint z, GLint width, GLint height); + +extern void GLAPIENTRY +_mesa_DrawTexiv(const GLint *coords); + +extern void GLAPIENTRY +_mesa_DrawTexs(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); + +extern void GLAPIENTRY +_mesa_DrawTexsv(const GLshort *coords); + +extern void GLAPIENTRY +_mesa_DrawTexx(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); + +extern void GLAPIENTRY +_mesa_DrawTexxv(const GLfixed *coords); + +extern void +_mesa_init_drawtex_dispatch(struct _glapi_table *disp); + +#else /* FEATURE_OES_draw_texture */ + +#define _MESA_INIT_DRAWTEX_FUNCTIONS(driver, impl) do { } while (0) + +static INLINE void +_mesa_init_drawtex_dispatch(struct _glapi_table *disp) +{ +} + +#endif /* FEATURE_OES_draw_texture */ + + +#endif /* DRAWTEX_H */ diff --git a/src/mesa/es/main/mfeatures_es1.h b/src/mesa/es/main/mfeatures_es1.h index 9c65596089..6c2ece2608 100644 --- a/src/mesa/es/main/mfeatures_es1.h +++ b/src/mesa/es/main/mfeatures_es1.h @@ -103,6 +103,7 @@ #define FEATURE_NV_vertex_program 0 #define FEATURE_OES_framebuffer_object 1 +#define FEATURE_OES_draw_texture 1 #define FEATURE_OES_mapbuffer 1 #define FEATURE_extra_context_init 1 diff --git a/src/mesa/es/main/mfeatures_es2.h b/src/mesa/es/main/mfeatures_es2.h index 6ed7b678dc..f34782fedb 100644 --- a/src/mesa/es/main/mfeatures_es2.h +++ b/src/mesa/es/main/mfeatures_es2.h @@ -103,6 +103,7 @@ #define FEATURE_NV_vertex_program 0 #define FEATURE_OES_framebuffer_object 1 +#define FEATURE_OES_draw_texture 0 #define FEATURE_OES_mapbuffer 1 #define FEATURE_extra_context_init 1 diff --git a/src/mesa/es/main/specials_es1.c b/src/mesa/es/main/specials_es1.c index 84d339ebf6..548fb0f029 100644 --- a/src/mesa/es/main/specials_es1.c +++ b/src/mesa/es/main/specials_es1.c @@ -100,6 +100,11 @@ make_extension_string(const GLcontext *ctx, char *str) /* 1.1 deprecated extensions */ len += append_extension(&str, "GL_OES_query_matrix"); +#if FEATURE_OES_draw_texture + if (ctx->Extensions.OES_draw_texture) + len += append_extension(&str, "GL_OES_draw_texture"); +#endif + if (ctx->Extensions.EXT_blend_equation_separate) len += append_extension(&str, "GL_OES_blend_equation_separate"); if (ctx->Extensions.EXT_blend_func_separate) diff --git a/src/mesa/es/sources.mak b/src/mesa/es/sources.mak index d12acaae80..11f735d52a 100644 --- a/src/mesa/es/sources.mak +++ b/src/mesa/es/sources.mak @@ -4,6 +4,7 @@ include $(MESA)/sources.mak LOCAL_ES1_SOURCES := \ main/api_exec_es1.c \ + main/drawtex.c \ main/get_es1.c \ main/specials_es1.c \ main/drawtex.c \ @@ -14,7 +15,8 @@ LOCAL_ES1_SOURCES := \ glapi/glapi-es1/main/enums.c LOCAL_ES1_GALLIUM_SOURCES := \ - $(LOCAL_ES1_SOURCES) + $(LOCAL_ES1_SOURCES) \ + state_tracker/st_cb_drawtex.c # always use local version of GLAPI_ASM_SOURCES LOCAL_ES1_API_ASM := $(addprefix glapi/glapi-es1/, $(GLAPI_ASM_SOURCES)) diff --git a/src/mesa/es/state_tracker/st_cb_drawtex.c b/src/mesa/es/state_tracker/st_cb_drawtex.c new file mode 100644 index 0000000000..3b98b9c40b --- /dev/null +++ b/src/mesa/es/state_tracker/st_cb_drawtex.c @@ -0,0 +1,297 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + **************************************************************************/ + + +/** + * Implementation of glDrawTex() for GL_OES_draw_tex + */ + + + +#include "main/imports.h" +#include "main/image.h" +#include "main/bufferobj.h" +#include "main/drawtex.h" +#include "main/macros.h" +#include "main/state.h" +#include "main/texformat.h" +#include "shader/program.h" +#include "shader/prog_parameter.h" +#include "shader/prog_print.h" + +#include "st_context.h" +#include "st_atom.h" +#include "st_atom_constbuf.h" +#include "st_draw.h" +#include "st_cb_drawtex.h" + +#include "pipe/p_context.h" +#include "pipe/p_defines.h" +#include "pipe/p_inlines.h" +#include "pipe/p_shader_tokens.h" +#include "util/u_tile.h" +#include "util/u_draw_quad.h" +#include "util/u_simple_shaders.h" + +#include "cso_cache/cso_context.h" + + +struct cached_shader +{ + //struct pipe_shader_state shader; + void *handle; + + uint num_attribs; + uint semantic_names[2 + MAX_TEXTURE_UNITS]; + uint semantic_indexes[2 + MAX_TEXTURE_UNITS]; +}; + +#define MAX_SHADERS (2 * MAX_TEXTURE_UNITS) + +/** + * Simple linear list cache. + * Most of the time there'll only be one cached shader. + */ +static struct cached_shader CachedShaders[MAX_SHADERS]; +static GLuint NumCachedShaders = 0; + + +#if FEATURE_OES_draw_texture + + +static void * +lookup_shader(struct pipe_context *pipe, + uint num_attribs, + const uint *semantic_names, + const uint *semantic_indexes) +{ + GLuint i, j; + + /* look for existing shader with same attributes */ + for (i = 0; i < NumCachedShaders; i++) { + if (CachedShaders[i].num_attribs == num_attribs) { + GLboolean match = GL_TRUE; + for (j = 0; j < num_attribs; j++) { + if (semantic_names[j] != CachedShaders[i].semantic_names[j] || + semantic_indexes[j] != CachedShaders[i].semantic_indexes[j]) { + match = GL_FALSE; + break; + } + } + if (match) + return CachedShaders[i].handle; + } + } + + /* not found - create new one now */ + if (NumCachedShaders >= MAX_SHADERS) { + return NULL; + } + + CachedShaders[i].num_attribs = num_attribs; + for (j = 0; j < num_attribs; j++) { + CachedShaders[i].semantic_names[j] = semantic_names[j]; + CachedShaders[i].semantic_indexes[j] = semantic_indexes[j]; + } + + CachedShaders[i].handle = + util_make_vertex_passthrough_shader(pipe, + num_attribs, + semantic_names, + semantic_indexes); + NumCachedShaders++; + + return CachedShaders[i].handle; +} + +static void +st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, + GLfloat width, GLfloat height) +{ + struct st_context *st = ctx->st; + struct pipe_context *pipe = st->pipe; + struct cso_context *cso = ctx->st->cso_context; + struct pipe_buffer *vbuffer; + GLuint i, numTexCoords, numAttribs; + GLboolean emitColor; + uint semantic_names[2 + MAX_TEXTURE_UNITS]; + uint semantic_indexes[2 + MAX_TEXTURE_UNITS]; + GLbitfield inputs = VERT_BIT_POS; + + /* determine if we need vertex color */ + if (ctx->FragmentProgram._Current->Base.InputsRead & FRAG_BIT_COL0) + emitColor = GL_TRUE; + else + emitColor = GL_FALSE; + + /* determine how many enabled sets of texcoords */ + numTexCoords = 0; + for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { + if (ctx->Texture.Unit[i]._ReallyEnabled & TEXTURE_2D_BIT) { + inputs |= VERT_BIT_TEX(i); + numTexCoords++; + } + } + + /* total number of attributes per vertex */ + numAttribs = 1 + emitColor + numTexCoords; + + + /* create the vertex buffer */ + vbuffer = pipe_buffer_create(pipe->screen, 32, PIPE_BUFFER_USAGE_VERTEX, + numAttribs * 4 * 4 * sizeof(GLfloat)); + + /* load vertex buffer */ + { +#define SET_ATTRIB(VERT, ATTR, X, Y, Z, W) \ + do { \ + GLuint k = (((VERT) * numAttribs + (ATTR)) * 4); \ + assert(k < 4 * 4 * numAttribs); \ + vbuf[k + 0] = X; \ + vbuf[k + 1] = Y; \ + vbuf[k + 2] = Z; \ + vbuf[k + 3] = W; \ + } while (0) + + const GLfloat x0 = x, y0 = y, x1 = x + width, y1 = y + height; + GLfloat *vbuf = (GLfloat *) pipe_buffer_map(pipe->screen, vbuffer, + PIPE_BUFFER_USAGE_CPU_WRITE); + GLuint attr; + + z = CLAMP(z, 0.0f, 1.0f); + + /* positions (in clip coords) */ + { + const struct gl_framebuffer *fb = st->ctx->DrawBuffer; + const GLfloat fb_width = (GLfloat)fb->Width; + const GLfloat fb_height = (GLfloat)fb->Height; + + const GLfloat clip_x0 = (GLfloat)(x0 / fb_width * 2.0 - 1.0); + const GLfloat clip_y0 = (GLfloat)(y0 / fb_height * 2.0 - 1.0); + const GLfloat clip_x1 = (GLfloat)(x1 / fb_width * 2.0 - 1.0); + const GLfloat clip_y1 = (GLfloat)(y1 / fb_height * 2.0 - 1.0); + + SET_ATTRIB(0, 0, clip_x0, clip_y0, z, 1.0f); /* lower left */ + SET_ATTRIB(1, 0, clip_x1, clip_y0, z, 1.0f); /* lower right */ + SET_ATTRIB(2, 0, clip_x1, clip_y1, z, 1.0f); /* upper right */ + SET_ATTRIB(3, 0, clip_x0, clip_y1, z, 1.0f); /* upper left */ + + semantic_names[0] = TGSI_SEMANTIC_POSITION; + semantic_indexes[0] = 0; + } + + /* colors */ + if (emitColor) { + const GLfloat *c = ctx->Current.Attrib[VERT_ATTRIB_COLOR0]; + SET_ATTRIB(0, 1, c[0], c[1], c[2], c[3]); + SET_ATTRIB(1, 1, c[0], c[1], c[2], c[3]); + SET_ATTRIB(2, 1, c[0], c[1], c[2], c[3]); + SET_ATTRIB(3, 1, c[0], c[1], c[2], c[3]); + semantic_names[1] = TGSI_SEMANTIC_COLOR; + semantic_indexes[1] = 0; + attr = 2; + } + else { + attr = 1; + } + + /* texcoords */ + for (i = 0; i < ctx->Const.MaxTextureUnits; i++) { + if (ctx->Texture.Unit[i]._ReallyEnabled & TEXTURE_2D_BIT) { + struct gl_texture_object *obj = ctx->Texture.Unit[i]._Current; + struct gl_texture_image *img = obj->Image[0][obj->BaseLevel]; + const GLfloat wt = (GLfloat) img->Width; + const GLfloat ht = (GLfloat) img->Height; + const GLfloat s0 = obj->CropRect[0] / wt; + const GLfloat t0 = obj->CropRect[1] / ht; + const GLfloat s1 = (obj->CropRect[0] + obj->CropRect[2]) / wt; + const GLfloat t1 = (obj->CropRect[1] + obj->CropRect[3]) / ht; + + /*printf("crop texcoords: %g, %g .. %g, %g\n", s0, t0, s1, t1);*/ + SET_ATTRIB(0, attr, s0, t0, 0.0f, 1.0f); /* lower left */ + SET_ATTRIB(1, attr, s1, t0, 0.0f, 1.0f); /* lower right */ + SET_ATTRIB(2, attr, s1, t1, 0.0f, 1.0f); /* upper right */ + SET_ATTRIB(3, attr, s0, t1, 0.0f, 1.0f); /* upper left */ + + semantic_names[attr] = TGSI_SEMANTIC_GENERIC; + semantic_indexes[attr] = 0; + + attr++; + } + } + + pipe_buffer_unmap(pipe->screen, vbuffer); + +#undef SET_ATTRIB + } + + + cso_save_viewport(cso); + cso_save_vertex_shader(cso); + + { + void *vs = lookup_shader(pipe, numAttribs, + semantic_names, semantic_indexes); + cso_set_vertex_shader_handle(cso, vs); + } + + /* viewport state: viewport matching window dims */ + { + const struct gl_framebuffer *fb = st->ctx->DrawBuffer; + const GLboolean invert = (st_fb_orientation(fb) == Y_0_TOP); + const GLfloat width = (GLfloat)fb->Width; + const GLfloat height = (GLfloat)fb->Height; + struct pipe_viewport_state vp; + vp.scale[0] = 0.5f * width; + vp.scale[1] = height * (invert ? -0.5f : 0.5f); + vp.scale[2] = 1.0f; + vp.scale[3] = 1.0f; + vp.translate[0] = 0.5f * width; + vp.translate[1] = 0.5f * height; + vp.translate[2] = 0.0f; + vp.translate[3] = 0.0f; + cso_set_viewport(cso, &vp); + } + + + util_draw_vertex_buffer(pipe, vbuffer, + 0, /* offset */ + PIPE_PRIM_TRIANGLE_FAN, + 4, /* verts */ + numAttribs); /* attribs/vert */ + + + pipe_buffer_reference(&vbuffer, NULL); + + /* restore state */ + cso_restore_viewport(cso); + cso_restore_vertex_shader(cso); +} + + +#endif /* FEATURE_OES_draw_texture */ + + +void +st_init_drawtex_functions(struct dd_function_table *functions) +{ + _MESA_INIT_DRAWTEX_FUNCTIONS(functions, st_); +} + + +/** + * Free any cached shaders + */ +void +st_destroy_drawtex(struct st_context *st) +{ + GLuint i; + for (i = 0; i < NumCachedShaders; i++) { + cso_delete_vertex_shader(st->cso_context, CachedShaders[i].handle); + } + NumCachedShaders = 0; +} diff --git a/src/mesa/es/state_tracker/st_cb_drawtex.h b/src/mesa/es/state_tracker/st_cb_drawtex.h new file mode 100644 index 0000000000..7b0da70279 --- /dev/null +++ b/src/mesa/es/state_tracker/st_cb_drawtex.h @@ -0,0 +1,18 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + **************************************************************************/ + + +#ifndef ST_CB_DRAWTEX_H +#define ST_CB_DRAWTEX_H + +extern void +st_init_drawtex_functions(struct dd_function_table *functions); + +extern void +st_destroy_drawtex(struct st_context *st); + +#endif /* ST_CB_DRAWTEX_H */ diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 99f2cad402..0488a693b2 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -1046,6 +1046,16 @@ struct dd_function_table { GLbitfield, GLuint64); /*@}*/ #endif + +#if FEATURE_OES_draw_texture + /** + * \name GL_OES_draw_texture interface + */ + /*@{*/ + void (*DrawTex)(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z, + GLfloat width, GLfloat height); + /*@}*/ +#endif }; diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 54cf37c5f4..7a8184ffc8 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -185,6 +185,9 @@ static const struct { { ON, "GL_SGIS_texture_lod", F(SGIS_texture_lod) }, { ON, "GL_SUN_multi_draw_arrays", F(EXT_multi_draw_arrays) }, { OFF, "GL_S3_s3tc", F(S3_s3tc) }, +#if FEATURE_OES_draw_texture + { OFF, "GL_OES_draw_texture", F(OES_draw_texture) }, +#endif /* FEATURE_OES_draw_texture */ }; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 94d29a7dbb..e91c7e5ac1 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2485,6 +2485,9 @@ struct gl_extensions GLboolean SGIS_texture_lod; GLboolean TDFX_texture_compression_FXT1; GLboolean S3_s3tc; +#if FEATURE_OES_draw_texture + GLboolean OES_draw_texture; +#endif /* FEATURE_OES_draw_texture */ /** The extension string */ const GLubyte *String; }; diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index f0eddafd33..e82598c8e7 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -47,7 +47,7 @@ #include "st_cb_drawpixels.h" #include "st_cb_rasterpos.h" #endif -#ifdef FEATURE_OES_draw_texture +#if FEATURE_OES_draw_texture #include "st_cb_drawtex.h" #endif #include "st_cb_fbo.h" @@ -209,7 +209,7 @@ static void st_destroy_context_priv( struct st_context *st ) st_destroy_bitmap(st); st_destroy_drawpix(st); #endif -#ifdef FEATURE_OES_draw_texture +#if FEATURE_OES_draw_texture st_destroy_drawtex(st); #endif @@ -330,6 +330,11 @@ void st_init_driver_functions(struct dd_function_table *functions) st_init_drawpixels_functions(functions); st_init_rasterpos_functions(functions); #endif + +#if FEATURE_OES_draw_texture + st_init_drawtex_functions(functions); +#endif + st_init_fbo_functions(functions); st_init_get_functions(functions); #if FEATURE_feedback diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 3f835d38dd..ce3c302e48 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -183,6 +183,10 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.NV_texgen_reflection = GL_TRUE; ctx->Extensions.NV_texture_env_combine4 = GL_TRUE; +#if FEATURE_OES_draw_texture + ctx->Extensions.OES_draw_texture = GL_TRUE; +#endif + ctx->Extensions.SGI_color_matrix = GL_TRUE; ctx->Extensions.SGIS_generate_mipmap = GL_TRUE; -- cgit v1.2.3 From 1af44e9e5a3b522dd083f7e1486146376b01fdff Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 3 Sep 2009 11:05:06 +0800 Subject: glapi: Add OpenGL ES compatibility mode to scripts. When the mode is on, the scripts would generate headers that are suitable for OpenGL ES. There are two differences. One is that they will generate function prototypes for OpenGL ES specific functions. The other is that, when a function has multiple names, SET/GET/CALL macros would be generated for each of names. Signed-off-by: Chia-I Wu --- src/mesa/glapi/gl_apitemp.py | 21 +++++++++++++++++---- src/mesa/glapi/gl_offsets.py | 25 +++++++++++++++++++++---- src/mesa/glapi/gl_procs.py | 37 ++++++++++++++++++++++++++++++++----- src/mesa/glapi/gl_table.py | 44 ++++++++++++++++++++++++++++++++++++++------ 4 files changed, 108 insertions(+), 19 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/glapi/gl_apitemp.py b/src/mesa/glapi/gl_apitemp.py index d4f8b1d8f8..09b0d364ce 100644 --- a/src/mesa/glapi/gl_apitemp.py +++ b/src/mesa/glapi/gl_apitemp.py @@ -30,7 +30,7 @@ import license import sys, getopt class PrintGlOffsets(gl_XML.gl_print_base): - def __init__(self): + def __init__(self, es=False): gl_XML.gl_print_base.__init__(self) self.name = "gl_apitemp.py (from Mesa)" @@ -38,6 +38,8 @@ class PrintGlOffsets(gl_XML.gl_print_base): """Copyright (C) 1999-2001 Brian Paul All Rights Reserved. (C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM") + self.es = es + self.undef_list.append( "KEYWORD1" ) self.undef_list.append( "KEYWORD1_ALT" ) self.undef_list.append( "KEYWORD2" ) @@ -82,7 +84,14 @@ class PrintGlOffsets(gl_XML.gl_print_base): else: dispatch = "DISPATCH" + need_proto = False if not f.is_static_entry_point(name): + need_proto = True + elif self.es: + cat, num = api.get_category_for_name(name) + if (cat.startswith("es") or cat.startswith("GL_OES")): + need_proto = True + if need_proto: print '%s %s KEYWORD2 NAME(%s)(%s);' % (keyword, f.return_type, n, f.get_parameter_string(name)) print '' @@ -286,22 +295,26 @@ static _glapi_proc UNUSED_TABLE_NAME[] = {""" def show_usage(): - print "Usage: %s [-f input_file_name]" % sys.argv[0] + print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0] + print "-c Enable compatibility with OpenGL ES." sys.exit(1) if __name__ == '__main__': file_name = "gl_API.xml" try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:") + (args, trail) = getopt.getopt(sys.argv[1:], "f:c") except Exception,e: show_usage() + es = False for (arg,val) in args: if arg == "-f": file_name = val + elif arg == "-c": + es = True api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory()) - printer = PrintGlOffsets() + printer = PrintGlOffsets(es) printer.Print(api) diff --git a/src/mesa/glapi/gl_offsets.py b/src/mesa/glapi/gl_offsets.py index b8b509d09f..54867b3463 100644 --- a/src/mesa/glapi/gl_offsets.py +++ b/src/mesa/glapi/gl_offsets.py @@ -30,9 +30,10 @@ import license import sys, getopt class PrintGlOffsets(gl_XML.gl_print_base): - def __init__(self): + def __init__(self, es=False): gl_XML.gl_print_base.__init__(self) + self.es = es self.name = "gl_offsets.py (from Mesa)" self.header_tag = '_GLAPI_OFFSETS_H_' self.license = license.bsd_license_template % ( \ @@ -46,6 +47,7 @@ class PrintGlOffsets(gl_XML.gl_print_base): functions = [] abi_functions = [] + alias_functions = [] count = 0 for f in api.functionIterateByOffset(): if not f.is_abi(): @@ -54,6 +56,10 @@ class PrintGlOffsets(gl_XML.gl_print_base): else: abi_functions.append( f ) + if self.es: + # remember functions with aliases + if len(f.entry_points) > 1: + alias_functions.append(f) for f in abi_functions: print '#define _gloffset_%s %d' % (f.name, f.offset) @@ -78,26 +84,37 @@ class PrintGlOffsets(gl_XML.gl_print_base): print '' print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */' + if alias_functions: + print '' + print '/* define aliases for compatibility */' + for f in alias_functions: + for name in f.entry_points: + if name != f.name: + print '#define _gloffset_%s _gloffset_%s' % (name, f.name) return def show_usage(): - print "Usage: %s [-f input_file_name]" % sys.argv[0] + print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0] + print " -c Enable compatibility with OpenGL ES." sys.exit(1) if __name__ == '__main__': file_name = "gl_API.xml" try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:") + (args, trail) = getopt.getopt(sys.argv[1:], "f:c") except Exception,e: show_usage() + es = False for (arg,val) in args: if arg == "-f": file_name = val + elif arg == "-c": + es = True api = gl_XML.parse_GL_API( file_name ) - printer = PrintGlOffsets() + printer = PrintGlOffsets(es) printer.Print( api ) diff --git a/src/mesa/glapi/gl_procs.py b/src/mesa/glapi/gl_procs.py index cd1a68cee1..5de61fbdfe 100644 --- a/src/mesa/glapi/gl_procs.py +++ b/src/mesa/glapi/gl_procs.py @@ -30,9 +30,10 @@ import gl_XML, glX_XML import sys, getopt class PrintGlProcs(gl_XML.gl_print_base): - def __init__(self, long_strings): + def __init__(self, long_strings, es=False): gl_XML.gl_print_base.__init__(self) + self.es = es self.long_strings = long_strings self.name = "gl_procs.py (from Mesa)" self.license = license.bsd_license_template % ( \ @@ -141,6 +142,28 @@ typedef struct { print '%s GLAPIENTRY gl_dispatch_stub_%u(%s);' % (func.return_type, func.offset, func.get_parameter_string()) break + if self.es: + categories = {} + for func in api.functionIterateByOffset(): + for n in func.entry_points: + cat, num = api.get_category_for_name(n) + if (cat.startswith("es") or cat.startswith("GL_OES")): + if not categories.has_key(cat): + categories[cat] = [] + proto = 'GLAPI %s GLAPIENTRY %s(%s);' \ + % (func.return_type, "gl" + n, func.get_parameter_string(n)) + categories[cat].append(proto) + if categories: + print '' + print '/* OpenGL ES specific prototypes */' + print '' + keys = categories.keys() + keys.sort() + for key in keys: + print '/* category %s */' % key + print "\n".join(categories[key]) + print '' + print '#endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */' print '' @@ -155,8 +178,9 @@ typedef struct { def show_usage(): - print "Usage: %s [-f input_file_name] [-m mode]" % sys.argv[0] - print "mode can be one of:" + print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0] + print "-c Enable compatibility with OpenGL ES." + print "-m mode mode can be one of:" print " long - Create code for compilers that can handle very" print " long string constants. (default)" print " short - Create code for compilers that can only handle" @@ -167,11 +191,12 @@ if __name__ == '__main__': file_name = "gl_API.xml" try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:m:") + (args, trail) = getopt.getopt(sys.argv[1:], "f:m:c") except Exception,e: show_usage() long_string = 1 + es = False for (arg,val) in args: if arg == "-f": file_name = val @@ -182,7 +207,9 @@ if __name__ == '__main__': long_string = 1 else: show_usage() + elif arg == "-c": + es = True api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory()) - printer = PrintGlProcs(long_string) + printer = PrintGlProcs(long_string, es) printer.Print(api) diff --git a/src/mesa/glapi/gl_table.py b/src/mesa/glapi/gl_table.py index 698795fb0a..3bd7569e92 100644 --- a/src/mesa/glapi/gl_table.py +++ b/src/mesa/glapi/gl_table.py @@ -30,9 +30,10 @@ import license import sys, getopt class PrintGlTable(gl_XML.gl_print_base): - def __init__(self): + def __init__(self, es=False): gl_XML.gl_print_base.__init__(self) + self.es = es self.header_tag = '_GLAPI_TABLE_H_' self.name = "gl_table.py (from Mesa)" self.license = license.bsd_license_template % ( \ @@ -68,9 +69,10 @@ class PrintGlTable(gl_XML.gl_print_base): class PrintRemapTable(gl_XML.gl_print_base): - def __init__(self): + def __init__(self, es=False): gl_XML.gl_print_base.__init__(self) + self.es = es self.header_tag = '_GLAPI_DISPATCH_H_' self.name = "gl_table.py (from Mesa)" self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM") @@ -115,6 +117,7 @@ class PrintRemapTable(gl_XML.gl_print_base): functions = [] abi_functions = [] + alias_functions = [] count = 0 for f in api.functionIterateByOffset(): if not f.is_abi(): @@ -123,6 +126,11 @@ class PrintRemapTable(gl_XML.gl_print_base): else: abi_functions.append( f ) + if self.es: + # remember functions with aliases + if len(f.entry_points) > 1: + alias_functions.append(f) + for f in abi_functions: print '#define CALL_%s(disp, parameters) (*((disp)->%s)) parameters' % (f.name, f.name) @@ -162,33 +170,57 @@ class PrintRemapTable(gl_XML.gl_print_base): print '' print '#endif /* !defined(_GLAPI_USE_REMAP_TABLE) */' + + if alias_functions: + print '' + print '/* define aliases for compatibility */' + for f in alias_functions: + for name in f.entry_points: + if name != f.name: + print '#define CALL_%s(disp, parameters) CALL_%s(disp, parameters)' % (name, f.name) + print '#define GET_%s(disp) GET_%s(disp)' % (name, f.name) + print '#define SET_%s(disp, fn) SET_%s(disp, fn)' % (name, f.name) + print '' + + print '#if defined(_GLAPI_USE_REMAP_TABLE)' + for f in alias_functions: + for name in f.entry_points: + if name != f.name: + print '#define %s_remap_index %s_remap_index' % (name, f.name) + print '#endif /* defined(_GLAPI_USE_REMAP_TABLE) */' + print '' + return def show_usage(): - print "Usage: %s [-f input_file_name] [-m mode]" % sys.argv[0] + print "Usage: %s [-f input_file_name] [-m mode] [-c]" % sys.argv[0] print " -m mode Mode can be 'table' or 'remap_table'." + print " -c Enable compatibility with OpenGL ES." sys.exit(1) if __name__ == '__main__': file_name = "gl_API.xml" try: - (args, trail) = getopt.getopt(sys.argv[1:], "f:m:") + (args, trail) = getopt.getopt(sys.argv[1:], "f:m:c") except Exception,e: show_usage() mode = "table" + es = False for (arg,val) in args: if arg == "-f": file_name = val elif arg == "-m": mode = val + elif arg == "-c": + es = True if mode == "table": - printer = PrintGlTable() + printer = PrintGlTable(es) elif mode == "remap_table": - printer = PrintRemapTable() + printer = PrintRemapTable(es) else: show_usage() -- cgit v1.2.3 From f1c7874cd95e19929030038a78d889ac095a122a Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 6 Nov 2009 16:49:04 +0800 Subject: mesa/es: Fix symbol conflicts and warnings. drawtex.c was listed in LOCAL_ES1_SOURCES twice. My mistake when merging the patches. Also, run gl_apitemp.py with -c to silence warnings and add target "install". Signed-off-by: Chia-I Wu --- src/mesa/es/Makefile | 3 +++ src/mesa/es/glapi/Makefile | 2 +- src/mesa/es/sources.mak | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/Makefile b/src/mesa/es/Makefile index 42347d0b07..48b11a6ad2 100644 --- a/src/mesa/es/Makefile +++ b/src/mesa/es/Makefile @@ -107,6 +107,9 @@ clean: -rm -f depend -rm -f *~ +# nothing to install +install: + subdirs: make -C glapi make -C $(MESA) asm_subdirs diff --git a/src/mesa/es/glapi/Makefile b/src/mesa/es/glapi/Makefile index 5f2aa8225b..1e32af867d 100644 --- a/src/mesa/es/glapi/Makefile +++ b/src/mesa/es/glapi/Makefile @@ -52,7 +52,7 @@ endef $(call gen-glapi,-c) %/glapitemp.h: $(GLAPI)/gl_apitemp.py $(COMMON) - $(call gen-glapi) + $(call gen-glapi,-c) %/glprocs.h: $(GLAPI)/gl_procs.py $(COMMON) $(call gen-glapi,-c) diff --git a/src/mesa/es/sources.mak b/src/mesa/es/sources.mak index 11f735d52a..f00e41b011 100644 --- a/src/mesa/es/sources.mak +++ b/src/mesa/es/sources.mak @@ -4,7 +4,6 @@ include $(MESA)/sources.mak LOCAL_ES1_SOURCES := \ main/api_exec_es1.c \ - main/drawtex.c \ main/get_es1.c \ main/specials_es1.c \ main/drawtex.c \ -- cgit v1.2.3 From 37dca7955a55c0d1422dffa8a65d5b4ebe143d47 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 6 Nov 2009 15:17:15 +0800 Subject: mesa/es: Improve support for parallel execution of make. Running make with -j for the first time might fail because glapi headers haven't been generated. This commit should make it more reliable. Signed-off-by: Chia-I Wu --- src/mesa/es/Makefile | 14 ++++++++++---- src/mesa/es/glapi/Makefile | 6 +++++- 2 files changed, 15 insertions(+), 5 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/Makefile b/src/mesa/es/Makefile index 48b11a6ad2..8cf2eaccab 100644 --- a/src/mesa/es/Makefile +++ b/src/mesa/es/Makefile @@ -110,11 +110,17 @@ clean: # nothing to install install: -subdirs: - make -C glapi - make -C $(MESA) asm_subdirs +glapi/glapi-stamp: + $(MAKE) -C glapi -depend: $(ES1_ALL_SOURCES) $(ES2_ALL_SOURCES) +subdirs: glapi/glapi-stamp + $(MAKE) -C $(MESA) asm_subdirs + +# remove generated sources because "depend" is checked even when "make clean" +DEPEND_SOURCES := $(filter-out $(GENERATED_SOURCES), $(ES1_ALL_SOURCES) $(ES2_ALL_SOURCES)) +DEPEND_SOURCES := $(filter-out glapi/%, $(DEPEND_SOURCES)) + +depend: glapi/glapi-stamp $(DEPEND_SOURCES) @echo "running $(MKDEP)" @touch depend @# MESA is "..", but luckily, directories are longer than 2 characters diff --git a/src/mesa/es/glapi/Makefile b/src/mesa/es/glapi/Makefile index 1e32af867d..1256be953d 100644 --- a/src/mesa/es/glapi/Makefile +++ b/src/mesa/es/glapi/Makefile @@ -30,7 +30,10 @@ ES2_DEPS = $(ES2_APIXML) base2_API.xml es2_EXT.xml es_EXT.xml \ ES1_OUTPUTS := $(addprefix $(ES1_OUTPUT_DIR)/, $(OUTPUTS)) ES2_OUTPUTS := $(addprefix $(ES2_OUTPUT_DIR)/, $(OUTPUTS)) -all: $(ES1_OUTPUTS) $(ES2_OUTPUTS) +all: glapi-stamp + +glapi-stamp: $(ES1_OUTPUTS) $(ES2_OUTPUTS) + @touch glapi-stamp $(ES1_OUTPUTS): APIXML := $(ES1_APIXML) $(ES2_OUTPUTS): APIXML := $(ES2_APIXML) @@ -86,5 +89,6 @@ verify_xml: @rm -f tmp.xml clean: + -rm -f glapi-stamp -rm -rf $(ES1_OUTPUT_DIR) $(ES2_OUTPUT_DIR) -rm -f *~ *.pyc *.pyo -- cgit v1.2.3 From 7fb41df2cbae4cf35d0f73c2261a9409a1367903 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 30 Oct 2009 14:09:09 +0800 Subject: mesa/main: linear_to_nonlinear is not always available. Signed-off-by: Chia-I Wu --- src/mesa/main/texgetimage.c | 62 +++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 24 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c index 2f88718933..4b0915b3b2 100644 --- a/src/mesa/main/texgetimage.c +++ b/src/mesa/main/texgetimage.c @@ -42,30 +42,6 @@ -#if FEATURE_EXT_texture_sRGB - -/** - * Convert a float value from linear space to a - * non-linear sRGB value in [0, 255]. - * Not terribly efficient. - */ -static INLINE GLfloat -linear_to_nonlinear(GLfloat cl) -{ - /* can't have values outside [0, 1] */ - GLfloat cs; - if (cl < 0.0031308f) { - cs = 12.92f * cl; - } - else { - cs = (GLfloat)(1.055 * _mesa_pow(cl, 0.41666) - 0.055); - } - return cs; -} - -#endif /* FEATURE_EXT_texture_sRGB */ - - /** * Can the given type represent negative values? */ @@ -233,6 +209,29 @@ get_tex_ycbcr(GLcontext *ctx, GLuint dimensions, } +#if FEATURE_EXT_texture_sRGB + + +/** + * Convert a float value from linear space to a + * non-linear sRGB value in [0, 255]. + * Not terribly efficient. + */ +static INLINE GLfloat +linear_to_nonlinear(GLfloat cl) +{ + /* can't have values outside [0, 1] */ + GLfloat cs; + if (cl < 0.0031308f) { + cs = 12.92f * cl; + } + else { + cs = (GLfloat)(1.055 * _mesa_pow(cl, 0.41666) - 0.055); + } + return cs; +} + + /** * glGetTexImagefor sRGB pixels; */ @@ -284,6 +283,21 @@ get_tex_srgb(GLcontext *ctx, GLuint dimensions, } +#else /* FEATURE_EXT_texture_sRGB */ + + +static INLINE void +get_tex_srgb(GLcontext *ctx, GLuint dimensions, + GLenum format, GLenum type, GLvoid *pixels, + const struct gl_texture_image *texImage) +{ + ASSERT_NO_FEATURE(); +} + + +#endif /* FEATURE_EXT_texture_sRGB */ + + /** * glGetTexImagefor RGBA, Luminance, etc. pixels. * This is the slow way since we use texture sampling. -- cgit v1.2.3 From 9de051e85e8d118414b113ce6524b03456bcd6d9 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 9 Nov 2009 10:23:23 +0800 Subject: mesa/es: Add .gitignore. Signed-off-by: Chia-I Wu --- src/mesa/es/.gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/mesa/es/.gitignore (limited to 'src/mesa') diff --git a/src/mesa/es/.gitignore b/src/mesa/es/.gitignore new file mode 100644 index 0000000000..7643e9f0db --- /dev/null +++ b/src/mesa/es/.gitignore @@ -0,0 +1,5 @@ +glapi/glapi-es* +glapi/glapi-stamp +main/get_es*.c +main/api_exec_es*.c +objs-es* -- cgit v1.2.3 From 0c1a7bbe0d0c6727a432890164032188787e7e26 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Sun, 22 Nov 2009 20:09:06 +0800 Subject: mesa/es: Add APIspec.xml and its parser. APIspec.xml is based on APIspec.txt. The new format has less code duplications and should be easier to read. Signed-off-by: Chia-I Wu --- src/mesa/es/main/APIspec.dtd | 52 + src/mesa/es/main/APIspec.py | 601 ++++++ src/mesa/es/main/APIspec.xml | 4405 +++++++++++++++++++++++++++++++++++++++ src/mesa/es/main/APIspecutil.py | 262 +++ 4 files changed, 5320 insertions(+) create mode 100644 src/mesa/es/main/APIspec.dtd create mode 100644 src/mesa/es/main/APIspec.py create mode 100644 src/mesa/es/main/APIspec.xml create mode 100644 src/mesa/es/main/APIspecutil.py (limited to 'src/mesa') diff --git a/src/mesa/es/main/APIspec.dtd b/src/mesa/es/main/APIspec.dtd new file mode 100644 index 0000000000..efcfa31f10 --- /dev/null +++ b/src/mesa/es/main/APIspec.dtd @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/main/APIspec.py b/src/mesa/es/main/APIspec.py new file mode 100644 index 0000000000..f07e4261fa --- /dev/null +++ b/src/mesa/es/main/APIspec.py @@ -0,0 +1,601 @@ +#!/usr/bin/python +# +# Copyright (C) 2009 Chia-I Wu +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# on the rights to use, copy, modify, merge, publish, distribute, sub +# license, and/or sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +""" +A parser for APIspec. +""" + +class SpecError(Exception): + """Error in the spec file.""" + + +class Spec(object): + """A Spec is an abstraction of the API spec.""" + + def __init__(self, doc): + self.doc = doc + + self.spec_node = doc.getRootElement() + self.tmpl_nodes = {} + self.api_nodes = {} + self.impl_node = None + + # parse + node = self.spec_node.children + while node: + if node.type == "element": + if node.name == "template": + self.tmpl_nodes[node.prop("name")] = node + elif node.name == "api": + self.api_nodes[node.prop("name")] = node + else: + raise SpecError("unexpected node %s in apispec" % + node.name) + node = node.next + + # find an implementation + for name, node in self.api_nodes.iteritems(): + if node.prop("implementation") == "true": + self.impl_node = node + break + if not self.impl_node: + raise SpecError("unable to find an implementation") + + def get_impl(self): + """Return the implementation.""" + return API(self, self.impl_node) + + def get_api(self, name): + """Return an API.""" + return API(self, self.api_nodes[name]) + + +class API(object): + """An API consists of categories and functions.""" + + def __init__(self, spec, api_node): + self.name = api_node.prop("name") + self.is_impl = (api_node.prop("implementation") == "true") + + self.categories = [] + self.functions = [] + + # parse + func_nodes = [] + node = api_node.children + while node: + if node.type == "element": + if node.name == "category": + cat = node.prop("name") + self.categories.append(cat) + elif node.name == "function": + func_nodes.append(node) + else: + raise SpecError("unexpected node %s in api" % node.name) + node = node.next + + # realize functions + for func_node in func_nodes: + tmpl_node = spec.tmpl_nodes[func_node.prop("template")] + try: + func = Function(tmpl_node, func_node, self.is_impl, + self.categories) + except SpecError, e: + func_name = func_node.prop("name") + raise SpecError("failed to parse %s: %s" % (func_name, e)) + self.functions.append(func) + + def match(self, func, conversions={}): + """Find a matching function in the API.""" + match = None + need_conv = False + for f in self.functions: + matched, conv = f.match(func, conversions) + if matched: + match = f + need_conv = conv + # exact match + if not need_conv: + break + return (match, need_conv) + + +class Function(object): + """Parse and realize a @@ -3674,8 +3679,6 @@ - - diff --git a/src/mesa/es/main/APIspecutil.py b/src/mesa/es/main/APIspecutil.py index 5bfb699ba7..27a8fe8a6d 100644 --- a/src/mesa/es/main/APIspecutil.py +++ b/src/mesa/es/main/APIspecutil.py @@ -59,8 +59,11 @@ def _ParseXML(filename, apiname): for func in api.functions: alias, need_conv = impl.match(func, conversions) if not alias: - print >>sys.stderr, "Error: unable to dispatch %s" % func.name + # external functions are manually dispatched + if not func.is_external: + print >>sys.stderr, "Error: unable to dispatch %s" % func.name alias = func + need_conv = False __functions[func.name] = func __aliases[func.name] = (alias, need_conv) diff --git a/src/mesa/es/main/es_cpaltex.c b/src/mesa/es/main/es_cpaltex.c index 0d6f7410c3..15b6ad3617 100644 --- a/src/mesa/es/main/es_cpaltex.c +++ b/src/mesa/es/main/es_cpaltex.c @@ -19,7 +19,7 @@ #include "GLES/glext.h" -void GL_APIENTRY _es_CompressedTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +void GL_APIENTRY _es_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); void GL_APIENTRY _mesa_TexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); void GL_APIENTRY _mesa_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); @@ -215,9 +215,9 @@ cpal_compressed_teximage2d(GLenum target, GLint level, void GL_APIENTRY -_es_CompressedTexImage2D(GLenum target, GLint level, GLenum internalFormat, - GLsizei width, GLsizei height, GLint border, - GLsizei imageSize, const GLvoid *data) +_es_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, + GLsizei width, GLsizei height, GLint border, + GLsizei imageSize, const GLvoid *data) { switch (internalFormat) { case GL_PALETTE4_RGB8_OES: diff --git a/src/mesa/es/main/es_fbo.c b/src/mesa/es/main/es_fbo.c index 545c46ca99..db53a1449f 100644 --- a/src/mesa/es/main/es_fbo.c +++ b/src/mesa/es/main/es_fbo.c @@ -10,14 +10,14 @@ #include "GLES2/gl2ext.h" -extern void GL_APIENTRY _es_RenderbufferStorage(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); +extern void GL_APIENTRY _es_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); extern void GL_APIENTRY _mesa_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); void GL_APIENTRY -_es_RenderbufferStorage(GLenum target, GLenum internalFormat, - GLsizei width, GLsizei height) +_es_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, + GLsizei width, GLsizei height) { switch (internalFormat) { case GL_RGBA4: diff --git a/src/mesa/es/main/es_generator.py b/src/mesa/es/main/es_generator.py index 349e0faa35..590f5940a7 100644 --- a/src/mesa/es/main/es_generator.py +++ b/src/mesa/es/main/es_generator.py @@ -272,7 +272,13 @@ for funcName in keys: # We're allowed to override the prefix and/or the function name # for each function record, though. The "ConversionFunction" # utility is poorly named, BTW... - aliasprefix = apiutil.AliasPrefix(funcName) + if funcName in allSpecials: + # perform checks and pass through + funcPrefix = "_check_" + aliasprefix = "_es_" + else: + funcPrefix = "_es_" + aliasprefix = apiutil.AliasPrefix(funcName) alias = apiutil.ConversionFunction(funcName) if not alias: # There may still be a Mesa alias for the function @@ -562,8 +568,9 @@ for funcName in keys: # The Mesa functions are scattered across all the Mesa # header files. The easiest way to manage declarations # is to create them ourselves. - if funcName not in allSpecials: - print "extern %s GLAPIENTRY %s(%s);" % (returnType, passthroughFuncName, passthroughDeclarationString) + if funcName in allSpecials: + print "/* this function is special and is defined elsewhere */" + print "extern %s GLAPIENTRY %s(%s);" % (returnType, passthroughFuncName, passthroughDeclarationString) # A function may be a core function (i.e. it exists in # the core specification), a core addition (extension @@ -594,22 +601,25 @@ for funcName in keys: if len(compoundCategory) == 1: # This is a core function extensionName = None - fullFuncName = "_es_" + funcName + extensionSuffix = "" else: # This is an extension function. We'll need to append # the extension suffix. extensionName = compoundCategory[1] extensionSuffix = extensionName.split("_")[0] - fullFuncName = "_es_" + funcName + extensionSuffix + fullFuncName = funcPrefix + funcName + extensionSuffix # Now the generated function. The text used to mark an API-level # function, oddly, is version-specific. if extensionName: print "/* Extension %s */" % extensionName - if funcName in allSpecials: - print "/* this function is special and is defined elsewhere */" - print "extern %s %s(%s);" % (returnType, fullFuncName, declarationString) + if (not variables and + not switchCode and + not conversionCodeOutgoing and + not conversionCodeIncoming): + # pass through directly + print "#define %s %s" % (fullFuncName, passthroughFuncName) print continue @@ -661,6 +671,7 @@ print "void" print "_mesa_init_exec_table(struct _glapi_table *exec)" print "{" for func in keys: + prefix = "_es_" if func not in allSpecials else "_check_" for spec in apiutil.Categories(func): ext = spec.split(":") # version does not match @@ -670,5 +681,5 @@ for func in keys: if ext: suffix = ext[0].split("_")[0] entry += suffix - print " SET_%s(exec, _es_%s);" % (entry, entry) + print " SET_%s(exec, %s%s);" % (entry, prefix, entry) print "}" -- cgit v1.2.3 From 29bd20ad1452bdc43d4cb0e42db65cf1069615cf Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 23 Nov 2009 15:04:49 +0800 Subject: mesa/es: Add more extensions to glapi. This commit adds definitions of GL_OES_texture_half_float_linear, GL_OES_texture_float_linear GL_OES_texture_half_float, GL_OES_texture_float GL_OES_vertex_half_float GL_OES_vertex_type_10_10_10_2 GL_OES_get_program_binary GL_EXT_texture_compression_dxt1 GL_EXT_texture_format_BGRA8888 GL_EXT_texture_lod_bias GL_EXT_blend_minmax GL_EXT_read_format_bgra GL_EXT_multi_draw_arrays to glapi. Signed-off-by: Chia-I Wu --- src/mesa/es/glapi/es1_EXT.xml | 32 +++++++++++++++++++------------- src/mesa/es/glapi/es2_EXT.xml | 40 ++++++++++++++++++++++++++++++++++++++++ src/mesa/es/glapi/es_EXT.xml | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 13 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/glapi/es1_EXT.xml b/src/mesa/es/glapi/es1_EXT.xml index 7c7c585736..de4868cfd4 100644 --- a/src/mesa/es/glapi/es1_EXT.xml +++ b/src/mesa/es/glapi/es1_EXT.xml @@ -607,19 +607,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -690,4 +690,10 @@ + + + + + + diff --git a/src/mesa/es/glapi/es2_EXT.xml b/src/mesa/es/glapi/es2_EXT.xml index fef6368022..3615772b56 100644 --- a/src/mesa/es/glapi/es2_EXT.xml +++ b/src/mesa/es/glapi/es2_EXT.xml @@ -97,10 +97,24 @@ + + + + + + + + + + + + + + @@ -119,4 +133,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mesa/es/glapi/es_EXT.xml b/src/mesa/es/glapi/es_EXT.xml index 28f41ae09a..b76cda929a 100644 --- a/src/mesa/es/glapi/es_EXT.xml +++ b/src/mesa/es/glapi/es_EXT.xml @@ -80,4 +80,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From f88297b369e9c2d4521554d8a6c66e288eb3b178 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 23 Nov 2009 17:07:08 +0800 Subject: mesa/es: Add more exnteions to APIspec. This commit adds definitions of GL_EXT_texture_compression_dxt1 GL_EXT_texture_lod_bias GL_EXT_blend_minmax GL_EXT_multi_draw_arrays to APIspec.xml and get_gen.py. Some of the enums are not avaiable in the header files and the defining extensions are disabled. Signed-off-by: Chia-I Wu --- src/mesa/es/main/APIspec.xml | 147 ++++++++++++++++++++++++++++++++++++------- src/mesa/es/main/get_gen.py | 4 ++ 2 files changed, 130 insertions(+), 21 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/main/APIspec.xml b/src/mesa/es/main/APIspec.xml index d8d85e6645..8926007f8d 100644 --- a/src/mesa/es/main/APIspec.xml +++ b/src/mesa/es/main/APIspec.xml @@ -492,6 +492,19 @@ + + + + + + + + + + + + + @@ -1312,6 +1325,19 @@ + + + + + + + + + + + + + @@ -1675,7 +1701,8 @@ - + + @@ -2033,6 +2060,9 @@ + + + @@ -2050,6 +2080,9 @@ + + + @@ -2059,6 +2092,9 @@ + + + @@ -2363,22 +2399,28 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -2417,16 +2459,8 @@ - - - - - - - - - - + + @@ -3420,6 +3454,54 @@ + + + + @@ -3685,6 +3767,10 @@ + + + + @@ -3718,7 +3804,13 @@ + + @@ -3973,6 +4065,10 @@ + + + + @@ -3994,6 +4090,11 @@ + + @@ -4188,6 +4289,10 @@ + + + + diff --git a/src/mesa/es/main/get_gen.py b/src/mesa/es/main/get_gen.py index 3303c4cb5b..9da0b6b742 100644 --- a/src/mesa/es/main/get_gen.py +++ b/src/mesa/es/main/get_gen.py @@ -468,6 +468,10 @@ StateVars_es1 = [ ("GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES", GLint, ["ctx->Array.ArrayObj->PointSize.BufferObj->Name"], "", None), + # GL_EXT_texture_lod_bias + ( "GL_MAX_TEXTURE_LOD_BIAS_EXT", GLfloat, + ["ctx->Const.MaxTextureLodBias"], "", ["EXT_texture_lod_bias"]), + # GL_EXT_texture_filter_anisotropic ( "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT", GLfloat, ["ctx->Const.MaxTextureMaxAnisotropy"], "", ["EXT_texture_filter_anisotropic"]), -- cgit v1.2.3 From 3a4d0811b43295519d771fa192bd3d28bd5312d5 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 23 Nov 2009 17:10:12 +0800 Subject: mesa/es: Clean up extension string. Add some new extensions and remove those that do not belong to OpenGL ES 2.0. Signed-off-by: Chia-I Wu --- src/mesa/es/main/specials_es1.c | 8 ++++++++ src/mesa/es/main/specials_es2.c | 10 ++++------ 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/main/specials_es1.c b/src/mesa/es/main/specials_es1.c index 548fb0f029..0ace2924b3 100644 --- a/src/mesa/es/main/specials_es1.c +++ b/src/mesa/es/main/specials_es1.c @@ -140,8 +140,16 @@ make_extension_string(const GLcontext *ctx, char *str) if (ctx->Extensions.EXT_texture_filter_anisotropic) len += append_extension(&str, "GL_EXT_texture_filter_anisotropic"); + /* some applications check this for NPOT support */ if (ctx->Extensions.ARB_texture_non_power_of_two) len += append_extension(&str, "GL_ARB_texture_non_power_of_two"); + + if (ctx->Extensions.EXT_texture_compression_s3tc) + len += append_extension(&str, "GL_EXT_texture_compression_dxt1"); + if (ctx->Extensions.EXT_texture_lod_bias) + len += append_extension(&str, "GL_EXT_texture_lod_bias"); + if (ctx->Extensions.EXT_blend_minmax) + len += append_extension(&str, "GL_EXT_blend_minmax"); if (ctx->Extensions.EXT_multi_draw_arrays) len += append_extension(&str, "GL_EXT_multi_draw_arrays"); diff --git a/src/mesa/es/main/specials_es2.c b/src/mesa/es/main/specials_es2.c index ef8c581618..e11ade9b94 100644 --- a/src/mesa/es/main/specials_es2.c +++ b/src/mesa/es/main/specials_es2.c @@ -86,21 +86,15 @@ make_extension_string(const GLcontext *ctx, char *str) { size_t len = 0; - /* Core additions */ - len += append_extension(&str, "GL_OES_single_precision"); - - /* Required extensions */ len += append_extension(&str, "GL_OES_compressed_paletted_texture"); if (ctx->Extensions.ARB_framebuffer_object) { - len += append_extension(&str, "GL_OES_framebuffer_object"); len += append_extension(&str, "GL_OES_depth24"); len += append_extension(&str, "GL_OES_depth32"); len += append_extension(&str, "GL_OES_fbo_render_mipmap"); len += append_extension(&str, "GL_OES_rgb8_rgba8"); len += append_extension(&str, "GL_OES_stencil1"); len += append_extension(&str, "GL_OES_stencil4"); - len += append_extension(&str, "GL_OES_stencil8"); } if (ctx->Extensions.EXT_vertex_array) @@ -123,6 +117,10 @@ make_extension_string(const GLcontext *ctx, char *str) if (ctx->Extensions.ARB_fragment_shader) len += append_extension(&str, "GL_OES_standard_derivatives"); + if (ctx->Extensions.EXT_texture_compression_s3tc) + len += append_extension(&str, "GL_EXT_texture_compression_dxt1"); + if (ctx->Extensions.EXT_blend_minmax) + len += append_extension(&str, "GL_EXT_blend_minmax"); if (ctx->Extensions.EXT_multi_draw_arrays) len += append_extension(&str, "GL_EXT_multi_draw_arrays"); -- cgit v1.2.3 From b80ec33f3559e9a14d08f84c8e369a0dc81b46d7 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 24 Nov 2009 10:28:27 +0800 Subject: mesa/es: Fix GL_OES_texture_cube_map support. Unlike in OpenGL, GL_OES_texture_cube_map says that all coordinates are changed the same time by the token GL_TEXTURE_GEN_STR_OES, and the initial mode is GL_REFLECTION_MAP_OES. Signed-off-by: Chia-I Wu --- src/mesa/es/main/APIspec.xml | 25 ++++++----- src/mesa/es/main/es_enable.c | 91 +++++++++++++++++++++++++++++++++++++++++ src/mesa/es/main/es_texgen.c | 73 +++++++++++++++++++++++++++++++++ src/mesa/es/main/get_gen.py | 11 ++--- src/mesa/es/main/specials_es1.c | 16 +++++++- src/mesa/es/sources.mak | 2 + 6 files changed, 199 insertions(+), 19 deletions(-) create mode 100644 src/mesa/es/main/es_enable.c create mode 100644 src/mesa/es/main/es_texgen.c (limited to 'src/mesa') diff --git a/src/mesa/es/main/APIspec.xml b/src/mesa/es/main/APIspec.xml index 8926007f8d..a7dbdc4249 100644 --- a/src/mesa/es/main/APIspec.xml +++ b/src/mesa/es/main/APIspec.xml @@ -3546,7 +3546,6 @@ - @@ -3873,12 +3872,12 @@ - - - - - - + + + + + + @@ -3892,8 +3891,8 @@ - - + + @@ -3932,15 +3931,15 @@ - - - + + + - + diff --git a/src/mesa/es/main/es_enable.c b/src/mesa/es/main/es_enable.c new file mode 100644 index 0000000000..351caacd77 --- /dev/null +++ b/src/mesa/es/main/es_enable.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2009 Chia-I Wu + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "GLES/gl.h" +#include "GLES/glext.h" + +#include "main/compiler.h" /* for ASSERT */ + + +#ifndef GL_TEXTURE_GEN_S +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#endif + + +extern void GL_APIENTRY _es_Disable(GLenum cap); +extern void GL_APIENTRY _es_Enable(GLenum cap); +extern GLboolean GL_APIENTRY _es_IsEnabled(GLenum cap); + +extern void GL_APIENTRY _mesa_Disable(GLenum cap); +extern void GL_APIENTRY _mesa_Enable(GLenum cap); +extern GLboolean GL_APIENTRY _mesa_IsEnabled(GLenum cap); + + +void GL_APIENTRY +_es_Disable(GLenum cap) +{ + switch (cap) { + case GL_TEXTURE_GEN_STR_OES: + /* disable S, T, and R at the same time */ + _mesa_Disable(GL_TEXTURE_GEN_S); + _mesa_Disable(GL_TEXTURE_GEN_T); + _mesa_Disable(GL_TEXTURE_GEN_R); + break; + default: + _mesa_Disable(cap); + break; + } +} + + +void GL_APIENTRY +_es_Enable(GLenum cap) +{ + switch (cap) { + case GL_TEXTURE_GEN_STR_OES: + /* enable S, T, and R at the same time */ + _mesa_Enable(GL_TEXTURE_GEN_S); + _mesa_Enable(GL_TEXTURE_GEN_T); + _mesa_Enable(GL_TEXTURE_GEN_R); + break; + default: + _mesa_Enable(cap); + break; + } +} + + +GLboolean GL_APIENTRY +_es_IsEnabled(GLenum cap) +{ + switch (cap) { + case GL_TEXTURE_GEN_STR_OES: + cap = GL_TEXTURE_GEN_S; + default: + break; + } + + return _mesa_IsEnabled(cap); +} diff --git a/src/mesa/es/main/es_texgen.c b/src/mesa/es/main/es_texgen.c new file mode 100644 index 0000000000..c29a0a7f13 --- /dev/null +++ b/src/mesa/es/main/es_texgen.c @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2009 Chia-I Wu + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include "GLES/gl.h" +#include "GLES/glext.h" + +#include "main/compiler.h" /* for ASSERT */ + + +#ifndef GL_S +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#endif + + +extern void GL_APIENTRY _es_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params); +extern void GL_APIENTRY _es_TexGenf(GLenum coord, GLenum pname, GLfloat param); +extern void GL_APIENTRY _es_TexGenfv(GLenum coord, GLenum pname, const GLfloat *params); + +extern void GL_APIENTRY _mesa_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params); +extern void GL_APIENTRY _mesa_TexGenf(GLenum coord, GLenum pname, GLfloat param); +extern void GL_APIENTRY _mesa_TexGenfv(GLenum coord, GLenum pname, const GLfloat *params); + + +void GL_APIENTRY +_es_GetTexGenfv(GLenum coord, GLenum pname, GLfloat *params) +{ + ASSERT(coord == GL_TEXTURE_GEN_STR_OES); + _mesa_GetTexGenfv(GL_S, pname, params); +} + + +void GL_APIENTRY +_es_TexGenf(GLenum coord, GLenum pname, GLfloat param) +{ + ASSERT(coord == GL_TEXTURE_GEN_STR_OES); + /* set S, T, and R at the same time */ + _mesa_TexGenf(GL_S, pname, param); + _mesa_TexGenf(GL_T, pname, param); + _mesa_TexGenf(GL_R, pname, param); +} + + +void GL_APIENTRY +_es_TexGenfv(GLenum coord, GLenum pname, const GLfloat *params) +{ + ASSERT(coord == GL_TEXTURE_GEN_STR_OES); + /* set S, T, and R at the same time */ + _mesa_TexGenfv(GL_S, pname, params); + _mesa_TexGenfv(GL_T, pname, params); + _mesa_TexGenfv(GL_R, pname, params); +} diff --git a/src/mesa/es/main/get_gen.py b/src/mesa/es/main/get_gen.py index 9da0b6b742..fee6670104 100644 --- a/src/mesa/es/main/get_gen.py +++ b/src/mesa/es/main/get_gen.py @@ -391,12 +391,9 @@ StateVars_es1 = [ # OES_texture_cube_map ( "GL_TEXTURE_CUBE_MAP_ARB", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB)"], "", None), - ( "GL_TEXTURE_GEN_S", GLboolean, + ( "GL_TEXTURE_GEN_STR_OES", GLboolean, + # S, T, and R are always set at the same time ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)"], "", None), - ( "GL_TEXTURE_GEN_T", GLboolean, - ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & T_BIT) ? 1 : 0)"], "", None), - ( "GL_TEXTURE_GEN_R", GLboolean, - ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & R_BIT) ? 1 : 0)"], "", None), # ARB_multisample ( "GL_MULTISAMPLE_ARB", GLboolean, ["ctx->Multisample.Enabled"], "", ["ARB_multisample"] ), @@ -695,6 +692,10 @@ def EmitHeader(): #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif +/* GL_OES_texture_cube_map */ +#ifndef GL_OES_texture_cube_map +#define GL_TEXTURE_GEN_STR_OES 0x8D60 +#endif #define FLOAT_TO_BOOLEAN(X) ( (X) ? GL_TRUE : GL_FALSE ) #define FLOAT_TO_FIXED(F) ( ((F) * 65536.0f > INT_MAX) ? INT_MAX : \\ diff --git a/src/mesa/es/main/specials_es1.c b/src/mesa/es/main/specials_es1.c index 0ace2924b3..a4f14490f3 100644 --- a/src/mesa/es/main/specials_es1.c +++ b/src/mesa/es/main/specials_es1.c @@ -195,5 +195,19 @@ _es_GetString(GLenum name) void _mesa_initialize_context_extra(GLcontext *ctx) { - /* nothing here */ + GLuint i; + + /** + * GL_OES_texture_cube_map says + * "Initially all texture generation modes are set to REFLECTION_MAP_OES" + */ + for (i = 0; i < MAX_TEXTURE_UNITS; i++) { + struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i]; + texUnit->GenS.Mode = GL_REFLECTION_MAP_NV; + texUnit->GenT.Mode = GL_REFLECTION_MAP_NV; + texUnit->GenR.Mode = GL_REFLECTION_MAP_NV; + texUnit->GenS._ModeBit = TEXGEN_REFLECTION_MAP_NV; + texUnit->GenT._ModeBit = TEXGEN_REFLECTION_MAP_NV; + texUnit->GenR._ModeBit = TEXGEN_REFLECTION_MAP_NV; + } } diff --git a/src/mesa/es/sources.mak b/src/mesa/es/sources.mak index f00e41b011..84fad26773 100644 --- a/src/mesa/es/sources.mak +++ b/src/mesa/es/sources.mak @@ -8,8 +8,10 @@ LOCAL_ES1_SOURCES := \ main/specials_es1.c \ main/drawtex.c \ main/es_cpaltex.c \ + main/es_enable.c \ main/es_fbo.c \ main/es_query_matrix.c \ + main/es_texgen.c \ main/stubs.c \ glapi/glapi-es1/main/enums.c -- cgit v1.2.3 From c4b9e1aa1a2f1fda9e5764e3f7dd1a268216df09 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 24 Nov 2009 12:11:26 +0800 Subject: mesa/es: Fix GL_RGB565 support in FBO. In GL_OES_framebuffer_object and OpenGL ES 2.0, GL_RGB565 is a valid internal format. Since it is not supported by the core, map it to GL_RGB5 as a workaround. Signed-off-by: Chia-I Wu --- src/mesa/es/main/APIspec.xml | 2 +- src/mesa/es/main/es_fbo.c | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/main/APIspec.xml b/src/mesa/es/main/APIspec.xml index a7dbdc4249..f6f33130b1 100644 --- a/src/mesa/es/main/APIspec.xml +++ b/src/mesa/es/main/APIspec.xml @@ -4041,7 +4041,7 @@ - + diff --git a/src/mesa/es/main/es_fbo.c b/src/mesa/es/main/es_fbo.c index db53a1449f..1803637830 100644 --- a/src/mesa/es/main/es_fbo.c +++ b/src/mesa/es/main/es_fbo.c @@ -10,6 +10,11 @@ #include "GLES2/gl2ext.h" +#ifndef GL_RGB5 +#define GL_RGB5 0x8050 +#endif + + extern void GL_APIENTRY _es_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); extern void GL_APIENTRY _mesa_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height); @@ -20,18 +25,13 @@ _es_RenderbufferStorageEXT(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height) { switch (internalFormat) { - case GL_RGBA4: - case GL_RGB5_A1: case GL_RGB565: - internalFormat = GL_RGBA; - break; - case GL_STENCIL_INDEX1_OES: - case GL_STENCIL_INDEX4_OES: - case GL_STENCIL_INDEX8: - internalFormat = GL_STENCIL_INDEX; + /* XXX this confuses GL_RENDERBUFFER_INTERNAL_FORMAT_OES */ + /* choose a closest format */ + internalFormat = GL_RGB5; break; default: - ; /* no op */ + break; } _mesa_RenderbufferStorageEXT(target, internalFormat, width, height); } -- cgit v1.2.3 From a316b700effd615fcc895d0a2e015356854c6f44 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 24 Nov 2009 12:21:03 +0800 Subject: mesa/es: Improve support for GL_OES_compressed_paletted_texture. Add error checking and fix handling of level (it should be negative). Besides, always use the palette entry format/type when calling _mesa_TexImage2D. It respects the base internal formats of the cpal formats, and is simpler and faster, except for cases where the unpack alignment needs to be changed. Signed-off-by: Chia-I Wu --- src/mesa/es/main/es_cpaltex.c | 275 ++++++++++++++++++++---------------------- 1 file changed, 133 insertions(+), 142 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/main/es_cpaltex.c b/src/mesa/es/main/es_cpaltex.c index 15b6ad3617..0c497774ff 100644 --- a/src/mesa/es/main/es_cpaltex.c +++ b/src/mesa/es/main/es_cpaltex.c @@ -7,210 +7,201 @@ /** - * Code to convert compressed/paletted texture images to ordinary 4-byte RGBA. + * Code to convert compressed/paletted texture images to ordinary images. * See the GL_OES_compressed_paletted_texture spec at * http://khronos.org/registry/gles/extensions/OES/OES_compressed_paletted_texture.txt + * + * XXX this makes it impossible to add hardware support... */ -#include -#include #include "GLES/gl.h" #include "GLES/glext.h" +#include "main/compiler.h" /* for ASSERT */ + void GL_APIENTRY _es_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +void GL_APIENTRY _mesa_GetIntegerv(GLenum pname, GLint *params); +void GL_APIENTRY _mesa_PixelStorei(GLenum pname, GLint param); void GL_APIENTRY _mesa_TexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); void GL_APIENTRY _mesa_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +void *_mesa_get_current_context(void); +void _mesa_error(void *ctx, GLenum error, const char *fmtString, ... ); + -static const struct { +static const struct cpal_format_info { + GLenum cpal_format; GLenum format; + GLenum type; GLuint palette_size; GLuint size; } formats[] = { - { GL_PALETTE4_RGB8_OES, 16, 3 }, - { GL_PALETTE4_RGBA8_OES, 16, 4 }, - { GL_PALETTE4_R5_G6_B5_OES, 16, 2 }, - { GL_PALETTE4_RGBA4_OES, 16, 2 }, - { GL_PALETTE4_RGB5_A1_OES, 16, 2 }, - { GL_PALETTE8_RGB8_OES, 256, 3 }, - { GL_PALETTE8_RGBA8_OES, 256, 4 }, - { GL_PALETTE8_R5_G6_B5_OES, 256, 2 }, - { GL_PALETTE8_RGBA4_OES, 256, 2 }, - { GL_PALETTE8_RGB5_A1_OES, 256, 2 } + { GL_PALETTE4_RGB8_OES, GL_RGB, GL_UNSIGNED_BYTE, 16, 3 }, + { GL_PALETTE4_RGBA8_OES, GL_RGBA, GL_UNSIGNED_BYTE, 16, 4 }, + { GL_PALETTE4_R5_G6_B5_OES, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 16, 2 }, + { GL_PALETTE4_RGBA4_OES, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 16, 2 }, + { GL_PALETTE4_RGB5_A1_OES, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, 16, 2 }, + { GL_PALETTE8_RGB8_OES, GL_RGB, GL_UNSIGNED_BYTE, 256, 3 }, + { GL_PALETTE8_RGBA8_OES, GL_RGBA, GL_UNSIGNED_BYTE, 256, 4 }, + { GL_PALETTE8_R5_G6_B5_OES, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 256, 2 }, + { GL_PALETTE8_RGBA4_OES, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 256, 2 }, + { GL_PALETTE8_RGB5_A1_OES, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, 256, 2 } }; /** - * Get a color/entry from the palette. Convert to GLubyte/RGBA format. + * Get a color/entry from the palette. */ -static void -get_palette_entry(GLenum format, const void *palette, GLuint index, - GLubyte rgba[4]) +static GLuint +get_palette_entry(const struct cpal_format_info *info, const GLubyte *palette, + GLuint index, GLubyte *pixel) { - switch (format) { - case GL_PALETTE4_RGB8_OES: - case GL_PALETTE8_RGB8_OES: - { - const GLubyte *pal = (const GLubyte *) palette; - rgba[0] = pal[index * 3 + 0]; - rgba[1] = pal[index * 3 + 1]; - rgba[2] = pal[index * 3 + 2]; - rgba[3] = 255; - } - break; - case GL_PALETTE4_RGBA8_OES: - case GL_PALETTE8_RGBA8_OES: - { - const GLubyte *pal = (const GLubyte *) palette; - rgba[0] = pal[index * 4 + 0]; - rgba[1] = pal[index * 4 + 1]; - rgba[2] = pal[index * 4 + 2]; - rgba[3] = pal[index * 4 + 3]; - } - break; - case GL_PALETTE4_R5_G6_B5_OES: - case GL_PALETTE8_R5_G6_B5_OES: - { - const GLushort *pal = (const GLushort *) palette; - const GLushort color = pal[index]; - rgba[0] = ((color >> 8) & 0xf8) | ((color >> 11) & 0x3); - rgba[1] = ((color >> 3) & 0xfc) | ((color >> 1 ) & 0x3); - rgba[2] = ((color << 3) & 0xf8) | ((color ) & 0x7); - rgba[3] = 255; - } - break; - case GL_PALETTE4_RGBA4_OES: - case GL_PALETTE8_RGBA4_OES: - { - const GLushort *pal = (const GLushort *) palette; - const GLushort color = pal[index]; - rgba[0] = ((color & 0xf000) >> 8) | ((color & 0xf000) >> 12); - rgba[1] = ((color & 0x0f00) >> 4) | ((color & 0x0f00) >> 8); - rgba[2] = ((color & 0x00f0) ) | ((color & 0x00f0) >> 4); - rgba[3] = ((color & 0x000f) << 4) | ((color & 0x000f) ); - } - break; - case GL_PALETTE4_RGB5_A1_OES: - case GL_PALETTE8_RGB5_A1_OES: - { - const GLushort *pal = (const GLushort *) palette; - const GLushort color = pal[index]; - rgba[0] = ((color >> 8) & 0xf8) | ((color >> 11) & 0x7); - rgba[1] = ((color >> 3) & 0xf8) | ((color >> 6) & 0x7); - rgba[2] = ((color << 2) & 0xf8) | ((color >> 1) & 0x7); - rgba[3] = (color & 0x1) * 255; - } - break; - default: - assert(0); - } + memcpy(pixel, palette + info->size * index, info->size); + return info->size; } /** - * Convert paletted texture to simple GLubyte/RGBA format. + * Convert paletted texture to color texture. */ static void -paletted_to_rgba(GLenum src_format, - const void *palette, - const void *indexes, - GLsizei width, GLsizei height, - GLubyte *rgba) +paletted_to_color(const struct cpal_format_info *info, const GLubyte *palette, + const void *indices, GLuint num_pixels, GLubyte *image) { - GLuint pal_ents, i; - - assert(src_format >= GL_PALETTE4_RGB8_OES); - assert(src_format <= GL_PALETTE8_RGB5_A1_OES); - assert(formats[src_format - GL_PALETTE4_RGB8_OES].format == src_format); + GLubyte *pix = image; + GLuint remain, i; - pal_ents = formats[src_format - GL_PALETTE4_RGB8_OES].palette_size; - - if (pal_ents == 16) { + if (info->palette_size == 16) { /* 4 bits per index */ - const GLubyte *ind = (const GLubyte *) indexes; + const GLubyte *ind = (const GLubyte *) indices; - if (width * height == 1) { - /* special case the only odd-sized image */ - GLuint index0 = ind[0] >> 4; - get_palette_entry(src_format, palette, index0, rgba); - return; - } /* two pixels per iteration */ - for (i = 0; i < width * height / 2; i++) { - GLuint index0 = ind[i] >> 4; - GLuint index1 = ind[i] & 0xf; - get_palette_entry(src_format, palette, index0, rgba + i * 8); - get_palette_entry(src_format, palette, index1, rgba + i * 8 + 4); + remain = num_pixels % 2; + for (i = 0; i < num_pixels / 2; i++) { + pix += get_palette_entry(info, palette, (ind[i] >> 4) & 0xf, pix); + pix += get_palette_entry(info, palette, ind[i] & 0xf, pix); + } + if (remain) { + get_palette_entry(info, palette, (ind[i] >> 4) & 0xf, pix); } } else { /* 8 bits per index */ - const GLubyte *ind = (const GLubyte *) indexes; - for (i = 0; i < width * height; i++) { - GLuint index = ind[i]; - get_palette_entry(src_format, palette, index, rgba + i * 4); - } + const GLubyte *ind = (const GLubyte *) indices; + for (i = 0; i < num_pixels; i++) + pix += get_palette_entry(info, palette, ind[i], pix); } } +static const struct cpal_format_info * +cpal_get_info(GLint level, GLenum internalFormat, + GLsizei width, GLsizei height, GLsizei imageSize) +{ + const struct cpal_format_info *info; + GLint lvl, num_levels; + GLsizei w, h, expect_size; + + info = &formats[internalFormat - GL_PALETTE4_RGB8_OES]; + ASSERT(info->cpal_format == internalFormat); + + if (level > 0) { + _mesa_error(_mesa_get_current_context(), GL_INVALID_VALUE, + "glCompressedTexImage2D(level=%d)", level); + return NULL; + } + + num_levels = -level + 1; + expect_size = info->palette_size * info->size; + for (lvl = 0; lvl < num_levels; lvl++) { + w = width >> lvl; + if (!w) + w = 1; + h = height >> lvl; + if (!h) + h = 1; + + if (info->palette_size == 16) + expect_size += (w * h + 1) / 2; + else + expect_size += w * h; + } + if (expect_size > imageSize) { + _mesa_error(_mesa_get_current_context(), GL_INVALID_VALUE, + "glCompressedTexImage2D(imageSize=%d)", imageSize); + return NULL; + } + return info; +} + /** * Convert a call to glCompressedTexImage2D() where internalFormat is a * compressed palette format into a regular GLubyte/RGBA glTexImage2D() call. */ static void -cpal_compressed_teximage2d(GLenum target, GLint level, - GLenum internalFormat, - GLsizei width, GLsizei height, - const void *pixels) +cpal_compressed_teximage2d(GLenum target, GLint level, GLenum internalFormat, + GLsizei width, GLsizei height, GLsizei imageSize, + const void *palette) { - GLuint pal_ents, pal_ent_size, pal_bytes; - const GLint num_levels = level + 1; - GLint lvl; - const GLubyte *indexes; + const struct cpal_format_info *info; + GLint lvl, num_levels; + const GLubyte *indices; + GLint saved_align, align; - assert(internalFormat >= GL_PALETTE4_RGB8_OES); - assert(internalFormat <= GL_PALETTE8_RGB5_A1_OES); - assert(formats[internalFormat - GL_PALETTE4_RGB8_OES].format == internalFormat); + info = cpal_get_info(level, internalFormat, width, height, imageSize); + if (!info) + return; - pal_ents = formats[internalFormat - GL_PALETTE4_RGB8_OES].palette_size; - pal_ent_size = formats[internalFormat - GL_PALETTE4_RGB8_OES].size; - pal_bytes = pal_ents * pal_ent_size; + info = &formats[internalFormat - GL_PALETTE4_RGB8_OES]; + ASSERT(info->cpal_format == internalFormat); + num_levels = -level + 1; /* first image follows the palette */ - indexes = (const GLubyte *) pixels + pal_bytes; + indices = (const GLubyte *) palette + info->palette_size * info->size; - /* No worries about glPixelStore state since the only supported parameter is - * GL_UNPACK_ALIGNMENT and it doesn't matter when unpacking GLubyte/RGBA. - */ + _mesa_GetIntegerv(GL_UNPACK_ALIGNMENT, &saved_align); + align = saved_align; for (lvl = 0; lvl < num_levels; lvl++) { - /* Allocate GLubyte/RGBA dest image buffer */ - GLubyte *rgba = (GLubyte *) malloc(width * height * 4); - - if (pixels) - paletted_to_rgba(internalFormat, pixels, indexes, width, height, rgba); + GLsizei w, h; + GLuint num_texels; + GLubyte *image = NULL; + + w = width >> lvl; + if (!w) + w = 1; + h = height >> lvl; + if (!h) + h = 1; + num_texels = w * h; + if (w * info->size % align) { + _mesa_PixelStorei(GL_UNPACK_ALIGNMENT, 1); + align = 1; + } - _mesa_TexImage2D(target, lvl, GL_RGBA, width, height, 0, - GL_RGBA, GL_UNSIGNED_BYTE, rgba); + /* allocate and fill dest image buffer */ + if (palette) { + image = (GLubyte *) malloc(num_texels * info->size); + paletted_to_color(info, palette, indices, num_texels, image); + } - free(rgba); + _mesa_TexImage2D(target, lvl, info->format, w, h, 0, + info->format, info->type, image); + if (image) + free(image); /* advance index pointer to point to next src mipmap */ - if (pal_ents == 4) - indexes += width * height / 2; + if (info->palette_size == 16) + indices += (num_texels + 1) / 2; else - indexes += width * height; - - /* next mipmap level size */ - if (width > 1) - width /= 2; - if (height > 1) - height /= 2; + indices += num_texels; } + + if (saved_align != align) + _mesa_PixelStorei(GL_UNPACK_ALIGNMENT, saved_align); } @@ -231,7 +222,7 @@ _es_CompressedTexImage2DARB(GLenum target, GLint level, GLenum internalFormat, case GL_PALETTE8_RGBA4_OES: case GL_PALETTE8_RGB5_A1_OES: cpal_compressed_teximage2d(target, level, internalFormat, - width, height, data); + width, height, imageSize, data); break; default: _mesa_CompressedTexImage2DARB(target, level, internalFormat, -- cgit v1.2.3 From bffe94d48ac70d1498581d80f2cb3be78ccc24f4 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 5 Jan 2010 15:57:13 +0800 Subject: mesa/es: Fix build issue after merge. In cd6b8dd9e82fedc55d033131fbc0f8ee950567c8, color read/type fields are moved; Based on 068596c9a7e8d330ffdff8ad8700bd6093b5bdea and cc020425e929110613ddb405d3e82313d27a35ed, GLSL builtin library is autogenerated and GLSL libraries are built and used. Signed-off-by: Chia-I Wu --- src/mesa/es/Makefile | 21 +++++++++++---------- src/mesa/es/main/get_gen.py | 5 +++-- 2 files changed, 14 insertions(+), 12 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/Makefile b/src/mesa/es/Makefile index 6a4756c1b5..ca38dc4aed 100644 --- a/src/mesa/es/Makefile +++ b/src/mesa/es/Makefile @@ -63,23 +63,23 @@ $(ES2_OBJ_DIR)/%.o: $(MESA)/%.c $(ES2_OBJ_DIR)/%.o: $(MESA)/%.S $(call es-compile,2) -libes1.a: $(ES1_OBJECTS) - @$(TOP)/bin/mklib -o es1 -static $(ES1_OBJECTS) +libes1.a: $(ES1_OBJECTS) $(GLSL_LIBS) + @$(MKLIB) -o es1 -static $(ES1_OBJECTS) $(GLSL_LIBS) -libes2.a: $(ES2_OBJECTS) - @$(TOP)/bin/mklib -o es2 -static $(ES1_OBJECTS) +libes2.a: $(ES2_OBJECTS) $(GLSL_LIBS) + @$(MKLIB) -o es2 -static $(ES1_OBJECTS) $(GLSL_LIBS) -libes1gallium.a: $(ES1_GALLIUM_OBJECTS) - @$(TOP)/bin/mklib -o es1gallium -static $(ES1_GALLIUM_OBJECTS) +libes1gallium.a: $(ES1_GALLIUM_OBJECTS) $(GLSL_LIBS) + @$(MKLIB) -o es1gallium -static $(ES1_GALLIUM_OBJECTS) $(GLSL_LIBS) -libes2gallium.a: $(ES2_GALLIUM_OBJECTS) - @$(TOP)/bin/mklib -o es2gallium -static $(ES2_GALLIUM_OBJECTS) +libes2gallium.a: $(ES2_GALLIUM_OBJECTS) $(GLSL_LIBS) + @$(MKLIB) -o es2gallium -static $(ES2_GALLIUM_OBJECTS) $(GLSL_LIBS) libes1api.a: $(ES1_API_OBJECTS) - @$(TOP)/bin/mklib -o es1api -static $(ES1_API_OBJECTS) + @$(MKLIB) -o es1api -static $(ES1_API_OBJECTS) libes2api.a: $(ES2_API_OBJECTS) - @$(TOP)/bin/mklib -o es2api -static $(ES2_API_OBJECTS) + @$(MKLIB) -o es2api -static $(ES2_API_OBJECTS) GENERATED_SOURCES := \ main/api_exec_es1.c \ @@ -115,6 +115,7 @@ glapi/glapi-stamp: subdirs: glapi/glapi-stamp $(MAKE) -C $(MESA) asm_subdirs + $(MAKE) -C $(MESA) glsl_builtin # remove generated sources because "depend" is checked even when "make clean" DEPEND_SOURCES := $(filter-out $(GENERATED_SOURCES), $(ES1_ALL_SOURCES) $(ES2_ALL_SOURCES)) diff --git a/src/mesa/es/main/get_gen.py b/src/mesa/es/main/get_gen.py index fee6670104..b820157be0 100644 --- a/src/mesa/es/main/get_gen.py +++ b/src/mesa/es/main/get_gen.py @@ -209,9 +209,9 @@ StateVars_common = [ # GL_OES_read_format ( "GL_IMPLEMENTATION_COLOR_READ_TYPE_OES", GLint, - ["ctx->Const.ColorReadType"], "", None), + ["_mesa_get_color_read_type(ctx)"], "", ["OES_read_format"] ), ( "GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES", GLint, - ["ctx->Const.ColorReadFormat"], "", None), + ["_mesa_get_color_read_format(ctx)"], "", ["OES_read_format"] ), # GL_OES_framebuffer_object ( "GL_FRAMEBUFFER_BINDING_EXT", GLint, ["ctx->DrawBuffer->Name"], "", @@ -655,6 +655,7 @@ def EmitHeader(): #include "main/mtypes.h" #include "main/state.h" #include "main/texcompress.h" +#include "main/framebuffer.h" /* ES1 tokens that should be in gl.h but aren't */ -- cgit v1.2.3 From 0ce5b128d750e18e1ac2120f7f0435f8f4952dde Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 5 Jan 2010 16:52:06 +0800 Subject: mesa/es: Update sources.mk. Add/remove files that are unused/used to the omit list. Finally, they should all be features that can be omitted. Signed-off-by: Chia-I Wu --- src/mesa/es/sources.mak | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/es/sources.mak b/src/mesa/es/sources.mak index 84fad26773..55bb31b80d 100644 --- a/src/mesa/es/sources.mak +++ b/src/mesa/es/sources.mak @@ -44,9 +44,11 @@ LOCAL_ES2_API_ASM := $(subst es1,es2, $(LOCAL_ES1_API_ASM)) LOCAL_ES2_INCLUDES := $(subst es1,es2, $(LOCAL_ES1_INCLUDES)) # MESA sources +# Ideally, the omit list should be replaced by features. MAIN_OMITTED := \ main/api_exec.c \ + main/condrender.c \ main/dlopen.c \ main/enums.c \ main/get.c @@ -68,10 +70,7 @@ STATETRACKER_OMITTED := \ STATETRACKER_SOURCES := $(filter-out $(STATETRACKER_OMITTED), $(STATETRACKER_SOURCES)) SHADER_OMITTED := \ - shader/atifragshader.c \ - shader/nvfragparse.c \ - shader/nvprogram.c \ - shader/nvvertparse.c + shader/atifragshader.c SHADER_SOURCES := $(filter-out $(SHADER_OMITTED), $(SHADER_SOURCES)) MESA_ES1_SOURCES := \ -- cgit v1.2.3