GSP Shared Memory: Difference between revisions
Steveice10 (talk | contribs) |
|||
(9 intermediate revisions by 4 users not shown) | |||
Line 105: | Line 105: | ||
=Commands= | =Commands= | ||
== | == Trigger DMA Request == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 127: | Line 127: | ||
|- | |- | ||
| 7 | | 7 | ||
| | | Flush source (0 = don't flush, 1 = flush) | ||
|} | |} | ||
This command is normally used to DMA data from the application GSP [[Memory_layout|heap]] to VRAM. | This command is normally used to DMA data from the application GSP [[Memory_layout|heap]] to VRAM. When flushing is enabled and the source buffer is not located within VRAM, svcFlushProcessDataCache is used to flush the source buffer. | ||
== | == Trigger Command List Processing == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 148: | Line 148: | ||
|- | |- | ||
| 3 | | 3 | ||
| | | Update gas additive blend results (0 = don't update, 1 = update) | ||
|- | |- | ||
| 6-4 | | 6-4 | ||
Line 154: | Line 154: | ||
|- | |- | ||
| 7 | | 7 | ||
| | | Flush buffer (0 = don't flush, 1 = flush) | ||
|} | |} | ||
This command converts the specified address to a physical address, then writes the physical address and size to the [[GPU]] registers at 0x1EF018E0. This buffer contains [[ | This command converts the specified address to a physical address, then writes the physical address and size to the [[GPU]] registers at 0x1EF018E0. This buffer contains [[GPU/Internal_Registers|GPU commands]]. When flushing is enabled, svcFlushProcessDataCache is used to flush the buffer. | ||
== | == Trigger Memory Fill == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 187: | Line 187: | ||
|- | |- | ||
| 7 | | 7 | ||
| | | Control0 <nowiki>|</nowiki> (Control1 << 16) | ||
|} | |} | ||
This | This command converts the specified addresses to physical addresses, then writes these addresses and the specified parameters to the [[GPU]] registers at 0x1EF00010 and 0x1EF00020. Doing so fills the specified buffers with the associated 4-byte value. This is used to clear GPU framebuffers. | ||
The associated buffer address must not be <= to the main buffer address, thus the associated buffer address must not be zero as well. When the bufX address is zero, processing for the bufX parameters is skipped. | The associated buffer address must not be <= to the main buffer address, thus the associated buffer address must not be zero as well. When the bufX address is zero, processing for the bufX parameters is skipped. | ||
== | The values of Control0 and Control1 give information about the type of memory fill. See [[GPU/External_Registers#Memory Fill|here]] for more information about memory fill parameters. | ||
== Trigger Display Transfer == | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 229: | Line 231: | ||
Some color formats seem to require specific input / output sizes when performing a display transfer, doing an RGB5A1->RGBA4 display transfer would never fire the PPF interrupt with a 32x32 buffer, increasing the buffer to 128x128 made it fire correctly. | Some color formats seem to require specific input / output sizes when performing a display transfer, doing an RGB5A1->RGBA4 display transfer would never fire the PPF interrupt with a 32x32 buffer, increasing the buffer to 128x128 made it fire correctly. | ||
== | == Trigger Texture Copy == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 239: | Line 241: | ||
|- | |- | ||
| 1 | | 1 | ||
| Input buffer address | | Input buffer address. | ||
|- | |- | ||
| 2 | | 2 | ||
| Output buffer address | | Output buffer address. | ||
|- | |- | ||
| 3 | | 3 | ||
| | | Total bytes to copy, not including gaps. | ||
|- | |- | ||
| 4 | | 4 | ||
| | | Bits 0-15: Size of input line, in bytes. Bits 16-31: Gap between input lines, in bytes. | ||
|- | |- | ||
| 5 | | 5 | ||
| | | Same as 4, but for the output. | ||
|- | |- | ||
| 6 | | 6 | ||
| Flags, | | Flags, corresponding to the [[GPU/External_Registers#Transfer_Engine|Transfer Engine flags]]. However, for TextureCopy commands, bit 3 is always set, bit 2 is set if any output dimension is smaller than the input, and other bits are always 0. | ||
|- | |- | ||
| 7 | | 7 | ||
Line 260: | Line 262: | ||
|} | |} | ||
This command is similar to cmd3 | This command is similar to cmd3. It also triggers the [[GPU/External_Registers#Transfer_Engine|GPU Transfer Engine]], but setting the TextureCopy parameters. | ||
== | == Flush Cache Regions == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- |