GPU: Difference between revisions
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..." |
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. | ||