Repository navigation
video_core: diagnostics for task/mesh skips and null TIC descriptors - #772
brycekottke wants to merge 1 commit into
Conversation
|
Retargeted to |
|
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. |
|
Thanks for the write-up. The root-cause analysis of the Xe-LP black screen (no VK_EXT_mesh_shader, so task/mesh draws are skipped) is useful, and logging it is a good idea. Blocking
Suggestions
Nits
|
9f84e11 to
9f108b7
Compare
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
9f108b7 to
70fff13
Compare
70fff13 to
77f6019
Compare
|
Thanks for the review @aidankinzett. All should be addressed and force-pushed (branch re-targeted to
One change in scope on the rebase: this PR originally logged the task/mesh pipeline skip on devices without VK_EXT_mesh_shader, but Also worth noting for anyone following the OOT black-screen thread in the PR description: the Xe-LP machine that motivated this now gets task/mesh through the emulation path instead of skipping, so the original skip-the-pipeline failure mode shouldn't occur on current |
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:
vk_pipeline_cache.cpp:CreateGraphicsPipelinereturnednullptrfortask/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.
vulkan_device.cpp: one line at device init reporting VK_EXT_mesh_shaderavailability (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.
benign placeholder the game binds to handle 0 (the lookup already falls
back to A8B8G8R8).
shader_environment.cpplogs the raw words of suchTICs bound in shaders (handle included), and
image_info.cpplogs theraw 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
Related issues
None found; this documents the diagnosis of the Xe-LP black screen.
Testing
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
Screenshots / logs
Before (Xe-LP, gameplay transition):
After: