Say that the shader numbers are counted from the code, not from playing games,
in the progress map caption, the progress page, the docs and the README badge
text. The Still needed bars already use their own grey track and fixed fills
rather than the todo colour.
Throw sites and image formats go on the left, the form names on the right as
a table-like list. Labels sit left of each bar and the count right of it, never
over it. Bars use a neutral grey track and fixed amber and green fills that do
not follow the shared palette, so a red todo colour cannot turn the tracks red.
Throw sites scale to their 148 total and formats to their 159.
List the forms the decoder does not decode and the decoded ones the translator
has no case for, chart the unsupported-throw sites per recompiler area, and
chart the sampled, typed-buffer and host image formats. All of it is read from
the source by the same scan; progress.json only gains fields.
The scanner fixture gains VOP2 forms at 0x100, 0x13F and 0x140 so a shifted
bound changes a known answer. The command-line summary calls the old count
what it is (opcode names declared). The PR progress report compares only
library and legacy fields, so it no longer runs for recompiler-only changes.
The progress map panel and the page table still printed the old instruction
name count (100%). Both now show the decoded forms by encoding. The scanner
fixture gains VOPC and VOP1 forms in VOP3, the interpolation emit switch, the
export family, a DPP16 refusal and the opcode range edges, so a change to any
of these rules changes a known answer.
The shaders badge counted ISA instruction names that have an RdnaOpcode
enumerator and had reached 100%. Measure what the recompiler does instead:
decoded and translated instruction forms (base, VOP3, DPP) from the opcode
tables and emit switches, and the unsupported throws, using AMD's RDNA 2
instruction forms (MIT, vendored as a derived table). Say on the page that
this is source coverage, not game compatibility.
The Pages progress workflow now also runs when the recompiler changes, and
the Pages workflows fail instead of publishing when the scan cannot read the
recompiler.
The libraries badge divides implemented by declared functions, so it drops
whenever a pull request declares many throwing exports at once, even while
implementations land daily. The history page now draws the daily change in
implemented functions, and a new badge-week.svg reports the gain over the
last 7 days, linked from the README status row.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
collect_shaders counted the ISA variants of an opcode but still listed the
opcode itself as decoded but not in AMD's public list when its own name
wasn't there. VAddI32, VSubI32, VSubrevI32 and SCbranchCdbg were counted
through V_ADD_CO_U32, V_SUB_CO_U32, V_SUBREV_CO_U32 and the four
S_CBRANCH_CDBG* instructions, yet the progress page called them not
counted. An opcode is now listed only when neither its name nor any of its
variants is in the list.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The changed-libraries table of the progress report printed the change in
percentage points (` pp`), while the headline prints it in `%`. Both are
the difference between two percentages, so the table now uses `%` too,
including the small-change path added with the rounding fix (`+0.0006%`,
`+<0.0001%`). Keeps the two decimals, the explicit sign and the `+0.00`
rounding of tiny or negative-zero changes.
The change is moved into `percent_change()`. Tests pin the `%` unit for
the table and the headline, and `docs/dev/PROGRESS.md` describes the
column in the unit of the headline.
Rebased onto main (which now carries #10992's small-change path) and
resolved there: that path also prints `%`.
Co-authored-by: MarcZX10 <[email protected]>
Co-Authored-By: Claude Haiku 5.5 <[email protected]>
write_site writes progress.json, the two badges, progress.svg and progress.html
one after another. When two of those names already refer to the same file (a
hardlink, for example), the later write replaced the earlier report through the
alias: progress.json ended up holding the HTML page. The existing reports are now
compared with samefile before anything is written, and the run fails naming the
two aliased files and leaving every report unchanged.
A snapshot may hold float counts, which Fraction rejects, so --compare raised TypeError for every changed library row. The exact value now comes from exact_delta, which already falls back for non-integer counts, and only when the rounded change is zero.
The Changed libraries table rounded each library's change to two decimals, so libc going from 1340/1351 to 1341/1352 read +0.00 pp although a function was implemented. When the rounded change is zero but the exact change from the done and total counts is not, print it like the headline does, with up to four decimals or +<0.0001. Changes that survive the rounding and unchanged ratios read as before.
progress.py skips every definition whose name ends in _nid_no_patch or
_nid_no_patch_cut, which are meant to be internal helpers. Some libraries
export such functions with APS5_EXPORT under an explicit NID or name:
libSceAgcVsh (150), libSceNKWebKit (150) and libSceJson2's inventory
(66), all of them calling NotImplemented_nid_no_patch. None of the 366
was counted, so those three libraries showed 151 of 151 functions where
they declare 517, and import_audit, which takes its stub list from the
same scan, reported imports of them as implemented.
A _nid_no_patch definition is now skipped only when no APS5_EXPORT in its
library exports it. The library totals go from 6104 of 12305 to 6104 of
12671 on main.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The progress report headline subtracted two percentages that were already rounded to two decimals, so one implemented function among tens of thousands read as +0.0%. When the rounded change is zero but the exact change is not, compute it from the done and total counts with exact fractions and print it with up to four decimals, or +<0.0001 below that. The icon follows the exact sign. Changes that survive the rounding, a zero change in the ratio and the per-library table are unchanged.
progress.py <output> raised an uncaught OSError with a traceback when the
output path was a file or sat in a directory it could not create. Report it
as a usage error that names the path, like the other bad arguments.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
`return ::Fail();` and `else ::Fail();` call the global wrapper, but
QUALIFIED took the keyword for a qualifier name and counted the export
as done. The name before `::` must now be an identifier that is not a
keyword, or a template's closing `>`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012zyXkUzTZGh3nBwNMtrLaW
scan_library and collect_shaders read CMakeLists.txt, the ISA table and the opcode header with the locale codec. On Windows that is cp1252, so a UTF-8 file containing U+2010 or U+2192 raised UnicodeDecodeError. These reads now pass encoding="utf-8" and errors="ignore", and a subprocess test with an ASCII default codec covers it.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01V9UU71SP1UKGR51Sowbgmq