Skip to content

video_core: diagnostics for task/mesh skips and null TIC descriptors - #772

Open
brycekottke wants to merge 4 commits into
Eglantine-Community:nx2-experimentalfrom
brycekottke:diag-task-mesh-tic
Open

brycekottke wants to merge 4 commits into
Eglantine-Community:nx2-experimentalfrom
brycekottke:diag-task-mesh-tic

Conversation

@brycekottke

Copy link
Copy Markdown

video_core: diagnostics for task/mesh skips and null TIC descriptors

Summary

While debugging a black screen at the cutscene-to-gameplay transition in
Ocarina of Time (NUP, 0400486024DEC000) on Intel Xe-LP, three places hid the
root cause silently. This PR adds diagnostics for them:

  1. vk_pipeline_cache.cpp: CreateGraphicsPipeline returned nullptr for
    task/mesh pipelines on devices without VK_EXT_mesh_shader without any log
    (a silent return nullptr), so affected draws only showed up as
    "Draw skipped ... miss=creation-failed". It now logs which stage and
    pipeline hash was skipped and why.
  2. vulkan_device.cpp: one line at device init reporting VK_EXT_mesh_shader
    availability (extension loaded, taskShader/meshShader feature bits, final
    enabled state), so "does this device take the mesh path" is answerable
    from a log alone. ANV only enables task/mesh on Arc-class hardware; on
    Xe-LP the extension is advertised by other vendors' stacks but silently
    absent here, which cost a full debugging session to establish.
  3. Null TIC diagnostics: a format-0 TIC decodes to address 0, 1x1x1 — a
    benign placeholder the game binds to handle 0 (the lookup already falls
    back to A8B8G8R8). shader_environment.cpp logs the raw words of such
    TICs bound in shaders (handle included), and image_info.cpp logs the
    raw words of format-0 TICs entering the texture cache, deduplicated per
    descriptor. This distinguishes the placeholder from a real unmapped NX2
    format, which would otherwise look identical in the format_lookup_table
    assert.

Root cause of the black screen itself (for the record): the title's gameplay
scene passes use NVN task + mesh programs, which are skipped entirely on
devices without VK_EXT_mesh_shader; the offscreen scene targets stay empty.
Confirmed by running the same title on llvmpipe (supports task/mesh in
software): no skips, no black screen. This is a hardware support gap, not an
emulator bug — a compute lowering for task/mesh programs is the eventual
fix, and NX2_NOTES row 89 records the ISBE layout such a lowering needs.
These diagnostics exist so the next person reaches that conclusion in
minutes instead of hours.

This PR was written with AI assistance (agent-assisted debugging and patch
authoring), reviewed and tested by a human.

Type of change

  • [] Bug fix
  • Game compatibility / game-support
  • Performance
  • New feature
  • Refactor / cleanup
  • CI / build
  • Documentation

Related issues

None found; this documents the diagnosis of the Xe-LP black screen.

Testing

  • Tested on Windows
  • Tested on Linux
  • Tested on macOS
  • Tested on NVIDIA
  • Tested on AMD
  • Tested on Intel

Games tested:

The Legend of Zelda: Ocarina of Time (NUP) — reaches gameplay on llvmpipe
with no mesh skips; on Intel Xe-LP the new warnings fire exactly once per
placeholder descriptor and once per skipped task/mesh pipeline.

Checklist

  • I built it locally and it compiles without new warnings
  • I did not add any copyrighted game data, keys or firmware
  • Docs updated if needed
  • I added AI Disclosure if one was used

Screenshots / logs

Before (Xe-LP, gameplay transition):

Draw skipped (no pipeline): vs=0x... ps=0x... rt0=0x... 128x128 miss=creation-failed
(repeated, no reason given; screen stays black)

After:

Skipping task shader pipeline 0x46cc6aaba42f700f: the device has no VK_EXT_mesh_shader
VK_EXT_mesh_shader: extension NOT loaded taskShader=0 meshShader=0 -> enabled=false
TIC with INVALID format bound to handle 0x0: raw={...} addr=0x0 1x1x1 type=0 hv=3
(warning, once per distinct placeholder descriptor)

@github-actions
github-actions Bot changed the base branch from nx2 to nx2-experimental November 8, 2026 11:40
@github-actions

github-actions Bot commented Nov 8, 2026

Copy link
Copy Markdown

Retargeted to nx2-experimental for pre-build testing. It will be promoted to nx2 after validation.

@brycekottke

Copy link
Copy Markdown
Author

Hope this helps a bit. while i was debugging a black screen in Ocarina of Time on a X1 thinkpad (i know, not much of a graphics card. Intel Xe-LP) i found a few places failing silently. this PR just adds log lines for skipped task/mesh pipelines, VK_EXT_mesh_shader availability at device init, and placeholder TIC descriptors. there's more details in the PR description. anyway. great work y'all! very cool project.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants