ExecutionTest::ATOProgOffset is crashes on ARM64
Description
ExecutionTest::ATOProgOffset is failing on ARM64
Steps to Reproduce Repros in internal ARM64 testing pipeline. Reach out to @hekota for access to the device.
Actual Behavior
FAIL: clang-taef-exec :: ExecHLSLTests.dll/ExecutionTest::ATOProgOffset (206 of 206)
******************** TEST 'clang-taef-exec :: ExecHLSLTests.dll/ExecutionTest::ATOProgOffset' FAILED ********************
Test Authoring and Execution Framework v10.68 for arm64
Warning: TAEF will not listen for crashes from Windows Error Reporting because it failed to set up the listener. ([HRESULT 0x80070005] Failed to enable the Microsoft.Windows.FaultReporting TraceLogging provider in an ETW trace.)
Agility SDK not enabled.
Experimental mode enabled.
Debug layer enabled.
StartGroup: ExecutionTest::ATOProgOffset
Using Adapter:Microsoft Basic Render Driver
Using Adapter:Microsoft Basic Render Driver
Using Adapter:Microsoft Basic Render Driver
No error message given in the logs. When run directly on the machine TAEF reports crash (0xC0000005 - access violation).
Environment DXC version: main as of 1/22/2024 Surface Pro, Windows 11 (26016.1001, arm64)
I have verified that it does not repro on x64 (pre-release Windows build 23H2 version 26016.1001).
FYI @hekota @damyanp, this was a bug in WARP's arm64 code generation backend. Essentially, in the arm64 ISA, there's multiple variations of add instructions, and depending on which one is used, register 31 has a different meaning, either the stack pointer, or an always-zero value. WARP used the wrong one and ended up producing pointers that were 0-based instead of stack-based.
I coincidentally fixed this a few weeks ago due to a report on the DirectX Discord server (https://discord.com/channels/590611987420020747/596046911010504754/1227755899037286512). I confirmed that this test is passing on latest WARP bits on arm64, but crashes if I revert that fix. I'm hoping to get fixed binaries available via the WARP NuGet 1.0.12 soon.
Fixed binaries are available in https://www.nuget.org/packages/Microsoft.Direct3D.WARP/1.0.12.