| # About |
| |
| Because ANGLE can only generate full HLSL programs after we known the signatures |
| between the vertex and pixel stages, we can not immediately call the D3D |
| compiler at GL shader compile time. Moreover, we can insert additional |
| optimization code right at draw-time. |
| |
| ESSL 1.00 shaders treat all vertex inputs as floating point. We insert a |
| conversion routine to transform un-normalized integer vertex attributes in the |
| shader preamble to floating point, saving CPU conversion time. |
| |
| At draw-time, we also optimize out any unused render target outputs. This |
| improved draw call performance significantly on lower spec and integrated |
| devices. Changing render target setups may trigger a shader recompile at draw |
| time. |
| |
| # Addendum |
| |
| ANGLE is not the only program to do this kind of draw-time optimization. A |
| common complaint from application developers is that draw calls sometimes |
| perform very slowly due to dynamic shader re-compilation. A future design |
| direction for ANGLE, when targeting a more modern API, is to perform the vertex |
| conversion in a separate shader pass, which would then be linked with another |
| compiled shader. |