Commit Graph
51 Commits
Author SHA1 Message Date
jpolo1224 4d8701a49d GS: driver-bug database and per-driver shader workarounds
Ported from EmuCoreX with sashkinbro's approval. The GPU family alone was
never enough to decide behaviour: the same Mali part behaves differently
under ARM's proprietary driver than under Mesa PanVK, a lesson this tree
learned twice the expensive way - the r44p1 DEVICE_LOST fix had to be
gated on driverID rather than vendorID, and the 8 Elite push-descriptor
disable likewise. Driver identity, version and a bug set are now recorded
in a table, so the next device quirk is an entry rather than another
bespoke branch. Twenty-five rules, with match confidence so a vendor-wide
rule never overrides a driver-version-specific one.

The shaders gain gpu_bitwise_and / gpu_bitwise_not / gpu_boolean_not,
whose bodies the device emits: plain a & b normally, scalarized where the
database says the driver miscompiles vector bitwise ops. A device matching
no rule renders exactly as before.

opengl/tfx_fs.glsl already carried this fix as IAND3/UAND2/UAND4 macros
gated on GPU_PROFILE_MALI. Those are replaced by the shared helpers, but
the GL macro is deliberately (workaround || IsMaliGPUProfile()): Mali
reached through ANGLE or Panfrost resolves a non-ARM driver and matches no
rule, so a database-only gate would have silently removed a fix those
users have today. Widening only.

SHADER_CACHE_VERSION 108 -> 109. Every TFX and convert shader's source
text changed, so a blob cached from 108 no longer matches the source that
produced it; without the bump users would get stale binaries and garbage
rendering after updating.

RewriteConstantLoads is deliberately absent - the database records
BrokenConstantLoad with no workaround bits, so the macro would be
permanently zero and the shader code dead.

Shaders validated offline with glslc across 136 Vulkan and 296 GL/GLES
permutations, every macro on and off; the failure set is byte-identical to
the pre-change baseline.
2026-07-26 14:53:48 -04:00
Brian Degenhardt 6f3ee20df9 GS shaders: fold the mobile tiler supersets into bin
The Android shader tree carried capability-gated blocks that bin was missing,
even though the shared C++ backends emit every gating macro on all platforms
(GSDeviceOGL.cpp:2006-2010, GSDeviceVK.cpp:4769 — GPU_PROFILE_MALI,
HAS_ARM/EXT_SHADER_FRAMEBUFFER_FETCH, HAS_ARM_DEPTH_FETCH, HAS_CLIP_CONTROL,
DISABLE_DUAL_SOURCE). bin was simply the stale copy; the desktop GL backend is
already wired to consume the mobile shader structure (see the GPU_PROFILE_MALI
reference at GSDeviceOGL.cpp:1067). Collapse the two to one superset so drift
becomes impossible.

- opengl/{convert,interlace,present,tfx_fs,tfx_vgs}.glsl, vulkan/present.glsl:
  adopt the Android version verbatim. Every difference is either macro-gated
  (desktop path preserved in the #else — e.g. the tfx_vgs z-remap lives under
  #else of #if HAS_CLIP_CONTROL, dead on desktop which has ARB_clip_control) or
  a GLES-strict float/cast tweak that is behaviorally identical on desktop.

- vulkan/tfx.glsl: hand-merged. Union in the additive tiler blocks (Mali
  EQUAL_WZ z-nudge on both the direct and VS_EXPAND paths, the
  VS_PROVOKING_VERTEX_LAST and !VS_IIP provoking-vertex handling) and drop
  layout(depth_less) per its float32-rounding correctness rationale, while
  KEEPING bin's newer two-flag ROV implementation (rov_discard_color/depth) —
  that path is dead on mobile since ROV is now off on all tilers. Preprocessor
  structure verified balanced and identical to Android's directive counts.

dx11/tfx.fx is Windows-only (never compiled on mobile) and the two remaining
vulkan files differ only in trailing whitespace, so they stay as-is; the mobile
copies get removed and generated from bin in the build-plumbing step.
2026-07-22 21:16:45 -07:00
TJnotJTandTellowKrinkle a44fe80caa GS/HW: Refactor shader copy and texture formats.
Make it easier to add new depth formats, and code cleanup.

Co-authored-by: TellowKrinkle
2026-05-31 18:43:01 +02:00
lightningterror 30440099c2 GS/GLSL: Make sure color output is disabled for depth only writes or testing and fix afail typo. 2026-05-19 13:03:35 +02:00
TellowKrinkle 95b50e7f81 GS: Clean trailing whitespace from shaders 2026-04-08 10:42:36 +02:00
TJnotJT 93212882d0 GS/HW: Depth feedback loops and accurate AFAIL. (#13631)
Add support for depth feedback loops either via texture barriers or copies.
DX12 and OpenGL do depth feedback by creating a temporary color texture to hold Z and using multiple color outputs.
Use the depth feedback for accurate AFAIL (enabled via INI setting).
2026-03-18 02:12:12 +01:00
SternXD d983b2b066 Copyright: Change year from 2002-2025 to 2002-2026 2026-01-15 00:22:32 +01:00
refractionpcsx2 44d66555cc GS/HW: Add options to maintain upscale in Native Scaling
This will adjust how the box filter samples to simulate bilinear when upscaling
2025-11-11 21:19:02 +01:00
lightningterror 93bf9db0b4 GS/shaders: Fix types mismatch for ps_convert_rgb5a1_8i shader.
Fixes shader compile errors and warnings on mesa, also synch vk and dx shaders for consistency.
2025-09-09 20:29:02 +02:00
refractionpcsx2 d1dc6a9c1d GS/HW: Add 16bit to 8bit conversion shader 2025-06-05 13:51:21 +02:00
Filoppi 8be2b907b3 GS: Add actual HDR and HQ textures and rename the "HDR" textures to colclip (hw) given that's actually what they are (HDR was a very loose term for it) 2025-04-18 19:11:11 +02:00
TheTechnician27 23fd57f641 Copyright: Change year from 2002-2024 to 2002-2025 2025-01-20 05:07:26 +01:00
GovanifY 132431b7c8 headers: relicense to GPL-3.0+
also update to 2024 while i'm at it
2024-07-30 17:17:13 -04:00
lightningterror fdcb0efe0a GS/HW: Make sure both bitwise values are unsigned for ps_convert_float32_float24 depth. 2024-07-09 15:19:45 +02:00
refractionpcsx2 a7047b605e GS/HW: Allow conversion from 32bit to 24bit depth 2024-06-28 04:15:12 +01:00
Stenzek 5b45913a6a GS/HW: Use box filtering for source downsampling 2024-06-27 10:49:46 +10:00
refractionpcsx2 effdfd5a22 GS/HW: Fix up some RTA behaviour and reduce copies 2024-04-02 21:48:32 +01:00
Stenzek 11ee0a8613 GS: Remove reduced-depth-range hack 2024-03-29 20:44:02 +10:00
refractionpcsx2 059ec49389 GS/HW: RTA improvements and enhancements 2024-03-25 17:58:12 +00:00
refractionpcsx2 bfef8397d6 GS/HW: Allow source is rt to use corrected alpha in most cases. 2024-03-17 17:24:39 +01:00
lightningterror 3a2888a5d5 GS/HW: Adjust RTA shader precision. 2024-03-17 17:24:39 +01:00
lightningterror 0900c2fd8b GS/HW: RTA Correction, implement on DATE.
Less copies, and makes it work with DATE.
2024-03-17 17:24:39 +01:00
lightningterror 6c9f132093 GS/HW: Add support for Ad (RTA) correction.
The idea is to adjust the alpha destination for more
accurate hw blending which will work on all renderers.

Old behavior has Ad in range within 0-1 whereas for blending 0-2 is needed.

copy rt -> adjust the alpha -> copy back the adjusted alpha-> restore old alpha after blending is done
2024-03-17 17:24:39 +01:00
Stenzek d9abe10308 Misc: Remove explicit PCH include, switch to SPDX 2023-12-24 14:03:14 +10:00
refractionpcsx2 5dc27ed275 GS/HW: Convert depth16->rgba16 shader to integer 2023-10-01 21:08:39 +01:00