summaryrefslogtreecommitdiff
path: root/src/video_core/dma_pusher.cpp
AgeCommit message (Collapse)Author
2025-05-11video_core: Enforce safe memory reads for compute dispatchZephyron
- Modify DmaPusher to use safe memory reads when handling compute operations at High GPU accuracy - Prevent potential memory corruption issues that could lead to invalid dispatch parameters - Previously, unsafe reads could result in corrupted launch_description data in KeplerCompute::ProcessLaunch, causing invalid vkCmdDispatch calls - By enforcing safe reads specifically for compute operations, we maintain performance for other GPU tasks while ensuring compute dispatch stability This change requires >= High GPU accuracy level to take effect.
2024-12-20perf(VideoCore): Refactor DispatchIndirectEmulationEnjoyer
- Added automatic safe or unsafe processing for better emulation accuracy. ref: https://git.citron-emu.org/Citron/Citron/commit/8cae0310e3aece0135e8c8e82e5fbeb379560b78
2024-12-20dma_pusher.cpp: remove now unused variable that breaks the android build (#76)anon
Completes http://vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion/torzu-emu/torzu/pulls/71 Discovered when building android version on debian via command line. Reviewed-on: http://vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion/torzu-emu/torzu/pulls/76 Co-authored-by: anon <anon@noreply.localhost> Co-committed-by: anon <anon@noreply.localhost>
2024-12-20kepler_compute: use safe memory readcow
If unsafe read is done there can sometimes be corrupt data in the KeplerCompute::ProcessLaunch qmd structure. Fixes GPU crashes in 'Princess Peach: Showtime!' when using vulkan renderer. Requires using "Accuracy Level High" (crashes will still happen if using "Normal"). Tested on Radeon 6750XT, Linux 6.11.2, Mesa 24.2.5 (RADV driver). Unsafe read was introduced in 115792158d3ac4ca746d1775f2381e8f8dd18582 "VideoCore: Implement DispatchIndirect" How did I debug this: - Used VK_LAYER_KHRONOS_validation which found invalid vkCmdDispatch (along with a lot of other noise!) - Instrumented all calls to vulkan Dispatch(), set breakpoint when grid_dim_x > 1024 (an obviously invalid value). Found dispatch came from RasterizerVulkan::DispatchCompute(). - Commented out DispatchCompute() entirely, game runs with no crashes but some graphics effects are missing. - Keep going one layer up, observe corrupted `launch_description` in KeplerCompute::ProcessLaunch() - Attempted safe ReadBlock (`which = VideoCommon::CacheType::All`) instead of ReadBlockUnsafe in KeplerCompute::ProcessLaunch(), did not help - Go one layer up to DmaPusher. Switch to safe_process(). No more corrupt `launch_description`.
2024-01-18Core: Clang format and other small issues.Fernando Sahmkow
2024-01-18SMMU: Initial adaptation to video_core.Fernando Sahmkow
2023-08-27VideoCore: Implement DispatchIndirectFernando Sahmkow
2023-08-26DMA Pusher: Fix regression caused by guest memory optimizationsFernando Sahmkow
2023-07-02Use spans over guest memory where possible instead of copying data.Kelebek1
2023-01-01DMAPusher: Improve collection of non executing methodsFernando Sahmkow
2023-01-01Revert Buffer cache changes and setup additional macros.Fernando Sahmkow
2023-01-01MacroHLE: Reduce massive calculations on sizing estimation.Fernando Sahmkow
2023-01-01MacroHLE: Refactor MacroHLE system.Fernando Sahmkow
2023-01-01MacroHLE: Implement DrawIndexedIndirect & DrawArraysIndirect.Fernando Sahmkow
2023-01-01MacroHLE: Add MultidrawIndirect HLE Macro.Fernando Sahmkow
2022-12-19scratch_buffer: Explicitly defing resize and resize_destructive functionsameerj
resize keeps previous data intact when the buffer grows resize_destructive destroys the previous data when the buffer grows
2022-12-19dma_pusher: Rework command_headers usageameerj
Uses ScratchBuffer and avoids overwriting the command_headers buffer with the prefetch_command_list
2022-10-06VideoCore: Refactor fencing system.Fernando Sahmkow
2022-10-06VideoCore: implement channels on gpu caches.Fernando Sahmkow
2022-04-23general: Convert source file copyright comments over to SPDXMorph
This formats all copyright comments according to SPDX formatting guidelines. Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later.
2022-03-19video_core: Reduce unused includesameerj
2021-07-09BufferCache: Additional download fixes.Fernando Sahmkow
2021-02-13video_core: Reimplement the buffer cacheReinUsesLisp
Reimplement the buffer cache using cached bindings and page level granularity for modification tracking. This also drops the usage of shared pointers and virtual functions from the cache. - Bindings are cached, allowing to skip work when the game changes few bits between draws. - OpenGL Assembly shaders no longer copy when a region has been modified from the GPU to emulate constant buffers, instead GL_EXT_memory_object is used to alias sub-buffers within the same allocation. - OpenGL Assembly shaders stream constant buffer data using glProgramBufferParametersIuivNV, from NV_parameter_buffer_object. In theory this should save one hash table resolve inside the driver compared to glBufferSubData. - A new OpenGL stream buffer is implemented based on fences for drivers that are not Nvidia's proprietary, due to their low performance on partial glBufferSubData calls synchronized with 3D rendering (that some games use a lot). - Most optimizations are shared between APIs now, allowing Vulkan to cache more bindings than before, skipping unnecesarry work. This commit adds the necessary infrastructure to use Vulkan object from OpenGL. Overall, it improves performance and fixes some bugs present on the old cache. There are still some edge cases hit by some games that harm performance on some vendors, this are planned to be fixed in later commits.
2020-12-04video_core: Resolve more variable shadowing scenariosLioncash
Resolves variable shadowing scenarios up to the end of the OpenGL code to make it nicer to review. The rest will be resolved in a following commit.
2020-11-07video_core: dma_pusher: Remove integrity check on command lists.bunnei
- This seems to cause softlocks in Breath of the Wild.
2020-11-01video_core: dma_pusher: Add support for integrity checks.bunnei
- Log corrupted command lists, rather than crash.
2020-11-01video_core: dma_pusher: Add support for prefetched command lists.bunnei
2020-05-16DmaPusher: Remove dead code in stepDavid Marcec
2020-04-27VideoCore/GPU: Delegate subchannel engines to the dma pusher.Fernando Sahmkow
2020-04-23DMAPusher: Propagate multimethod writes into the engines.Fernando Sahmkow
2020-04-22GPU: Delay Fences.Fernando Sahmkow
2020-04-22BufferCache: Implement OnCPUWrite and SyncGuestHostFernando Sahmkow
2020-04-22GPU: Refactor synchronization on Async GPUFernando Sahmkow
2020-04-19dma_pusher: Remove reliance on the global system instanceLioncash
With this, the video core is now has no calls to the global system instance at all.
2020-02-28video_core: Reintroduce dirty flags infrastructureReinUsesLisp
2020-02-28gl_rasterizer: Remove dirty flagsReinUsesLisp
2019-07-26GPU: Flush commands on every dma pusher step.Fernando Sahmkow
This commit ensures that the host gpu is constantly fed with commands to work with, while the guest gpu keeps producing the rest of the commands. This reduces syncing time between host and guest gpu.
2019-07-17Maxwell3D: Rework the dirty system to be more consistant and scaleableFernando Sahmkow
2019-05-19Dma_pusher: ASSERT on empty command_listFernando Sahmkow
This is a measure to avoid crashes on command list reading as an empty command_list is considered a NOP.
2019-04-28Merge pull request #2322 from ReinUsesLisp/wswitchbunnei
video_core: Silent -Wswitch warnings
2019-04-18video_core: Silent -Wswitch warningsReinUsesLisp
2019-04-16Use ReadBlockUnsafe for fetyching DMA CommandListsFernando Sahmkow
2019-04-06video_core/texures/texture: Remove unnecessary includesLioncash
Nothing in this header relies on common_funcs or the memory manager. This gets rid of reliance on indirect inclusions in the OpenGL caches.
2019-03-16video_core: Refactor to use MemoryManager interface for all memory access.bunnei
# Conflicts: # src/video_core/engines/kepler_memory.cpp # src/video_core/engines/maxwell_3d.cpp # src/video_core/morton.cpp # src/video_core/morton.h # src/video_core/renderer_opengl/gl_global_cache.cpp # src/video_core/renderer_opengl/gl_global_cache.h # src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
2019-03-08dma_pusher: Store command_list_header by copyReinUsesLisp
Instead of holding a reference that will get invalidated by dma_pushbuffer.pop(), hold it as a copy. This doesn't have any performance cost since CommandListHeader is 8 bytes long.
2019-02-19video_core/dma_pusher: Simplyfy Step() logic.Markus Wick
As fetching command list headers and and the list of command headers is a fixed 1:1 relation now, they can be implemented within a single call. This cleans up the Step() logic quite a bit.
2019-02-19video_core/dma_pusher: The full list of headers at once.Markus Wick
Fetching every u32 from memory leads to a big overhead. So let's fetch all of them as a block if possible. This reduces the Memory::* calls by the dma_pusher by a factor of 10.
2019-02-03video_core: Assert on invalid GPU to CPU address queriesReinUsesLisp
2018-11-27dma_pushbuffer: Optimize to avoid loop and copy on Push.bunnei
2018-11-27gpu: Move command list profiling to DmaPusher::DispatchCalls.bunnei