summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/gsp_gpu.cpp
diff options
context:
space:
mode:
authorYuri Kunde Schlesner <yuriks@yuriks.net>2015-09-08 00:22:44 +0200
committerYuri Kunde Schlesner <yuriks@yuriks.net>2015-09-14 21:19:05 +0200
commit1ed7f3e0281de29fd99f7d4802fcc5a1906930f8 (patch)
tree33034d2a72224e6b134c7e8b51ab8b1b9e882900 /src/core/hle/service/gsp_gpu.cpp
parentMerge pull request #1152 from lioncash/nullptr (diff)
downloadyuzu-1ed7f3e0281de29fd99f7d4802fcc5a1906930f8.tar
yuzu-1ed7f3e0281de29fd99f7d4802fcc5a1906930f8.tar.gz
yuzu-1ed7f3e0281de29fd99f7d4802fcc5a1906930f8.tar.bz2
yuzu-1ed7f3e0281de29fd99f7d4802fcc5a1906930f8.tar.lz
yuzu-1ed7f3e0281de29fd99f7d4802fcc5a1906930f8.tar.xz
yuzu-1ed7f3e0281de29fd99f7d4802fcc5a1906930f8.tar.zst
yuzu-1ed7f3e0281de29fd99f7d4802fcc5a1906930f8.zip
Diffstat (limited to 'src/core/hle/service/gsp_gpu.cpp')
-rw-r--r--src/core/hle/service/gsp_gpu.cpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/core/hle/service/gsp_gpu.cpp b/src/core/hle/service/gsp_gpu.cpp
index c3d0d28a5..481da0c9f 100644
--- a/src/core/hle/service/gsp_gpu.cpp
+++ b/src/core/hle/service/gsp_gpu.cpp
@@ -377,12 +377,16 @@ static void ExecuteCommand(const Command& command, u32 thread_id) {
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 CommandId::SET_COMMAND_LIST_LAST:
+ // TODO: This will need some rework in the future. (why?)
+ case CommandId::SUBMIT_GPU_CMDLIST:
{
- auto& params = command.set_command_list_last;
+ auto& params = command.submit_gpu_cmdlist;
+
+ if (params.do_flush) {
+ // This flag flushes the command list (params.address, params.size) from the cache.
+ // Command lists are not processed by the hardware renderer, so we don't need to
+ // actually flush them in Citra.
+ }
WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.address)),
Memory::VirtualToPhysicalAddress(params.address) >> 3);
@@ -391,6 +395,8 @@ static void ExecuteCommand(const Command& command, u32 thread_id) {
// TODO: Not sure if we are supposed to always write this .. seems to trigger processing though
WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.trigger)), 1);
+ // TODO(yuriks): Figure out the meaning of the `flags` field.
+
break;
}
@@ -434,7 +440,6 @@ static void ExecuteCommand(const Command& command, u32 thread_id) {
break;
}
- // TODO: Check if texture copies are implemented correctly..
case CommandId::SET_TEXTURE_COPY:
{
auto& params = command.texture_copy;
@@ -456,10 +461,15 @@ static void ExecuteCommand(const Command& command, u32 thread_id) {
break;
}
- // TODO: Figure out what exactly SET_COMMAND_LIST_FIRST and SET_COMMAND_LIST_LAST
- // are supposed to do.
- case CommandId::SET_COMMAND_LIST_FIRST:
+ case CommandId::CACHE_FLUSH:
{
+ for (auto& region : command.cache_flush.regions) {
+ if (region.size == 0)
+ break;
+
+ VideoCore::g_renderer->hw_rasterizer->NotifyFlush(
+ Memory::VirtualToPhysicalAddress(region.address), region.size);
+ }
break;
}