summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2011-11-20 03:43:11 +0100
committerMarek Olšák <[email protected]>2011-11-20 16:24:12 +0100
commita18dad8055b452595a1ddece7da912ab67a850af (patch)
tree9b5a2792bde53e40026aafe68d5334500443c1aa /src
parent4cfc8c775c751dd2b2b43f3ca58ae9798a84c0f1 (diff)
r300g: use u_vbuf_mgr to set/get the index buffer
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/r300/r300_context.h2
-rw-r--r--src/gallium/drivers/r300/r300_render.c22
-rw-r--r--src/gallium/drivers/r300/r300_state.c12
3 files changed, 12 insertions, 24 deletions
diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h
index 08353567f44..4909b7e7540 100644
--- a/src/gallium/drivers/r300/r300_context.h
+++ b/src/gallium/drivers/r300/r300_context.h
@@ -546,8 +546,6 @@ struct r300_context {
/* Vertex elements for Gallium. */
struct r300_vertex_element_state *velems;
- struct pipe_index_buffer index_buffer;
-
/* Vertex info for Draw. */
struct vertex_info vertex_info;
diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index 9d980813b4c..84cabc0bac3 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -509,7 +509,7 @@ static void r300_draw_elements_immediate(struct r300_context *r300,
uint8_t *ptr1;
uint16_t *ptr2;
uint32_t *ptr4;
- unsigned index_size = r300->index_buffer.index_size;
+ unsigned index_size = r300->vbuf_mgr->index_buffer.index_size;
unsigned i, count_dwords = index_size == 4 ? info->count :
(info->count + 1) / 2;
CS_LOCALS(r300);
@@ -527,7 +527,7 @@ static void r300_draw_elements_immediate(struct r300_context *r300,
switch (index_size) {
case 1:
- ptr1 = r300_resource(r300->index_buffer.buffer)->b.user_ptr;
+ ptr1 = r300_resource(r300->vbuf_mgr->index_buffer.buffer)->b.user_ptr;
ptr1 += info->start;
OUT_CS(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (info->count << 16) |
@@ -551,7 +551,7 @@ static void r300_draw_elements_immediate(struct r300_context *r300,
break;
case 2:
- ptr2 = (uint16_t*)r300_resource(r300->index_buffer.buffer)->b.user_ptr;
+ ptr2 = (uint16_t*)r300_resource(r300->vbuf_mgr->index_buffer.buffer)->b.user_ptr;
ptr2 += info->start;
OUT_CS(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (info->count << 16) |
@@ -570,7 +570,7 @@ static void r300_draw_elements_immediate(struct r300_context *r300,
break;
case 4:
- ptr4 = (uint32_t*)r300_resource(r300->index_buffer.buffer)->b.user_ptr;
+ ptr4 = (uint32_t*)r300_resource(r300->vbuf_mgr->index_buffer.buffer)->b.user_ptr;
ptr4 += info->start;
OUT_CS(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (info->count << 16) |
@@ -592,8 +592,8 @@ static void r300_draw_elements(struct r300_context *r300,
const struct pipe_draw_info *info,
int instance_id)
{
- struct pipe_resource *indexBuffer = r300->index_buffer.buffer;
- unsigned indexSize = r300->index_buffer.index_size;
+ struct pipe_resource *indexBuffer = r300->vbuf_mgr->index_buffer.buffer;
+ unsigned indexSize = r300->vbuf_mgr->index_buffer.index_size;
struct pipe_resource* orgIndexBuffer = indexBuffer;
unsigned start = info->start;
unsigned count = info->count;
@@ -744,7 +744,7 @@ static void r300_draw_vbo(struct pipe_context* pipe,
struct r300_context* r300 = r300_context(pipe);
struct pipe_draw_info info = *dinfo;
- info.indexed = info.indexed && r300->index_buffer.buffer;
+ info.indexed = info.indexed && r300->vbuf_mgr->index_buffer.buffer;
if (r300->skip_rendering ||
!u_trim_pipe_prim(info.mode, &info.count)) {
@@ -760,12 +760,12 @@ static void r300_draw_vbo(struct pipe_context* pipe,
/* Draw. */
if (info.indexed) {
- info.start += r300->index_buffer.offset;
+ info.start += r300->vbuf_mgr->index_buffer.offset / r300->vbuf_mgr->index_buffer.index_size;
info.max_index = MIN2(r300->vbuf_mgr->max_index, info.max_index);
if (info.instance_count <= 1) {
if (info.count <= 8 &&
- r300_resource(r300->index_buffer.buffer)->b.user_ptr) {
+ r300_resource(r300->vbuf_mgr->index_buffer.buffer)->b.user_ptr) {
r300_draw_elements_immediate(r300, &info);
} else {
r300_draw_elements(r300, &info, -1);
@@ -802,7 +802,7 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe,
struct pipe_transfer *ib_transfer = NULL;
int i;
void *indices = NULL;
- boolean indexed = info->indexed && r300->index_buffer.buffer;
+ boolean indexed = info->indexed && r300->vbuf_mgr->index_buffer.buffer;
if (r300->skip_rendering) {
return;
@@ -827,7 +827,7 @@ static void r300_swtcl_draw_vbo(struct pipe_context* pipe,
}
if (indexed) {
- indices = pipe_buffer_map(pipe, r300->index_buffer.buffer,
+ indices = pipe_buffer_map(pipe, r300->vbuf_mgr->index_buffer.buffer,
PIPE_TRANSFER_READ |
PIPE_TRANSFER_UNSYNCHRONIZED, &ib_transfer);
}
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index 11282a45e0f..10d7ac285d3 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -1604,17 +1604,7 @@ static void r300_set_index_buffer(struct pipe_context* pipe,
{
struct r300_context* r300 = r300_context(pipe);
- if (ib && ib->buffer) {
- assert(ib->offset % ib->index_size == 0);
-
- pipe_resource_reference(&r300->index_buffer.buffer, ib->buffer);
- memcpy(&r300->index_buffer, ib, sizeof(r300->index_buffer));
- r300->index_buffer.offset /= r300->index_buffer.index_size;
- }
- else {
- pipe_resource_reference(&r300->index_buffer.buffer, NULL);
- memset(&r300->index_buffer, 0, sizeof(r300->index_buffer));
- }
+ u_vbuf_set_index_buffer(r300->vbuf_mgr, ib);
if (!r300->screen->caps.has_tcl) {
draw_set_index_buffer(r300->draw, ib);