summaryrefslogtreecommitdiffstats
path: root/src/video_core/texture_cache (unfollow)
Commit message (Collapse)AuthorFilesLines
2020-06-27texture_cache: Test format compatibility before copyingReinUsesLisp1-5/+20
Avoid illegal copies. This intercepts the last step of a copy to avoid generating validation errors or corrupting the driver on some instances. We can create views and emit copies accordingly in future commits and remove this last-step validation.
2020-06-22TextureCache: Fix case where layer goes off bound.Fernando Sahmkow1-0/+3
The returned layer is expected to be between 0 and the depth of the surface, anything larger is off bounds.
2020-06-20texture_cache: Fix incorrect address used in a DeduceSurface() callLioncash1-1/+1
Previously the source was being deduced twice in a row.
2020-06-08texture_cache: Port original code management for 2D vs 3D texturesReinUsesLisp2-16/+35
Handle blits to images as 2D, even when they have block depth. - Fixes rendering issues on Luigi's Mansion 3
2020-06-08texture_cache: Simplify blit codeReinUsesLisp1-9/+7
2020-06-08texture_cache: Handle 3D texture blits with one layerReinUsesLisp2-3/+8
2020-06-08texture_cache: Implement rendering to 3D texturesReinUsesLisp4-80/+76
This allows rendering to 3D textures with more than one slice. Applications are allowed to render to more than one slice of a texture using gl_Layer from a VTG shader. This also requires reworking how 3D texture collisions are handled, for now, this commit allows rendering to slices but not to miplevels. When a render target attempts to write to a mipmap, we fallback to the previous implementation (copying or flushing as needed). - Fixes color correction 3D textures on UE4 games (rainbow effects). - Allows Xenoblade games to render to 3D textures directly.
2020-05-30texture_cache: More relaxed reconstructionReinUsesLisp1-13/+9
Only reupload textures when they've not been modified from the GPU.
2020-05-30texture_cache: Only copy textures that were modified from hostReinUsesLisp1-2/+6
2020-05-30texture_cache: Reload textures when number of resources mismatchReinUsesLisp1-0/+9
2020-05-29texture_cache: Handle overlaps with multiple subresourcesReinUsesLisp1-27/+33
Implement more surface reconstruct cases. Allow overlaps with more than one layer and mipmap and copies all of them to the new texture. - Fixes textures moving around objects on Xenoblade games
2020-05-28format_lookup_table: Implement G24S8 format as S8Z24ReinUsesLisp1-1/+2
2020-05-27texture_cache: Use unordered_map::find instead of operator[] on hot codeReinUsesLisp1-15/+19
2020-05-27texture_cache: Use small vector for surface vectorsReinUsesLisp1-9/+10
This avoids most heap allocations when collecting surfaces into a vector.
2020-05-26texture_cache: Fix layered null surfacesReinUsesLisp1-1/+3
Null texture cubes were not considered arrays, causing issues on Vulkan and OpenGL when creating views.
2020-04-30texture: Implement R8G8UIMorph1-1/+2
- Used by The Walking Dead: The Final Season
2020-04-27texture_cache: Reintroduce preserve_contents accuratelyReinUsesLisp1-25/+41
This reverts commit 94b0e2e5dae4e0bd0021ac2d8fe1ff904a93ee69. preserve_contents proved to be a meaningful optimization. This commit reintroduces it but properly implemented on OpenGL. We have to make sure the clear removes all the previous contents of the image. It's not currently implemented on Vulkan because we can do smart things there that's preferred to be introduced in a separate commit.
2020-04-23shader_ir: Turn classes into data structuresReinUsesLisp2-7/+7
2020-04-22Address Feedback.Fernando Sahmkow1-9/+6
2020-04-22Address Feedback.Fernando Sahmkow1-32/+18
2020-04-22FenceManager: Manage syncpoints and rename fences to semaphores.Fernando Sahmkow1-0/+7
2020-04-22Rasterizer: Disable fence managing in synchronous gpu.Fernando Sahmkow1-1/+1
2020-04-22ThreadManager: Sync async reads on accurate gpu.Fernando Sahmkow1-0/+15
2020-04-22FenceManager: Implement should wait.Fernando Sahmkow1-0/+11
2020-04-22OpenGL: Implement Fencing backend.Fernando Sahmkow1-1/+31
2020-04-22TextureCache: Flush linear textures after finishing rendering.Fernando Sahmkow1-2/+8
2020-04-22GPU: Refactor synchronization on Async GPUFernando Sahmkow1-2/+2
2020-04-22Texture Cache: Implement OnCPUWrite and SyncGuestHostFernando Sahmkow2-3/+63
2020-04-22UI: Replasce accurate GPU option for GPU Accuracy LevelFernando Sahmkow1-4/+4
2020-04-16surface_view: Add missing operator!= to ViewParamsLioncash2-0/+5
Provides logical symmetry to the interface.
2020-04-16surface_base: Make IsInside() a const member functionLioncash1-2/+2
This doesn't modify internal state, so this can be made const.
2020-04-16texture_cache/format_lookup_table: Fix incorrect green, blue, and alpha indicesLioncash1-3/+3
Previously these were all using the red component to derive the indices, which is definitely not intentional.
2020-04-16video_core: Amend doxygen comment referencesLioncash1-4/+4
Fixes broken documentation references.
2020-04-16CMakeLists: Specify -Wextra on linux buildsLioncash2-2/+2
Allows reporting more cases where logic errors may exist, such as implicit fallthrough cases, etc. We currently ignore unused parameters, since we currently have many cases where this is intentional (virtual interfaces). While we're at it, we can also tidy up any existing code that causes warnings. This also uncovered a few bugs as well.
2020-04-15Texture Cache: Read current data when flushing a 3D segment.Fernando Sahmkow1-0/+6
This PR corrects flushing of 3D segments when data of other segments is mixed, this aims to preserve the data in place.
2020-04-15Texture Cache: Only do buffer copies on accurate GPU. (#3634)Fernando Sahmkow1-1/+3
This is a simple optimization as Buffer Copies are mostly used for texture recycling. They are, however, useful when games abuse undefined behavior but most 3D APIs forbid it.
2020-04-11texture_cache: Remove preserve_contentsReinUsesLisp1-41/+25
preserve_contents was always true. We can't assume we don't have to preserve clears because scissored and color masked clears exist. This removes preserve_contents and assumes it as true at all times.
2020-04-06Texture Cache: Use vAddr instead of physical memory for caching.Fernando Sahmkow3-122/+75
2020-04-04Revert "Merge pull request #3499 from ReinUsesLisp/depth-2d-array"ReinUsesLisp1-4/+2
This reverts commit 41905ee467b24172ba93e3fcd665bb4e4806a45a, reversing changes made to 35145bd529c3517e2c366efc764a762092d96edf. It causes regressions in several games.
2020-04-01video_core: Use native ASTC when availableReinUsesLisp5-65/+59
2020-03-13video_core: Implement RGBA16_SNORMReinUsesLisp1-1/+2
Implement RGBA16_SNORM with the current API. Nothing special here.
2020-03-12texture_cache: Report incompatible textures as blackReinUsesLisp1-2/+39
Some games bind incompatible texture types to certain types. For example Astral Chain binds a 2D texture with 1 layer (non-array) to a cubemap slot (that's how it's used in the shader). After testing this in hardware, the expected "undefined behavior" is to report all pixels as black. We already have a path for reporting black textures in the texture cache. When textures types are incompatible, this commit binds these kind of textures. This is done on the API agnostic texture cache so no extra code has to be inserted on OpenGL or Vulkan. As a side effect, this fixes invalidations of ASTC textures on Astral Chain. This happened because yuzu detected a cube texture and forced 6 faces, generating a texture larger than what the TIC reported.
2020-03-12texture_cache/surface_params: Force depth=1 on 2D texturesReinUsesLisp1-2/+4
Sometimes games will sample a 2D array TIC with a 2D access in the shader. This causes bad interactions with the rest of the texture cache. To emulate what the game wants to do, force a depth=1 on 2D textures (not 2D arrays) and let the texture cache handle the rest.
2020-02-28renderer_opengl: Reintroduce dirty flags for render targetsReinUsesLisp1-1/+19
2020-02-28gl_rasterizer: Remove dirty flagsReinUsesLisp1-19/+1
2020-02-16texture_cache: Implement layered framebuffer attachmentsReinUsesLisp3-31/+26
Layered framebuffer attachments is a feature that allows applications to write attach layered textures to a single attachment. What layer the fragments are written to is decided from the shader using gl_Layer.
2020-02-16texture_cache: Avoid matches in 3D texturesReinUsesLisp1-8/+11
Code before this commit was trying to match 3D textures with another target. Fix that.
2020-02-16surface_base: Implement texture buffer flushesReinUsesLisp1-0/+4
Implement downloads to guest memory from texture buffers on the generic cache and OpenGL.
2020-02-15texture: Implement R32IReinUsesLisp1-1/+2
2020-01-27texture_cache/surface_base: Fix layered break downReinUsesLisp1-1/+1
Layered break downs was passing "layer" as a "depth" parameter. This commit addresses that.
2020-01-16format_lookup_table: Fix ZF32_X24S8 component typesReinUsesLisp1-1/+1
Component types for ZF32_X24S8 were using UNORM. Drivers will set FLOAT, UINT, UNORM, UNORM; causing a format mismatch. This commit addresses that.
2020-01-14texture_cache/surface_params: Make GetNumLayers publicReinUsesLisp1-4/+5
2019-12-22Texture Cache: Improve documentationFernando Sahmkow2-4/+5
2019-12-22Texture Cache: Address FeedbackFernando Sahmkow2-11/+11
2019-12-22Texture Cache: Add HLE methods for building 3D textures within the GPU in certain scenarios.Fernando Sahmkow3-1/+139
This commit adds a series of HLE methods for handling 3D textures in general. This helps games that generate 3D textures on every frame and may reduce loading times for certain games.
2019-11-29texture_cache/surface_base: Fix out of bounds texture viewsReinUsesLisp1-7/+4
Some texture views were being created out of bounds (with more layers or mipmaps than what the original texture has). This is because of a miscalculation in mipmap bounding. end_layer and end_mipmap are out of bounds (e.g. layer 6 in a cubemap), there's no need to add one more there. Fixes OpenGL errors and Vulkan crashes on Splatoon 2.
2019-11-20Texture_Cache: Redo invalid Surfaces handling.Fernando Sahmkow3-32/+101
This commit aims to redo the full setup of invalid textures and guarantee correct behavior across backends in the case of finding one by using black dummy textures that match the target of the expected texture.
2019-11-15format_lookup_table: Address feedbackReinUsesLisp2-30/+24
format_lookup_table: Drop bitfields format_lookup_table: Use std::array for definition table format_lookup_table: Include <limits> instead of <numeric>
2019-11-15texture_cache: Use a table instead of switch for texture formatsReinUsesLisp5-12/+288
Use a large flat array to look up texture formats. This allows us to properly implement formats with different component types. It should also be faster.
2019-11-14texture_cache: Drop abstracted ComponentTypeReinUsesLisp3-17/+5
Abstracted ComponentType was not being used in a meaningful way. This commit drops its usage. There is one place where it was being used to test compatibility between two cached surfaces, but this one is implied in the pixel format. Removing the component type test doesn't change the behaviour.
2019-10-16texture_cache: Avoid unnecessary surface copies within PickStrategy() and TryReconstructSurface()Lioncash1-2/+2
We can take these by const reference and avoid making unnecessary copies, preventing some atomic reference count increments and decrements.
2019-10-15video_core/texture_cache: Amend Doxygen referencesLioncash1-57/+78
Amends the doxygen comments so that they properly resolve. While we're at it, we can correct some typos and fix up some of the comments' formatting in order to make them slightly nicer to read.
2019-10-15common: Rename binary_find.h to algorithm.hLioncash2-3/+3
Makes the header more general for other potential algorithms in the future. While we're at it, include a missing <functional> include to satisfy the use of std::less.
2019-10-05Texture_Cache: Blit Deduction corrections and simplifications.Fernando Sahmkow1-18/+20
2019-10-05TextureCache: Add the ability to deduce if two textures are depth on blit.Fernando Sahmkow1-2/+142
2019-09-06texture_cache: Minor changesReinUsesLisp4-19/+17
2019-09-06gl_rasterizer: Implement image bindingsReinUsesLisp3-30/+98
2019-09-06texture_cache: Pass TIC to texture cacheReinUsesLisp3-26/+24
2019-08-30video_core: Silent miscellaneous warnings (#2820)Rodrigo Locatti2-3/+0
* texture_cache/surface_params: Remove unused local variable * rasterizer_interface: Add missing documentation commentary * maxwell_dma: Remove unused rasterizer reference * video_core/gpu: Sort member declaration order to silent -Wreorder warning * fermi_2d: Remove unused MemoryManager reference * video_core: Silent unused variable warnings * buffer_cache: Silent -Wreorder warnings * kepler_memory: Remove unused MemoryManager reference * gl_texture_cache: Add missing override * buffer_cache: Add missing include * shader/decode: Remove unused variables
2019-07-19video_core: Resolve -Wreorder warningsLioncash1-3/+2
Ensures that the constructor members are always initialized in the order that they're declared in.
2019-07-17Texture_Cache: Rebase FixesFernando Sahmkow1-6/+0
2019-07-17Maxwell3D: Rework the dirty system to be more consistant and scaleableFernando Sahmkow1-5/+12
2019-07-14Texture_Cache: Address FeedbackFernando Sahmkow3-13/+17
2019-07-14Texture_Cache: Remove some unprecise fallback case and clang formatFernando Sahmkow2-13/+5
2019-07-14Texture_Cache: Force Framebuffer reset if an active render target is unregistered.Fernando Sahmkow3-10/+36
2019-07-14Texture_Cache: Correct Linear Structural Match.Fernando Sahmkow1-3/+6
2019-07-05texture_cache: Address FeedbackFernando Sahmkow1-2/+2
2019-07-05texture_cache: Correct Texture Buffer UploadingFernando Sahmkow1-0/+2
2019-06-30texture_cache: Pack sibling queries inside a methodReinUsesLisp1-6/+8
2019-06-30texture_cache: Use std::vector reservation for sampled_texturesReinUsesLisp1-17/+10
2019-06-30texture_cache: Style changesReinUsesLisp2-8/+4
2019-06-29texture_cache: Use std::array for siblings_tableReinUsesLisp1-10/+13
2019-06-29texture_cache: Address feedbackReinUsesLisp2-11/+12
2019-06-26texture_cache: Correct variable naming.Fernando Sahmkow1-3/+3
2019-06-26texture_cache: Corrections, documentation and assertsFernando Sahmkow1-42/+42
2019-06-26surface_params: Corrections, asserts and documentation.Fernando Sahmkow2-43/+58
2019-06-25copy_params: use constexpr for constructorFernando Sahmkow1-3/+4
2019-06-25texture_cache: Query MemoryManager from the systemFernando Sahmkow1-11/+7
2019-06-24texture_cache: Include "core/core.h"ReinUsesLisp1-4/+1
2019-06-24texture_cache/surface_view: Address feedbackReinUsesLisp1-1/+0
2019-06-24texture_cache/surface_base: Address feedbackReinUsesLisp2-2/+10
2019-06-21texture_cache: Style and CorrectionsFernando Sahmkow3-2/+4
2019-06-21texture_cache: Eliminate linear textures fallthroughFernando Sahmkow1-4/+0
2019-06-21texture_cache: Correct format R16U as siblingFernando Sahmkow2-1/+2
2019-06-21texture_cache: Implement texception detection and texture barriers.Fernando Sahmkow1-5/+32
2019-06-21texture_cache: Corrections to buffers and shadow formats use.Fernando Sahmkow1-10/+34
2019-06-21texture_cache: Implement Irregular Views in surfacesFernando Sahmkow2-4/+24
2019-06-21surface: Correct format S8Z24Fernando Sahmkow1-4/+0
2019-06-21texture_cache: Initialize all siblings to invalid pixel format.Fernando Sahmkow1-6/+15
2019-06-21decoders: correct block calculationFernando Sahmkow1-0/+16
2019-06-21texture_cache: Use siblings textures on Rebuild and fix possible error on blittingFernando Sahmkow1-10/+23
2019-06-21texture_cache: Implement siblings texture formats.Fernando Sahmkow2-12/+31
2019-06-21texture_cache: correct texture buffer on surface paramsFernando Sahmkow1-4/+11
2019-06-21texture_cache: eliminate accelerated depth->color/color->depth copies due to driver instability.Fernando Sahmkow1-8/+1
2019-06-21texture_cache: correct mutex locksFernando Sahmkow1-4/+4
2019-06-21texture_cache: Don't Image Copy if component types differFernando Sahmkow1-1/+2
2019-06-21texture_cache: move some large methods to cpp filesFernando Sahmkow4-139/+135
2019-06-21texture_cache: Optimize GetSurface and use references on functions that don't change a surface.Fernando Sahmkow1-6/+6
2019-06-21texture_cache: Implement Buffer Copy and detect Turing GPUs Image CopiesFernando Sahmkow1-9/+31
2019-06-21texture_cache uncompress-compress is untopological.Fernando Sahmkow4-14/+48
This makes conflicts between non compress and compress textures to be auto recycled. It also limits the amount of mipmaps a texture can have if it goes above it's limit.
2019-06-21texture_cache: Correct copying between compressed and uncompressed formatsFernando Sahmkow3-10/+27
2019-06-21texture_cache: Only load on recycle with accurate GPU.Fernando Sahmkow1-2/+3
Testing so far has proven this to be quite safe as texture memory read added a 2-5ms load to the current cache.
2019-06-21Fix rebase errorsFernando Sahmkow1-0/+4
2019-06-21texture_cache: Handle uncontinuous surfaces.Fernando Sahmkow3-19/+79
2019-06-21texture_cache: return null surface on invalid addressFernando Sahmkow1-0/+12
2019-06-21texture_cache: Add checks for texture buffers.Fernando Sahmkow1-2/+16
2019-06-21texture_cache: Fermi2D reform and implement View MirageFernando Sahmkow3-20/+49
This also does some fixes on compressed textures reinterpret and on the Fermi2D engine in general.
2019-06-21texture_cache: loose TryReconstructSurface when accurate GPU is not on.Fernando Sahmkow2-3/+19
Also corrects some asserts.
2019-06-21texture_cache: Document the most important methods.Fernando Sahmkow1-8/+87
2019-06-21texture_cache: Try to Reconstruct Surface on bigger than overlap.Fernando Sahmkow1-4/+11
This fixes clouds in SMO Cap Kingdom and lens on Cloud Kingdom. Also moved accurate_gpu setting check to Pick Strategy
2019-06-21texture_cache: Implement Guard mechanismFernando Sahmkow1-1/+8
2019-06-21texture_cache: General FixesFernando Sahmkow4-33/+68
Fixed ASTC mipmaps loading Fixed alignment on openGL upload/download Fixed Block Height Calculation Removed unalign_height
2019-06-21surface_params: Ensure pitch is always written to avoid surface leaksReinUsesLisp1-0/+2
2019-06-21gl_framebuffer_cache: Use a hashed struct to cache framebuffersReinUsesLisp1-1/+1
2019-06-21texture_cache return invalid buffer on deactivated color_maskFernando Sahmkow1-0/+5
2019-06-21surface_params: Optimize CreateForTextureReinUsesLisp1-2/+4
Instead of using Common::AlignUp, use Common::AlignBits to align the texture compression factor.
2019-06-21texture_cache: Add ASync ProtectionsFernando Sahmkow1-0/+10
2019-06-21Remove Framebuffer reconfiguration and restrict rendertarget protectionFernando Sahmkow2-26/+19
2019-06-21texture_cache: Implement GPU Dirty FlagsFernando Sahmkow1-15/+22
2019-06-21texture_cache: Optimize GetMipBlockHeight and GetMipBlockDepthFernando Sahmkow1-13/+6
2019-06-21texture_cache: Implement L1_Inner_cacheFernando Sahmkow1-13/+30
2019-06-21video_core: Use un-shifted block sizes to avoid integer divisionsReinUsesLisp4-24/+28
Instead of storing all block width, height and depths in their shifted form: block_width = 1U << block_shift; Store them like they are provided by the emulated hardware (their block_shift form). This way we can avoid doing the costly Common::AlignUp operation to align texture sizes and drop CPU integer divisions with bitwise logic (defined in Common::AlignBits).
2019-06-21texture_cache: Change internal cache from lists to vectorsReinUsesLisp1-6/+7
2019-06-21Reduce amount of size calculations.Fernando Sahmkow5-86/+85
2019-06-21texture_cache: Correct premature texceptionsFernando Sahmkow2-7/+36
Due to our current infrastructure, it is possible for a mipmap to be set on as a render target before a texception of that mipmap's superset be set afterwards. This is problematic as we rely on texture views to set up texceptions and protecting render targets targets for 3D texture rendering. One simple solution is to configure framebuffers after texture setup but this brings other problems. This solution, forces a reconfiguration of the framebuffers after such event happens.
2019-06-21texture_cache: Implement guest flushingFernando Sahmkow2-8/+25
2019-06-21Fixes to mipmap's process and reconstruct processFernando Sahmkow2-3/+3
2019-06-21surface_base: Add parenthesis to EmplaceOverview's predicateReinUsesLisp1-3/+2
2019-06-21Texture Cache: Implement Blitting and Fermi CopiesFernando Sahmkow1-4/+15
2019-06-21surface_view: Add constructor for ViewParamsReinUsesLisp2-28/+19
2019-06-21surface_base: Split BreakDown into layered and non-layered variantsReinUsesLisp1-45/+48
2019-06-21surface_base: Silence truncation warnings and minor renames and reorderingReinUsesLisp2-32/+37
2019-06-21copy_params: Use constructor instead of C-like initializationReinUsesLisp3-47/+39
2019-06-21Correct Mipmaps View method in Texture CacheFernando Sahmkow1-3/+2
2019-06-21Change texture_cache chaching from GPUAddr to CacheAddrFernando Sahmkow3-78/+59
This also reverses the changes to make invalidation and flushing through the GPU address.
2019-06-21Corrections to Structural MatchingFernando Sahmkow2-24/+53
The texture will now be reconstructed if the width only matches on GoB alignment.
2019-06-21Implement Texture Cache V2Fernando Sahmkow1-88/+366
2019-06-21Correct Surface Base and Views for new Texture CacheFernando Sahmkow7-380/+466
2019-06-21texture_cache: Remove execution context copies from the texture cacheReinUsesLisp4-151/+41
This is done to simplify the OpenGL implementation, it is needed for Vulkan.
2019-06-21texture_cache: Split texture cache into different filesReinUsesLisp8-0/+1364