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:
parent
6a4b052820
commit
b888d8e937
|
@ -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
|
||||
|
|
|
@ -109,8 +109,18 @@ fd_screen_get_device_vendor(struct pipe_screen *pscreen)
|
|||
static uint64_t
|
||||
fd_screen_get_timestamp(struct pipe_screen *pscreen)
|
||||
{
|
||||
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 + fd_screen(pscreen)->cpu_gpu_time_delta;
|
||||
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)) {
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Reference in New Issue