Mesa (master): r600g: use modulo for computing index into query (ring) buffers
Marek Olšák
mareko at kemper.freedesktop.org
Tue Nov 8 23:19:02 UTC 2011
Module: Mesa
Branch: master
Commit: 8187ad07546cae0ae91255c665315f86b03367a9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8187ad07546cae0ae91255c665315f86b03367a9
Author: Marek Olšák <maraeo at gmail.com>
Date: Tue Nov 8 23:05:36 2011 +0100
r600g: use modulo for computing index into query (ring) buffers
---
src/gallium/drivers/r600/r600_hw_context.c | 19 +++++--------------
1 files changed, 5 insertions(+), 14 deletions(-)
diff --git a/src/gallium/drivers/r600/r600_hw_context.c b/src/gallium/drivers/r600/r600_hw_context.c
index c854307..6e3080d 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -1640,9 +1640,7 @@ void r600_query_begin(struct r600_context *ctx, struct r600_query *query)
r600_context_flush(ctx, RADEON_FLUSH_ASYNC);
}
- new_results_end = query->results_end + query->result_size;
- if (new_results_end >= query->buffer->b.b.b.width0)
- new_results_end = 0;
+ new_results_end = (query->results_end + query->result_size) % query->buffer->b.b.b.width0;
/* collect current results if query buffer is full */
if (new_results_end == query->results_start) {
@@ -1718,10 +1716,7 @@ void r600_query_end(struct r600_context *ctx, struct r600_query *query)
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_NOP, 0, 0);
ctx->pm4[ctx->pm4_cdwords++] = r600_context_bo_reloc(ctx, query->buffer, RADEON_USAGE_WRITE);
- query->results_end += query->result_size;
- if (query->results_end >= query->buffer->b.b.b.width0)
- query->results_end = 0;
-
+ query->results_end = (query->results_end + query->result_size) % query->buffer->b.b.b.width0;
ctx->num_query_running--;
}
@@ -1741,10 +1736,7 @@ void r600_query_predication(struct r600_context *ctx, struct r600_query *query,
u32 op;
/* find count of the query data blocks */
- count = query->buffer->b.b.b.width0 + query->results_end - query->results_start;
- if (count >= query->buffer->b.b.b.width0) {
- count -= query->buffer->b.b.b.width0;
- }
+ count = (query->buffer->b.b.b.width0 + query->results_end - query->results_start) % query->buffer->b.b.b.width0;
count /= query->result_size;
if (ctx->pm4_cdwords + 5 * count > ctx->pm4_ndwords)
@@ -1761,9 +1753,8 @@ void r600_query_predication(struct r600_context *ctx, struct r600_query *query,
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_NOP, 0, 0);
ctx->pm4[ctx->pm4_cdwords++] = r600_context_bo_reloc(ctx, query->buffer,
RADEON_USAGE_READ);
- results_base += query->result_size;
- if (results_base >= query->buffer->b.b.b.width0)
- results_base = 0;
+ results_base = (results_base + query->result_size) % query->buffer->b.b.b.width0;
+
/* set CONTINUE bit for all packets except the first */
op |= PREDICATION_CONTINUE;
}
More information about the mesa-commit
mailing list