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. | ||