Order independent asynchronous compute and streaming for graphics
An embodiment of an electronic processing system may include an application processor, persistent storage media communicatively coupled to the application processor, and a graphics subsystem communicatively coupled to the application processor. The system may include one or more of a draw call re-orderer communicatively coupled to the application processor and the graphics subsystem to re-order two or more draw calls, a workload re-orderer communicatively coupled to the application processor and the graphics subsystem to re-order two or more work items in an order independent mode, a queue primitive included in at least one of the two or more draw calls to define a producer stage and a consumer stage, and an order-independent executor communicatively coupled to the application processor and the graphics subsystem to provide tile-based order independent execution of a compute stage. Other embodiments are disclosed and claimed.
1. At least one non-transitory computer readable medium, comprising a set of instructions, which when executed by a computing device, cause the computing device to:
determine an order dependency between two or more draw calls;
re-order the two or more draw calls based on the determined order dependency; and
re-order two or more work items in an order independent mode, wherein the order independent mode is made in response to a guarantee of memory dependency, when the guarantee is made for a particular phase of rendering in a first mode of operation and for an entire application in a different second mode of operation.
2. The at least one non-transitory computer readable medium of claim 1 , wherein the set of instructions, which when executed by the computing device, cause the computing device to:
provide tile-based order independent execution after performing the re-order of the two or more draw calls; and
perform a full screen resolve pass to resolve one or more out-of-order issues caused in the order independent mode, wherein the full screen resolve pass is performed after performance of the tile-based order independent execution.
3. The at least one non-transitory computer readable medium of claim 1 , wherein the set of instructions, which when executed by the computing device, cause the computing device to:
determine a resource requirement and data address range for the two or more draw calls.
4. The at least one non-transitory computer readable medium of claim 1 , wherein the set of instructions, which when executed by the computing device, cause the computing device to:
determine that no data dependency is violated when the two or more draw calls are reordered; and
schedule draw calls that use same address ranges next to each other in response to a determination that no data dependency is violated when the two or more draw calls are reordered, wherein scheduling includes re-ordering the two or more draw calls to ensure that a draw call that uses data produced by another draw call is directly re-ordered after the another draw call.
5. The at least one non-transitory computer readable medium of claim 1 , wherein the set of instructions, which when executed by the computing device, cause the computing device to:
determine a work split for the two or more work items; and
re-order the two or more work items based on the determined work split.
6. The at least one non-transitory computer readable medium of claim 1 , wherein the set of instructions, which when executed by the computing device, cause the computing device to:
include a queue primitive in at least one of the two or more draw calls to define a producer stage and a consumer stage; and
alternate execution of the producer stage and the consumer stage in accordance with the queue primitive.
7. The at least one non-transitory computer readable medium of claim 1 , wherein the set of instructions, which when executed by the computing device, cause the computing device to:
dispatch work asynchronously on a tile basis to a render context and a compute context.
8. A method of re-ordering draw calls, comprising:
determining an order dependency between two or more draw calls;
re-ordering the two or more draw calls based on the determined order dependency; and
re-ordering two or more work items in an order independent mode, wherein the order independent mode is made in response to a guarantee of memory dependency, when the guarantee is made for a particular phase of rendering in a first mode of operation and for an entire application in a different second mode of operation.
9. The method of claim 8 , further comprising:
providing tile-based order independent execution after performing the re-order of the two or more draw calls; and
performing a full screen resolve pass to resolve one or more out-of-order issues caused in the order independent mode, wherein the full screen resolve pass is performed after performance of the tile-based order independent execution.
10. The method of claim 8 , further comprising:
determining a resource requirement and data address range for the two or more draw calls.
11. The method of claim 8 , further comprising:
determining that no data dependency is violated when the two or more draw calls are reordered; and
scheduling draw calls that use same address ranges next to each other in response to a determination that no data dependency is violated when the two or more draw calls are reordered, wherein scheduling includes re-ordering the two or more draw calls to ensure that a draw call that uses data produced by another draw call is directly re-ordered after the another draw call.
12. The method of claim 8 , further comprising:
determining a work split for the two or more work items; and
re-ordering the two or more work items based on the determined work split.
13. The method of claim 8 , further comprising:
including a queue primitive in at least one of the two or more draw calls to define a producer stage and a consumer stage; and
alternating execution of the producer stage and the consumer stage in accordance with the queue primitive.
14. The method of claim 8 , further comprising:
dispatch work asynchronously on a tile basis to a render context and a compute context.
15. An apparatus for graphics data processing, the apparatus comprising:
a memory, the memory including executable program instructions for a graphics driver, which when executed by one or more processors, cause the one or more processors to:
determine an order dependency between two or more draw calls;
re-order the two or more draw calls based on the determined order dependency; and
re-order two or more work items in an order independent mode, wherein the order independent mode is made in response to a guarantee of memory dependency, when the guarantee is made for a particular phase of rendering in a first mode of operation and for an entire application in a different second mode of operation.
16. The apparatus of claim 15 , wherein the executable program instructions, which when executed by the one or more processors, cause the one or more processors to:
determine a resource requirement and data address range for the two or more draw calls.
17. The apparatus of claim 15 , wherein the executable program instructions, which when executed by the one or more processors, cause the one or more processors to:
determine that no data dependency is violated when the two or more draw calls are reordered; and
schedule draw calls that use same address ranges next to each other in response to a determination that no data dependency is violated when the two or more draw calls are reordered, wherein scheduling includes re-ordering the two or more draw calls to ensure that a draw call that uses data produced by another draw call is directly re-ordered after the another draw call.
18. The apparatus of claim 15 , wherein the executable program instructions, which when executed by the one or more processors, cause the one or more processors to:
determine a work split for the two or more work items; and
re-order the two or more work items based on the determined work split.
19. The apparatus of claim 15 , wherein the executable program instructions, which when executed by the one or more processors, cause the one or more processors to:
include a queue primitive in at least one of the two or more draw calls to define a producer stage and a consumer stage; and
alternate execution of the producer stage and the consumer stage in accordance with the queue primitive.
20. The apparatus of claim 15 , wherein the executable program instructions, which when executed by the one or more processors, cause the one or more processors to:
dispatch work asynchronously on a tile basis to a render context and a compute context.