diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-09-08 00:22:44 +0200 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-09-14 21:19:05 +0200 |
commit | 1ed7f3e0281de29fd99f7d4802fcc5a1906930f8 (patch) | |
tree | 33034d2a72224e6b134c7e8b51ab8b1b9e882900 /src/core/hle/service/gsp_gpu.cpp | |
parent | Merge pull request #1152 from lioncash/nullptr (diff) | |
download | yuzu-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.cpp | 28 |
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; } |