summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2010-06-21 22:11:07 -0400
committerZack Rusin <[email protected]>2010-06-22 12:58:04 -0400
commitb6c360b46c2b2b1548e2aeaa1a1cd201dfcf82ae (patch)
tree44e06c8181539078332e3375b723ed98218154d0 /src/gallium
parent583f241716639ae7fc24eca38418d5860de229cb (diff)
gallium: add a new query
to figure out if gpu is finished with all of the previously issues commands
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/softpipe/sp_query.c12
-rw-r--r--src/gallium/include/pipe/p_defines.h3
2 files changed, 12 insertions, 3 deletions
diff --git a/src/gallium/drivers/softpipe/sp_query.c b/src/gallium/drivers/softpipe/sp_query.c
index 245f1b554c9..9328334c5c4 100644
--- a/src/gallium/drivers/softpipe/sp_query.c
+++ b/src/gallium/drivers/softpipe/sp_query.c
@@ -58,7 +58,8 @@ softpipe_create_query(struct pipe_context *pipe,
assert(type == PIPE_QUERY_OCCLUSION_COUNTER ||
type == PIPE_QUERY_TIME_ELAPSED ||
- type == PIPE_QUERY_SO_STATISTICS);
+ type == PIPE_QUERY_SO_STATISTICS ||
+ type == PIPE_QUERY_GPU_FINISHED);
sq = CALLOC_STRUCT( softpipe_query );
sq->type = type;
@@ -78,7 +79,7 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
{
struct softpipe_context *softpipe = softpipe_context( pipe );
struct softpipe_query *sq = softpipe_query(q);
-
+
switch (sq->type) {
case PIPE_QUERY_OCCLUSION_COUNTER:
sq->start = softpipe->occlusion_count;
@@ -90,6 +91,8 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
sq->so.num_primitives_written = 0;
sq->so.primitives_storage_needed = 0;
break;
+ case PIPE_QUERY_GPU_FINISHED:
+ break;
default:
assert(0);
break;
@@ -119,6 +122,8 @@ softpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
sq->so.primitives_storage_needed =
softpipe->so_stats.primitives_storage_needed;
break;
+ case PIPE_QUERY_GPU_FINISHED:
+ break;
default:
assert(0);
break;
@@ -141,6 +146,9 @@ softpipe_get_query_result(struct pipe_context *pipe,
memcpy(vresult, &sq->so,
sizeof(struct pipe_query_data_so_statistics));
break;
+ case PIPE_QUERY_GPU_FINISHED:
+ *result = TRUE;
+ break;
default:
*result = sq->end - sq->start;
break;
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 85551cac25a..b3a53c262de 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -382,7 +382,8 @@ enum pipe_transfer_usage {
#define PIPE_QUERY_PRIMITIVES_EMITTED 2
#define PIPE_QUERY_TIME_ELAPSED 3
#define PIPE_QUERY_SO_STATISTICS 5
-#define PIPE_QUERY_TYPES 6
+#define PIPE_QUERY_GPU_FINISHED 6
+#define PIPE_QUERY_TYPES 7
/**