373 Commits

Author SHA1 Message Date
JosJuice
fb07406f10 VideoCommon: Defer creating TextureInfo
TextureCacheBase::LoadImpl has a hot path where the passed-in
TextureInfo never gets used. Instead of passing in a TextureInfo, let's
pass in the stage and create the TextureInfo from the stage if needed.

This unlocks somewhere above an additional 4% performance boost in the
Hoth level of Rogue Squadron 2 on my PC. Performance varies, making it
difficult for me to measure, so treat this as a very approximate number.
2026-01-18 13:04:06 +01:00
JMC47
035bcffc63 Merge pull request #14289 from Sintendo/typos
Fix various typos and spelling mistakes
2026-01-17 19:10:50 -05:00
iwubcode
b556bd99d7 Merge pull request #14268 from JoshuaVandaele/std-tounderlying
c++23: Replace Common::ToUnderlying with std::to_underlying
2026-01-17 16:49:57 -06:00
Sintendo
1e0473e44f Fix various typos and spelling mistakes 2026-01-17 20:11:38 +01:00
JosJuice
f7b4d2738b VideoCommon: Don't create mipmap vector in TextureInfo
The TextureInfo constructor creates a vector of MipLevels. This could be
good for performance if MipLevels are accessed very often for each
TextureInfo, but that's not the case. Dolphin creates thousands of
TextureInfos per second that it never accesses the mipmap levels of
because there's a hit in the texture cache, and in the uncommon case of
a texture cache miss, the mipmap levels only get looped through once.

To make the common case of texture cache hits as fast as possible, let's
not create a vector in the TextureInfo constructor. This commit
implements a custom iterator for MipLevels instead.

In my testing on the Death Star level of Rogue Squadron 2, this speeds
up TextureInfo::FromStage by 200%, giving an overall emulation speedup
of a bit over 1%. Results on the Hoth level are even better, with
TextureInfo::FromStage being close to 300% faster and overall emulation
being over 4% faster. (Single core, no GPU texture decoding.)
2026-01-17 17:57:07 +01:00
Joshua Vandaƫle
55f0715ad4 c++23: Replace Common::ToUnderlying with std::to_underlying
Requires at least GCC 11, Clang 13, MSVC 19.30 (VS2022 17.0), or AppleClang 13.1.6 (XCode 13.3).
2026-01-09 23:49:10 +01:00
iwubcode
2d21a99205 VideoCommon: separate the concept of a 'resource' from an 'asset'. A resource is potentially multiple assets that are chained together but represent one type of data to the rest of the system. An example is a 'material'. A 'material' is a collection of textures, a custom shader, and some metadata that all comes together to form what the concept of the material is. There will be a 'material' resource. For now, start small by introducing the interface and change our texture loading which used assets from the old resource manager, to an actual resource. 2025-11-23 11:04:24 -06:00
iwubcode
59d9c1772a VideoCommon: rename 'IsAnisostropicEnhancementSafe' to 'IsAnisotropicEnhancementSafe' in TextureCacheBase 2025-11-23 11:04:24 -06:00
TellowKrinkle
21ac489d57 VideoCommon: Fix render to texture in wrong layout 2025-10-30 20:50:17 -05:00
Admiral H. Curtiss
3fb80bec9b Merge pull request #13780 from jordan-woyak/fix-text-filter-nearest
VideoCommon: Fix "Force Nearest" texture filter setting.
2025-08-01 21:59:04 +02:00
Sintendo
f2392e4048 Avoid map/set double lookups
Fix some common anti-patterns with these data structures.

- You can dereference the iterator returned by `find` to access the
  underlying value directly, without an extra `operator[]`/`at`.
- Rather than checking for an element before insertion/deletion, you can
  just do the operation and if needed check the return value to
  determine if the insertion/deletion succeeded.
2025-07-08 06:53:42 +02:00
Jordan Woyak
60156f4f94 VideoCommon: Fix "Force Nearest" texture filter setting. 2025-06-28 15:52:27 -05:00
iwubcode
7afa9e6c6f VideoCommon: use CustomResourceManager in the texture cache and hook up to our hires textures 2025-06-06 23:03:02 -05:00
JMC47
ad3650abfc Merge pull request #13093 from mitaclaw/ranges-modernization-4-projection
Ranges Algorithms Modernization - Projection
2025-03-23 15:56:13 -04:00
Jordan Woyak
561aee7707 Config: Expose Default and 1x Anisotropic Filtering setting. 2025-03-17 20:46:24 -05:00
Pokechu22
79a1e480ca Enable anisotropic filtering when the game requests it 2025-03-17 20:46:19 -05:00
mitaclaw
e4efe011d7 Modernize std::max_element with ranges and projections 2025-03-09 13:26:39 -07:00
mitaclaw
8b9f92a0af Modernize std::sort with ranges and projections
In PPCTables.cpp, the code is currently unused so I was unable to test it.

In CustomPipeline.cpp, a pointer to member function cannot be used due to 16.4.5.2.1 of the C++ Standard regarding "addressable functions". https://eel.is/c++draft/namespace.std#6

In Fs.cpp and DirectoryBlob.cpp, these examples used projections in a previous iteration of this commit, but no longer do. Still, they remain in this commit because the PR they would actually belong to is already merged.
2025-03-09 13:26:38 -07:00
Jordan Woyak
c18c039089 VideoCommon: Move backend_info out of VideoConfig struct. 2025-03-09 01:42:45 -06:00
dreamsyntax
07f712f8a0 Core/VideoCommon: Fix duplicate OSD Custom Textures messages
Resolves duplicate OSD messages for Loading and Found custom textures.
VideoBackend initialization results in HiresTexture::Init being called.
We already call HiresTexture::Update when OnNewTitleLoad is called.
Thus we can remove HiresTextures::Init completely as it is redundant.
2024-12-28 01:09:50 -07:00
mitaclaw
6ca7e2856b Modernize std::find with ranges 2024-10-10 15:28:11 -07:00
Dr. Dystopia
618b41a459 Use 'contains' method 2024-08-14 22:18:28 +02:00
iwubcode
c2bc2ccd23 VideoCommon: pull texture sampler out of texture cache so that it can be used in other places in the future 2024-06-01 23:21:04 -05:00
JosJuice
3cfa233b63 VideoCommon: Use GetSpanForAddress safely in texture decoding
Now only VertexLoader remains... But that one might be tricky.
2024-04-20 18:31:08 +02:00
JosJuice
54773bc5d2 VideoCommon: Remove calls to GetPointer
This fourth part of my series of patches to get rid of unsafe uses of
GetPointer takes care of the "easy" cases in VideoCommon. Three uses of
GetPointer now remain in Dolphin: VertexLoaderManager, TextureInfo, and
the software renderer's TextureSampler.
2024-04-09 21:08:57 +02:00