From: Vasily Golubev Date: Thu, 21 Aug 2014 11:51:37 +0000 (+0400) Subject: YaGL: Fix hangling of GL_QUERY_RESULT flag X-Git-Tag: TizenStudio_2.0_p3.0~208 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4a692492e4e9d11e8905b16e5866ad6b39f49ae1;p=sdk%2Femulator%2Fqemu.git YaGL: Fix hangling of GL_QUERY_RESULT flag 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 --- diff --git a/hw/yagl/yagl_apis/gles/yagl_gles_calls.c b/hw/yagl/yagl_apis/gles/yagl_gles_calls.c index bf7ab91..bc7d978 100644 --- a/hw/yagl/yagl_apis/gles/yagl_gles_calls.c +++ b/hw/yagl/yagl_apis/gles/yagl_gles_calls.c @@ -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); } diff --git a/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.c b/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.c index 11bb2d4..9fc9439 100644 --- a/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.c +++ b/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.c @@ -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; diff --git a/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.h b/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.h index 028cb3a..8148444 100644 --- a/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.h +++ b/hw/yagl/yagl_apis/gles/yagl_host_gles_calls.h @@ -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);