From 4f34c0f53fd75f26ecf523b6faf06bfff186e33e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Dalleau?= Date: Thu, 19 Sep 2013 19:12:33 +0200 Subject: [PATCH] VirtioGL: Global cache for glGet values MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Frédéric Dalleau Change-Id: I768a601107188405520fe956f925bf86e74afbb8 --- libGL/client_gl.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libGL/client_gl.c b/libGL/client_gl.c index 6e40e71..a11fa5f 100755 --- a/libGL/client_gl.c +++ b/libGL/client_gl.c @@ -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; \ -- 2.7.4