sharpemu/tests/SharpEmu.Libs.Tests
kuba 20eda4443c
Shader: test a wave mask consumed as a per-lane predicate at the lane bit (#465)
* Shader: read a wave mask consumed as a per-lane predicate at the lane bit

A VCC/EXEC wave mask consumed as a per-lane predicate (the VCndmask
condition, a VCC/EXEC branch, or the derived _vcc/_exec bool) was tested in
single-lane emulation with a whole-word non-zero test (IsNotZero64) instead
of the current lane's bit. That is correct for comparison results (only the
lane's own bit is ever set) but wrong for bitwise-complement wave-mask idioms
(S_NOT / S_ORN2 / S_ANDN2 / S_NAND / S_NOR), which set the unused upper 63
bits: a whole-word test then reports the lane active even when its bit is
clear.

Unity's PostProcessing NaN killer does exactly this: per channel it computes
isNaN = NLT AND NGT AND NEQ (against 0), then combines the channels as
anyNaN OR NOT(v3-is-finite) via S_ORN2_B64. The complement set the upper mask
bits, so every valid pixel read as NaN and was replaced with 0, zeroing the
whole HDR scene before Bloom/Uber/tonemap. The 3D scene therefore rendered
black behind the menu while the UI survived. Extract the current lane's bit in
both single-lane and subgroup modes so IsWaveMaskActive matches the hardware.

Fixes Superliminal (PPSA06084) black 3D scene: the storage room now renders
behind the menu with natural exposure and no forced values.

(cherry picked from commit 7af6f4b6f314fe302619c0d44f4db00971c5bf24)

* test: wave-mask predicate is tested at the current lane bit

Regression test for the wave-mask lane-bit fix. Compiles a shader that
writes VCC at run time (V_CMP_EQ_F32) and asserts the emitted SPIR-V tests
the wave mask at the current lane's bit (mask & lane_bit) rather than with a
whole-word non-zero test. Fails against the previous IsNotZero64(mask) path,
which zeroed complement wave-mask idioms (S_ORN2/S_NOT, e.g. Unity's NaN
killer) across every lane.
2026-07-20 14:18:20 +03:00
..
Agc Shader: test a wave mask consumed as a per-lane predicate at the lane bit (#465) 2026-07-20 14:18:20 +03:00
Ampr [Tests/HLE] Cover APR resolve, stat, and streaming flow (#272) 2026-07-16 19:57:45 +03:00
Audio [AJM] Track registered codec instance lifecycle (#352) 2026-07-18 03:02:19 +03:00
AvPlayer [AvPlayer] Resolve guest media within app0 (#347) 2026-07-18 02:42:30 +03:00
Cpu cpu: emulate AMD-only Zen 2 instructions in software (#449) 2026-07-19 21:57:42 +03:00
Fiber test: add Fiber exports contract tests (13 tests) (#428) 2026-07-19 13:53:33 +03:00
Font [HLE] Stub ContentExport, Font, and Pad calls Astro Bot needs to boot (#298) 2026-07-17 04:34:48 +03:00
GUI PerGameSettings Null toggles (#453) 2026-07-20 01:30:13 +03:00
HLE Prevent invalid SaveData writes from damaging guest memory (#444) 2026-07-19 20:27:17 +03:00
Json [SourceGenerators] Compile-time SysAbi export registry, analyzers, and build-generated aerolib.bin (#204) 2026-07-16 00:00:32 +03:00
Kernel kernel: return -1/errno from POSIX file syscalls on failure (#461) 2026-07-20 14:17:08 +03:00
LibcInternal Add libc heap trace contract tests (#409) 2026-07-19 03:25:42 +03:00
Loader test: add Kernel/Loader unit tests (22 tests) (#373) 2026-07-18 20:19:55 +03:00
Logging Reject undefined numeric LogLevel values (#390) 2026-07-18 15:47:19 +03:00
Memory memory: back the free pages of a partially-overlapping fixed mapping (#458) 2026-07-20 09:08:29 +03:00
Network Fix sceNetHtonl/Htons/Ntohl/Ntohs discarding their converted result (#211) 2026-07-16 16:24:34 +03:00
Pad [HLE] Stub ContentExport, Font, and Pad calls Astro Bot needs to boot (#298) 2026-07-17 04:34:48 +03:00
PlayGo [PlayGo] Reject authoritative unknown chunk loci (#242) 2026-07-16 19:22:33 +03:00
Pthread Fixes a Mutex Issue Preventing Some UE Titles From Booting (#451) 2026-07-19 13:20:05 -06:00
Random [HLE] Add RandomExports HLE (#413) 2026-07-18 23:44:57 +03:00
Rtc Fix sceRtcConvertLocalTimeToUtc failing on non-UTC hosts (#210) 2026-07-16 00:04:35 +03:00
SaveData Prevent invalid SaveData writes from damaging guest memory (#444) 2026-07-19 20:27:17 +03:00
ShaderCompiler [ShaderCompiler] Fix VReadlane scalar destination field (#344) 2026-07-18 02:41:07 +03:00
SystemService [SystemService] Write notice skip flag as byte (#346) 2026-07-18 02:41:38 +03:00
Tls [AGC/Vulkan] Extend PS5 runtime and rendering compatibility (#216) 2026-07-16 02:02:34 +03:00
VideoOut Encode linear-float flips to sRGB at present (#448) 2026-07-20 01:29:38 +03:00
AerolibCatalogTests.cs [SourceGenerators] Compile-time SysAbi export registry, analyzers, and build-generated aerolib.bin (#204) 2026-07-16 00:00:32 +03:00
FakeCpuMemory.cs [Json] Implement sce::Json::Value and String (construct / set / destroy) (#169) 2026-07-15 01:49:33 +03:00
SaveDataStorageTests.cs [Gpu] Metal backend: complete IGuestGpuBackend implementation on AppKit + Metal (#283) 2026-07-18 20:32:00 +03:00
SharpEmu.Libs.Tests.csproj Gui Settings Null list Entries (#430) 2026-07-19 13:53:56 +03:00
Sse4aExtrqBlendPatchTests.cs [Gpu] Metal backend: complete IGuestGpuBackend implementation on AppKit + Metal (#283) 2026-07-18 20:32:00 +03:00
SysAbiRegistryTests.cs [SourceGenerators] Compile-time SysAbi export registry, analyzers, and build-generated aerolib.bin (#204) 2026-07-16 00:00:32 +03:00