]> git.cworth.org Git - apitrace/commitdiff
gles: sanity check GL_COMBINED_TEXTURE_IMAGE_UNITS
authorImre Deak <imre.deak@intel.com>
Mon, 9 Apr 2012 16:35:41 +0000 (19:35 +0300)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Thu, 12 Apr 2012 21:59:26 +0000 (22:59 +0100)
At least the Android software GL implementation doesn't return the
proper value for this, but rather returns 0. The GL(ES) specification
mandates a minimum value of 2, so use this as a fall-back value.

Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: José Fonseca <jose.r.fonseca@gmail.com>
glstate_images.cpp
glstate_params.py

index 2c7c66b407dae4192199b09f72bb05d51e8e98f4..2d70d99b382d84b481fa7a5e3b5925f0b3431857 100644 (file)
@@ -425,11 +425,20 @@ dumpTextures(JSONWriter &json, Context &context)
     json.beginObject();
     GLint active_texture = GL_TEXTURE0;
     glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture);
+
     GLint max_texture_coords = 0;
     glGetIntegerv(GL_MAX_TEXTURE_COORDS, &max_texture_coords);
     GLint max_combined_texture_image_units = 0;
     glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_combined_texture_image_units);
     GLint max_units = std::max(max_combined_texture_image_units, max_texture_coords);
+
+    /*
+     * At least the Android software GL implementation doesn't return the
+     * proper value for this, but rather returns 0. The GL(ES) specification
+     * mandates a minimum value of 2, so use this as a fall-back value.
+     */
+    max_units = std::min(max_units, 2);
+
     for (GLint unit = 0; unit < max_units; ++unit) {
         GLenum texture = GL_TEXTURE0 + unit;
         glActiveTexture(texture);
index ad8e25887c25ed17e62ee9d599c291fbd40441df..7c29932bbf66b872e70e0320880d9560c6e64f55 100644 (file)
@@ -392,7 +392,7 @@ class StateDumper:
         print '        glGetIntegerv(GL_MAX_TEXTURE_COORDS, &max_texture_coords);'
         print '        GLint max_combined_texture_image_units = 0;'
         print '        glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_combined_texture_image_units);'
-        print '        GLint max_units = std::max(max_combined_texture_image_units, max_texture_coords);'
+        print '        GLint max_units = std::min(std::max(max_combined_texture_image_units, max_texture_coords), 2);'
         print '        for (GLint unit = 0; unit < max_units; ++unit) {'
         print '            char name[32];'
         print '            snprintf(name, sizeof name, "GL_TEXTURE%i", unit);'