aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu
AgeCommit message (Collapse)Author
2021-02-08Implement ETC2 (RGB) texture format (#2000)gdkchan
* Implement ETC2 format * Fix component counts for compressed formats
2021-02-01Do not flush multisample textures (#1973)gdkchan
2021-01-29Implement geometry shader passthrough (#1961)gdkchan
* Implement geometry shader passthrough * Cache version change
2021-01-29Use a descriptor cache for faster pool invalidation. (#1977)riperiperi
* Use a descriptor cache for faster pool invalidation. * Speed up comparison by casting to Vector256 Now we never need to worry about this ever again
2021-01-28Support multiple destination operands on shader IR and shuffle predicates ↵gdkchan
(#1964) * Support multiple destination operands on shader IR and shuffle predicates * Cache version change
2021-01-27Avoid some redundant GL calls (#1958)gdkchan
2021-01-27Fix conditional rendering without queries (#1965)gdkchan
2021-01-26Fix compute shader code dumping (#1960)gdkchan
2021-01-25Allow out of bounds storage buffer access by aligning their sizes (#1870)gdkchan
* Allow out of bounds storage buffer access by aligning their sizes * Use correct size * Fix typo and comment on the reason for the change
2021-01-23Match texture if the physical range is the same (#1934)gdkchan
* Match texture if the physical range is the same * XML docs and comments
2021-01-19Enable parallel ASTC decoding by default (#1930)gdkchan
2021-01-19Fix out of range exception when a invalid base lod is used (#1931)gdkchan
2021-01-17Implement lazy flush-on-read for Buffers (SSBO/Copy) (#1790)riperiperi
* Initial implementation of buffer flush (VERY WIP) * Host shaders need to be rebuilt for the SSBO write flag. * New approach with reserved regions and gl sync * Fix a ton of buffer issues. * Remove unused buffer unmapped behaviour * Revert "Remove unused buffer unmapped behaviour" This reverts commit f1700e52fb8760180ac5e0987a07d409d1e70ece. * Delete modified ranges on unmap Fixes potential crashes in Super Smash Bros, where a previously modified range could lie on either side of an unmap. * Cache some more delegates. * Dispose Sync on Close * Also create host sync for GPFifo syncpoint increment. * Copy buffer optimization, add docs * Fix race condition with OpenGL Sync * Enable read tracking on CommandBuffer, insert syncpoint on WaitForIdle * Performance: Only flush individual pages of SSBO at a time This avoids flushing large amounts of data when only a small amount is actually used. * Signal Modified rather than flushing after clear * Fix some docs and code style. * Introduce a new test for tracking memory protection. Sucessfully demonstrates that the bug causing write protection to be cleared by a read action has been fixed. (these tests fail on master) * Address Comments * Add host sync for SetReference This ensures that any indirect draws will correctly flush any related buffer data written before them. Fixes some flashing and misplaced world geometry in MH rise. * Make PageAlign static * Re-enable read tracking, for reads.
2021-01-17Support for resources on non-contiguous GPU memory regions (#1905)gdkchan
* Support for resources on non-contiguous GPU memory regions * Implement MultiRange physical addresses, only used with a single range for now * Actually use non-contiguous ranges * GetPhysicalRegions fixes * Documentation and remove Address property from TextureInfo * Finish implementing GetWritableRegion * Fix typo
2021-01-15Fix mipmap base level being ignored for sampled textures and images (#1911)gdkchan
* Fix mipmap base level being ignored for sampled textures and images * Fix layer size and max level for textures * Missing XML doc + reorder comments
2021-01-14Fix shader LOP3 predicate write condition (#1910)gdkchan
* Fix LOP3 predicate write condition * Bump shader cache version
2021-01-13Implement shader CC mode for ISCADD, X mode for ISETP and fix STL/STS/STG ↵gdkchan
with RZ (#1901) * Implement shader CC mode for ISCADD, X mode for ISETP and fix STS/STG with RZ * Fix STG too and bump shader cache version * Fix wrong name * Fix Carry being inverted on comparison
2021-01-13Implement clear buffer (fast path) (#1902)gdkchan
* Implement clear buffer (fast path) * Remove blank line
2021-01-10Fix compute reserved constant buffer updates (#1892)gdkchan
2021-01-10Fix remap when handle is 0 (#1882)gdkchan
* Nvservices cleanup and attempt to fix remap * Unmap if remap handle is 0 * Remove mapped pool add from Remap
2021-01-08Support conditional on BRK and SYNC shader instructions (#1878)gdkchan
* Support conditional on BRK and SYNC shader instructions * Add TODO comment and bump cache version
2021-01-05gpu: Implement missing texture formats (#1867)Ac_K
* gpu: Implement Etc2Rgba texture format * Add more format * Fix wrong pixel format
2020-12-17Interrupt GPU command processing when a frame's fence is reached. (#1741)riperiperi
* Interrupt GPU command processing when a frame's fence is reached. * Accumulate times rather than %s * Accurate timer for vsync Spin wait for the last .667ms of a frame. Avoids issues caused by signalling 16ms vsync. (periodic stutters in smo) * Use event wait for better timing. * Fix lazy wait Windows doesn't seem to want to do 1ms consistently, so force a spin if we're less than 2ms. * A bit more efficiency on frame waits. Should now wait the remainder 0.6667 instead of 1.6667 sometimes (odd waits above 1ms are reliable, unlike 1ms waits) * Better swap interval 0 solution 737 fps without breaking a sweat. Downside: Vsync can no longer be disabled on games that use the event heavily (link's awakening - which is ok since it breaks anyways) * Fix comment. * Address Comments.
2020-12-13salieri: Support read-only mode if archive is already opened (#1807)Mary
This improves shader cache resilience when people opens another program that touch the cache.zip.
2020-12-11GPU: Improve unnecessary return value in Map function. (#1799)sharmander
* Implement VFNMA.F<32/64> * Update PTC Version * Update Implementation & Renames & Correct Order * Add Logging * Additional logging * Add additional check to restart loop from beginning if address goes beyond maximum allowed. * Additional Check that the total range required doesn't exceed capacity of allocator addresses. * Improve logging * Ensure hex output * Update Ryujinx.HLE/HOS/Services/Nv/NvMemoryAllocator.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * Remove extra page at end * Remove unnecessary return val in Map function. * Remove incorrect description Co-authored-by: gdkchan <gab.dark.100@gmail.com>
2020-12-09GPU - Improve Memory Allocation (#1722)sharmander
* Implement TreeMap from scratch. Begin implementation of MemoryBlockManager * Implement GetFreePosition using MemoryBlocks * Implementation of Memory Management using a Tree. Still some issues to work around, but promising thus far. * Resolved invalid mapping issue. Performance appears promising. * Add tick metrics * Use the logger instead * Use debug loggin instead of info. * Remove unnecessary code. Add descriptions of added functions. * Improve memory allocation even further. As well as improve speed of position fetching. * Add TreeDictionary to Ryujinx Commons Removed Unnecessary Usigns * Add a Performance Profiler + Improve ReserveFixed * Begin transition to allocation in nvdrv * Create singleton nvmemallocator * Moved Allocation into Nv Related Files As requested by gdkchan, any allocation of memory has been moved into the driver files. Mapping remains in the GPU MemoryManager. * Remove unnecessary usings * Add missing descriptions * Correct descriptions * Fix formatting. * Remove unnecessary whitespace * Formatting / Convention Updates * Changes / Fixes Made syntax and convention changes as requested by gdkchan. Fixed an issue where IsRegionUsed would return the wrong boolean. Fixed an issue where GetFreePosition was asked for an address instead of a size. * Undo commenting of Assert in shader cache * Update Ryujinx.Common/Collections/TreeDictionary.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * Resolved many suggestions * Implement Improved TreeDictionary Based off of Pseudo code and custom implementations. * Rename _set to _dictionary * Remove unused code * Remove unused code. * Remove unnecessary MapLow function. * Resolve data-structure based issues * Make adjustments to memory management. Deactive de-allocation for now, it causes more harm than good. * Minor refactorings + Re-implement deallocation Also cleaned up unnecessary code. * Add Tests for TreeDictionary * Update data structure to properly balance the tree * Experimental Implementation: 1. Reduce Time to Next Node to O(1) Runtime 2. Reduce While Loop Ct To 2 (In Most Cases) * Address issues w/ Deallocating Memory * Final Build + Fully Implement Dictionary Interface for new Data Structure + Cover All Memory Allocation Edge Cases, particularly w/ Games that De-Allocate a lot. * Minor Corrections Give TreeDictionary its own count (do not depend on inner dictionary) Properly remove adjacent allocations * Add AsList * Fix bug where internal dictionary wasn't being updated w/ new node for overwritten key. * Address comments in review. * Fix issue where block wouldn't break out (Fixes UE4 issues) * Update descriptions * Update descriptions * Reduce Node visibility to protect TreeDictionary Integrity + Remove usage of struct. * Update tests to use new TreeDictionary implementation. * Remove usage of dictionary in TreeDictionary * Refactoring / Renaming * Remove unneeded memoryblock class. * Add space for while * Add space for if * Formatting / descriptions * Clarified some descriptions * Reduce visibility of memory allocator * Edit method names to make more sense as memory blocks are no longer in use. * Make names consistent. * Protect against npe when sucessorof is called against keys that don't exist. (Not in use by memory manager, this is for other prs that might use this data structure) * Possible edge-case resolve * Update Ryujinx.Common/Collections/TreeDictionary.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * Update Ryujinx.HLE/HOS/Services/Nv/NvMemoryAllocator.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * Reduce # of unnecessary duplicate variables / Reduce visibility of variables only internally used. * Rename count to _count * Update Description of Add method. * Fix copypasta * Address comments * Address comments * Remove whitespace * Address comments, condense variables. * Consolidate vars * Fix whitespace. * Nit * Fix exception msg * Fix arrayIndex check * Fix arrayIndex check + indexer * Remove whitespace from cast Co-authored-by: gdkchan <gab.dark.100@gmail.com>
2020-12-03Extract texture Target from Info for quick access (#1774)riperiperi
2020-12-03Cache delegate for QueryModified, use regular multi handle. (#1771)riperiperi
2020-12-02IPC refactor part 2: Use ReplyAndReceive on HLE services and remove special ↵gdkchan
handling from kernel (#1458) * IPC refactor part 2: Use ReplyAndReceive on HLE services and remove special handling from kernel * Fix for applet transfer memory + some nits * Keep handles if possible to avoid server handle table exhaustion * Fix IPC ZeroFill bug * am: Correctly implement CreateManagedDisplayLayer and implement CreateManagedDisplaySeparableLayer CreateManagedDisplaySeparableLayer is requires since 10.x+ when appletResourceUserId != 0 * Make it exit properly * Make ServiceNotImplementedException show the full message again * Allow yielding execution to avoid starving other threads * Only wait if active * Merge IVirtualMemoryManager and IAddressSpaceManager * Fix Ro loading data from the wrong process Co-authored-by: Thog <me@thog.eu>
2020-12-02Implement Force Early Z Register (#1755)riperiperi
2020-12-01salieri: Fix missing guest GPU accessor missing on hashes (#1759)Mary
This adds the guest GPU accessor to hashes computation. As this change all the hashes from the cache, I added some migration logic. This is required for #1755.
2020-11-27Prefer truly perfect texture matches over fomat aliased ones (#1754)riperiperi
2020-11-27Blacklist very textures with a very small width or height from scaling (#1753)riperiperi
2020-11-21salieri: remove a wrong debug assert (#1740)Mary
THis assert is wrong and useless now, remove it because it's annoying in Debug.
2020-11-20Allow copy destination to have a different scale from source (#1711)riperiperi
* Allow copy destination to have a different scale from source Will result in more scaled copy destinations, but allows scaling in some games that copy textures to the output framebuffer. * Support copying multiple levels/layers Uses glFramebufferTextureLayer to copy multiple layers, copies levels individually (and scales the regions). Remove CopyArrayScaled, since the backend copy handles it now.
2020-11-18Do not perform layout conversion on buffer texture flushes (#1729)gdkchan
2020-11-17Fix buffer to texture copy with remap enabled (#1721)gdkchan
2020-11-17shader cache: Fix Linux boot issues (#1709)Mary
* shader cache: Fix Linux boot issues This rollback the init logic back to previous state, and replicate the way PTC handle initialization. * shader cache: set default state of ready for translation event to false * Fix cpu unit tests
2020-11-17shader cache: Fix possible race causing crashes on manifest at startup (#1718)Mary
* shader cache: Fix possible race causing crashes on manifest at startup This fix a misplace function call ending up causing possibly two write on the cache.info at the same time. * shader cache: Make RemoveManifestEntries async too to be sure all operations are perform before starting the game
2020-11-17shader cache: Fix invalid virtual address clean up (#1717)Mary
* shader cache: Fix invalid virtual address clean up This fix an issue causing the virtual address of texture descriptors to not be cleaned up when caching and instead cleaning texture format and swizzle. This should fix duplicate high duplication in the cache for certain games and possible texture corruption issues. **THIS WILL INVALIDATE ALL SHADER CACHE LEVELS CONSIDERING THE NATURE OF THE ISSUE** * shader cache: Address gdk's comment
2020-11-16Propagate zeta format properly (#1716)gdkchan
2020-11-15infra: Migrate to .NET 5 (#1694)Mary
* infra: Migrate to .NET 5 This migrate projects and CI to .NET 5 * Remove language version restrictions (now on 9.0 by default) * infra: pin .NET 5 to avoid later issues * infra: Cleanup csproj files * infra: update dependencies * infra: Add temporary workaround for a bug in Vector128.Create see https://github.com/dotnet/runtime/issues/44704 for more informations
2020-11-13Use "Screen Scissor" as size hint for render targets (#1703)riperiperi
"Screen scissor" is the minimum size of all render targets, and is set when any render target is bound on NVN or OpenGL. Since it works on all active texture's real sizes, it is therefore more reliable than viewport 0's width, and is actually set before clear. This fixes a regression with Hyrule Warriors: Age Of Calamity's cubemaps, which did not set viewport dimensions before clear. This resulted in attempting to create a cubemap with rectangular sides, which is logically and physically impossible. (also it just fails)
2020-11-13Salieri: shader cache (#1701)Mary
Here come Salieri, my implementation of a disk shader cache! "I'm sure you know why I named it that." "It doesn't really mean anything." This implementation collects shaders at runtime and cache them to be later compiled when starting a game.
2020-11-09Size hints for copy regions and viewport dimensions to avoid data loss (#1686)riperiperi
* Size hints for copy regions and viewport dimensions to avoid data loss * Reword comment. * Use info for the rule rather than calculating aligned size. * Reorder min/max, remove spaces
2020-11-09Simplify logic for bindless texture handling (#1667)gdkchan
* Simplify logic for bindless texture handling * Nits
2020-11-08Use explicit buffer and texture bindings on shaders (#1666)gdkchan
* Use explicit buffer and texture bindings on shaders * More XML docs and other nits
2020-11-07Synchronize Rasterizer State before Clear (#1680)riperiperi
2020-11-06Only report that GPU commands are available when the queue is not empty. (#1656)riperiperi
* Only report that commands are available when the queue is not empty. * Address Feedback Co-authored-by: FICTURE7 <FICTURE7@gmail.com> Co-authored-by: FICTURE7 <FICTURE7@gmail.com>
2020-11-06Do not align sizes for buffer texture targets. (#1671)riperiperi
This should fix a random crash in Hyrule Warriors, and potentially other games that use buffer textures.