Systems and methods for scheduling coprocessing resources in a computing
system are provided without redesigning the coprocessor. In various
embodiments, a system of preemptive multitasking is provided achieving
benefits over cooperative multitasking by any one or more of (1)
executing rendering commands sent to the coprocessor in a different order
than they were submitted by applications; (2) preempting the coprocessor
during scheduling of non-interruptible hardware; (3) allowing user mode
drivers to build work items using command buffers in a way that does not
compromise security; (4) preparing DMA buffers for execution while the
coprocessor is busy executing a previously prepared DMA buffer; (5)
resuming interrupted DMA buffers; and (6) reducing the amount of memory
needed to run translated DMA buffers.