diff options
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_draw.h')
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_draw.h | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_draw.h b/src/gallium/drivers/freedreno/freedreno_draw.h index b293f73b82e..4a922d9ca3b 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.h +++ b/src/gallium/drivers/freedreno/freedreno_draw.h @@ -74,18 +74,25 @@ fd_draw(struct fd_batch *batch, struct fd_ringbuffer *ring, OUT_RING(ring, 0); } - OUT_PKT3(ring, CP_DRAW_INDX, idx_buffer ? 5 : 3); - OUT_RING(ring, 0x00000000); /* viz query info. */ - if (vismode == USE_VISIBILITY) { - /* leave vis mode blank for now, it will be patched up when - * we know if we are binning or not - */ - OUT_RINGP(ring, DRAW(primtype, src_sel, idx_type, 0, instances), - &batch->draw_patches); + if (is_a20x(batch->ctx->screen)) { + OUT_PKT3(ring, CP_DRAW_INDX, idx_buffer ? 4 : 2); + OUT_RING(ring, 0x00000000); + OUT_RING(ring, DRAW_A20X(primtype, src_sel, idx_type, vismode, count)); } else { - OUT_RING(ring, DRAW(primtype, src_sel, idx_type, vismode, instances)); + OUT_PKT3(ring, CP_DRAW_INDX, idx_buffer ? 5 : 3); + OUT_RING(ring, 0x00000000); /* viz query info. */ + if (vismode == USE_VISIBILITY) { + /* leave vis mode blank for now, it will be patched up when + * we know if we are binning or not + */ + OUT_RINGP(ring, DRAW(primtype, src_sel, idx_type, 0, instances), + &batch->draw_patches); + } else { + OUT_RING(ring, DRAW(primtype, src_sel, idx_type, vismode, instances)); + } + OUT_RING(ring, count); /* NumIndices */ } - OUT_RING(ring, count); /* NumIndices */ + if (idx_buffer) { OUT_RELOC(ring, fd_resource(idx_buffer)->bo, idx_offset, 0, 0); OUT_RING (ring, idx_size); |