aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu
AgeCommit message (Collapse)Author
2021-06-29Initial support for separate GPU address spaces (#2394)gdkchan
* Make GPU memory manager a member of GPU channel * Move physical memory instance to the memory manager, and the caches to the physical memory * PR feedback
2021-06-25Add support for custom line widths (#2406)gdkchan
2021-06-25Fix default value for unwritten shader outputs (#2412)gdkchan
* Fix shader default output values * Shader cache version bump
2021-06-25Fix texture sampling with depth compare and LOD level or bias (#2404)gdkchan
* Fix texture sampling with depth compare and LOD level or bias * Shader cache version bump * nit: Sorting
2021-06-24Initial support for GPU channels (#2372)gdkchan
* Ground work for separate GPU channels * Rename TextureManager to TextureCache * Decouple texture bindings management from the texture cache * Rename BufferManager to BufferCache * Decouple buffer bindings management from the buffer cache * More comments and proper disposal * PR feedback * Force host state update on channel switch * Typo * PR feedback * Missing using
2021-06-24Inherit buffer tracking handles rather than recreating on resize (#2330)riperiperi
This greatly speeds up games that constantly resize buffers, and removes stuttering on games that resize large buffers occasionally: - Large improvement on Super Mario 3D All-Stars (#1663 needed for best performance) - Improvement to Hyrule Warriors: AoC, and UE4 games. These games can still stutter due to texture creation/loading. - Small improvement to other games, potential 1-frame stutters avoided. `ForceSynchronizeMemory`, which was added with POWER, is no longer needed. Some tests have been added for the MultiRegionHandle.
2021-06-23Fix shader texture LOD query (#2397)gdkchan
2021-06-23Pass all inputs when geometry shader passthrough is enabled (#2362)gdkchan
* Pass all inputs when geometry shader passthrough is enabled * Shader cache version bump
2021-06-20Fix separate bindless sampler at offset 0 (#2360)gdkchan
2021-06-15End shader decoding when reaching a block that starts with an infinite loop ↵riperiperi
(after BRX) (#2367) * End shader decoding when reaching an infinite loop The NV shader compiler puts these at the end of shaders. * Update shader cache version
2021-06-09GAL: Fix sampler leaks on exit (#2353)Mary
Before this, all samplers instance were leaking on exit because the dispose method was never getting called. This fix this issue by making TextureBindingsManager disposable and calling the dispose method in the TextureManager.
2021-06-09Do not clear gpu subchannel state on BindChannel (#2348)Mary
This fixes a regression caused by #980, that was causing a crash on New Super Lucky's Tale. As always, this need feedback on possible regression on any games. Fix #2343.
2021-06-09Support bindless textures with separate constant buffers for texture and ↵gdkchan
sampler (#2339)
2021-06-03Fix shaders with mixed PBK and SSY addresses on the stack (#2329)gdkchan
* Fix shaders with mixed PBK and SSY addresses on the stack * Address PR feedback and nits
2021-06-03Fix texture blit off-by-one errors (#2335)gdkchan
2021-05-31Do not attempt to normalize SNORM image buffers on shaders (#2317)gdkchan
* Do not attempt to normalize SNORM image buffers on shaders * Shader cache version bump
2021-05-24POWER - Performance Optimizations With Extensive Ramifications (#2286)riperiperi
* Refactoring of KMemoryManager class * Replace some trivial uses of DRAM address with VA * Get rid of GetDramAddressFromVa * Abstracting more operations on derived page table class * Run auto-format on KPageTableBase * Managed to make TryConvertVaToPa private, few uses remains now * Implement guest physical pages ref counting, remove manual freeing * Make DoMmuOperation private and call new abstract methods only from the base class * Pass pages count rather than size on Map/UnmapMemory * Change memory managers to take host pointers * Fix a guest memory leak and simplify KPageTable * Expose new methods for host range query and mapping * Some refactoring of MapPagesFromClientProcess to allow proper page ref counting and mapping without KPageLists * Remove more uses of AddVaRangeToPageList, now only one remains (shared memory page checking) * Add a SharedMemoryStorage class, will be useful for host mapping * Sayonara AddVaRangeToPageList, you served us well * Start to implement host memory mapping (WIP) * Support memory tracking through host exception handling * Fix some access violations from HLE service guest memory access and CPU * Fix memory tracking * Fix mapping list bugs, including a race and a error adding mapping ranges * Simple page table for memory tracking * Simple "volatile" region handle mode * Update UBOs directly (experimental, rough) * Fix the overlap check * Only set non-modified buffers as volatile * Fix some memory tracking issues * Fix possible race in MapBufferFromClientProcess (block list updates were not locked) * Write uniform update to memory immediately, only defer the buffer set. * Fix some memory tracking issues * Pass correct pages count on shared memory unmap * Armeilleure Signal Handler v1 + Unix changes Unix currently behaves like windows, rather than remapping physical * Actually check if the host platform is unix * Fix decommit on linux. * Implement windows 10 placeholder shared memory, fix a buffer issue. * Make PTC version something that will never match with master * Remove testing variable for block count * Add reference count for memory manager, fix dispose Can still deadlock with OpenAL * Add address validation, use page table for mapped check, add docs Might clean up the page table traversing routines. * Implement batched mapping/tracking. * Move documentation, fix tests. * Cleanup uniform buffer update stuff. * Remove unnecessary assignment. * Add unsafe host mapped memory switch On by default. Would be good to turn this off for untrusted code (homebrew, exefs mods) and give the user the option to turn it on manually, though that requires some UI work. * Remove C# exception handlers They have issues due to current .NET limitations, so the meilleure one fully replaces them for now. * Fix MapPhysicalMemory on the software MemoryManager. * Null check for GetHostAddress, docs * Add configuration for setting memory manager mode (not in UI yet) * Add config to UI * Fix type mismatch on Unix signal handler code emit * Fix 6GB DRAM mode. The size can be greater than `uint.MaxValue` when the DRAM is >4GB. * Address some feedback. * More detailed error if backing memory cannot be mapped. * SetLastError on all OS functions for consistency * Force pages dirty with UBO update instead of setting them directly. Seems to be much faster across a few games. Need retesting. * Rebase, configuration rework, fix mem tracking regression * Fix race in FreePages * Set memory managers null after decrementing ref count * Remove readonly keyword, as this is now modified. * Use a local variable for the signal handler rather than a register. * Fix bug with buffer resize, and index/uniform buffer binding. Should fix flickering in games. * Add InvalidAccessHandler to MemoryTracking Doesn't do anything yet * Call invalid access handler on unmapped read/write. Same rules as the regular memory manager. * Make unsafe mapped memory its own MemoryManagerType * Move FlushUboDirty into UpdateState. * Buffer dirty cache, rather than ubo cache Much cleaner, may be reusable for Inline2Memory updates. * This doesn't return anything anymore. * Add sigaction remove methods, correct a few function signatures. * Return empty list of physical regions for size 0. * Also on AddressSpaceManager Co-authored-by: gdkchan <gab.dark.100@gmail.com>
2021-05-24Compare aligned size for largest mip level when considering sampler resize ↵riperiperi
(#2306) * Compare aligned size for largest mip level when considering sampler resize When selecting a texture that's a view for a sampler resize, we should take care that resizing it doesn't change the aligned size of any larger mip levels. This PR covers two cases: - When creating a view of the texture, we check that the aligned size of the view shifted up to level 0 still matches the aligned size of the container. If it does not, a copy dependency is created rather than resizing. - When searching for a texture for sampler, textures that do _not_ match our aligned size when both are shifted up by its base level are not considered an exact match, as resizing the found texture will cause the mip 0 aligned size to change. It will create a copy dependency view instead. Fixes graphical errors and crashes (on flush) in various Unity games that use render-to-texture. * Move shared code to its own method.
2021-05-22Use a different method for out of bounds blit (#2302)gdkchan
* Use a different method for out of bounds blit * This is not needed
2021-05-22Add another Depth32F texture format (#2304)gdkchan
2021-05-22Fix non-independent blend state not being updated (#2303)gdkchan
* Fix non-independent blend state not being updated * Actually, this is not needed
2021-05-21Fix dimensions check for scale eligibility (#2301)riperiperi
2021-05-20Fix buffer and texture uses not being propagated for vertex A/B shaders (#2300)gdkchan
* Fix buffer and texture uses not being propagated for vertex A/B shaders * Shader cache version bump
2021-05-20Fix constant buffer array size when indexing is used and other buffer ↵gdkchan
descriptor and resolution scale regressions (#2298) * Fix constant buffer array size when indexing is used * Change default QueryConstantBufferUse value * Fix more regressions * Ensure proper order
2021-05-19Move shader resource descriptor creation out of the backend (#2290)gdkchan
* Move shader resource descriptor creation out of the backend * Remove now unused code, and other nits * Shader cache version bump * Nits * Set format for bindless image load/store * Fix buffer write flag
2021-05-19Merge pull request #2177 from riperiperi/feature/parallel-shader-cacheEmulationFanatic
Allow parallel shader compilation when loading a shader cache
2021-05-19Pass CbufSlot when getting info from the texture descriptor (#2291)riperiperi
* Pass CbufSlot when getting info from the texture descriptor Fixes some issues with bindless textures, when CbufSlot is not equal to the current TextureBufferIndex. Specifically fixes a random chance of full screen colour flickering in Super Mario Party. * Apply suggestions from code review Oops Co-authored-by: gdkchan <gab.dark.100@gmail.com> Co-authored-by: gdkchan <gab.dark.100@gmail.com>
2021-05-16Use copy dependencies for the Intel/AMD view format workaround (#2144)riperiperi
* This might help AMD a bit * Removal of old workaround.
2021-05-07misc: Fix default value for GraphicsConfig.MaxAnisotropy (#2274)Mary
As title say. Doesn't change anything as the Ryujinx project set it.
2021-05-01Fix shader buffer write flag on atomic instructions (#2261)gdkchan
* Fix shader buffer write flag on atomic instructions * Shader cache version bump
2021-04-20Only enable clip distance if written to on shader (#2217)gdkchan
* Only enable clip distance if written to on shader * Signal InstanceId use through FeatureFlags * Shader cache version bump
2021-04-18Fix skipping missing shadersriperiperi
2021-04-18Nitriperiperi
2021-04-18The task isn't required for loading compute binary.riperiperi
2021-04-18Use event to wake the main thread on task completionriperiperi
2021-04-18The new host program needs to be saved even if it isn't valid.riperiperi
2021-04-18Implement parallel host shader cache compilation.riperiperi
2021-04-18Improve shader global memory to storage pass (#2200)gdkchan
* Improve shader global memory to storage pass * Formatting and more comments * Shader cache version bump
2021-04-02Hold reference for render targets in use (#2156)gdkchan
2021-04-02Implement shader HelperThreadNV (#2163)gdkchan
* Implement shader HelperThreadNV * Bump shader cache version * Use gl_HelperInvocation since its supported across all vendors * Nit
2021-03-27Fix ZN flags set for shader instructions using RZ.CC dest (#2147)gdkchan
* Fix ZN flags set for shader instructions using RZ.CC dest * Shader cache version bump and nits
2021-03-27Shader Cache: Move bindless checking from translation to decode (#2145)mageven
2021-03-22Fix inconsistencies in progress reporting (#2129)mageven
Signal and setup events correctly Eliminate possible races Use a single event Mark volatiles and reduce scope of waithandles Common handler 100ms -> 50ms
2021-03-19Salieri: Detect and avoid caching shaders using bindless textures (#2097)Mary
* Salieri: Add blacklist system and blacklist shaders using bindless Currently the shader cache doesn't have the right format to support bindless textures correctly and may cache shaders that it cannot rebuild after host invalidation. This PR address the issue by blacklisting shaders using bindless textures. THis also support detection of already cached broken shader and handle removal of those. * Move to a feature flags design to avoid intrusive changes in the translator This remove the auto correct behaviour * Reduce diff on TranslationFlags * Reduce comma on last entry of TranslationFlags * Fix inverted logic and remove leftovers * remove debug edits oops
2021-03-19Improve linear texture compatibility rules (#2099)riperiperi
* Improve linear texture compatibility rules Fixes an issue where small or width-aligned (rather than byte aligned) textures would fail to create a view of existing data. Creates a copy dependency as size change may be risky. * Minor cleanup * Remove Size Change for Copy Depenedencies The copy to the target (potentially different sized) texture can properly deal with cropping by itself. * Move StrideAlignment and GobAlignment into Constants
2021-03-08Improve Buffer Textures and flush Image Stores (#2088)riperiperi
* Improve Buffer Textures and flush Image Stores Fixes a number of issues with buffer textures: - Reworked Buffer Textures to create their buffers in the TextureManager, then bind them with the BufferManager later. - Fixes an issue where a buffer texture's buffer could be invalidated after it is bound, but before use. - Fixed width unpacking for large buffer textures. The width is now 32-bit rather than 16. - Force buffer textures to be rebound whenever any buffer is created, as using the handle id wasn't reliable, and the cost of binding isn't too high. Fixes vertex explosions and flickering animations in UE4 games. * Set ImageStore flag... for ImageStore. * Check the offset and size.
2021-03-06Improve handling for unmapped GPU resources (#2083)riperiperi
* Improve handling for unmapped GPU resources - Fixed a memory tracking bug that would set protection on empty PTEs - When a texture's memory is (partially) unmapped, all pool references are forcibly removed and the texture must be rediscovered to draw with it. This will also force the texture discovery to always compare the texture's range for a match. - RegionHandles now know if they are unmapped, and automatically unset their dirty flag when unmapped. - Partial texture sync now loads only the region of texture that has been modified. Unmapped memory tracking handles cause dirty flags for a texture group handle to be ignored. This greatly improves the emulator's stability for newer UE4 games. * Address feedback, fix MultiRange slice Fixed an issue where the size of the multi-range slice would be miscalculated. * Update Ryujinx.Memory/Range/MultiRange.cs (feedback) Co-authored-by: Mary <thog@protonmail.com> Co-authored-by: Mary <thog@protonmail.com>
2021-03-03Add progress reporting to PTC and Shader Cache (#2057)mageven
* UI changes * Add progress reporting to PTC & ShaderCache * Account for null events and expand docs Co-authored-by: Joshi234 <46032261+Joshi234@users.noreply.github.com>
2021-03-02Texture Cache: "Texture Groups" and "Texture Dependencies" (#2001)riperiperi
* Initial implementation (3d tex mips broken) This works rather well for most games, just need to fix 3d texture mips. * Cleanup * Address feedback * Copy Dependencies and various other fixes * Fix layer/level offset for copy from view<->view. * Remove dirty flag from dependency The dirty flag behaviour is not needed - DeferredCopy is all we need. * Fix tracking mip slices. * Propagate granularity (fix astral chain) * Address Feedback pt 1 * Save slice sizes as part of SizeInfo * Fix nits * Fix disposing multiple dependencies causing a crash This list is obviously modified when removing dependencies, so create a copy of it.
2021-02-08Simplify handling of shader vertex A (#1999)gdkchan
* Simplify handling of shader vertex A * Theres no transformation feedback, its transform * Merge TextureHandlesForCache