Skip to content

PR 0058 Vulkan test a larger graphics descriptor batch

github-actions[bot] edited this page Sep 14, 2026 · 1 revision

PR #58 — Vulkan: test a larger graphics descriptor batch

PR #58

Status

  • GitHub state: Closed unmerged
  • Disposition at review: Negative result
  • Current head at review: 3a56adfac81a804e974078024cb31bd132315cb6 (research/vk-descriptor-capacity)
  • Reviewed head: 3a56adfac81a804e974078024cb31bd132315cb6
  • Last reviewed: 2026-09-14 UTC
  • Base: main at bd1fecb93353272dda2a810991e28945de35b665
  • Subsystem: Vulkan memory / synchronization

Review freshness: this page records the final/known PR head at review time. If the PR is reopened or rewritten, re-review before relying on implementation details.

At a glance

  • What it changes: Vulkan: test a larger graphics descriptor batch
  • Why it was attempted: Observed problem: Vulkan can exhaust its graphics descriptor-set batch and force the existing command-buffer finish/fence wait before the next draw. Profiling evidence: Diagnostic 57 recorded 665 descriptor-only capacity drains, zero uniform-only or simultaneous drains, zero unresolved other capacity producers, and 6.529970 seconds of capacity-labelled wait in a 27.007765-second setup-inclusive QPC span. Suspected cause: The 1,024-entry graphics descripto…
  • Current/final result: Closed negative experiment: no repeatable benefit was established from the larger graphics descriptor batch.
  • Lesson: A larger descriptor batch/capacity is not a performance win by itself; single-pair movements were insufficient and capacity changes can simply move the eventual wait.

Code impact

Implementation file Δ Why it matters
hw/xbox/nv2a/pgraph/vk/renderer.h +1/-1 Renderer-owned state needed by the implementation.

Flow

flowchart LR
    subgraph Before
        A[Vulkan memory / synchronization input] --> B[Existing path] --> C[Observed limitation/cost] --> D[Guest-visible result]
    end
    subgraph PR_58[PR #58]
        E[Vulkan memory / synchronization input] --> F[PR #58 change/measurement] --> G[Qualified behavior] --> H[Guest-visible result]
    end
Loading

What changed

Change one bound in hw/xbox/nv2a/pgraph/vk/renderer.h : graphics descriptor-set array 1,024 → 2,048. - Retain ARRAY SIZE -derived graphics pool sizing and indexing. - Retain the existing capacity predicate, command-buffer finish, fence wait, reset, and teardown. - Leave the compute pool, OpenGL path, and diagnostic instrumentation unchanged/absent. Main code path: Vulkan graphics descriptor pool capacity and fence-based retirement. Commits: candidate 3a56adfac81a804e974078024cb31bd132315cb6 ; tree 463f23c13c42a2d5284152ae5879766dfa92f4d8 .

Result

Closed negative experiment: no repeatable benefit was established from the larger graphics descriptor batch.

Lesson learned

A larger descriptor batch/capacity is not a performance win by itself; single-pair movements were insufficient and capacity changes can simply move the eventual wait.

Avoid repeating

Do not increase descriptor limits and cite fewer rotations/finishes without repeated end-to-end guest-progress evidence.

Docs / evidence

Pointers only; the detailed evidence remains in its original location.

Related architecture

Related PRs referenced by this PR:

Clone this wiki locally