iris: Add a more long term TODO about timebase scaling
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 14 Dec 2018 08:51:00 +0000 (00:51 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:11 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_query.c

index 242bd5e64ae5afc1dd262113fb7f804032f66bd7..9739369dd741f412f83131c28d273e6223443727 100644 (file)
@@ -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));
    }
 }