Expose native UI GPU pass timings in the client profiler
Add separate development GPU profiler rows for native UI uploads, isolated UI layers, world nameplates, retained UI drawing and cursor drawing, retaining Composite as the inclusive total. Reuse FrameGpuQueries completed-slot/fence association and existing enum-driven profiler UI/export paths. Reset query slots outside render passes before any in-pass UI timestamp starts; do not reset queries inside the composite render pass. Preserve unsupported/unmeasured samples and compile instrumentation out of production builds. Validate real frame-slot reuse, profiler results and Vulkan synchronization on Linux. Implemented five GPU rows: UI Uploads, UI Layers, UI Nameplates, UI Drawing and UI Cursor, with enum-driven details/exports and explicit Composite parent/semantics metadata. Existing GPU metric indices remain unchanged. Split upload/layer and retained/cursor recording boundaries without changing draw order. Query slots now reset once outside render passes before the first submission (shadow/body-shadow or main buffer); later submissions do not reset earlier shadow results. Production builds exclude instrumentation. Verified: Debug client solution and production Release build both zero warnings/errors; 4,180 client tests (43 unavailable/opt-in skipped), 719 graphics tests and 42 Vulkan tests passed. Real RX9070 retained-frame test now runs with FrameProfiler and checks completed-slot UI samples, inclusive Composite bounds, inactive cursor absence and clean validation with 1/3 slots. Removing UiDraw End made both actual-frame tests fail for missing samples, then restored green. Existing query association/unsupported tests pass. Initial hardware run caught shadow submissions occurring before the main reset; first-submission reset ordering fixed that validation failure. A normal offline client rendered and cleanly closed after 120 profiled frames, with 120 completed samples in each of UiUploads/UiLayers/UiNameplates/UiDraw, inactive UiCursor absent, and correct Composite parent/semantics exported in .dev-data/gui/ui-gpu-timings/profile-with-semantics.json; no Vulkan validation errors. Positive cursor rendering was not active in this capture, but its measurement boundary is wired and inactive semantics were checked. Preserved the existing uncommitted scrollbar fix. Worktree engines-gpu-ui; changes uncommitted and unpushed. Remote task branch has been rebased externally (same three logical session commits atop seven newer develop commits), so local history diverges; no checkout/reset/rebase/force-push performed. Windows VM untouched. User requested committing both changes and pushing. Published 6a07159a3 (fix: Keep always-visible scrollbars valid for empty lists) and 3d51a6c9d (feature: Expose native UI GPU pass timings in the profiler) to feature/integrate-vulkan-gui / PR #2868. Only the two newly created, unpublished commits were replayed onto the externally rebased remote head be014164f; push was fast-forward over HTTPS using tea's credential helper, with no force-push or SSH agent. Rebased client solution build passed with zero warnings/errors; 16 targeted profiler/scrollbar/real-Vulkan/installed acceptance cases passed. Worktree clean and matches upstream. This supersedes the earlier uncommitted/local-divergence note.
Checklist
2 of 2 complete- Expose separate GPU UI upload/layer/nameplate/retained-draw/cursor timings using completed-frame query results and the existing profiler/export UI, with Composite remaining inclusive.
- Verify actual UI timestamps, frame-slot association, absent/unsupported samples and Vulkan validation, plus Debug tests and production compilation.
- Area
- Project Rubi-Ka
- Project
- engines
- Kind
- Feature
- Task ID
tsk_bcmz3qvgcc- Updated