A method for rendering primitives in parallel, the method comprising: receiving primitives in a first order, the primitives encoded as a list of vertex indices; dividing the received primitives into a plurality of different batches; distributing the primitives for parallel processing in object-space to produce multiple streams, each stream including object-space processed primitive descriptors that represent individual primitives; routing the multiple streams of object-space processed primitive descriptors based on screen-space positions to produce a first stream of processed primitive descriptors representing primitives that intersect a first portion of a screen and a second stream of processed primitive descriptors representing primitives that intersect a second portion of the screen; reordering the object-space processed primitive descriptors in the first stream to match the first order, producing a reordered first stream of object-space processed primitive descriptors; reordering the object-space processed primitive descriptors in the second stream to match the first order, producing a reordered second stream of object-space processed primitive descriptors; and rasterizing the primitives that intersect the first portion of the screen, and are represented by the first stream of object-space processed primitive descriptors, and the primitives that intersect the second portion of the screen, and are represented by the second stream of object-space processed primitive descriptors, in parallel to produce rasterized pixels of an image, wherein the first stream comprises object-space processed primitive descriptors corresponding to two or more batches of the received primitives, wherein the two or more batches of primitives are processed at different rates, whereby the output order of the two or more batches is different from the first order, and wherein reordering the object-space processed primitive descriptors in the first stream comprises reordering the output order of the two or more batches to match the first order. receiving primitives in a first order, the primitives encoded as a list of vertex indices; dividing the received primitives into a plurality of different batches; distributing the primitives for parallel processing in object-space to produce multiple streams, each stream including object-space processed primitive descriptors that represent individual primitives; routing the multiple streams of object-space processed primitive descriptors based on screen-space positions to produce a first stream of processed primitive descriptors representing primitives that intersect a first portion of a screen and a second stream of processed primitive descriptors representing primitives that intersect a second portion of the screen; reordering the object-space processed primitive descriptors in the first stream to match the first order, producing a reordered first stream of object-space processed primitive descriptors; reordering the object-space processed primitive descriptors in the second stream to match the first order, producing a reordered second stream of object-space processed primitive descriptors; and rasterizing the primitives that intersect the first portion of the screen, and are represented by the first stream of object-space processed primitive descriptors, and the primitives that intersect the second portion of the screen, and are represented by the second stream of object-space processed primitive descriptors, in parallel to produce rasterized pixels of an image, wherein the first stream comprises object-space processed primitive descriptors corresponding to two or more batches of the received primitives, wherein the two or more batches of primitives are processed at different rates, whereby the output order of the two or more batches is different from the first order, and wherein reordering the object-space processed primitive descriptors in the first stream comprises reordering the output order of the two or more batches to match the first order.