mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-19 04:30:25 +01:00
r300: Always emit LOAD_VBPNTR immediately before index-based rendering
This fixes one type of lockup I've been seeing on my test system.
This commit is contained in:
parent
9bc9e0ecb0
commit
477fa8fe12
1 changed files with 12 additions and 1 deletions
|
|
@ -269,13 +269,24 @@ static void r300RunRenderPrimitive(r300ContextPtr rmesa, GLcontext * ctx,
|
|||
return;
|
||||
|
||||
if (vb->Elts) {
|
||||
r300EmitAOS(rmesa, rmesa->state.aos_count, start);
|
||||
if (num_verts > 65535) {
|
||||
/* not implemented yet */
|
||||
WARN_ONCE("Too many elts\n");
|
||||
return;
|
||||
}
|
||||
/* Note: The following is incorrect, but it's the best I can do
|
||||
* without a major refactoring of how DMA memory is handled.
|
||||
* The problem: Ensuring that both vertex arrays *and* index
|
||||
* arrays are at the right position, and then ensuring that
|
||||
* the LOAD_VBPNTR, DRAW_INDX and INDX_BUFFER packets are emitted
|
||||
* at once.
|
||||
*
|
||||
* So why is the following incorrect? Well, it seems like
|
||||
* allocating the index array might actually evict the vertex
|
||||
* arrays. *sigh*
|
||||
*/
|
||||
r300EmitElts(ctx, vb->Elts, num_verts);
|
||||
r300EmitAOS(rmesa, rmesa->state.aos_count, start);
|
||||
r300FireEB(rmesa, rmesa->state.elt_dma.aos_offset, num_verts, type);
|
||||
} else {
|
||||
r300EmitAOS(rmesa, rmesa->state.aos_count, start);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue