VirtioGL: Global cache for glGet values
authorFrédéric Dalleau <frederic.dalleau@linux.intel.com>
Thu, 19 Sep 2013 17:12:33 +0000 (19:12 +0200)
committerFrédéric Dalleau <frederic.dalleau@linux.intel.com>
Thu, 19 Sep 2013 17:22:11 +0000 (19:22 +0200)
Signed-off-by: Frédéric Dalleau <frederic.dalleau@linux.intel.com>
Change-Id: I768a601107188405520fe956f925bf86e74afbb8

libGL/client_gl.c

index 6e40e71..a11fa5f 100755 (executable)
@@ -620,8 +620,15 @@ static int get_size_get_boolean_integer_float_double_v(int func_number, int pnam
       (mode == GL_MODELVIEW1_ARB) ? 3 + NB_MAX_TEXTURES : \
       (mode >= GL_MODELVIEW2_ARB && mode <= GL_MODELVIEW31_ARB) ? 4 + NB_MAX_TEXTURES + mode - GL_MODELVIEW2_ARB : -1)
 
-static int maxTextureSize = -1; /* optimization for ppracer */
-static int maxTextureUnits = -1;
+#define MAXIMUM_VALUE_DECL(val) static int max_##val = -1;
+#define MAXIMUM_VALUE_CASE(val) case val:\
+        if (max_##val == -1) max_##val = _glGetIntegerv(pname); *params = max_##val;\
+        if (debug_gl) fprintf(stderr, "returning %d for %s\n", max_##val, #val);\
+        break;
+
+MAXIMUM_VALUE_DECL(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB);
+MAXIMUM_VALUE_DECL(GL_MAX_TEXTURE_SIZE);
+MAXIMUM_VALUE_DECL(GL_MAX_TEXTURE_UNITS_ARB);
 
 static int _glGetIntegerv(GLenum pname)
 {
@@ -724,8 +731,9 @@ void CONCAT(funcName,_no_lock)( GLenum pname, cType *params ) \
     } \
     case GL_ARRAY_BUFFER_BINDING: *params = state->arrayBuffer; break; \
     case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: *params = state->elementArrayBuffer; break; \
-    case GL_MAX_TEXTURE_SIZE: if (maxTextureSize == -1) maxTextureSize = _glGetIntegerv(pname); *params = maxTextureSize; break; \
-    case GL_MAX_TEXTURE_UNITS_ARB: if (maxTextureUnits == -1) maxTextureUnits = _glGetIntegerv(pname); *params = maxTextureUnits; break; \
+    MAXIMUM_VALUE_CASE(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB);\
+    MAXIMUM_VALUE_CASE(GL_MAX_TEXTURE_SIZE);\
+    MAXIMUM_VALUE_CASE(GL_MAX_TEXTURE_UNITS_ARB);\
     case GL_MODELVIEW_MATRIX: \
     case GL_PROJECTION_MATRIX: \
     case GL_TEXTURE_MATRIX: AFFECT_N(params, state->matrix[pname - GL_MODELVIEW_MATRIX].current.val, 16); break; \