En XBOX ONE Executionindirect tiene algunas extensiones increibles donde PSOs pueden ser intercambiados por "indirect arguments", lo que significa qu puede lanzar un solo Executionindirect para una escena completa, independientemente del estado o los cambios de recursos.
Recordad que los CP de ONE están customizados.
We also took the opportunity to go and highly customise the command processor on the GPU.
http://www.eurogamer.net/articles/digit ... -interview
En PC, los drivers parchean los"compute shaders", donde la id es cargada en un registro para que los shaders tenga una referencia por llamada. En OpenGL puedes usar gl_draw con esta finalidad. El microcodigo del command procesor de XBOX ONE maneja "indirect draws" sin pasos intermedios o parches lo que es extremadamente optimo.
XBOX ONE soporta el cambio de PSOs por "multi draw packet" con Executionindirect! Esto significa que podemos lanzar un solo "batch", independientemente de las diferencias de PSO, y reducir aun mñas el cuello de botella. No puedo detacar lo increible que es esta característica, y defenitivamente la utilizaremos en adelante.