Verified on the fork: 2.3.7-nvgfx.1 (nvgfx-2.3.7, 60621ca) renders the visible_function_table check, mtlfeat 22 ok / 0 bad (stock 2.3.7: 21 ok / 1 bad). Feature test pass B, evidence/native/featuretest-2026-10-18/B/gpu.mtlfeat.txt. Still to send upstream.
2.3.7: a compute kernel that calls through a visible function table comes back nil #1
On stock NullMoth 2.3.7, newFunctionWithName returns nil for a kernel whose only visible-function calls go through a visible_function_table. Metal then asserts "computeFunction must not be nil" when the pipeline is built.
Cause. 2.3.7 decides whether a function has to wait for its pipeline link by asking the translator for the function's references (nvmtl_needs_visible_link). That query reads only air.visible_function_reference metadata. A function that only uses a table has none, so it is not deferred. 2.3.6 deferred it on the "Metal visible function table" error text.
Fix. Fork commit 60621ca on nvgfx-2.3.7: also defer when the AIR carries air.visible_function_table or air.intersection_function_table. nvmtl_link_stage already links those from the table candidates.
Reproduce. The feature test probe native/tools/featuretest/probes/mtlfeat.m (check visible_function_table): 64 threads call twice(x) through a one-entry table.
Tested on RTX 5070 Laptop (GB206, 10DE:2D18), Lenovo Legion 5 15IAX10, macOS 26.7.1 (25G241). Evidence: project-legion evidence/native/featuretest-2026-10-18/A/gpu.mtlfeat.txt. Pass B of the feature test (fork 2.3.7-nvgfx.1) verifies the fix. Candidate for an upstream PR.