freedreno: hw timestamp support

If the kernel supports it, use hw counter for timestamps.

Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
Rob Clark 2016-02-23 12:03:43 -05:00 committed by Rob Clark
parent 6a4b052820
commit b888d8e937
3 changed files with 16 additions and 3 deletions

View File

@ -74,7 +74,7 @@ LIBDRM_AMDGPU_REQUIRED=2.4.63
LIBDRM_INTEL_REQUIRED=2.4.61
LIBDRM_NVVIEUX_REQUIRED=2.4.66
LIBDRM_NOUVEAU_REQUIRED=2.4.66
LIBDRM_FREEDRENO_REQUIRED=2.4.67
LIBDRM_FREEDRENO_REQUIRED=2.4.68
LIBDRM_VC4_REQUIRED=2.4.69
DRI2PROTO_REQUIRED=2.6
DRI3PROTO_REQUIRED=1.0

View File

@ -109,8 +109,18 @@ fd_screen_get_device_vendor(struct pipe_screen *pscreen)
static uint64_t
fd_screen_get_timestamp(struct pipe_screen *pscreen)
{
int64_t cpu_time = os_time_get() * 1000;
return cpu_time + fd_screen(pscreen)->cpu_gpu_time_delta;
struct fd_screen *screen = fd_screen(pscreen);
if (screen->has_timestamp) {
uint64_t n;
fd_pipe_get_param(screen->pipe, FD_TIMESTAMP, &n);
debug_assert(screen->max_freq > 0);
return n * 1000000000 / screen->max_freq;
} else {
int64_t cpu_time = os_time_get() * 1000;
return cpu_time + screen->cpu_gpu_time_delta;
}
}
static void
@ -595,6 +605,8 @@ fd_screen_create(struct fd_device *dev)
screen->max_freq = 0;
} else {
screen->max_freq = val;
if (fd_pipe_get_param(screen->pipe, FD_TIMESTAMP, &val) == 0)
screen->has_timestamp = true;
}
if (fd_pipe_get_param(screen->pipe, FD_GPU_ID, &val)) {

View File

@ -58,6 +58,7 @@ struct fd_screen {
uint32_t chip_id; /* coreid:8 majorrev:8 minorrev:8 patch:8 */
uint32_t max_freq;
uint32_t max_rts; /* max # of render targets */
bool has_timestamp;
void *compiler; /* currently unused for a2xx */