GPU: Difference between revisions

Gdkchan (talk | contribs)
Created page with "==Mapping Memory== First, to map a memory region on the GPU Address Space, caching needs to be disabled by using svcSetMemoryAttribute. The Addr..."
 
Gdkchan (talk | contribs)
No edit summary
Line 97: Line 97:
* Then, QUERY_SEQUENCE is added with a sequential number. This number is basically a incrementing counter, so the first Command List can have QUERY_SEQUENCE = 1, the next one QUERY_SEQUENCE = 2, 3, 4... and so on.
* Then, QUERY_SEQUENCE is added with a sequential number. This number is basically a incrementing counter, so the first Command List can have QUERY_SEQUENCE = 1, the next one QUERY_SEQUENCE = 2, 3, 4... and so on.
* Finally, QUERY_GET is added and contains the mode and other unknown data.
* Finally, QUERY_GET is added and contains the mode and other unknown data.
The above commands are added using the Sequential Mode, since the Ids for all those 4 registers are sequential.


====QUERY_GET Structure====
====QUERY_GET Structure====
Line 139: Line 141:
Some of the other fields are still unknown/unobserved.
Some of the other fields are still unknown/unobserved.


Official games will set Mode to 0, Fence to 1 and Unit to 0xF. The QUERY_SEQUENCE value is then written to the address pointed to by QUERY_ADDRESS.
Official games will set Mode to 0, Fence to 1 and Unit to 0xF. The QUERY_SEQUENCE value is then written by the GPU to the address pointed to by QUERY_ADDRESS.
On the CPU side, the game code should wait until the value at the address pointed to by QUERY_ADDRESS is >= to the last written SEQUENCE value. Official code waits for this condition to be true on a loop, and won't send any further commands before that.
On the CPU side, the game code should wait until the value at the address pointed to by QUERY_ADDRESS is >= to the last written SEQUENCE value. Official code waits for this condition to be true on a loop, and won't send any further commands before that.