summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/iris/iris_query.c
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2018-12-14 00:51:00 -0800
committerKenneth Graunke <[email protected]>2019-02-21 10:26:11 -0800
commit3ab3aa23c2ec30015e27952c253a9d559346be37 (patch)
treed91956492c414e1be8d2441f6b125d493fcc552c /src/gallium/drivers/iris/iris_query.c
parent7ddc1f8dedd181cff37f4fdae72a0967c5914915 (diff)
iris: Add a more long term TODO about timebase scaling
Diffstat (limited to 'src/gallium/drivers/iris/iris_query.c')
-rw-r--r--src/gallium/drivers/iris/iris_query.c6
1 files changed, 6 insertions, 0 deletions
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));
}
}