Hello!
I'm reading these tutorials and in some point it says:
QuoteThe graphics pipeline takes as input a set of 3D coordinates and transforms these to colored 2D pixels on your screen. The graphics pipeline can be divided into several steps where each step requires the output of the previous step as its input. All of these steps are highly specialized (they have one specific function) and can easily be executed in parallel. Because of their parallel nature, graphics cards of today have thousands of small processing cores to quickly process your data within the graphics pipeline by running small programs on the GPU for each step of the pipeline. These small programs are called shaders.
I'm confused here. How can each step require the output of the previous step as it's input but they can also run in parallel? I mean, while the vertex shader is running how can the fragment shader for example run at the same time? It must wait until all the previous steps in the pipeline has finished in order to to get the input from the rasterizer and then run.
Does he mean that each pipeline process can run in parallel but each process must finish in a linear way step by step? This is the only that make sense to me.
Until now I was imagining that each draw call is actually instantiating a new pipeline process and each of these processes can run in parallel. Also I was imagining gl draw calls (like glDrawElements() ) like non blocking calls.
So which one is the truth?
Thank you