During the Holidays, a hacker group leaked out the Xbox One SDK along with its complete documentation. The documentation revealed a few interesting tidbits such as Microsoft giving a 7th CPU core for developers to use and the different kind of updates such as graphics driver optimization that the Xbox One has received in the past. However it seems there are more details in the documentation, specifically related to the Xbox One’s GPU.
Discovered by a user on Beyond3d forum who pasted text from what seems to be from the SDK documentation, it has been revealed that the Xbox One GPU has eight graphics contexts. For those who are unaware, a graphics context consists of all drawing parameters and information to carry out commands related to drawing. It essentially consists of basic information such as color, width of the line, styling data and other relevant data. The Xbox One allocates seven of such graphics contexts to games.
It was also revealed that the console supports multiple GPU command streams which consists of instructions for rendering and compute. Both commands pass through the GPU simultaneously which allows to have two parallel processes of compute and rendering work, which share the same bandwidth resources. This results into a low latency exchange between GPU and CPU. However we are not sure whether developers can explicitly push one task type ahead of the other or whether the GPU automatically prioritizes the queue elements.
It must be noted that we are not sure whether the PlayStation 4 follows a similar implementation as the Xbox One. It will be rather intriguing to know how the PS4 reduces latency during CPU-GPU exchange.
Moving ahead. The document also revealed about how developers can use command lists and draw bundles to improve CPU performance, however these two methods won’t help much if a game is GPU bound. Both methods are recorded using deferred context. Deferred context is essentially keeping records of graphics commands in a command buffer so that they can be used at some other time as per requirement.
So if a game has already entered in rendering mode, but there are other rendering tasks which can be run parallely, developers can use deferred context using another CPU thread. The commands are then recorded and are executed using immediate rendering later. This same process can be supported multiple times over multiple CPU threads, thereby improving performance.