From: Marek Olšák Date: Wed, 26 May 2010 18:59:46 +0000 (+0200) Subject: r300g/swtcl: force vertex prefetching for non-indexed primitives X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3a6fd21917b7fb5a96bb60cd963f481ac5f989a6;p=mesa.git r300g/swtcl: force vertex prefetching for non-indexed primitives --- 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,