summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/es/main/APIspec.py2
-rw-r--r--src/mesa/es/main/APIspec.xml7
-rw-r--r--src/mesa/es/main/APIspecutil.py5
-rw-r--r--src/mesa/es/main/es_cpaltex.c8
-rw-r--r--src/mesa/es/main/es_fbo.c6
-rw-r--r--src/mesa/es/main/es_generator.py29
6 files changed, 37 insertions, 20 deletions
diff --git a/src/mesa/es/main/APIspec.py b/src/mesa/es/main/APIspec.py
index 7d27e46e28b..6947f7301cd 100644
--- a/src/mesa/es/main/APIspec.py
+++ b/src/mesa/es/main/APIspec.py
@@ -133,7 +133,7 @@ class Function(object):
if force_skip_desc:
self._skip_desc = True
else:
- self._skip_desc = (self.is_external or func_node.prop("skip_desc") == "true")
+ self._skip_desc = (func_node.prop("skip_desc") == "true")
self._categories = categories
diff --git a/src/mesa/es/main/APIspec.xml b/src/mesa/es/main/APIspec.xml
index 5311f2a83df..d8d85e66456 100644
--- a/src/mesa/es/main/APIspec.xml
+++ b/src/mesa/es/main/APIspec.xml
@@ -15,6 +15,10 @@
parameters. A <desc> can enumerate the valid values of a parameter. It
can also specify the error code when an invalid value is given, and etc.
By nesting <desc>s, they can create dependency between parameters.
+
+ A function can be marked as external. It means that the function cannot
+ be dispatched to the corresponding mesa function, if one exists, directly,
+ and requires an external implementation.
-->
<apispec>
@@ -1284,6 +1288,7 @@
<value name="GL_RENDERER"/>
<value name="GL_VERSION"/>
<value name="GL_EXTENSIONS"/>
+ <value name="GL_SHADING_LANGUAGE_VERSION" category="GLES2.0"/>
</desc>
</template>
@@ -3674,8 +3679,6 @@
<function name="GetUniformfvARB" template="GetUniform" gltype="GLfloat"/>
<function name="GetUniformivARB" template="GetUniform" gltype="GLint"/>
- <function name="QueryMatrixx" template="QueryMatrix" gltype="GLfixed"/>
-
<function name="DrawTexf" template="DrawTex" gltype="GLfloat" expand_vector="true"/>
<function name="DrawTexfv" template="DrawTex" gltype="GLfloat"/>
<function name="DrawTexi" template="DrawTex" gltype="GLint" expand_vector="true"/>
diff --git a/src/mesa/es/main/APIspecutil.py b/src/mesa/es/main/APIspecutil.py
index 5bfb699ba73..27a8fe8a6d4 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 0d6f7410c30..15b6ad36173 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 545c46ca99c..db53a1449f3 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 349e0faa35c..590f5940a7b 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 "}"