[PATCH 4/6] wined3d: Introduce get_query_result64() helper function.
Józef Kucia
jkucia at codeweavers.com
Sun Jun 4 17:47:37 CDT 2017
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
Alternatively, we could try to simply require OpenGL 3.3 or
ARB_timer_query for statistics queries...
---
dlls/wined3d/query.c | 118 +++++++++++++++------------------------------------
1 file changed, 34 insertions(+), 84 deletions(-)
diff --git a/dlls/wined3d/query.c b/dlls/wined3d/query.c
index cf12c74..2af2048 100644
--- a/dlls/wined3d/query.c
+++ b/dlls/wined3d/query.c
@@ -25,6 +25,22 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
+static UINT64 get_query_result64(GLuint id, const struct wined3d_gl_info *gl_info)
+{
+ if (gl_info->supported[ARB_TIMER_QUERY])
+ {
+ GLuint64 result;
+ GL_EXTCALL(glGetQueryObjectui64v(id, GL_QUERY_RESULT, &result));
+ return result;
+ }
+ else
+ {
+ GLuint result;
+ GL_EXTCALL(glGetQueryObjectuiv(id, GL_QUERY_RESULT, &result));
+ return result;
+ }
+}
+
static void wined3d_query_init(struct wined3d_query *query, struct wined3d_device *device,
enum wined3d_query_type type, const void *data, DWORD data_size,
const struct wined3d_query_ops *query_ops, void *parent, const struct wined3d_parent_ops *parent_ops)
@@ -374,28 +390,15 @@ static BOOL wined3d_occlusion_query_ops_poll(struct wined3d_query *query, DWORD
gl_info = context->gl_info;
GL_EXTCALL(glGetQueryObjectuiv(oq->id, GL_QUERY_RESULT_AVAILABLE, &available));
- checkGLcall("glGetQueryObjectuiv(GL_QUERY_RESULT_AVAILABLE)");
- TRACE("available %#x.\n", available);
+ TRACE("Available %#x.\n", available);
if (available)
{
- if (gl_info->supported[ARB_TIMER_QUERY])
- {
- GLuint64 result;
- GL_EXTCALL(glGetQueryObjectui64v(oq->id, GL_QUERY_RESULT, &result));
- checkGLcall("glGetQueryObjectui64v(GL_QUERY_RESULT)");
- oq->samples = result;
- }
- else
- {
- GLuint result;
- GL_EXTCALL(glGetQueryObjectuiv(oq->id, GL_QUERY_RESULT, &result));
- checkGLcall("glGetQueryObjectuiv(GL_QUERY_RESULT)");
- oq->samples = result;
- }
+ oq->samples = get_query_result64(oq->id, gl_info);
TRACE("Returning 0x%s samples.\n", wine_dbgstr_longlong(oq->samples));
}
+ checkGLcall("poll occlusion query");
context_release(context);
return available;
@@ -640,22 +643,8 @@ static BOOL wined3d_so_statistics_query_ops_poll(struct wined3d_query *query, DW
if (written_available && generated_available)
{
- if (gl_info->supported[ARB_TIMER_QUERY])
- {
- GLuint64 result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.written, GL_QUERY_RESULT, &result));
- pq->statistics.primitives_written = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.generated, GL_QUERY_RESULT, &result));
- pq->statistics.primitives_generated = result;
- }
- else
- {
- GLuint result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.written, GL_QUERY_RESULT, &result));
- pq->statistics.primitives_written = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.generated, GL_QUERY_RESULT, &result));
- pq->statistics.primitives_generated = result;
- }
+ pq->statistics.primitives_written = get_query_result64(pq->u.query.written, gl_info);
+ pq->statistics.primitives_generated = get_query_result64(pq->u.query.generated, gl_info);
TRACE("Returning %s, %s primitives.\n",
wine_dbgstr_longlong(pq->statistics.primitives_written),
wine_dbgstr_longlong(pq->statistics.primitives_generated));
@@ -758,63 +747,24 @@ static BOOL wined3d_pipeline_query_ops_poll(struct wined3d_query *query, DWORD f
{
GL_EXTCALL(glGetQueryObjectuiv(pq->u.id[i], GL_QUERY_RESULT_AVAILABLE, &available));
if (!available)
- goto done;
+ break;
}
- if (gl_info->supported[ARB_TIMER_QUERY])
- {
- GLuint64 result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.vertices, GL_QUERY_RESULT, &result));
- pq->statistics.vertices_submitted = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.primitives, GL_QUERY_RESULT, &result));
- pq->statistics.primitives_submitted = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.vertex_shader, GL_QUERY_RESULT, &result));
- pq->statistics.vs_invocations = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.tess_control_shader, GL_QUERY_RESULT, &result));
- pq->statistics.hs_invocations = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.tess_eval_shader, GL_QUERY_RESULT, &result));
- pq->statistics.ds_invocations = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.geometry_shader, GL_QUERY_RESULT, &result));
- pq->statistics.gs_invocations = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.geometry_primitives, GL_QUERY_RESULT, &result));
- pq->statistics.gs_primitives = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.fragment_shader, GL_QUERY_RESULT, &result));
- pq->statistics.ps_invocations = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.compute_shader, GL_QUERY_RESULT, &result));
- pq->statistics.cs_invocations = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.clipping_input, GL_QUERY_RESULT, &result));
- pq->statistics.clipping_input_primitives = result;
- GL_EXTCALL(glGetQueryObjectui64v(pq->u.query.clipping_output, GL_QUERY_RESULT, &result));
- pq->statistics.clipping_output_primitives = result;
- }
- else
+ if (available)
{
- GLuint result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.vertices, GL_QUERY_RESULT, &result));
- pq->statistics.vertices_submitted = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.primitives, GL_QUERY_RESULT, &result));
- pq->statistics.primitives_submitted = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.vertex_shader, GL_QUERY_RESULT, &result));
- pq->statistics.vs_invocations = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.tess_control_shader, GL_QUERY_RESULT, &result));
- pq->statistics.hs_invocations = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.tess_eval_shader, GL_QUERY_RESULT, &result));
- pq->statistics.ds_invocations = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.geometry_shader, GL_QUERY_RESULT, &result));
- pq->statistics.gs_invocations = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.geometry_primitives, GL_QUERY_RESULT, &result));
- pq->statistics.gs_primitives = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.fragment_shader, GL_QUERY_RESULT, &result));
- pq->statistics.ps_invocations = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.compute_shader, GL_QUERY_RESULT, &result));
- pq->statistics.cs_invocations = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.clipping_input, GL_QUERY_RESULT, &result));
- pq->statistics.clipping_input_primitives = result;
- GL_EXTCALL(glGetQueryObjectuiv(pq->u.query.clipping_output, GL_QUERY_RESULT, &result));
- pq->statistics.clipping_output_primitives = result;
+ pq->statistics.vertices_submitted = get_query_result64(pq->u.query.vertices, gl_info);
+ pq->statistics.primitives_submitted = get_query_result64(pq->u.query.primitives, gl_info);
+ pq->statistics.vs_invocations = get_query_result64(pq->u.query.vertex_shader, gl_info);
+ pq->statistics.hs_invocations = get_query_result64(pq->u.query.tess_control_shader, gl_info);
+ pq->statistics.ds_invocations = get_query_result64(pq->u.query.tess_eval_shader, gl_info);
+ pq->statistics.gs_invocations = get_query_result64(pq->u.query.geometry_shader, gl_info);
+ pq->statistics.gs_primitives = get_query_result64(pq->u.query.geometry_primitives, gl_info);
+ pq->statistics.ps_invocations = get_query_result64(pq->u.query.fragment_shader, gl_info);
+ pq->statistics.cs_invocations = get_query_result64(pq->u.query.compute_shader, gl_info);
+ pq->statistics.clipping_input_primitives = get_query_result64(pq->u.query.clipping_input, gl_info);
+ pq->statistics.clipping_output_primitives = get_query_result64(pq->u.query.clipping_output, gl_info);
}
-done:
checkGLcall("poll pipeline statistics query");
context_release(context);
return available;
--
2.10.2
More information about the wine-patches
mailing list