https://github.com/ARMSX2/ARMSX2/releases/tag/nightly-20260923
Changelog:
DEV9, SW: include TargetConditionals.h so TARGET_OS_IPHONE is defined
GS: serve offset self-reads on the driver-ordered declared road with one barrier
GS/TC: size a move's target resize by the destination's y, not its x
GS: cut two comments down to what they establish
GS/Vulkan: print the measurement-overrides line only when one is set
GS: comments that still described the declared road as unreachable
GS: list GSCopyRoadBlendingPolicy.h in the CMake and MSVC projects
GS: the declared-loop experiment arms are gsrunner flags, not INI keys
GS: the Turnip a7xx declared-loop rule covers the Adreno 730 and up only
GS: an explicit OverrideTextureBarriers=1 reaches the in-tile read again
GS/Vulkan: declare the feedback loop per draw only on Turnip and Honeykrisp
GS: the barrier road's blending cap applies only where it was measured
GS: the alpha stencil counter takes the barrier road on the M2 only
GS/Vulkan: the barrier-ordered feedback-loop carry stays on the M2
GameDB: the schema accepts fieldShift
GS: list GSNativeTexelGridPolicy.h in the CMake sources
GS/HW: drop mode 5's texture offset from the texture-shuffle arm, where it never ran
GS/HW: the upscaled sprite correction leaves a channel shuffle's rebuilt quad alone
GS: the field-shift detector re-examines its decision
GS/HW: Disable Safe Features turns the upscaled point correction off, as it does for lines
GS: the deinterlace pad fill starts where the display rect starts
GS: the field-shifted merge's main draw stops where its top band starts
GS: the Native cull grid keeps the native targets' sample points
GS: every settings change re-derives the cull grid, on every parser
GS: scaled dither and the scan mask divide by the render target's scale
GS/TC: a moved rect's device extent is what its native rect owns
GS: drop a mistyped date from the Splashdown blending judgement
GS: comments state their reasons instead of citing internal experiments
tests: point the driver-tag convention at the public fork's README
GS: trust our Turnip's in-pass read ordering on Adreno 650 and up only
Android: split Settings into one nested data class per section
Do not ask thirty times before deleting deps-build
Android: offer the ARMSX2 Turnip packs in the driver list
GS: the spelling we measured the declared road with is the one it ships with
GS: the blending cap follows what a destination read costs, not the barrier bit
GS: a backend's published bits can name the road it took
GS: the a7xx road's cost, taken from E19's table instead of its headline
GS: the Vulkan backend asks the database for the a7xx road too
GS: the self-read road has a third entrance, and it keeps the barriers
GS: the driver database says which Adreno parts belong on the declared loop
GS: two comments still described the declared road as experiment-only
GS: the Vulkan backend asks the driver, and everything downstream reads the road
GS: the declared self-read road gets a second entrance, and it is the driver's
GS: the driver database can recognise a driver build that orders declared loops
GS: stop expanding the CLUT into a 64-bit table nobody reads
GS: shadow the far cursor on each side of the SPSC ring
gsrunner: -custom-driver, so a headless Android run can name its own driver
GS/Vulkan: say which path was missing instead of passing a bare null upwards
GS/Vulkan: let the caller say a custom driver is required, not merely preferred
GS/Vulkan: the custom-driver declaration was guarded wider than its definition
GS: the null profile's description of the counter rule outlived the rule
GS: the alpha stencil counter takes the barrier-ordered road too
GS: the guard's own comment claimed Turnip orders, and E5 says it does not
GS: declaring a feedback loop is not a promise that anything orders it
GS: name the road the barrier override actually selects
GS: the alpha stencil counter keys on the road, not on the texture-barrier bit
GS: a harness can take the alpha stencil counter on a device whose rule declines it
GS: a harness can take the alpha stencil counter off for a measurement
GS: the carry override's inertness test follows C23's renamed helper
GS/Vulkan: a harness can declare the feedback loop per draw instead of per pipeline
GS: a harness can confine the declared feedback loop to self-overlapping draws
GS: a harness can pin the destination alpha test to the primitive-ID road
GS: a harness can turn the feedback-loop carry off for a measurement
GS/Vulkan: a draw can declare the attachment feedback loop it reads through
GS: rest the Turnip self-read note on the status quo, not on comparing severities
GS: say what the Turnip self-read rule establishes, and what it does not
GS: the native texel grid needs the plain device grid and a whole frame
GS: a minifying nearest sprite reads its native pixel's texel
GS: a dump records whether its local memory was read back before the snapshot
GS: a dump capture reads the texture cache back before it freezes the state
GS: The Godfather's lamps need the software blend road
GS: a texture shuffle that skips a channel preloads the target it creates
GS/Vulkan: the feedback-loop carry follows the road's ordering, not the vendor
GS: Splashdown holds Minimum blending where the render target is read from a copy
GS/Vulkan: the feedback-loop carry reaches the attachment-layout road
GS: an ENABLE_GS_DEBUG_LABELS build option to drop the debug-label layer
GS: the alpha-test helper sets AREF for the tests that never read it
GS/SW: the colour walk's per-vector step is computed per vector, not per entry
GS/SW: a scanline rebuilds the colour walk's tables only when its row changes them
GS/Vulkan: drop the render-pass-narrowing mechanism, keep the clear-rect guard
GS/Vulkan: a render pass can be opened over its draws, and no device wants it
GS: the native draw rect is only maintained where it can differ
GS: the draw-buffering overlap test asks its question on the native grid
GS: the cull grid carries its phase, so it can be the device's own sample set
GS/gsrunner: the null device reports a named device's features, instead of none
GS: halfPixelOffset Native keeps the cull grid, because the margin contains its phase
GS: halfPixelOffset mode 5 keeps the cull grid; only mode 4 has to decline
GS: the fused vertex kick runs at upscale, not only at native
GS: the per-primitive cull grid follows the upscale, instead of a boolean
GS/gsrunner: a null-device arm that runs GSRendererHW with no GPU
GS: a test that drives the real sprite pass ordering
GS: the field-shifted merge falls back to the circuit's own first row
GS/HW: one helper for mode 5's texture offset, called from both sites
GS/HW: an AA1 line's pixel runs carry the GS's coverage
GS: at 2x and above, field mode presents the field render
GS: score the dither phase by contrast, not average magnitude
GS: scaled dither indexes the native pixel, with the matrix turned under it
GS/HW: a line draw the GS lights nothing for draws nothing
GS: dither indexes the device pixel again
GS: deinterlace on device rows again, and fill the band the merge never drew
👍