Commit Graph

5256 Commits

Author SHA1 Message Date
Dentomologist
47a86d920f GeneralWidget: Recommend default video backend in tooltip
Recommend the platform's default video backend in the Backend tooltip
instead of always recommending OpenGL.
2024-11-03 12:28:30 -08:00
Dentomologist
7b8610f4ea VideoBackendBase: Clarify function name
Rename GetDefaultBackendName to GetDefaultBackendConfigName to
distinguish it from the display name.
2024-11-03 12:26:57 -08:00
TellowKrinkle
5ef4fcb005 VideoCommon: Implement primitive breaking for primitive lists 2024-10-29 22:38:22 -05:00
JMC47
05e3a52de0
Merge pull request #13135 from Tilka/warning
VideoCommon: fix -Wshadow-uncaptured-local warning and simplify
2024-10-19 15:12:25 -04:00
Tilka
fed8220c39
Merge pull request #12712 from Dentomologist/remove_defined_out_code
Remove defined-out code
2024-10-19 19:36:19 +01:00
JMC47
21f4319302
Merge pull request #13092 from mitaclaw/ranges-modernization-3-spaceship
Ranges Algorithms Modernization - Compare
2024-10-17 13:37:16 -04:00
Tillmann Karras
0e41adb7b7 VideoCommon: fix -Wshadow-uncaptured-local warning and simplify 2024-10-16 18:36:00 +01:00
JosJuice
07605bf67c
Merge pull request #13090 from mitaclaw/ranges-modernization-1-trivial
Ranges Algorithms Modernization - Trivial
2024-10-15 17:08:55 +02:00
JMC47
ef8b753cd7
Merge pull request #13115 from Tilka/syncfifo
VideoCommon: fix common opcode decoding errors
2024-10-14 21:26:08 -04:00
Pokechu22
937bb2aa2e Cache normals in addition to binormals and tangents
Fixes LIT (https://bugs.dolphin-emu.org/issues/13635). The text does not include normals, but has lighting enabled. With the previous default of (0, 0, 0), lighting was always black (as dot(X, (0, 0, 0)) is always 0). It seems like the normal from the map in the background (0, 0, 1) is re-used.

LIT also has the vertex color enabled while vertex color is not specified, the same as SMS's debug cubes; the default MissingColorValue GameINI value of solid white seems to work correctly in this case.
2024-10-12 10:32:41 -07:00
Tilka
c1832d17f6
Merge pull request #13117 from mitaclaw/ranges-modernization-9-trivial-find
Ranges Algorithms Modernization - Find
2024-10-11 20:27:18 +01:00
mitaclaw
8b1975ab18 GraphicsMod: Simplify std::sort using ranges and projections 2024-10-11 12:08:22 -07:00
mitaclaw
e8d5fb89e4 C++20: Synthesize operator!= From operator==
The inequality operator is automatically generated by the compiler if `operator==` is defined.
2024-10-10 20:23:55 -07:00
mitaclaw
e4fb837f4b Modernize std::find_if with ranges
In BTEmu.cpp, `std::mem_fn` was not necessary for the predicate to compile.
2024-10-10 15:28:11 -07:00
mitaclaw
6ca7e2856b Modernize std::find with ranges 2024-10-10 15:28:11 -07:00
mitaclaw
728663bdc0 Modernize std::binary_search with ranges
In VolumeVerifier.cpp, constructing a `std::string_view` of the volume's GameID is unnecessary, as `std::`(`ranges::`)`binary_search` supports heterogeneous lookup. The usage in GameFile.cpp is a perfect example.
2024-10-10 00:53:48 -07:00
mitaclaw
ebf7cebc32 Modernize std::sort with ranges 2024-10-10 00:53:48 -07:00
mitaclaw
9bd1dae41d Modernize std::fill with ranges
In DSPCore.cpp, there were two `std::fill` uses that could be simplified using `std::fill_n`. Due to their proximity with other `std::fill` algorithms being modernized with ranges, I chose to make these examples into the rare `std::ranges::fill_n`.
2024-10-10 00:53:48 -07:00
Tillmann Karras
e96960e2a6 VideoCommon: fix common opcode decoding errors
Many games call GXSetGPFifo() without first waiting for the GP to finish
consuming outstanding commands in the previous GP fifo. Normally,
Dolphin runs OpcodeDecoding in 1000-cycle time slices. In that time
frame, GXSetGPFifo() has probably completed and the GP read pointer now
points to entirely new memory. If the last GP fifo copy ended in an
incomplete command, the new GP fifo would most likely desync for a
while. To avoid all this, give the GP a time slice right now to copy the
remaining data from the previous GP fifo.
2024-10-10 04:07:44 +01:00
Pokechu22
929bcbdde9 Fifo analyzer: Fix indexed XF loads showing "bytes" instead of "words"
Indexed XF loads specify the number of 32-bit words (generally floats, but light data has some integers) to load, not the number of bytes. This was only a mistake in the fifo analyzer text; the actual implementation already loaded words.
2024-10-06 21:56:48 -07:00
JMC47
339f9311fb
Merge pull request #12918 from JosJuice/revert-revert-audit-get-state
Partially revert "Revert "Audit uses of IsRunning and GetState""
2024-10-06 11:26:06 -04:00
Jules Blok
b191c0f7d8
Merge pull request #12208 from PatrickFerry/add-vertex-depth-range-case
Use Vertex Depth Range when zRange Exceeds farZ
2024-10-05 14:14:11 +02:00
JosJuice
6ca2da53e8 Partially revert "Revert "Audit uses of IsRunning and GetState""
This reverts the revert commit bc67fc97c3,
except for the changes in BaseConfigLoader.cpp, which caused the bug
that made us revert 72cf2bdb87. PR 12917
contains an improved change to BaseConfigLoader.cpp, which can be merged
(or rejected) independently.

A few changes have also been made based on review comments.
2024-10-04 18:35:41 +02:00
JosJuice
2da3e49b1e
Merge pull request #13078 from Dentomologist/videobackendbase_only_populate_backend_info_when_uninitialized
VideoBackendBase: Only populate backend info when uninitialized
2024-10-04 18:31:06 +02:00
JMC47
e259831bcf
Merge pull request #13087 from TellowKrinkle/PresentSkip
VideoBackends:Vulkan: Prevent freezes during window resize on Linux
2024-10-02 21:09:25 -04:00
TellowKrinkle
7e1a9490c0 VideoBackends:Vulkan: Don't try to present if swapchain acquire failed 2024-10-02 19:22:16 -05:00
TellowKrinkle
fd94ff252d VideoCommon: Dirty pixel shader manager on efb scale changes 2024-09-30 01:12:55 -05:00
Dentomologist
dc1b961c09 VideoBackendBase: Only populate backend info when uninitialized
Prevent potential issues when creating the Graphics window (and thus
calling PopulateBackendInfo) while the core state is Stopping, like we
already do while it's Starting or Running.
2024-09-27 12:20:48 -07:00
Dentomologist
0a1084fad5 VideoBackendBase: Check Core state in PopulateBackendInfo
Remove the PopulateBackendInfoFromUI function, which had a single caller
(GraphicsWindow::OnBackendChanged) and checked that the core wasn't
running or starting before calling PopulateBackendInfo.

Move the core state check into PopulateBackendInfo and have
OnBackendChanged call that instead. This guarantees the check is
performed by all callers of PopulateBackendInfo, preventing
potential reintroduction of the crash fixed in 3d4ae63f if another call
to PopulateBackendInfo is added.

As of the previous commit the only other caller of PopulateBackendInfo
is Core::Init shortly before s_state is set to Starting, so it will
always pass the check and so maintain its current behavior.
2024-09-26 17:12:26 -07:00
Dentomologist
91f7b776ca GraphicsWindow: Fix crash when opening during emulation startup
Fix a crash when opening the Graphics window for the first time during
emulation startup when the backend is Vulkan, D3D11, or D3D12.

Don't call PopulateBackendInfo() from the Host thread when the core is
starting up. First, the function has already been called in Core::Init()
so we don't need to again. More importantly, PopulateBackendInfo() calls
g_video_backend->InitBackendInfo(), and the Vulkan and D3D
implementations of those functions load and then unload libraries (and
their associated function pointers) which are potentially in use by
other threads.

This crash was reliably reproducible with the following steps:
1) Select an affected backend.
2) Enable "Compile Shaders Before Starting"
3) Delete the cached shaders (but not the .uidcache file) for the game
   you're testing.
4) Close and reopen Dolphin.
5) Start the game.
6) While the game is still booting or compiling shaders, open the
   Graphics window for the first time in that Dolphin session.

Fixes https://bugs.dolphin-emu.org/issues/13634.
2024-09-26 17:12:26 -07:00
Dentomologist
c3d6d2189a Texture Dumping: Show OSD message on startup and when toggled
If texture dumping is enabled, notify the user on emulation startup
using an On Screen Display message.

Also notify the user when texture dumping is toggled.

Addresses https://bugs.dolphin-emu.org/issues/12445.
2024-09-06 13:00:25 -07:00
Admiral H. Curtiss
e1b1e4b4cf
Merge pull request #13031 from parona-source/libfmt-11
Add support for libfmt-11
2024-08-31 15:34:48 +02:00
Alfred Wingate
d7c93d87be
Add support for libfmt-11
fmt::join was moved into fmt/ranges.h

Signed-off-by: Alfred Wingate <parona@protonmail.com>
2024-08-22 16:54:35 +03:00
Bryan Jacobs
7ec6d116e8 Graphics: Adapt aspect ratio when SBS/TAB 3D is used
Adds support for choosing to present the full resolution
independently to each eye when using side-by-side or
top-and-bottom 3D.
2024-08-22 07:11:43 +10:00
Dr. Dystopia
9602f36248 Remove redundant semicolons 2024-08-20 14:59:54 +02:00
Tillmann Karras
20f4643c74 VideoCommon: force 32-byte alignment for display list address and size 2024-08-18 05:00:38 +01:00
mitaclaw
9fa4eb9aab Use 'contains' method 2024-08-15 14:20:16 -07:00
Dr. Dystopia
618b41a459 Use 'contains' method 2024-08-14 22:18:28 +02:00
Dentomologist
d627b78c46 Adjust order and spacing of various #includes
Move some #includes around to match the Contributing guidelines.
2024-07-26 14:28:34 -07:00
TellowKrinkle
cab6e7c12e Properly link against xxhash
Things using dolphin_find_optional_system_library need to link against the name used there or they won't work with both the system and bundled cases
2024-07-06 16:56:44 -05:00
iwubcode
36ccbbc06e VideoCommon: add ability to serialize a texture asset metadata to json 2024-06-29 14:50:40 -05:00
iwubcode
1c3402502b VideoCommon: set individual texture asset filter/wrap values when loading from json 2024-06-29 14:50:40 -05:00
iwubcode
75a0a1ed67 VideoCommon: update texture asset to properly set near sampler state value 2024-06-29 14:50:40 -05:00
Admiral H. Curtiss
ce2f4101f3
Core/VideoCommon: Revert change from #12828
This causes Dual Core to lock up during the boot sequence, because it tries to wait for a not-yet-running GPU thread.

Fixes https://bugs.dolphin-emu.org/issues/13559
2024-06-23 03:44:05 +02:00
Admiral H. Curtiss
9b33b777cf
Merge pull request #12828 from JosJuice/unify-state-variables-2
Clean up Core::GetState
2024-06-22 20:20:54 +02:00
JosJuice
72cf2bdb87 Audit uses of IsRunning and GetState
Some pieces of code are calling IsRunning because there's some
particular action that only makes sense when emulation is running, for
instance showing the state of the emulated CPU. IsRunning is appropriate
to use for this. Then there are pieces of code that are calling
IsRunning because there's some particular thing they must avoid doing
e.g. when the CPU thread is running or IOS is running. IsRunning isn't
quite appropriate for this. Such code should also be checking for the
states Starting and Stopping. Keep in mind that:

* When the state is Starting, the state can asynchronously change to
  Running at any time.
* When we try to stop the core, the state gets set to Stopping before we
  take any action to actually stop things.

This commit adds a new method Core::IsUninitialized, and changes all
callers of IsRunning and GetState that look to me like they should be
changed.
2024-06-21 20:52:55 +02:00
JosJuice
962230f91e Core: Store current state in less places
Core::GetState reads from four different pieces of state: s_is_stopping,
s_hardware_initialized, s_is_booting, and CPUManager::IsStepping.
I'm keeping that last one as is for now because there's code in Dolphin
that sets it directly, but we can unify the other three to make things
easier to reason about.

This commit also gets rid of s_is_started. This was previously used in
Core::IsRunningAndStarted to ensure true wouldn't be returned until the
CPU thread was started, but it wasn't used in Core::GetState, so
Core::GetState would happily return State::Running after we had
initialized the hardware but before we had initialized the CPU thread.
As far as I know, there are no callers that have any real need to know
whether the boot process is currently initializing the hardware or the
CPU thread. Perhaps once upon a time there was a desire to make the
apploader debuggable, but a long time has passed without anyone stepping
up to implement it, and the way CBoot::RunApploader is implemented makes
it rather difficult. So this commit makes all the functions in Core.cpp
consider the core to still be starting until the CPU thread is started.
2024-06-21 20:46:44 +02:00
Admiral H. Curtiss
5728ebf7ad
Merge pull request #12867 from AdmiralCurtiss/uicommon-dependency
CMake dependency fixes
2024-06-21 20:01:44 +02:00
LillyJadeKatrin
45563a872c Scale challenge icons based on screen height 2024-06-19 13:59:59 -04:00
JMC47
9886199cb1
Merge pull request #12859 from LillyJadeKatrin/retroachievements-challenge-hide
Hide Challenge Icons when OSD Messages Disabled
2024-06-19 02:29:08 -04:00
LillyJadeKatrin
9e1f5ed4b5 Stack Challenge Icons Horizontally 2024-06-15 22:42:40 -04:00
LillyJadeKatrin
a79f428972 Fix margins on icon-only messages
Messages with an icon and no text (such as in the game start sequence) had an oversized margin due to ImGui adding padding for an empty string.
2024-06-15 22:42:35 -04:00
LillyJadeKatrin
1b00b4e3d8 OSD messages display horizontally
OSD messages with an icon and text will display the text to the right of the icon instead of below it.
2024-06-15 22:30:39 -04:00
Admiral H. Curtiss
c5a030e7ab
VideoCommon: Fix format string injection vulnerability from leaderboards 2024-06-15 23:12:19 +02:00
Admiral H. Curtiss
a95c3dbc97
Merge pull request #12818 from iwubcode/json_file_operations
Common: add Json helper utilities for loading or saving to a file
2024-06-15 16:43:38 +02:00
Admiral H. Curtiss
f71d6498d0
Merge pull request #12855 from LillyJadeKatrin/retroachievements-challenge-refactor
Refactored Challenge Icons to handle icon updates
2024-06-15 16:24:24 +02:00
LillyJadeKatrin
3d5a1f7d33 Refactored Challenge Icons to handle icon updates
If an icon is displayed on screen before it downloads, it was displaying a default icon but it would fail to load the actual icon even after it was downloaded. This fixes that.
2024-06-15 07:36:49 -04:00
LillyJadeKatrin
7eec723f3f Hide Challenge Icons when OSD Messages Disabled 2024-06-14 00:19:45 -04:00
JMC47
71171a9e4d
Merge pull request #12819 from iwubcode/texture_asset_sampler_in_pipeline
VideoCommon: update custom pipeline to use a texture's sampler instead of linear sampler if the texture is used
2024-06-11 21:13:57 -04:00
JMC47
16c7869ab2
Merge pull request #12721 from iwubcode/custom_shader_alpha
VideoCommon: allow custom shaders to set the alpha value
2024-06-11 21:13:24 -04:00
iwubcode
fa5a6547c6 VideoCommon: add texture type to texture config comparison 2024-06-08 14:28:11 -05:00
Admiral H. Curtiss
81b6bfaa1e
Merge pull request #12832 from JosJuice/retro-achievements-less-ifdefs
Use a stub AchivementManager when USE_RETRO_ACHIEVEMENTS isn't defined
2024-06-06 22:42:53 +02:00
JosJuice
22aa88109f Use a stub AchivementManager when USE_RETRO_ACHIEVEMENTS isn't defined
This lets us reduce the number of USE_RETRO_ACHIEVEMENTS ifdefs in the
code base, reducing visual clutter. In particular, needing an ifdef for
each call to IsHardcodeModeActive was annoying to me. This also reduces
the risk that someone writes code that accidentally fails to compile
with USE_RETRO_ACHIEVEMENTS disabled.

We could cut down on ifdefs even further by making HardcodeWarningWidget
always exist, but that would result in non-trivial code ending up in the
binary even with USE_RETRO_ACHIEVEMENTS disabled, so I'm leaving it out
of this PR. It's not a lot of code though, so I might end up revisiting
it at some point.
2024-06-06 08:26:20 +02:00
Scott Mansell
dbe7616bdd
Merge pull request #12817 from iwubcode/imgui-mouse-position-event
VideoCommon: use imgui mouse position event when the mouse position changes
2024-06-05 18:50:26 +12: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
iwubcode
11c37de695 VideoCommon: update custom pipeline to use a a texture's sampler if the texture is in use 2024-05-31 23:19:51 -05:00
iwubcode
50b95bbea9 InputCommon / VideoCommon: update to use new JsonFromFile function 2024-05-31 23:13:25 -05:00
iwubcode
51b69bb339 VideoCommon: use imgui mouse position event when the mouse position changes 2024-05-31 22:31:54 -05:00
LillyJadeKatrin
dc8f3f6eae Refactored Achievement Badges into Texture Layers
Achievement badges/icons are refactored into the type CustomTextureData::ArraySlice::Level as that is the data type images loaded from the filesystem will be. This includes everything that uses the badges in the Qt UI and OnScreenDisplay, and similarly removes the OSD::Icon type because Level already contains that information.
2024-05-23 10:41:45 -04:00
Admiral H. Curtiss
5c2f73986a
Merge pull request #12537 from TellowKrinkle/MTLSubgroup
VideoCommon: More specific subgroup op bugs
2024-05-21 22:17:22 +02:00
iwubcode
d7a8ec4353 VideoCommon: use imgui input queue for mouse clicks, this helps keep input smooth regardless of frame-times and matches keyboard events, this system was introduced in 1.87 2024-05-18 11:49:19 -05:00
Tilka
c442c0d5e5
Merge pull request #10957 from Pokechu22/std-bitcast
Replace Common::BitCast with std::bit_cast
2024-05-04 08:24:59 +01:00
Pokechu22
fbbfea8e8e Replace Common::BitCast with std::bit_cast 2024-05-03 18:43:51 -07:00
mitaclaw
0df401b164 Core::IsRunning: Avoid Global System Accessor 2024-05-01 08:54:17 -07:00
LillyJadeKatrin
7895b739ee Display active leaderboard data on screen
Up to four leaderboards are displayed in a window in the bottom right of the screen (vertically above challenge icons, if there are any). As per RetroAchievements standards, the markers only display the current leaderboard values with no further context necessary.
2024-05-01 06:43:19 -04:00
iwubcode
9d28c371e7 VideoCommon: allow custom shaders to set the alpha value for use when blending is enabled 2024-04-28 18:15:27 -05:00
sowens99
3ab1334cd9 VideoCommon: Only show input count when recording 2024-04-26 20:06:57 -04:00
JosJuice
c204b33314 VideoCommon/BPStructs: Add a missing bounds check
Happened to find this when working on the previous commit.
2024-04-20 18:31:08 +02: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
5c9bb80638 Memmap: Replace GetPointer with GetSpanForAddress
To ensure memory safety, callers of GetPointer have to perform a bounds
check. But how is this bounds check supposed to be performed?
GetPointerForRange contained one implementation of a bounds check, but
it was cumbersome, and it also isn't obvious why it's correct.

To make doing the right thing easier, this commit changes GetPointer to
return a span that tells the caller how many bytes it's allowed to
access.
2024-04-20 18:31:08 +02:00
Jordan Woyak
df7dd5d36a Config: Expose GFX_OVERLAY_PROJ_STATS setting in UI. 2024-04-18 14:45:28 -05:00
Jordan Woyak
1e27183dff VideoCommon: Show the average projection to viewport ratio in statistics
window.
2024-04-18 14:45:28 -05:00
Admiral H. Curtiss
8268ae1cf7
Merge pull request #12698 from iwubcode/xfb_copy_hash_in_present
VideoCommon: add xfbs hashes to present info if available
2024-04-18 17:11:49 +02:00
Dentomologist
dbaa844e57 Remove defined-out code 2024-04-15 12:17:35 -07:00
Admiral H. Curtiss
b3939052b4
Merge pull request #12436 from Filoppi/frame-dump-raw-internal-resolution
Frame dump at raw internal resolution
2024-04-13 03:39:37 +02:00
Admiral H. Curtiss
2f13be5a2d
VideoConfig: Adjust FrameDumpResolutionType enum class to style guidelines 2024-04-13 03:21:39 +02:00
iwubcode
abf380b705 VideoCommon: add xfb hash values (if available) to present information 2024-04-09 18:59:33 -05:00
iwubcode
e5b7b2e9ee VideoCommon: add xfbs presented to video events 2024-04-09 18:57:32 -05: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
mitaclaw
eb92d6f0a8 Core::GetState: Avoid Global System Accessor 2024-04-08 16:23:23 -07:00
Filoppi
66592f79f2 Video: remove enforced resolution least common multiple of 4 when dumping screenshots and not videos (only videos encoders have this limit).
NOTE: this will likely trigger FIFOCI differences.
2024-04-08 22:54:45 +03:00
Filoppi
72db62e178 Video: split frame dumping settings into 3 resolution dumping modes
also polish aspect ratio related code for clarity
2024-04-08 22:54:45 +03:00
Pokechu22
a3951dc2d7 Fix out of bounds accesses for invalid vertex component formats
On all platforms, this would result in out of bounds accesses when getting the component sizes (which uses stuff from VertexLoader_Position.h/VertexLoader_TextCoord.h/VertexLoader_Normal.h). On platforms other than x64 and ARM64, this would also be out of bounds accesses when getting function pointers for the non-JIT vertex loader (in VertexLoader_Position.cpp etc.). Usually both of these would get data from other entries in the same multi-dimensional array, but the last few entries would be truly out of bounds. This does mean that an out of bounds function pointer can be called on platforms that don't have a JIT vertex loader, but it is limited to invalid component formats with values 5/6/7 due to the size of the bitfield the formats come from, so it seems unlikely that this could be exploited in practice.

This issue affects a few games; Def Jam: Fight for New York (https://bugs.dolphin-emu.org/issues/12719) and Fifa Street are known to be affected.

I have not done any hardware testing for this PR specifically, though I *think* I previously determined that at least a value of 5 behaves the same as float (4). That's what I implemented in any case. I did previously determine that both Def Jam: Fight for New York and Fifa Street use an invalid normal format, but don't actually have lighting enabled when that normal vector is used, so it doesn't change rendering in practice.

The color component format also has two invalid values, but VertexLoader_Color.h/.cpp do check for those invalid ones and return a default value instead of doing an out of bounds access.
2024-04-04 12:50:34 -07:00
Filoppi
1f34adf216 Video: move all padding added for frame dumping to a single function,
which also avoids the output window from being resized randomly to be a multiple of 4
2024-04-03 13:32:01 +03:00
Filoppi
d6230bbad8 Video: Change the frame dumper to actually use the raw emulation output resolution, avoiding any scaling if possible.
This should make comparisons much more reliable as pixels wouldn't be smushed together or stretched.
2024-04-03 13:32:01 +03:00
Jordan Woyak
550e008774 VideoCommon: Scan texture dumping directory + subdirectories to not re-dump existing files. 2024-03-21 20:27:34 -05:00
Jordan Woyak
ac5c2d9bf2 VideoCommon: Prefer D3D11/12 over OpenGL on Windows. 2024-03-15 19:51:04 -05:00
Admiral H. Curtiss
58616a6e4c
Merge pull request #12438 from Filoppi/custom_relative_aspect_ratio
Add Custom Relative and Raw (Squared Pixels) aspect ratios
2024-03-02 14:14:19 +01:00
Filoppi
41b19e262f Add custom relative and raw (squared pixels) aspect ratio modes 2024-02-29 21:11:19 +02:00
Lioncash
7bf77a56f4 VertexManagerBase: Initialize m_ticks_elapsed on construction
Ensures that this always has a deterministic value on construction like
everything else in the class.
2024-02-28 10:21:08 -05:00
Admiral H. Curtiss
5090a028e6
Merge pull request #12435 from Filoppi/fix-aspect-ratio-stuck
Fix aspect ratio heuristics getting stuck to a state
2024-02-20 21:36:43 +01:00
Filoppi
48fbbdba7c Video: update widescreen heuristic code to never get stuck to specific old values when changing settings 2024-02-20 22:26:19 +02:00
Filoppi
3f102ea8c2 Video: Make the game resolution (within the window) snap to the XFB size if they are within a ~1 pixel treshold on one axis only.
This takes care of making the image clearer in some edge cases where the game was already running at near perfect
 4:3 with no stretching, and the VI aspect ratio didn't match the XFB by one pixel, making the image stretched and blurry.
-Video: Fix `FindClosestIntegerResolution() using the window aspect ratio and not the draw aspect ratio, causing it to prefer
 stretching over black bars in cases when it wasn't desirable.
2024-02-20 03:09:11 +02:00
Filoppi
95ee0ac781 Video: Fix aspect ratio heuristics getting stuck to widescreen (or to non widescreen) (m_is_game_widescreen variable) if the user first forced the aspect ratio to 16:9/4:3 and then set it back to Auto. 2024-02-20 02:42:52 +02:00
iwubcode
a1147dae6e VideoCommon: move factory names to be a static inside each action class, so that they can be reused in the future for serialization 2024-02-18 15:45:10 -06:00
Admiral H. Curtiss
9b5fd5d34e
Merge pull request #12281 from TellowKrinkle/AsahiGL33
VideoCommon: Don't use indexed output for fbfetch
2024-02-18 02:33:50 +01:00
Mai
21300bb21b
Merge pull request #12457 from iwubcode/asset_memory_limit
VideoCommon: handle asset memory going over reserved limit correctly
2024-02-16 15:46:52 -05:00
iwubcode
2ab877586d VideoCommon: make mesh asset data loadable by asset loader 2024-02-12 21:45:32 -06:00
iwubcode
60772ed9d2 VideoCommon: add functionality to prepare for a mesh asset that is loaded from a GLTF file 2024-02-11 13:28:00 -06:00
TellowKrinkle
5949911a5a VideoCommon: Don't use indexed output for fbfetch
A nonzero index makes no sense, and Mesa doesn't like it when you supply an index
2024-02-07 03:52:31 +01:00
Admiral H. Curtiss
df5baab873
Merge pull request #12550 from lioncash/dead
VertexLoaderManager: Remove unused entry struct
2024-02-03 02:38:02 +01:00
Lioncash
4f40bdf501 VertexLoaderManager: Use fill() in Init()
Same behavior, less code.
2024-02-01 23:04:40 -05:00
Lioncash
ea95c82a01 VertexLoaderManager: Remove unused entry struct
This isn't used anywhere, so it can be removed.
2024-02-01 23:04:39 -05:00
Lioncash
7096f99f79 CustomPipeline: Mark arrays as constexpr
Ensures that these go into the ro section.
2024-02-01 23:02:45 -05:00
Lioncash
59211589b9 CustomPipeline: Make use of emplace_back() in GlobalConflicts()
We can use the string_view arguments to directly construct strings
inside of the global_result vector.
2024-02-01 23:02:45 -05:00
Lioncash
353ceedb50 CustomPipeline: Resolve unused variable warning
We can just use holds_alternative here instead.
2024-02-01 23:02:45 -05:00
Admiral H. Curtiss
da6b5dd38a
Merge pull request #12546 from lioncash/event
VideoCommon/Statistics: Remove global system accessor from s_after_frame_event
2024-01-31 21:16:21 +01:00
Admiral H. Curtiss
18abf7c768
Merge pull request #12544 from lioncash/getmod
GraphicsModGroup: Allow heterogenous lookup for GetMod()
2024-01-31 20:17:26 +01:00
Lioncash
cac66317aa VideoCommon/Statistics: Remove global system accessor from s_after_frame_event
Instead, we make the event take a reference to the system and then pass
it in when the event is triggered.

This does introduce two other accessors, but these are much easier to
refactor out over time, and without modification to the existing event
interface.
2024-01-31 13:12:09 -05:00
Lioncash
0dfefacdf4 VertexLoaderBase: Collapse std namespace for hash and mark noexcept
Makes the hash specialization a little less noisy. Also we mark it
noexcept, since hashes shouldn't be throwing exceptions (and this can be
optimized on).
2024-01-31 12:43:00 -05:00
Lioncash
8e4b2565cd TextureConfig: Collapse std namespace for hash
Lets us collapse the namespacing and make the specialization a little
less noisy.
2024-01-31 12:41:33 -05:00
Lioncash
b63dcd504d RenderState: Collapse std namespace for hash
We can specify the namespace on the hash to make the specialization a
little less noisy.
2024-01-31 12:40:10 -05:00
Lioncash
5bfaa3a966 NativeVertexFormat: Collapse std namespace and mark hash noexcept
We can just tag the std:: onto the end of the specialization to make it
less noisy.

Also mark it as noexcept, since hashes shouldn't throw exceptions.
2024-01-31 12:37:44 -05:00
Lioncash
40b050fe37 GraphicsModGroup: std::move graphics_mod in Load()
The config object is quite heavyweight, so we should move this instead
of copying.
2024-01-31 12:27:43 -05:00
Lioncash
ccacda5e2c GraphicsModGroup: Simplify try_add_mod()
We can use contains() here, and also move the mod config if it's valid
instead of copying it, since it contains quite a bit of allocated data.
2024-01-31 12:23:21 -05:00
Lioncash
a1879ea099 GraphicsModGroup: Allow heterogenous lookup for GetMod()
Allows using keys that aren't directly std::string as the key. This lets
us use std::string_view for the incoming path name, making it more
flexible with other string types.
2024-01-31 12:05:17 -05:00
Admiral H. Curtiss
9a3e770c23
Migrate SConfig::bWii to System. 2024-01-31 12:54:07 +01:00
TellowKrinkle
b7a451fc87 VideoCommon: Post to analytics when bug is overridden 2024-01-28 23:24:23 -06:00
TellowKrinkle
99f0c3fa01 VideoCommon: Add ability for backends to override bugs 2024-01-28 23:24:22 -06:00
TellowKrinkle
463269f704 VideoBackends:Multiple: Split up BUG_BROKEN_SUBGROUP_OPS
We now use subgroup ops for more than just a minor performance optimization
2024-01-28 23:20:39 -06:00
Admiral H. Curtiss
8482a50154
Merge pull request #12530 from iwubcode/custom_shaders_compilation_fixes
VideoCommon: fix some issues when compiling custom shaders
2024-01-28 14:30:37 +01:00
Admiral H. Curtiss
4843705061
Merge pull request #12534 from iwubcode/custom-pipeline-refactor
VideoCommon: refactor the custom pipeline logic to be reusable
2024-01-28 14:28:23 +01:00
Admiral H. Curtiss
c9715e7e7d
Merge pull request #12535 from iwubcode/vertexmanager_draw_refactor
VideoCommon: refactor drawing into its own function
2024-01-28 14:27:41 +01:00
JosJuice
990303a028
Merge pull request #12519 from lioncash/leak
PostProcessing: Don't potentially leak memory in BlitFromTexture()
2024-01-27 22:29:45 +01:00
iwubcode
c34b3ae390 VideoCommon: refactor drawing into its own function 2024-01-27 14:45:34 -06:00
iwubcode
3e3967ff94 VideoCommon: refactor the custom pipeline logic in the graphics mod action into a separate class, so it is reusable 2024-01-27 00:12:49 -06:00
Admiral H. Curtiss
c3652a7129
Merge pull request #12532 from lioncash/json
GraphicsMod/ShaderAsset: Lessen object churn a little bit
2024-01-26 18:52:52 +01:00
Mai
a553308775
Merge pull request #12443 from iwubcode/custom_pipeline_action_material_cubemap
VideoCommon: update custom pipeline action to support a variety of texture samplers, support for materials, and more!
2024-01-26 12:39:37 -05:00
Lioncash
7a59ecc39d GraphicsTarget: Reduce object churn a little 2024-01-24 23:00:01 -05:00
Lioncash
1b7da37114 GraphicsTargetGroup: Reduce object churn a little 2024-01-24 22:52:58 -05:00
Lioncash
24f952c12b GraphicsModFeature: Reduce object churn a little 2024-01-24 22:48:53 -05:00
Lioncash
0385b40bd8 GraphicsModAsset: Reduce object churn a little 2024-01-24 22:47:22 -05:00
Lioncash
2253d9a95d GraphicsModGroup: Mark move constructor and assignment as noexcept
Allows containers to optimize off of std::move_if_noexcept
2024-01-24 22:41:30 -05:00
Lioncash
0327b11e0b GraphicsModGroup: Reduce object churn
We can emplace and move to avoid doing object copies.
2024-01-24 22:40:05 -05:00
Lioncash
e3e20df185 GraphicsMod: Avoid some object churn
We have quite a bit of allocation churn going on here, so we can emplace
and move where appropriate to alleviate that a little.
2024-01-24 22:34:50 -05:00
Lioncash
7b6463ef1f ShaderAsset: Emplace value instances when possible in ToJson()
Constructs elements directly inside the container and also makes it
shorter to read in certain instances.
2024-01-24 18:47:44 -05:00
iwubcode
cf081e839d VideoCommon: fix compilation error in pixel shaders when per-pixel lighting isn't set for custom shaders 2024-01-23 21:50:42 -06:00
iwubcode
a8d45b8e55 VideoCommon: fix compilation error in uber pixel shaders when pixel shader lighting isn't set for custom shaders 2024-01-23 21:50:42 -06:00
iwubcode
7118fc5b7b VideoCommon: fix pixel shader compilation error that happens when uint output is defined 2024-01-23 21:50:42 -06:00
iwubcode
a37fd83218 VideoCommon: fix uber shader pixel compilation error that happens when uint output is defined 2024-01-23 21:50:41 -06:00