Mesa (master): r600g: fix index buffer drawing

Jerome Glisse glisse at kemper.freedesktop.org
Mon Sep 27 14:01:46 UTC 2010


Module: Mesa
Branch: master
Commit: 58a31758e3b8249b12f0e797034bec235343aa15
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=58a31758e3b8249b12f0e797034bec235343aa15

Author: Jerome Glisse <jglisse at redhat.com>
Date:   Mon Sep 27 09:01:55 2010 -0400

r600g: fix index buffer drawing

Signed-off-by: Jerome Glisse <jglisse at redhat.com>

---

 src/gallium/drivers/r600/evergreen_state.c |    3 ++-
 src/gallium/drivers/r600/r600_state2.c     |    5 +++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
index b0b0f5c..89f7c7f 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1349,6 +1349,7 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)
 	draw.start = info->start;
 	draw.count = info->count;
 	if (info->indexed && rctx->index_buffer.buffer) {
+		draw.start += rctx->index_buffer.offset / rctx->index_buffer.index_size;
 		draw.min_index = info->min_index;
 		draw.max_index = info->max_index;
 		draw.index_bias = info->index_bias;
@@ -1495,7 +1496,7 @@ void evergreen_draw(struct pipe_context *ctx, const struct pipe_draw_info *info)
 	if (draw.index_buffer) {
 		rbuffer = (struct r600_resource*)draw.index_buffer;
 		rdraw.indices = rbuffer->bo;
-		rdraw.indices_bo_offset = 0;
+		rdraw.indices_bo_offset = draw.index_buffer_offset;
 	}
 	evergreen_context_draw(&rctx->ctx, &rdraw);
 }
diff --git a/src/gallium/drivers/r600/r600_state2.c b/src/gallium/drivers/r600/r600_state2.c
index e5b2dc9..8bf8d24 100644
--- a/src/gallium/drivers/r600/r600_state2.c
+++ b/src/gallium/drivers/r600/r600_state2.c
@@ -589,7 +589,7 @@ static void r600_draw_common(struct r600_drawl *draw)
 	if (draw->index_buffer) {
 		rbuffer = (struct r600_resource*)draw->index_buffer;
 		rdraw.indices = rbuffer->bo;
-		rdraw.indices_bo_offset = 0;
+		rdraw.indices_bo_offset = draw->index_buffer_offset;
 	}
 	r600_context_draw(&rctx->ctx, &rdraw);
 }
@@ -636,6 +636,7 @@ static void r600_draw_vbo2(struct pipe_context *ctx, const struct pipe_draw_info
 	draw.start = info->start;
 	draw.count = info->count;
 	if (info->indexed && rctx->index_buffer.buffer) {
+		draw.start += rctx->index_buffer.offset / rctx->index_buffer.index_size;
 		draw.min_index = info->min_index;
 		draw.max_index = info->max_index;
 		draw.index_bias = info->index_bias;
@@ -677,7 +678,7 @@ static void r600_flush2(struct pipe_context *ctx, unsigned flags,
 
 #if 0
 	sprintf(dname, "gallium-%08d.bof", dc);
-	if (dc < 4) {
+	if (dc < 20) {
 		r600_context_dump_bof(&rctx->ctx, dname);
 		R600_ERR("dumped %s\n", dname);
 	}




More information about the mesa-commit mailing list