diff options
Diffstat (limited to 'src/core/hle')
-rw-r--r-- | src/core/hle/service/gsp.cpp | 8 | ||||
-rw-r--r-- | src/core/hle/service/gsp.h | 8 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/core/hle/service/gsp.cpp b/src/core/hle/service/gsp.cpp index 05753fa2c..b20203e27 100644 --- a/src/core/hle/service/gsp.cpp +++ b/src/core/hle/service/gsp.cpp @@ -171,6 +171,9 @@ void TriggerCmdReqQueue(Service::Interface* self) { command.dma_request.size); break; + // ctrulib homebrew sends all relevant command list data with this command, + // hence we do all "interesting" stuff here and do nothing in SET_COMMAND_LIST_FIRST. + // TODO: This will need some rework in the future. case GXCommandId::SET_COMMAND_LIST_LAST: { auto& params = command.set_command_list_last; @@ -186,6 +189,8 @@ void TriggerCmdReqQueue(Service::Interface* self) { break; } + // It's assumed that the two "blocks" behave equivalently. + // Presumably this is done simply to allow two memory fills to run in parallel. case GXCommandId::SET_MEMORY_FILL: { auto& params = command.memory_fill; @@ -218,9 +223,10 @@ void TriggerCmdReqQueue(Service::Interface* self) { break; } + // TODO: Figure out what exactly SET_COMMAND_LIST_FIRST and SET_COMMAND_LIST_LAST + // are supposed to do. case GXCommandId::SET_COMMAND_LIST_FIRST: { - // TODO break; } diff --git a/src/core/hle/service/gsp.h b/src/core/hle/service/gsp.h index f36afb697..a83cb4846 100644 --- a/src/core/hle/service/gsp.h +++ b/src/core/hle/service/gsp.h @@ -15,9 +15,17 @@ namespace GSP_GPU { enum class GXCommandId : u32 { REQUEST_DMA = 0x00, SET_COMMAND_LIST_LAST = 0x01, + + // Fills a given memory range with a particular value SET_MEMORY_FILL = 0x02, + + // Copies an image and optionally performs color-conversion or scaling. + // This is highly similar to the GameCube's EFB copy feature SET_DISPLAY_TRANSFER = 0x03, + + // Conceptionally similar to SET_DISPLAY_TRANSFER and presumable uses the same hardware path SET_TEXTURE_COPY = 0x04, + SET_COMMAND_LIST_FIRST = 0x05, }; |