Henrik Rydgård
cd0802b9c8
Remove redundant flag from vertex shader IDs
2026-06-10 10:46:05 +02:00
Henrik Rydgård
a7f62d763a
Make the MaxZ test a bit more lenient to fix Taiko no Tatsujin. Debugger improvement
...
Fixes #21797
2026-06-07 13:47:42 +02:00
Henrik Rydgård
b84afa8a5b
Fixes menus in NBA2K12.
...
Not sure if we can find a better way, I suppose
we could clamp vertex coordinates that are in this range instead, if it
turns out that this somehow breaks something.
2026-06-05 18:23:31 +02:00
Henrik Rydgård
d59cdcad61
GTA sprite fix: Detect sprites, clip them slightly to avoid filtering artifacts
2026-06-05 11:48:46 +02:00
Henrik Rydgård
9ce5270e80
With our compatibility flag for depth rounding, truncate to 15 bits.
...
This matches some earlier test results by Unknown where we could see
that only every second value was used, and is the only explanation I can
come up with for the Afterburner problem, having now traced all the
depth math properly.
Fixes #21785 - and hopefully doesn't break anything else.
2026-06-05 00:50:30 +02:00
Henrik Rydgård
50e5f9c23a
Small simplification and fix in VertexShaderGenerator
2026-06-04 12:45:20 +02:00
Henrik Rydgård
078197d790
Remove unnecessary scaling and then un-scaling of through-mode Z coordinates
2026-06-03 20:31:05 +02:00
Henrik Rydgård
2ea8a9ac1f
Revert "Remove unnecessary scaling and then un-scaling of through-mode Z coordinates"
...
Didn't mean to commit this, it was supposed to go in a PR.
This reverts commit 6d4c70c67d .
2026-06-03 17:18:10 +02:00
Henrik Rydgård
6d4c70c67d
Remove unnecessary scaling and then un-scaling of through-mode Z coordinates
2026-06-03 16:00:40 +02:00
Henrik Rydgård
86212f5384
Correct minor shader generator bug for depthclamp case.
2026-06-02 15:58:47 +02:00
Henrik Rydgård
8113cb9147
Misc cleanup and renaming
2026-06-02 11:39:33 +02:00
Henrik Rydgård
e75d9f8a5f
Unify the bounding depth checks, correct them if minmax clip is needed
2026-05-30 19:07:59 +02:00
Henrik Rydgård
0eede05f5f
Implement fragment shader depth clamp and min/max discard. Slow on some hardware, but it's a fallback.
2026-05-30 19:07:59 +02:00
Henrik Rydgård
de266c3d6c
Add the appropriate epsilons to cull distance. Fixes the NBA issue.
...
It's a bit odd that this draw doesn't go through software transform
though.
2026-05-30 19:07:59 +02:00
Henrik Rydgård
5ad24adc93
Cleanup, increase the max cull count. Flatout water works now.
2026-05-30 19:07:59 +02:00
Henrik Rydgård
3599c4002b
Through mode draws should not be min/max tested
2026-05-30 19:07:59 +02:00
Henrik Rydgård
9979d5544d
Round off Z for the min/max tests. Gets both Test Drive map and Wipeout Pure shadows working at the same time..
2026-05-30 19:07:59 +02:00
Henrik Rydgård
eaacbbc226
D3D and OpenGL shader buildfixes
2026-05-30 19:07:59 +02:00
Henrik Rydgård
058b1af285
Revert to software on out-of-bounds projected depth
2026-05-30 19:07:59 +02:00
Henrik Rydgård
b9ef43f4de
VertexShaderGenerator work
2026-05-30 19:07:59 +02:00
Henrik Rydgård
36f5664c5e
Re-enable cull distance in vertex shader, fix some test errors
2026-05-30 19:07:58 +02:00
Henrik Rydgård
f55adcc3a1
Apply a small depth bias to simulate rounding of Z. Fix min/max clip plane math
2026-05-30 19:07:58 +02:00
Henrik Rydgård
f0d715feaa
During culling, evaluate minZ,maxZ,minW,maxW, and use them to cull some things. Also, assorted vshader work.
2026-05-30 19:07:58 +02:00
Henrik Rydgård
5808afef10
Implement minZ/maxZ through user clip planes
2026-05-30 19:07:58 +02:00
Henrik Rydgård
2f73bea7f0
Correct Z in through mode, add another check to range culling
2026-05-30 19:07:58 +02:00
Henrik Rydgård
490469c4e6
Re-implement range culling
2026-05-30 19:07:58 +02:00
Henrik Rydgård
ae98055cec
Delete a lot of legacy depth and viewport code, fix OpenGL
2026-05-30 19:07:58 +02:00
Henrik Rydgård
62d8cf22de
Move the viewport transform to software in SW transform mode
...
transform fix
2026-05-30 19:07:58 +02:00
Henrik Rydgård
5aedd2f1e3
Hardware transform seems to work, software transform still has issues
2026-05-30 19:07:58 +02:00
Henrik Rydgård
69c7c75124
Replace u_proj_through with a simple scale/offset
...
First reasonable output appears.
2026-05-30 19:07:58 +02:00
Henrik Rydgård
4a55fc6724
Prepare TestBoundingBoxFast for optimization
2026-05-25 13:37:27 +02:00
Henrik Rydgård
736d054b8f
Remove the u_proj_though matrix from the uniform buffer
2026-05-19 16:33:45 +02:00
Henrik Rydgård
e108828bcc
Unify Z handling between the backends
2026-05-19 15:17:44 +02:00
Henrik Rydgård
d243737c11
Revert "Convert the pre-rotation to just the matrix multiplication."
...
After the previous commit, the optimization is no longer needed, and
unnecessarily bloats the uniform buffer.
This reverts commit 62bcb1785e .
2026-05-17 11:02:35 +02:00
Henrik Rydgård
4b93a870db
Optimize out pre-rotation entirely from vertex shaders when not needed
2026-05-17 11:01:50 +02:00
Henrik Rydgård
947217d1be
Convert the pre-rotation to just the matrix multiplication.
2026-05-17 10:59:40 +02:00
Henrik Rydgård
065a68ef4f
Split out screen rotation from the projection matrix
2026-05-17 10:58:54 +02:00
Henrik Rydgård
afb764e6ae
Rendering: Unify the Y-flipping state across backends (now only applied in-shader, not through matrices).
2026-05-14 23:30:06 +02:00
Chris Healy
9ed5dcdc27
GPU: Use inversesqrt for light distance and half-vector calculations
...
Replace length()/normalize() with inversesqrt() pattern for better
performance on mobile GPUs. The inversesqrt instruction is a single
hardware operation, while length() requires sqrt(dot()) and normalize()
requires inversesqrt internally plus a multiply.
Changes:
1. Light distance calculation:
Before: distance = length(toLight); toLight /= distance;
After: distSq = dot(toLight, toLight);
invDist = inversesqrt(distSq);
distance = distSq * invDist;
toLight *= invDist;
2. Specular half-vector normalization:
Before: ldot = dot(normalize(toLight + vec3(0,0,1)), worldnormal);
After: halfVec = toLight + vec3(0,0,1);
halfInvLen = inversesqrt(dot(halfVec, halfVec));
ldot = dot(halfVec, worldnormal) * halfInvLen;
Also reuses distSq in attenuation calculation to avoid recomputing
distance*distance.
Offline shader compiler results (vertex shader with 4-light ubershader):
Mali (malioc):
G31 (Bifrost): 44.90 -> 40.50 cycles (-9.8%)
G52 (Bifrost): 14.97 -> 13.50 cycles (-9.8%)
G310 (Valhall): 13.88 -> 12.88 cycles (-7.2%)
G57 (Valhall): 7.60 -> 6.97 cycles (-8.3%)
PowerVR (Profiling Compilers):
Series 8 GE8300: 322 -> 302 ALU cycles (-6.2%)
Series 9 GM9445: 296 -> 280 ALU cycles (-5.4%)
Series B BXM: 560 -> 540 instructions (-3.6%)
Signed-off-by: Chris Healy <cphealy@gmail.com >
2026-03-08 19:13:41 -07:00
Henrik Rydgård
6cfea96e58
Remove D3D9 support, to make future changes easier
2025-06-10 15:07:16 +02:00
Henrik Rydgård
df6ed8cfc9
Do some cleanup of #includes in GPU
2024-12-18 13:57:26 +01:00
Henrik Rydgård
702e77454a
Hardware transform: Clamp the specular coefficient to 0.0 before taking the power.
2024-09-25 21:09:13 +02:00
Lubos
3154a5fac1
OpenXR - VR camera features on any platform
2024-08-07 09:25:12 +02:00
Henrik Rydgård
fab034d866
Fix minor difference between ubershader and specialized vshaders
2024-07-24 20:50:33 +02:00
Lubos
a9b5a4739e
Fix math of simple stereo
2024-06-25 16:06:03 +02:00
Luboš V
27152b1e47
OpenXR - Forgotten usages
2024-06-24 19:43:17 +02:00
Luboš V
dd9bc42b0a
OpenXR - Remove multiview from shader
2024-06-24 19:24:46 +02:00
Lubos
7b089effa0
OpenXR - Use single VR projection matrix
2024-06-03 18:29:06 +02:00
Henrik Rydgård
e3177ac870
Make some global string pointers const, not just the strings.
...
Minor cleanup.
2023-12-29 14:09:45 +01:00
Henrik Rydgård
0f3dca5cea
Revert a bad "optimization" I made in #18587
2023-12-25 12:03:09 +01:00