This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Overhead of the Driver

We found that when DrawCall used in the product becomes a lot, the API call overhead of the OpenGL ES of the CPU end will be high. This part should be the overhead of Driver. But we don't know what is expensive to overhead for a DrawCall. So we can only rebound through non-stop testing. Although we have tested some conclusions. But we are not very confirmed, they are correct. So, I want to ask a professional:

1.what is the main overhead of the Driver?

2.If you can do a proportion of overhead according to the type, what is the rough proportional situation? For example: Texture, FBO, Vertex, UBO, Uniform, Shader, TBO ... If sorted, what is the order?

3.Also, these overhead mentioned above is related to the specific parameters? Such as the size, number, etc.

Parents
  • Hi Shawn, 

    Draw calls are the most expensive path in the driver (excepting bulk data upload and shader compile and link), as they commit state to the rendering pipeline. For most mobile devices aim for ~500 draw calls a frame, but you can go higher than that on a high-end device (at the expense of CPU load and CPU power consumption). Use offline static batching, instancing, etc, to get the draw call count down as much as you can.

    Draw calls get more expensive when you change state (texture bindings, attribute bindings, enable settings, etc) as more of the descriptors need to be rebuilt before the draw can be processed, so aim to minimize state changes between draw calls. Creating texture atlases, etc, is often needed to minimize state changes.

    Cheers, 
    Pete

Reply
  • Hi Shawn, 

    Draw calls are the most expensive path in the driver (excepting bulk data upload and shader compile and link), as they commit state to the rendering pipeline. For most mobile devices aim for ~500 draw calls a frame, but you can go higher than that on a high-end device (at the expense of CPU load and CPU power consumption). Use offline static batching, instancing, etc, to get the draw call count down as much as you can.

    Draw calls get more expensive when you change state (texture bindings, attribute bindings, enable settings, etc) as more of the descriptors need to be rebuilt before the draw can be processed, so aim to minimize state changes between draw calls. Creating texture atlases, etc, is often needed to minimize state changes.

    Cheers, 
    Pete

Children