YaGL: Fix hangling of GL_QUERY_RESULT flag
authorVasily Golubev <v.golubev@samsung.com>
Thu, 21 Aug 2014 11:51:37 +0000 (15:51 +0400)
committerVasiliy Ulyanov <v.ulyanov@samsung.com>
Tue, 19 May 2015 08:48:07 +0000 (11:48 +0300)
In the case of calling glGetQueryObjectuiv() with
GL_QUERY_RESULT flag we must wait while passed
samples counter will be available

Change-Id: I545223b6cac7778b29ff7140718c0f67e6961708
Signed-off-by: Vasily Golubev <v.golubev@samsung.com>
hw/yagl/yagl_apis/gles/yagl_gles_calls.c
hw/yagl/yagl_apis/gles/yagl_host_gles_calls.c
hw/yagl/yagl_apis/gles/yagl_host_gles_calls.h

index bf7ab91..bc7d978 100644 (file)
@@ -3135,13 +3135,15 @@ static void yagl_func_glEndQuery(struct yagl_transport *t)
 static void yagl_func_glGetQueryObjectuiv(struct yagl_transport *t)
 {
     GLuint id;
+    GLenum pname;
     GLuint *result;
     GLboolean *retval;
     id = yagl_transport_get_out_GLuint(t);
+    pname = yagl_transport_get_out_GLenum(t);
     yagl_transport_get_in_arg(t, (void**)&result);
     yagl_transport_get_in_arg(t, (void**)&retval);
-    YAGL_LOG_FUNC_ENTER_SPLIT2(glGetQueryObjectuiv, GLuint, void*, id, result);
-    *retval = yagl_host_glGetQueryObjectuiv(id, result);
+    YAGL_LOG_FUNC_ENTER_SPLIT3(glGetQueryObjectuiv, GLuint, GLenum, void*, id, pname, result);
+    *retval = yagl_host_glGetQueryObjectuiv(id, pname, result);
     YAGL_LOG_FUNC_EXIT_SPLIT(GLboolean, *retval);
 }
 
index 11bb2d4..9fc9439 100644 (file)
@@ -2834,15 +2834,19 @@ void yagl_host_glEndQuery(GLenum target)
 }
 
 GLboolean yagl_host_glGetQueryObjectuiv(GLuint id,
-    GLuint *result)
+    GLenum pname, GLuint *result)
 {
     GLuint obj = yagl_gles_object_get(id);
     GLuint tmp = 0;
 
-    gles_api_ts->driver->GetQueryObjectuiv(obj, GL_QUERY_RESULT_AVAILABLE, &tmp);
-
-    if (tmp) {
+    if (pname == GL_QUERY_RESULT_AVAILABLE) {
+        gles_api_ts->driver->GetQueryObjectuiv(obj, GL_QUERY_RESULT_AVAILABLE, &tmp);
+        if (tmp) {
+            gles_api_ts->driver->GetQueryObjectuiv(obj, GL_QUERY_RESULT, result);
+        }
+    } else {
         gles_api_ts->driver->GetQueryObjectuiv(obj, GL_QUERY_RESULT, result);
+        tmp = GL_TRUE;
     }
 
     return tmp;
index 028cb3a..8148444 100644 (file)
@@ -647,7 +647,7 @@ void yagl_host_glBeginQuery(GLenum target,
     GLuint id);
 void yagl_host_glEndQuery(GLenum target);
 GLboolean yagl_host_glGetQueryObjectuiv(GLuint id,
-    GLuint *result);
+    GLenum pname, GLuint *result);
 void yagl_host_glGenSamplers(const GLuint *samplers, int32_t samplers_count);
 void yagl_host_glBindSampler(GLuint unit,
     GLuint sampler);