mirror of
https://github.com/xemu-project/xemu.git
synced 2026-10-20 01:29:22 +02:00
0103939ba4fcd76d3bc5c052d4e27cddc69ac232
Paired MAC+ILU and duplicate output instructions can write to oPos while reading from R12. This leads to a case where xemu's serialized emulation erroneously uses the output of a previous instruction when calculating the value of a later one. E.g., in ``` /* 0x00000000 0x0080201A 0xC4002868 0x7CB0E800 */ MAD oPos.xyz, R12.xyz, R1.x, C[1].xyz + MAD R11.xy, R12.xyz, R1.x, C[1].xyz ``` the value of oPos prior to the first instruction should be used for both MAD calculations. This could alternatively be fixed by writing oPos to a temp vector and deferring the output vector update until after the token is fully processed. Note that we always process output registers writes before temp register writes so the only interesting case should be the oPos/R12 alias. An op that writes to one of its temp inputs will always execute the non-modifying output register write before updating the temp register. [Tests](https://github.com/abaire/nxdk_pgraph_tests/blob/1745a45290a5d607f9582303d6882cbf62f003de/src/tests/vertex_shader_independence_tests.cpp#L125) [HW results](https://abaire.github.io/nxdk_pgraph_tests_golden_results/results/Vertex_shader_independence_tests/index.html)
…
…
…
…
…
…
Please visit https://xemu.app for more information.
Description
Original Xbox Emulator for Windows, macOS, and Linux (Active Development)
Readme
GPL-2.0
701 MiB
0 Stars
1 Watchers
0 Forks
Languages
C
82.3%
C++
6.9%
Python
3.5%
Dylan
2.7%
Shell
1.5%
Other
2.9%