Using SDMA instead of slow CP DMA restored performance, though we might also consider using a compute shader instead of SDMA, because the compute shader can always be asynchronous to graphics in this case (SDMA isn't asynchronous due to the IB dependency).