Crafter.Graphics/tests
catbot 9414863cff perf(sync): scope frame-loop barriers to swapchain image + real per-pass stages (#115)
The inter-pass and acquire/present barriers in the frame loop set both
stage masks to ALL_COMMANDS, and the inter-pass dependency used a
queue-wide VkMemoryBarrier — fully serialising against every pipeline
stage and flushing all caches every frame, when all the next pass needs
is the swapchain image the previous one wrote.

Replace the inter-pass global VkMemoryBarrier with an image memory
barrier scoped to the swapchain image's single colour subresource (as
the intra-pass UI barrier already does), and derive the barrier stage
masks per pass: RenderPass::SwapchainStage() is overridden by UIRenderer
(COMPUTE_SHADER) and RTPass (RAY_TRACING_SHADER), so a compute->compute
edge only serialises COMPUTE while an RT pass pulls in RAY_TRACING — the
acquire/present frame-edge masks use the real union of the frame's
passes (SwapchainStageUnion). The base default and the empty-passes
fallback are the conservative COMPUTE | RAY_TRACING | TRANSFER union, so
a polymorphic or un-overridden pass can only be over- not
under-synchronised.

Adds SwapchainBarrierScope (pure CPU) pinning the per-pass derivation,
the union narrowing, and the inter-pass barrier scope; FrameLoopSync
already drives the real GPU frame loop with validation enabled.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 19:44:33 +00:00
..
BLASBuildOptions perf(mesh): place RT geometry in device-local memory via #89 upload strategy (#73) 2026-06-17 17:49:25 +00:00
DeferredDeletion fix(device): fence-keyed deferred resource-deletion queue (#101) 2026-06-17 13:21:12 +00:00
FontAdvanceCache perf(font): cache per-codepoint advances in font units (#57) 2026-06-16 17:00:48 +00:00
FontAtlasDirtyRect perf(font): upload only the dirty sub-rect of the glyph atlas (#51) 2026-06-16 15:40:37 +00:00
FrameLoopSync feat(window): multi-frame-in-flight frame pacing (#40) 2026-06-16 15:37:11 +00:00
InputFieldHitTest perf(input-field): O(n) cursor hit test via Font::NearestCursorByte (#56) 2026-06-16 16:55:03 +00:00
MemoryTypeFallback fix(device): add preferred mask + required-only fallback to GetMemoryType (#59) 2026-06-16 16:03:50 +00:00
MeshDecompressStagingRelease test(mesh): pin static-build deletion count in #67 staging-release test (#110) 2026-06-17 18:50:38 +00:00
MipChainBarrierBatch perf(image): batch final mip-chain layout transition (#70) 2026-06-16 18:30:44 +00:00
MouseScroll feat(input): wire native mouse-wheel scroll on Wayland + Win32, normalize all backends to ±1/detent (#32) 2026-06-12 15:02:28 +00:00
PipelineCacheValidation test(pipeline): cover pipeline-cache header validation (#69) 2026-06-16 18:23:25 +00:00
PushConstantRewrite fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute (#21) 2026-06-03 18:35:39 +00:00
ShapeTextCache perf(text): cache shaped runs in ShapeText (#52) 2026-06-16 15:40:52 +00:00
SwapchainBarrierScope perf(sync): scope frame-loop barriers to swapchain image + real per-pass stages (#115) 2026-06-17 19:44:33 +00:00
TLASHighWaterMark perf(rt): allocate TLAS metadata buffer in BAR/VRAM, not system RAM (#75) 2026-06-17 17:50:01 +00:00
UIClipFlag perf(ui): gate per-pixel clip compares behind a flags bit (#50) 2026-06-16 16:57:07 +00:00
UIFusedShader perf(ui): add additive DispatchFused to collapse consecutive UI passes (#47) 2026-06-16 17:03:24 +00:00
UploadStrategy cache directwrite 2026-06-16 20:10:23 +02:00
VulkanBufferFlushGate perf(vulkan-buffer): skip flush/invalidate on coherent memory (#60) 2026-06-16 17:04:26 +00:00
VulkanBufferRangedFlush perf(ui): flush only the written descriptor range, not the whole heap (#61) 2026-06-16 18:29:24 +00:00
VulkanBufferResizeReuse perf(buffer): capacity-reuse in VulkanBuffer::Resize (#63) 2026-06-16 18:22:09 +00:00