I’m dissapointed towards where graphics cards are going. Specially now that larrabee is cancelled. To put it simple, why can’t i do everything my rendering thread does entirely on the GPU? OpenCL and OpenGL are both heading towards being simple and flexible, but i still can’t seem to do that.
So let’s see… how does the usual basic render thread looks like?
- Frustum Culling
- Occlusion optimizations (portals/visibility grid/etc.)
- Batching (by wathever you have to bind)
- Rendering
there’s more stuff like shadows, postprocessing, but that’s not relevant to my point.
Basically, what i mean is, doing all this entirely on the GPU (NO CPU!)
-
Frustum culling can be easily done on the GPU. The GPU is so parallel that even a brute force frustum culling of a million objects would do.
-
Occlusion optimizations would easily be solved pretty well on the GPU by just doing a near->far depth sort and querying/rendering a zpass (query visible/discard visible). GPUs can already do this pretty quickly. However, i’m not sure if this would be doable. However, grid-based visibility and portals would definitely be doable. Well, don’t mind this point so much anyway.
-
Batching is pretty much just sorting, and GPUs can also do this extremely efficiently
-
I think command buffers nowadays mean you can have a pool of data that the GPU will interpret and follow. So i guess it should be able to render too. But i don’t really think that works as they exist.
So nowadays, i guess the main issue would be between points 3) and 4)… the only way to render what i came up in 3) would be going to the CPU and back, which is just too slow.
So my humble question is, i think right now there’s stuff i don’t have in both OpenGL and OpenCL to be able to do all the rendering logic in the GPU… so my question is more like… why are GPUs not heading this way? Is there anything i’m missing?