From 3ab3aa23c2ec30015e27952c253a9d559346be37 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 14 Dec 2018 00:51:00 -0800 Subject: [PATCH] iris: Add a more long term TODO about timebase scaling --- src/gallium/drivers/iris/iris_query.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gallium/drivers/iris/iris_query.c b/src/gallium/drivers/iris/iris_query.c index 242bd5e64ae..9739369dd74 100644 --- a/src/gallium/drivers/iris/iris_query.c +++ b/src/gallium/drivers/iris/iris_query.c @@ -623,10 +623,15 @@ calculate_result_on_gpu(struct iris_context *ice, struct iris_query *q) if (q->type == PIPE_QUERY_TIMESTAMP) { ice->vtbl.load_register_mem64(batch, CS_GPR(0), q->bo, offsetof(struct iris_query_snapshots, start)); + /* TODO: This discards any fractional bits of the timebase scale. + * We would need to do a bit of fixed point math on the CS ALU, or + * launch an actual shader to calculate this with full precision. + */ emit_mul_gpr0(batch, (1000000000ull / screen->devinfo.timestamp_frequency)); keep_gpr0_lower_n_bits(ice, 36); return; } + ice->vtbl.load_register_mem64(batch, CS_GPR(1), q->bo, offsetof(struct iris_query_snapshots, start)); ice->vtbl.load_register_mem64(batch, CS_GPR(2), q->bo, @@ -646,6 +651,7 @@ calculate_result_on_gpu(struct iris_context *ice, struct iris_query *q) gpr0_to_bool(ice); if (q->type == PIPE_QUERY_TIME_ELAPSED) { + /* TODO: This discards fractional bits (see above). */ emit_mul_gpr0(batch, (1000000000ull / screen->devinfo.timestamp_frequency)); } } -- 2.30.2