gallium: add a timestamp disjoint query
allows application to not only request the frequency of the TIME_ELAPSED clock but also to detect if that frequency was consistent throughout the entire bracketed range of graphics commands.
This commit is contained in:
@@ -39,7 +39,6 @@
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_prim.h"
|
||||
|
||||
#define MAX_PRIM_VERTICES 6
|
||||
/* fixme: move it from here */
|
||||
#define MAX_PRIMITIVES 64
|
||||
|
||||
@@ -76,6 +75,7 @@ draw_gs_set_constants(struct draw_context *draw,
|
||||
const void *constants,
|
||||
unsigned size)
|
||||
{
|
||||
/* noop */
|
||||
}
|
||||
|
||||
|
||||
|
@@ -59,7 +59,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_GPU_FINISHED);
|
||||
type == PIPE_QUERY_GPU_FINISHED ||
|
||||
type == PIPE_QUERY_TIMESTAMP_DISJOINT);
|
||||
sq = CALLOC_STRUCT( softpipe_query );
|
||||
sq->type = type;
|
||||
|
||||
@@ -93,6 +94,7 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
|
||||
break;
|
||||
case PIPE_QUERY_GPU_FINISHED:
|
||||
break;
|
||||
case PIPE_QUERY_TIMESTAMP_DISJOINT:
|
||||
default:
|
||||
assert(0);
|
||||
break;
|
||||
@@ -123,6 +125,7 @@ softpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
|
||||
softpipe->so_stats.primitives_storage_needed;
|
||||
break;
|
||||
case PIPE_QUERY_GPU_FINISHED:
|
||||
case PIPE_QUERY_TIMESTAMP_DISJOINT:
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
@@ -149,6 +152,15 @@ softpipe_get_query_result(struct pipe_context *pipe,
|
||||
case PIPE_QUERY_GPU_FINISHED:
|
||||
*result = TRUE;
|
||||
break;
|
||||
case PIPE_QUERY_TIMESTAMP_DISJOINT: {
|
||||
struct pipe_query_data_timestamp_disjoint td;
|
||||
/*os_get_time is in microseconds*/
|
||||
td.frequency = 1000000;
|
||||
td.disjoint = FALSE;
|
||||
memcpy(vresult, &sq->so,
|
||||
sizeof(struct pipe_query_data_timestamp_disjoint));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
*result = sq->end - sq->start;
|
||||
break;
|
||||
|
@@ -383,7 +383,8 @@ enum pipe_transfer_usage {
|
||||
#define PIPE_QUERY_TIME_ELAPSED 3
|
||||
#define PIPE_QUERY_SO_STATISTICS 5
|
||||
#define PIPE_QUERY_GPU_FINISHED 6
|
||||
#define PIPE_QUERY_TYPES 7
|
||||
#define PIPE_QUERY_TIMESTAMP_DISJOINT 7
|
||||
#define PIPE_QUERY_TYPES 8
|
||||
|
||||
|
||||
/**
|
||||
@@ -508,6 +509,11 @@ struct pipe_query_data_so_statistics
|
||||
uint64_t num_primitives_written;
|
||||
uint64_t primitives_storage_needed;
|
||||
};
|
||||
struct pipe_query_data_timestamp_disjoint
|
||||
{
|
||||
uint64_t frequency;
|
||||
boolean disjoint;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Reference in New Issue
Block a user