diff options
author | Marek Olšák <maraeo@gmail.com> | 2010-05-26 20:59:46 +0200 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2010-05-26 22:22:52 +0200 |
commit | 3a6fd21917b7fb5a96bb60cd963f481ac5f989a6 (patch) | |
tree | a51678a49b197983945db4fe23d93820c2e4861b /src | |
parent | 55a6d3743436fb811dfa1825aabff82fb6610c04 (diff) |
r300g/swtcl: force vertex prefetching for non-indexed primitives
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/r300/r300_emit.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_emit.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_render.c | 7 |
3 files changed, 7 insertions, 6 deletions
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c index 40e7b4cb603..123b084b2b4 100644 --- a/src/gallium/drivers/r300/r300_emit.c +++ b/src/gallium/drivers/r300/r300_emit.c @@ -864,7 +864,7 @@ void r300_emit_aos(struct r300_context* r300, unsigned offset, boolean indexed) END_CS; } -void r300_emit_aos_swtcl(struct r300_context *r300) +void r300_emit_aos_swtcl(struct r300_context *r300, boolean indexed) { CS_LOCALS(r300); @@ -880,7 +880,7 @@ void r300_emit_aos_swtcl(struct r300_context *r300) */ BEGIN_CS(7); OUT_CS_PKT3(R300_PACKET3_3D_LOAD_VBPNTR, 3); - OUT_CS(1); + OUT_CS(1 | (!indexed ? R300_VC_FORCE_PREFETCH : 0)); OUT_CS(r300->vertex_info.size | (r300->vertex_info.size << 8)); OUT_CS(r300->vbo_offset); diff --git a/src/gallium/drivers/r300/r300_emit.h b/src/gallium/drivers/r300/r300_emit.h index da05aff45b1..55e5898ea89 100644 --- a/src/gallium/drivers/r300/r300_emit.h +++ b/src/gallium/drivers/r300/r300_emit.h @@ -76,7 +76,7 @@ void r300_emit_scissor_state(struct r300_context* r300, void r300_emit_textures_state(struct r300_context *r300, unsigned size, void *state); -void r300_emit_aos_swtcl(struct r300_context *r300); +void r300_emit_aos_swtcl(struct r300_context *r300, boolean indexed); void r300_emit_vertex_stream_state(struct r300_context* r300, unsigned size, void* state); diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index 041ae8036b6..a5d129449e6 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -191,7 +191,7 @@ static void r300_prepare_for_rendering(struct r300_context *r300, if (emit_aos) r300_emit_aos(r300, aos_offset, flags & PREP_INDEXED); if (emit_aos_swtcl) - r300_emit_aos_swtcl(r300); + r300_emit_aos_swtcl(r300, flags & PREP_INDEXED); } } @@ -997,8 +997,9 @@ static void r500_render_draw_elements(struct vbuf_render* render, CS_LOCALS(r300); - r300_prepare_for_rendering(r300, PREP_FIRST_DRAW | PREP_EMIT_AOS_SWTCL, - NULL, dwords, 0, 0); + r300_prepare_for_rendering(r300, + PREP_FIRST_DRAW | PREP_EMIT_AOS_SWTCL | PREP_INDEXED, + NULL, dwords, 0, 0); BEGIN_CS(dwords); OUT_CS_REG(R300_GA_COLOR_CONTROL, |