Commit Graph

5153 Commits

Author SHA1 Message Date
iwubcode a40a952177 VideoCommon: add a method to calculate a default value for ShaderAsset and another to list its types 2024-01-23 11:58:32 -06:00
iwubcode b5a6225e1a VideoCommon: add function to serialize ShaderAsset to json 2024-01-23 11:58:32 -06:00
Admiral H. Curtiss ac670d99e2
VideoCommon: Only initialize Bounding Box if supported by GPU/driver. 2024-01-20 12:34:24 +01:00
Admiral H. Curtiss 95cba6be2b
Core/Movie: Refactor to class, move to System.
A bit of global state remains (the `header` in `BeginRecordingInput()`) due to unclear lifetime requirements.
2024-01-15 08:05:30 +01:00
Mai c76dee7807
Merge pull request #12285 from iwubcode/serialize_graphics_mods
VideoCommon: add ability to serialize graphics mod to json object
2024-01-13 14:15:14 -05:00
Admiral H. Curtiss 637fd49909
FifoRecorder: Move instance to System. 2024-01-12 15:06:06 +01:00
Admiral H. Curtiss fc2ec826d4
FifoPlayer: Move instance to System. 2024-01-05 20:15:18 +01:00
Admiral H. Curtiss 07c035e659
Core/SystemTimers: Refactor to class, move to System. 2024-01-04 23:35:19 +01:00
iwubcode 1073722cdf Revert "VideoCommon: revert max pixel shader samplers back to 8 for Android devices."
This reverts commit 79648e1c24.
2024-01-03 18:43:44 -06:00
Jules Blok f1d446da3f
Merge pull request #12452 from Tilka/efb24
VideoCommon: apply "force 24-bit color" to EFB-to-VRAM copies as well
2023-12-29 03:51:59 +01:00
Lioncache a23cf2121d VideoCommon/PixelEngine: Generify lock guards
We don't need to specify the type of the mutex being passed in.
2023-12-22 14:19:29 -05:00
Lioncache 0505f057ca VideoCommon/PixelEngine: Remove global system accessor in UpdateInterrupts()
Now that the system instance is passed through, this is no longer necessary.
2023-12-22 14:19:29 -05:00
Lioncache e539dbba4c VideoCommon/PixelEngine: Passthrough system instance in constructor
Simplifies the interface in terms of usage
2023-12-22 14:19:26 -05:00
Tilka 8d4575cfd8
Merge pull request #12454 from lioncash/proc
VideoCommon/CommandProcessor: Pass system instance through constructor
2023-12-21 17:46:28 +00:00
iwubcode b669580aeb VideoCommon: handle asset memory going over reserved limit correctly by erroring when the memory is exceeded and not allowing more assets to load until memory is released 2023-12-21 01:05:56 -06:00
iwubcode 79648e1c24 VideoCommon: revert max pixel shader samplers back to 8 for Android devices.
It was reported that some games (Zelda Wind Waker and Zelda Twilight Princess but others may also exhibit the issue) have graphical issues with the max pixel samplers set to 16 on some Android devices (ex: Pixel6); since this was increased for a performance heavy feature (custom shaders) just disable it for now.  In the future, this could be handled more elegantly
2023-12-21 00:36:44 -06:00
Lioncache f97b2d472a VideoCommon/CommandProcessor: Pass system instance through constructor
Makes the use of the interface a little less noisy, especially given
how much of the interface depends on an instance being present.
2023-12-20 09:02:53 -05:00
iwubcode fcfcf14e07 VideoCommon: when loading a texture asset, set sampler to linear sampler if the texture type is not defined and the 2d texture is assumed 2023-12-19 21:51:42 -06:00
iwubcode ae758f489a VideoCommon: update custom pipeline action to support a variety of texture samplers (2D, 2D array, and cube maps) 2023-12-19 21:51:42 -06:00
Tillmann Karras ddb4566a41 VideoCommon: apply "force 24-bit color" to EFB-to-VRAM copies as well 2023-12-20 02:25:07 +00:00
Lioncache b0d244b772 VideoCommon/Fifo: Pass system instance through FifoManager constructor
Given how many member functions make use of the system instance,
it's likely just better to pass the system instance in on construction.

Makes the interface a little less noisy to use.
2023-12-18 22:03:25 -05:00
Admiral H. Curtiss 715a551dac
Merge pull request #12170 from Filoppi/custom_aspect_ratio
Add support for custom aspect ratios
2023-12-18 05:19:06 +01:00
Filoppi a6dfeed318 Video: make the "Auto" resolution setting also follow the max res setting, to avoid trying to create texture bigger than the maximum supported one 2023-12-18 02:00:25 +02:00
Filoppi ff03189a60 Video: fix auto resolution scale calculations 2023-12-18 02:00:25 +02:00
Filoppi fdd1934f12 Video: fix Auto Resolution Scale not updating when the window was resized.
Also fixes the widescreen hack not fully updating when the aspect ratio setting changed on the spot.
2023-12-18 02:00:25 +02:00
Filoppi b3aa6ad93b Video: implement custom aspect ratio support (already exposed to Qt).
This also renamed some variables/functions.
2023-12-18 02:00:24 +02:00
Filoppi f96bea95d8 Video: rename Presenter::SetWindowSize() 2023-12-18 00:28:15 +02:00
Filoppi 24004af814 Video: polish aspect ratio related code comments to make it clearer 2023-12-18 00:28:14 +02:00
Mai bcd74a81a9
Merge pull request #12370 from iwubcode/more_samplers
VideoBackends / VideoCommon: update max pixel shader samplers from 8 to 16
2023-12-17 14:50:23 -05:00
Mai 0125b5182f
Merge pull request #12409 from iwubcode/custom_material_graphics_mod_action_data
VideoCommon: prepare graphics mods for custom shader material data
2023-12-17 14:42:34 -05:00
Mai b27c15fab6
Merge pull request #12382 from iwubcode/shader_asset_default_value
VideoCommon: update shader asset to provide a variant default value
2023-12-17 14:41:55 -05:00
Mai f589c04aa7
Merge pull request #12372 from iwubcode/texture_usage_flag
VideoBackends / VideoCommon: add type enum to dictate how the texture is used; support texture 2d
2023-12-17 14:40:39 -05:00
Admiral H. Curtiss 190c4e8cda
Merge pull request #12427 from JosJuice/jitarm64-msr-updated-logical-imm
JitArm64: Fix MSRUpdated(ARM64Reg) with FEATURE_FLAG_PERFMON set
2023-12-16 17:22:23 +01:00
JosJuice e0eb4ef5bc JitArm64: Use enum class for LogicalImm size parameter
This should prevent issues like the one fixed in the previous commit
from happening again.
2023-12-16 16:48:26 +01:00
iwubcode 12dd15c8dd VideoBackends / VideoCommon: add type enum to dictate whether a texture is a 2D texture, a texture array, or a cube map; support 2D texture type across backends
Co-authored-by: TellowKrinkle <tellowkrinkle@gmail.com>
2023-12-15 11:06:02 -06:00
iwubcode b1d9e13d75 VideoCommon: prepare graphics mods for custom shader material data 2023-12-12 17:56:26 -06:00
Mai ea3033731d
Merge pull request #12240 from iwubcode/material_asset_additional_properties
VideoCommon: add additional data types to material asset
2023-12-12 18:38:20 -05:00
Tillmann Karras 5b4b8dba61 VideoCommon: add message to XF load assert 2023-12-12 22:35:02 +00:00
Lioncash a812a1f938 LightingShaderGen: Resolve -Wshadow warnings
Given how the lambda doesn't capture anything, we can move this to a
internally linked function, which prevents any name shadowing.
2023-12-12 16:55:06 -05:00
Tilka 4d98c237c7
Merge pull request #12371 from lioncash/span
VideoCommon: Use std::span for BoundingBox::Write()
2023-12-12 20:47:08 +00:00
iwubcode b69d336838 VideoCommon: update shader asset to provide a variant default value 2023-12-12 00:01:22 -06:00
Lioncash 4c7a4831cb CustomAssetLibrary: Remove unused GetAssetSize() function
There's a direct analogue of this function within
DirectFilesystemAssetLibrary that *is* used, however, so we can get rid
of this one.
2023-12-11 22:00:52 -05:00
Lioncash 49f44c1334 VertexManagerBase: Resolve -Wsign-compare warning 2023-12-11 18:00:34 -05:00
Admiral H. Curtiss 4f02f526b8
Merge pull request #12392 from lioncash/decl
General: Resolve -Wmissing-declaration warnings
2023-12-11 23:39:23 +01:00
Admiral H. Curtiss 54301d709a
Merge pull request #12389 from lioncash/cheeve
AchievementManager: Make GetInstance() and GetLock() return a reference
2023-12-11 23:37:29 +01:00
Lioncash e8b4796273 PostProcessing: Mark helper functions as static
These didn't have any prototypes and were generating
-Wmissing-declaration warnings.
2023-12-11 17:07:59 -05:00
Lioncash abb5cc3a3a ShaderAsset: Mark ParseShaderProperties() as static
This had no function prototype, so this can be internally linked.

Resolves a -Wmissing-declaration warning.
2023-12-11 17:05:06 -05:00
Lioncash 2b2ee61e79 CustomShaderCache: Resolve -Wreorder warnings
Lays out the initializer lists to be in the same order that
initialization would occur in.
2023-12-11 16:59:03 -05:00
Lioncash d90537cc18 AchievementManager: Return by reference from GetLock()
This makes the API a little nicer to use, since you don't need to do
a mandatory dereference when passing the lock into any kind of scope
guard.
2023-12-11 13:51:50 -05:00
Lioncash e55f9ed102 AchievementManager: Make GetInstance() return a reference
The internal static member will always have a valid lifetime. Makes this
consistent with other instance based objects in our code.
2023-12-11 13:36:39 -05:00
iwubcode 3658d3bffe VideoCommon: add ability to serialize graphics mod to json object 2023-12-10 18:29:21 -06:00
iwubcode ac862b04ab VideoBackends / VideoCommon: update max pixel shader samplers from 8 to 16, this allows us to support more samplers than the native Wii/GC 2023-12-10 18:14:02 -06:00
iwubcode 02756be381 VideoCommon: prevent a potential custom texture crash that can occur when a shared_ptr gets released while a pointer to its member data is still being used 2023-12-09 23:43:40 -06:00
Lioncash 0df7908025 VideoCommon/Present: Remove use of g_presenter inside Presenter class
There's no need to self reference a global of the class itself when we
can just call the function directly.
2023-12-09 20:15:32 -05:00
Lioncash 5f6c76af51 VideoCommon: Use std::span for BoundingBox::Write()
Crosses off a lingering TODO.

Also amends a few nearby cases where a u32 cast was being repromoted to
size_t.
2023-12-09 16:33:21 -05:00
LillyJadeKatrin e992225b88 Bugfix - small square in bottom right corner
Fixed a bug in OSUI created by the challenge icons that caused a small rectangle to appear in the bottom right corner of the screen.
2023-12-08 00:33:29 -05:00
LillyJadeKatrin caa729f84a Display Active Challenges On Screen
The active challenges, aka the primed achievements, are displayed on screen as a series of icons in the bottom right corner of the screen via OnScreenUI.
2023-12-07 16:02:15 -05:00
iwubcode e204b3c8ee VideoCommon: add additional data types (int, int2, float, bool, etc) as properties of materials and some helper functions to support sending the data to the GPU 2023-12-04 00:12:31 -06:00
Pokechu22 69cf8b3470 VertexLoader: Use Common::SmallVector 2023-12-02 15:54:52 -08:00
Pokechu22 4116344785 VertexLoader: Remove unnecessary calls to VertexLoader_TextCoord::GetDummyFunction 2023-12-02 15:54:52 -08:00
Pokechu22 36796abc08 VertexLoader: Fix wrong array being used if color 1 is present but color 0 isn't
This worked correctly on the JIT vertex loaders, and for the equivalent case with texture coordinates. I'm not aware of any games this affects (but libogc does mention a semi-related scenario at 6bc0317c7d/gc/ogc/gx.h (L1855-L1857).)
2023-12-02 15:54:52 -08:00
Pokechu22 1ee6824324 VertexLoaderTest: Add test for skipped texture coordinates
Jimmie Johnson's Anything with an Engine is known to use texture coordinate 7 (and only texture coordinate 7) in some cases. There are a lot of possible edge-cases, so this test brute-forces all combinations with coordinates 0, 1, and 2.
2023-12-02 15:54:52 -08:00
Zopolis4 f0d2ce4683
Remove _M_X86 in favour of _M_X86_64 2023-11-28 23:03:20 +11:00
Mai 731013c316
Merge pull request #12263 from Dentomologist/realtime_cheatsearch_update
CheatSearch: Automatically update Current Values
2023-11-28 04:17:06 +01:00
Tilka b8a897fda7
Merge pull request #12328 from iwubcode/xf_state_manager
VideoCommon: move xf state management to its own class
2023-11-28 02:04:26 +00:00
iwubcode fb86c6342e VideoCommon: move texture dump function out of texture cache to its own free function so it can be used elsewhere. Doing this change may also slightly improve performance of this operation 2023-11-26 16:35:03 -06:00
iwubcode 849a0c13b5 VideoCommon: move xf state management to its own class, so changes can be detected in places other than VertexShaderManager 2023-11-26 16:27:26 -06:00
JosJuice 3d5f95b298
Merge pull request #12297 from Filoppi/improve_paper_white
Change HDR paper white default to 203 to match the ITU recommendations
2023-11-26 18:03:39 +01:00
Lioncash 04011373f3 CustomAssetLibrary: Remove unnecessary qualifier in LoadInfo
The type is already in visible scope, so we don't need the rather length
qualifier.
2023-11-25 18:01:44 -05:00
Lioncash b85902ccb5 CustomAssetLibrary: Add virtual destructor
This is used as a base pointer inside CustomPipelineAction, so this
should probably really have a virtual destructor to ensure derived
objects are torn down properly.
2023-11-25 18:01:17 -05:00
Filoppi a8fd938a06 Change paper white default to 203 to match the ITU 2023-11-14 20:21:34 +02:00
Pokechu22 3984d1964b Fix accidental fallthrough in BPStructs
This caused us to update the indirect texture information in shaders more often than we needed to, which probably doesn't matter in practice since it's only used in ubershaders and copyyscale and stride are generally only updated before EFB/XFB copies, which generally will have other changes afterwards.
2023-11-12 10:39:56 -08:00
Tilka e7b922ee62
Merge pull request #12286 from Pokechu22/more-bp-register-descriptions
Add descriptions for more BP registers
2023-11-12 07:59:32 +00:00
Pokechu22 da8407e01c Add descriptions for more BP registers 2023-11-11 23:32:17 -08:00
Pokechu22 dfdb9a4a07 Clarify per-texture tmem information in the fifo analyzer 2023-11-11 23:32:17 -08:00
Pokechu22 ea41d0e384 Convert BPMEM_LOADTLUT1 to a struct 2023-11-11 23:32:17 -08:00
Pokechu22 2a1d445b30 Enhance description of BPMEM_PRELOAD_MODE in the fifo analyzer 2023-11-11 23:32:17 -08:00
Pokechu22 6bad17b170 Rename bpmem.copyMipMapStrideChannels to bpmem.copyDestStride
As far as I can tell, it has nothing to do with the mipmap/half_scale functionality, but does change based on the width of the destination texture (and the destination texture is half the width if half_scale is set). The comment that was there (which dates back to the initial megacommit) seems to not have accounted for the width aspect; it was first used as an actual stride in bbbe898839 (the first commit that used it at all).
2023-11-11 23:32:14 -08:00
Tillmann Karras ac9079f2ca VideoCommon: copy software renderer logic for blend mode priorities
I've not tested this on hardware, but it fixes issue 12271 (shadow
people in Deal or No Deal - Special Edition).
2023-11-12 05:51:28 +00:00
Pokechu22 9543555bfe Fix typo in comment for bpmem.texcoords 2023-11-11 16:13:37 -08:00
Dentomologist fdb7328c73 CheatSearch: Update Current Values at end of frame
At the end of each frame automatically update the Current Value for
visible table rows in the selected and visible CheatSearchWidget (if
any). Also update all Current Values in all CheatSearchWidgets when the
State changes to Paused.

Only updating visible table rows serves to minimize the performance cost
of this feature. If the user scrolls to an un-updated cell it will
promptly be updated by either the next VIEndFieldEvent or the State
transitioning to Paused.
2023-10-31 17:34:31 -07:00
JosJuice 899d61bc7d Jit64: Recompile asm routines on cache clear
This is needed so that the checks added in the previous commit will be
reevaluated if the value of m_enable_dcache changes.

JitArm64 was already recompiling its asm routines on cache clear by
necessity. It doesn't have the same setup as Jit64 where the asm
routines are in a separate region, so clearing the JitArm64 cache
results in the asm routines being cleared too.
2023-10-31 19:43:49 +01:00
Tilka 2212a5b225
Merge pull request #12254 from AdmiralCurtiss/savestate-no-xfb-stride
VideoCommon: Don't swap on state load when there's no XFB.
2023-10-28 02:14:30 +01:00
Admiral H. Curtiss 4f0c8b1657
VideoCommon: Don't swap on state load when there's no XFB.
This triggers an assert in TCacheEntry::SetXfbCopy() otherwise if you load a savestate that was made before the first XFB has been rendered.
2023-10-25 18:24:42 +02:00
TellowKrinkle 323aea60d6 VideoCommon: Fix VS point/line on older GLSL 2023-10-24 23:18:01 -05:00
Admiral H. Curtiss cb13ad7a5f
VideoCommon: Add support for icons in OSD messages. 2023-10-17 02:47:29 +02:00
iwubcode b292022bc7 VideoCommon: use ToLower function in assets when parsing json, for proper locale independent behavior 2023-10-16 19:23:00 -05:00
iwubcode fec2a8af8c VideoCommon: add additional properties to ShaderAsset to support custom shader uniforms 2023-10-16 19:02:27 -05:00
Admiral H. Curtiss 2677fd9a8e
Merge pull request #12185 from iwubcode/custom_shader_uniform_backend_support
VideoBackends / VideoCommon: add support for custom shader uniforms to D3D, Vulkan, OGL
2023-10-15 00:21:56 +02:00
iwubcode b251194a7e VideoCommon: wait for the GPU to be finished doing any work before invalidating pipelines when graphic config changes 2023-10-10 18:17:24 -05:00
iwubcode 0e8f8ea930 VideoCommon: instead of using 'CustomTextureData' directly, use 'TextureData' for texture assets, this allows us to provide additional metadata for textures. Such as a sampler or type information (to distinguish cube maps) 2023-10-10 09:58:14 -05:00
iwubcode a099f4f41b VideoCommon: given the changes to pipeline interaction, update the global version variable to reflect those changes and force pipelines to be rebuilt 2023-10-06 02:17:43 -05:00
iwubcode b6d321bfb1 VideoBackends / VideoCommon: add new uniform buffer object for custom shader materials (slot 3, geometry shader buffer moves to slot 4 if available) 2023-10-06 02:17:42 -05:00
iwubcode 92accc3ef7 VideoCommon: add custom pixel shader constants as a buffer of data to be passed to all backends 2023-10-05 21:20:16 -05:00
Patrick Ferry 9e950c6959 Use Vertex Depth Range when zRange Exceeds farZ
When the inverted depth range is unsupported and zRange is greater than farZ then min_depth becomes a negative value and far_depth will then exceed a depth of 1.0 (which is outside the scope of most backends and greater than GX_MAX_DEPTH of the console).

This happens when the backend supports depth clamping the min_depth is not clamped to zero.
2023-09-28 04:17:56 +01:00
get 63467559b2
fmt 10.0.0-10.1.1 compile fixes
Implicit conversion operators and enums was removed for parity with std::format (fce74caa15).
2023-09-21 01:19:23 +02:00
Admiral H. Curtiss 1a821465f4
Merge pull request #12166 from iwubcode/cubemap_shader_texture_integration
VideoCommon: add cubemap to ShaderAsset and TextureAsset
2023-09-12 16:56:26 +02:00
Jordan Woyak 7cc4304918 VideoCommon: Expose the widescreen heuristic's standard and widescreen ratio values in onion config. 2023-09-06 18:45:28 -05:00
iwubcode 589834f562 VideoCommon: add cubemap as a sampler target for shaders, add cubemap as a valid texture asset 2023-09-05 21:11:19 -05:00
JMC47 76a00551d1
Merge pull request #11419 from OatmealDome/widescreen
VideoCommon: Allow widescreen heuristic's constants to be overridden by onion config
2023-09-05 13:25:07 -04:00
OatmealDome 4938b99600 VertexManagerBase: Allow widecreen heuristic constants to be overriden by onion config 2023-09-05 11:50:49 -04:00
OatmealDome de781a6fa7 RenderBase: Allow widescreen heuristic's transition threshold to be overridden by onion config 2023-09-05 11:49:22 -04:00
JMC47 9419d92446
Merge pull request #12139 from iwubcode/more_shader_texture_properties
VideoCommon: add additional texture sampler types to ShaderAsset
2023-09-04 22:45:56 -04:00
JMC47 82ea4f4c70
Merge pull request #12137 from iwubcode/custom_pipeline_more_error_checking
VideoCommon: additional error checking for CustomPipelineAction
2023-09-04 22:43:41 -04:00
JMC47 627282473b
Merge pull request #12136 from iwubcode/texture_metadata_struct
VideoCommon: add TextureData structure with metadata
2023-09-04 22:40:50 -04:00
JMC47 900439ea0d
Merge pull request #12102 from iwubcode/cubemap_custom_texture
VideoCommon: add ability to load cube maps into custom texture data
2023-09-03 18:29:00 -04:00
Sketch fb852a5062 VideoCommon: Deinit Graphics Mod Manager implicitly 2023-09-03 16:06:08 -04:00
Admiral H. Curtiss 46a596c0d3
Merge pull request #12148 from Dentomologist/fifo_convert_memoryupdate_type_to_enum_class
Fifo: Convert MemoryUpdate::Type to enum class
2023-09-03 03:34:35 +02:00
iwubcode 62fee2f3b6 VideoCommon: add loading cube maps from DDS files and loading it into our custom texture object. Custom texture object now has the concept of slices in addition to levels. Traditional custom textures have a single slice 2023-09-02 20:20:09 -05:00
Dentomologist 9cabf20aaa Fifo: Convert MemoryUpdate::Type to enum class 2023-09-02 18:19:26 -07:00
Dentomologist d5d3eb5025 TextureCacheBase: Add m_ prefix to member variables 2023-09-01 22:52:17 -07:00
Admiral H. Curtiss 69db8a615f
Merge pull request #12145 from JosJuice/ubershaderpixel-uint
VideoCommon: Fix GLSL uint handling in UberShaderPixel
2023-08-29 12:33:54 +02:00
Admiral H. Curtiss df120b0630
Merge pull request #12000 from Filoppi/window_res_fix
Video: Fix issues with the window presentation
2023-08-28 23:50:50 +02:00
JosJuice 5b112dbf2c VideoCommon: Fix GLSL uint handling in UberShaderPixel 2023-08-28 21:17:01 +02:00
iwubcode f982c556b5 VideoCommon: add additional texture sampler types to ShaderAsset 2023-08-26 12:12:37 -05:00
Admiral H. Curtiss 2502e412b3
Merge pull request #12117 from JosJuice/config-callback-cpu
Don't call RunAsCPUThread in config callbacks
2023-08-26 16:34:46 +02:00
Admiral H. Curtiss 5c4671f573
Merge pull request #12126 from JosJuice/small-vector
Move SmallVector to Common
2023-08-26 14:15:18 +02:00
iwubcode 9223540bf4 VideoCommon: additional error checking for CustomPipelineAction and move the pixel shader asset cache time back to being calculated during texture creation 2023-08-24 00:47:48 -05:00
iwubcode 7c52a52440 VideoCommon: add TextureData structure that contains the raw texture data, a sampler, and the type of texture information 2023-08-24 00:35:31 -05:00
JosJuice ba99d17ac0 VideoCommon: Fix custom shader constants on GLES 2023-08-22 19:38:18 +02:00
JosJuice 6e88c44d5d Move SmallVector to Common
We had one implementation of this type of data structure in Arm64Emitter
and one in VideoCommon. This moves the Arm64Emitter implementation to
its own file and adds begin and end functions to it, so that VideoCommon
can use it.

You may notice that the license header for the new file is CC0. I wrote
the Arm64Emitter implementation of SmallVector, so this should be no
problem.
2023-08-22 13:19:49 +02:00
iwubcode 55fba7c0ed
VideoCommon/GraphicsModAsset: Error out if config key is not a string. 2023-08-22 02:40:08 +02:00
iwubcode 5506121685 VideoCommon: add support to graphics mod manager to load in assets and pass it to graphics actions 2023-08-20 18:53:27 -05:00
iwubcode 6ea0d17802 VideoCommon: when graphics settings change, trigger a reload of all custom shaders 2023-08-20 18:53:27 -05:00
iwubcode 931a8aa413 VideoCommon: add milliseconds elapsed time value to pixel shaders as a uniform to be able to support animation effects in custom shaders 2023-08-20 18:53:27 -05:00
iwubcode c7191382be VideoCommon: add custom pipeline action 2023-08-20 18:53:27 -05:00
iwubcode d320366954 VideoCommon: add custom shader cache to VertexManagerBase, supporting custom pixel shaders by replacing the existing pipeline with a modified one 2023-08-20 18:53:27 -05:00
iwubcode bedbf2b8c6 VideoCommon: add custom shader cache 2023-08-20 18:53:27 -05:00
iwubcode dbaf24ef09 VideoCommon: add data needed to support custom pixel shaders to graphics mod actions 2023-08-20 18:53:27 -05:00
iwubcode 4283d76718 VideoCommon: uber pixel shader gen changes needed to support custom pixel shaders in graphics mods 2023-08-20 18:53:27 -05:00
iwubcode e704385fce VideoCommon: pixel shader gen changes needed to support custom pixel shaders in graphics mods 2023-08-20 18:53:27 -05:00
iwubcode c3a370839a VideoCommon: add helper functions to handle generating custom lighting code for a custom pixel shader 2023-08-20 18:53:27 -05:00
iwubcode 0da5cf60a8 VideoCommon: add custom pixel shader definition and custom shader header to shadergen common as it will be used by both the special and uber shader variant of pixel shaders 2023-08-20 18:53:27 -05:00
Filoppi 8bca9a864f Video: The `Auto` internal resolution scaling wasn't working correctly if the window weird aspect ratios (e.g. 32:9), beacuse it would account for the the portion of the image that will show black bars into the calcuations to find the best matching resolution 2023-08-18 02:14:00 +03:00
Filoppi 6c7f34d5da Video: The `Auto-Adjust Window Size` setting was calculating the window size based on the resolution of the window in the previous frame if we used the "stretch" aspect ratio setting, so it's result would be self influence in a loop and behave unreliably (e.g. when changing resolution between Auto/Native/2x the automatic window scaling would behave randomly) 2023-08-18 02:14:00 +03:00
Filoppi cb34d1aafe Video: There was always a black line around one of the 4 edges (top/left/bottom/right) of the window because the final output size wasn't calculated right (unless the aspect ratio was set to stretch) 2023-08-18 02:14:00 +03:00
Filoppi fae3aee9e0 Video: The `% 4` that was done on the rendering resolution was only meant to be done when recording videos (due to encoding limitations) but one case was missed (this had no consequences really, as it was just in the code that automatically resizes the window). The hardcoded `4` has been replaced with `VIDEO_ENCODER_LMC` for clarity. 2023-08-18 02:14:00 +03:00
Filoppi 80b453082d Video: fix post process shaders with parameters failing to build on OpenGL
This was because the shader uniforms between the pixel and vertex shaders
were willingly left different, to avoid filling the vertex shader with unnecessary
params. Turns out all backends are fine with this except OGL.
The new behaviour is now much more consistent and well explained,
the "default" shaders are the ones that always run, and the non default
ones are the user selected ones (if any).
2023-08-18 02:00:56 +03:00
Sam Belliveau 39d96a21a8 Video: Improved Tooltips & Bicubic (#5)
Edited by Filoppi
2023-08-18 02:00:56 +03:00
Sam Belliveau ca93a5191f Video: Added Box Resampling
Edited by Filoppi
2023-08-18 02:00:56 +03:00
Filoppi 2edf81cdb0 Video: implement output resampling (upscaling/downscaling) methods 2023-08-18 02:00:55 +03:00
Admiral H. Curtiss a08792033a
Merge pull request #12103 from iwubcode/asset_load_system_time
VideoCommon: asset load time is now stored as a chrono system_clock time
2023-08-18 00:14:29 +02:00
JosJuice 7197e3abd0 Use structs for config callback IDs
This way you can't mix up regular config callback IDs and CPU thread
config callback IDs. (It would be rather bad if you did!)
2023-08-17 19:19:26 +02:00
JosJuice 71ce8bb6f0 Don't call RunAsCPUThread in config callbacks
In theory, our config system supports calling Set from any thread. But
because we have config callbacks that call RunAsCPUThread, it's a lot
more restricted in practice. Calling Set from any thread other than the
host thread or the CPU thread is formally thread unsafe, and calling Set
on the host thread while the CPU thread is showing a panic alert causes
a deadlock. This is especially a problem because 04072f0 made the
"Ignore for this session" button in panic alerts call Set.

Because so many of our config callbacks want their code to run on the
CPU thread, I thought it would make sense to have a centralized way to
move execution to the CPU thread for config callbacks. To solve the
deadlock problem, this new way is non-blocking. This means that threads
other than the CPU thread might continue executing before the CPU thread
is informed of the new config, but I don't think there's any problem
with that.

Intends to fix https://bugs.dolphin-emu.org/issues/13108.
2023-08-17 19:19:25 +02:00
Admiral H. Curtiss 23ae8c439c
Merge pull request #12112 from JosJuice/hires-texture-encoding
VideoCommon: Fix std::filesystem::path encoding conversion
2023-08-16 18:39:18 +02:00
JosJuice 86910f406e VideoCommon: Fix std::filesystem::path encoding conversion
In std::string, you can store strings using any encoding, but in Dolphin
we have decided to use UTF-8. The problem is that if you convert between
std::string and std::filesystem::path using the built-in methods, the
standard library will make up its own assumption of what encoding you're
using in the std::string. On most OSes this is UTF-8, but on Windows
it's whatever the user's code page is.

What I believe is the C++ standard authors' intended solution to this is
to use std::u8string instead of std::string, but that's a big hassle to
move over to, because there's no convenient way to convert between
std::string and std::u8string. Instead, in Dolphin, we have added helper
functions that convert between std::string and std::filesystem::path in
the manner we want. You *always* have to use these when converting
between std::string and std::filesystem::path, otherwise we get these
kinds of encoding problems that we've been having with custom textures.

Fixes https://bugs.dolphin-emu.org/issues/13328.
2023-08-16 09:56:56 +02:00
takayhan-AMD b969282b72 Remove out-dated hack of AMD driver issue WRT dual-source blending output index. 2023-08-15 23:58:29 -04:00
iwubcode eeb73460ab VideoCommon: asset load time is now stored as a chrono system_clock time, so that times can be fabricated in a future feature (without creating a file to do so) 2023-08-15 22:02:28 -05:00
Dentomologist 720191d1f7 AbstractFramebuffer: Fix Android reorder-ctor warning
Move declaration of m_additional_color_attachments so its initialization
order matches that of the constructor.
2023-08-12 20:48:47 -07:00
iwubcode 246b7c5bdb VideoCommon: fix regression with texture load order where the custom texture code was always updating the asset map for each texture with each entry, making it so the last value actually would be loaded instead of the first 2023-08-11 00:36:41 -05:00
JMC47 5512d19d4b
Merge pull request #12061 from iwubcode/cubemap_backends_only
VideoBackends: add support for cube maps for OGL, Vulkan, and D3D
2023-08-10 18:36:48 -04:00
iwubcode dca7c67105 VideoCommon: update NetplayChatUI's chat message input to use a hidden label. This avoids an error thrown by imgui 2023-07-29 00:27:07 -05:00
iwubcode 350e51951b VideoCommon: update imgui to 1.89.7 (and implot to 0.15); fix issues with upgrade; keep the demo code in case someone wants to reference it but don't compile it by enabling 'IMGUI_DISABLE_DEMO_WINDOWS' in config 2023-07-27 11:47:34 -05:00
Admiral H. Curtiss a76cc146e1
Merge pull request #12055 from iwubcode/skip_dump_async
VideoCommon: skip the texture dump if a custom texture is available, regardless if it is loaded or not
2023-07-23 19:53:25 +02:00
iwubcode fd74244339 VideoCommon: add custom texture message to provide a dirty means of debugging whether custom textures are installed correctly 2023-07-21 20:13:27 -05:00
iwubcode e892b7f1ac VideoBackends: add support for cube maps for OGL, Vulkan, and D3D 2023-07-21 19:09:40 -05:00
iwubcode f7e78742cf VideoCommon: skip the texture dump if the texture is using a custom texture, regardless of whether or not it is loaded yet 2023-07-19 23:44:41 -05:00
iwubcode 79f202ea5c VideoCommon: fix some compiler warnings for CustomAsset. FreeBSD compiler complained about a defaulted move constructor due to the mutex being implicitly deleted. Additionally, the const owning library deleted the copy constructor. 2023-07-16 19:45:55 -05:00
iwubcode 5740be15f9 VideoCommon: initialize load info variables 2023-07-16 12:56:03 -05:00
iwubcode 77511e8e7c VideoCommon: add material asset. A material is similar to other graphics engines where it provides data to be used in conjunction with a shader asset to generate a runtime AbstractShader 2023-07-09 12:21:34 -05:00
Admiral H. Curtiss 7bb04ff1dc
Merge pull request #12022 from iwubcode/texture_create_gmod_impl
VideoCommon: call into graphics mods create texture callback
2023-07-09 04:20:43 +02:00
Admiral H. Curtiss 0366122306
Merge pull request #12009 from iwubcode/shader_asset
VideoCommon: add a pixel shader asset
2023-07-03 03:24:11 +02:00
iwubcode a2ad3ca6f7 VideoCommon: don't do pointer copies during graphics mod callback iteration 2023-07-02 13:58:07 -05:00
iwubcode 0539bb4a3e VideoCommon: call into graphics mods create texture callback, providing additional asset dependencies that trigger the texture to be reloaded 2023-07-02 13:45:09 -05:00
Admiral H. Curtiss 6d7bf60071
Merge pull request #11991 from iwubcode/tcache_multiple_texture_dependencies
VideoCommon: allow multiple texture assets to associate with a texture cache entry
2023-07-02 20:14:32 +02:00
iwubcode a93e6e7397 VideoCommon: add support for allowing a TextureCache entry to be associated with multiple assets 2023-07-02 12:50:07 -05:00
Admiral H. Curtiss eedc1144c1
Merge pull request #11923 from iwubcode/multi-texture-compute-support
VideoBackends: support multiple compute images for some backends
2023-07-01 17:47:55 +02:00
Admiral H. Curtiss fa81006b51
Merge pull request #11955 from TellowKrinkle/CMakeDependencies
CMake: Allow ignoring system packages
2023-06-30 19:06:04 +02:00
iwubcode 6ea49c6746 VideoCommon: add a pixel shader asset 2023-06-30 01:32:53 -05:00
iwubcode 3627398cf5 VideoBackends: support multiple compute images for some backends (D3D, OGL, Vulkan) 2023-06-28 17:15:31 -05:00
Admiral H. Curtiss c04536c5d0
Merge pull request #11982 from iwubcode/graphics_mod_create_texture_callback
VideoCommon: add graphics mod callback interface for when a texture is created
2023-06-23 18:10:59 +02:00
Admiral H. Curtiss 02909bd1a5
Merge pull request #11850 from Filoppi/post_process_fixes
Video: implement color correction to match the Wii/GC NTSC/PAL color spaces (and gamma)
2023-06-23 18:08:23 +02:00
iwubcode 1d767c3a5b VideoCommon: add graphics mod callback interface for when a texture is created 2023-06-20 19:26:53 -05:00
iwubcode 2dc24a9148 VideoCommon: move cached texture asset to 'CustomAsset' common code 2023-06-20 18:59:55 -05:00
Filoppi a2702c6e27 Video: implement color correction to match the NTSC and PAL color spaces (and gamma) that GC and Wii targeted.
To further increase the accuracy of the post process phase, I've added (scRGB) HDR support, which is necessary
to fully display the PAL and NTSC-J color spaces, and also to improve the quality of post process texture samplings and
do them in linear space instead of gamma space (which is very important when playing at low resolutions).
For SDR, the quality is also slightly increased, at least if any post process runs, as the buffer is now
R10G10B10A2 (on Vulkan, DX11 and DX12) if supported; previously it was R8G8B8A8 but the alpha bits were wasted.

Gamma correction is arguably the most important thing as Dolphin on Windows outputted in "sRGB" (implicitly)
as that's what Windows expects by default, though sRGB gamma is very different from the gamma commonly used
by video standards dating to the pre HDR era (roughly gamma 2.35).

Additionally, the addition of HDR support (which is pretty straight forward and minimal), added support for
our own custom AutoHDR shaders, which would allow us to achieve decent looking HDR in Dolphin games without
having to use SpecialK or Windows 11 AutoHDR. Both of which don't necessarily play nice with older games
with strongly different and simpler lighting. HDR should also be supported in Linux.
Development of my own AutoHDR shader is almost complete and will come next.

This has been carefully tested and there should be no regression in any of the different features that Dolphin
offers, like multisampling, stereo rendering, other post processes, etc etc.

Fixes: https://bugs.dolphin-emu.org/issues/8941

Co-authored-by: EndlesslyFlowering <EndlesslyFlowering@protonmail.com>
Co-authored-by: Dogway <lin_ares@hotmail.com>
2023-06-19 01:34:42 +03:00
get 7523a62105 Change unnamed enum in NativeVertexFormat.h to u32 2023-06-17 08:13:57 -05:00
get 07ad75f34f EnumUtils: Add Common::ToUnderlying
Mirrors the C++23 <utility> function, std::to_underlying
2023-06-17 07:15:33 -05:00
Admiral H. Curtiss 1aef85a985
Merge pull request #11918 from TellowKrinkle/DPIScale
Improved DPI change handling
2023-06-17 04:07:13 +02:00
Admiral H. Curtiss cbcf5bfac1
Merge pull request #11889 from Filoppi/patch-18
Fix video output having small black borders all the times
2023-06-16 17:59:51 +02:00
Admiral H. Curtiss f5eea4a957
Merge pull request #11834 from Dentomologist/xemitter_use_pseudonamed_parameter_force5bytes
XEmitter: Add enum class Force5Bytes
2023-06-16 15:46:36 +02:00
TellowKrinkle 5b10a80401 CMake: Use targets for all optionally-external dependencies 2023-06-15 01:41:41 -05:00
Admiral H. Curtiss 6d16a09707
Merge pull request #11941 from Dentomologist/convert_blockingloop_stopmode_to_enum_class
Common: Convert BlockingLoop::StopMode to enum class
2023-06-13 11:47:20 +02:00
iwubcode 3e27fc7c0b VideoCommon: don't treat incorrect aspect ratio or sizes that aren't a multiple of native textures as an error 2023-06-12 21:19:29 -05:00
Dentomologist 3c80f821c0 Common: Convert BlockingLoop::StopMode to enum class 2023-06-12 17:12:25 -07:00
Dentomologist 4c2759f541 XEmitter: Add enum class Jump
Replace the bool parameter force5bytes in J, JMP, and J_CC with an enum
class Jump::Short/Near. Many callers set that parameter to the literal
'true', which was unclear if you didn't already know what it did.
2023-06-12 13:04:18 -07:00
OatmealDome 1a0a1e8f12
Merge pull request #10976 from TellowKrinkle/StackFrames
Improve stack frames for profilers
2023-06-12 05:00:08 +02:00
TellowKrinkle d3110b9521 VideoCommon: Update imgui scale when dpi changes 2023-06-11 20:05:27 -05:00
Robin Kertels 23bebc5270
VideoBackends:Vulkan: Allow loading custom drivers on Android
... using libadrenotools
2023-06-11 13:52:34 +02:00
Admiral H. Curtiss 8f51a9d2d8
Merge pull request #11699 from Pokechu22/gl-check-maximum-samples
OpenGL: Check the list of supported AA modes instead of hardcoding
2023-06-09 15:07:07 +02:00
Admiral H. Curtiss 092773ad0c
Merge pull request #11859 from iwubcode/backend-multi-output
VideoBackends: add support to allow rendering to multiple output targets
2023-06-09 13:40:21 +02:00
Pokechu22 c63f0f37cd VideoCommon: Pass WindowSystemInfo to InitBackendInfo 2023-06-08 22:07:39 -07:00
iwubcode afa498fa2f VideoCommon: update DirectFilesystemAssetLibrary to not throw exceptions when a file no longer exists 2023-06-08 22:20:52 -05:00
iwubcode 429b2eca8a VideoCommon: add logging for loading texture assets 2023-06-08 19:48:45 -05:00
Admiral H. Curtiss 7845fb00ee
Merge pull request #11681 from iwubcode/asset_management
VideoCommon: migrate texture packs to use the asset loader system
2023-06-08 22:21:12 +02:00
Admiral H. Curtiss 78f5c5f8d2
Merge pull request #11899 from Filoppi/patch-20
Video: Fix Post Process shader options issues
2023-06-08 16:12:49 +02:00
Admiral H. Curtiss 3dbdf0472d
Merge pull request #11901 from Filoppi/add_texture_types
Video: add R10B10G10A2 and R16G16B16A16F texture types
2023-06-08 15:28:15 +02:00
Filoppi cdc53c046b Video: add R10B10G10A2 and R16G16B16A16F texture types (needed by PR 11850) 2023-06-08 03:17:20 +03:00
Filippo Tarpini c9e61a79b7
Video: Fix Post Process shader options issues
-An assert would be erroneously thrown when shaders declared an array of 4 int or float options, despite 4 being the max supported (a simple <= / < mistake)
-When changing the type of a shader option (e.g. from bool to float), the serialization would be stuck appending the value from the previous option type, making the shader fail to build permanently until the cache were cleaned
2023-06-08 02:54:46 +03:00
iwubcode e831d7b6bb InputCommon / VideoCommon: remove dynamic input reloading the texture cache, this is no longer needed, assets reload automatically! 2023-06-07 18:30:10 -05:00
iwubcode ca8d6748d6 VideoCommon: introduce linked assets in TCacheEntry, allowing for assets to be reloaded 2023-06-07 18:30:10 -05:00