2026-04-24 - 2026-07-24

Overview

73 active pull requests
83 active issues
Excluding merges, 1 author has pushed 27 commits to master and 123 commits to all branches. On master, 266 files have changed and there have been 24317 additions and 13421 deletions.

73 pull requests merged by 1 user

Merged #156 test(bench): measure net perf gain from #40 to master in Sponza (#155) 2026-06-18 21:36:37 +02:00

Merged #154 fix(window): silence per-frame and setup-path Vulkan validation errors (#153) 2026-06-18 20:05:06 +02:00

Merged #152 perf(window): block message loop while paused on Win32 (#134) 2026-06-18 16:01:28 +02:00

Merged #151 perf(webgpu): byteCount-bounded readback for over-provisioned buffers (#133) 2026-06-18 16:01:18 +02:00

Merged #150 perf(rt): batch the WebGPU TLAS instance upload into one writeBuffer (#131) 2026-06-18 16:00:11 +02:00

Merged #149 perf(webgpu): range-flush only live TLAS metadata slots (#130) 2026-06-18 15:56:46 +02:00

Merged #148 perf(ui): reuse handles vector in WebGPU custom Dispatch (#132) 2026-06-18 15:54:36 +02:00

Merged #147 perf(ui): per-shelf dirty spans for tight font-atlas uploads (#129) 2026-06-18 15:36:33 +02:00

Merged #146 perf(ui): memoize the input-field caret prefix width (#128) 2026-06-18 15:30:33 +02:00

Merged #143 perf(ui): LRU-evict the shaped-run cache instead of clearing it (#123) 2026-06-18 15:30:08 +02:00

Merged #145 perf(ui): subgroup prefix-sum stream compaction in the UI compute shaders (#124) 2026-06-18 15:27:30 +02:00

Merged #144 perf(ui): skip the destination read-modify-write on empty tiles (#127) 2026-06-18 15:27:08 +02:00

Merged #142 perf(ui): hoist loop-invariant per-item/per-glyph math out of the per-pixel loop (#125) 2026-06-18 15:22:46 +02:00

Merged #141 perf(ui): transparent shaped-run cache lookup, no string copy on hit (#122) 2026-06-18 15:19:43 +02:00

Merged #140 perf(tlas): dirty-track the per-frame TLAS instance+metadata upload (#118) 2026-06-18 15:07:44 +02:00

Merged #139 perf(buffer): reuse staging via a per-frame-in-flight ring in UploadDeviceLocal (#120) 2026-06-17 21:52:04 +02:00

Merged #138 perf(mesh): dirty-range vertex upload for deforming-mesh Refit (#119) 2026-06-17 21:51:26 +02:00

Merged #137 perf(sync): scope frame-loop barriers to swapchain image + real per-pass stages (#115) 2026-06-17 21:45:13 +02:00

Merged #136 perf(image): release static texture staging after upload (#114) 2026-06-17 21:41:07 +02:00

Merged #135 perf(device): pop retired deletions off the front in O(ready) (#116) 2026-06-17 21:38:28 +02:00

Merged #112 test(mesh): pin static-build deletion count for #67 staging-release (#110) 2026-06-17 20:51:19 +02:00

Merged #109 perf(mesh): place RT geometry device-local via #89 upload strategy (#73) 2026-06-17 20:05:57 +02:00

Merged #111 perf(rt): allocate TLAS metadata buffer in BAR/VRAM, not system RAM (#75) 2026-06-17 19:50:55 +02:00

Merged #108 perf(window): use HOST_CACHED readback staging in SaveFrame (#74) 2026-06-17 19:45:17 +02:00

Merged #107 perf(rt): place SBT in device-local memory via upload-strategy helper (#72) 2026-06-17 19:42:02 +02:00

Merged #106 perf(decompress): release compressed staging after submit, not for the resource's life (#67) 2026-06-17 19:41:20 +02:00

Merged #105 perf(rt): allocate TLAS instance buffer in BAR/VRAM, not system RAM (#65) 2026-06-17 19:38:14 +02:00

Merged #104 perf(mesh): release per-mesh scratch buffer for static BLAS (#66) 2026-06-17 19:36:44 +02:00

Merged #103 perf(mesh): skip immutable index re-upload on RT refit UPDATE (#68) 2026-06-17 19:34:57 +02:00

Merged #102 fix(device): fence-keyed deferred resource-deletion queue (#101) 2026-06-17 15:21:47 +02:00

Merged #99 perf(ui): flush only the written descriptor range, not the whole heap (#61) 2026-06-16 20:56:46 +02:00

Merged #100 perf(image): batch final mip-chain layout transition (#70) 2026-06-16 20:31:16 +02:00

Merged #98 perf(rt): high-water-mark growth for TLAS host-input buffers (#64) 2026-06-16 20:24:49 +02:00

Merged #97 perf(pipeline): shared, disk-persisted VkPipelineCache (#69) 2026-06-16 20:24:03 +02:00

Merged #96 perf(buffer): capacity-reuse in VulkanBuffer::Resize (#63) 2026-06-16 20:22:38 +02:00

Merged #95 feat(device): runtime upload-strategy helper PreferDirectDeviceWrite (#89) 2026-06-16 19:23:59 +02:00

Merged #93 perf(ui): additive DispatchFused to collapse consecutive UI passes (#47) 2026-06-16 19:12:21 +02:00

Merged #94 perf(vulkan-buffer): skip flush/invalidate on coherent memory (#60) 2026-06-16 19:07:43 +02:00

Merged #92 perf(font): cache per-codepoint advances in font units (#57) 2026-06-16 19:04:09 +02:00

Merged #91 perf(ui): gate per-pixel clip compares behind a flags bit (#50) 2026-06-16 18:59:48 +02:00

Merged #90 perf(input-field): O(n) cursor hit test via Font::NearestCursorByte (#56) 2026-06-16 18:55:35 +02:00

Merged #88 perf(ui): scope inter-dispatch barrier to the swapchain image (#48) 2026-06-16 18:54:34 +02:00

Merged #87 fix(device): preferred mask + required-only fallback for GetMemoryType (#59) 2026-06-16 18:04:21 +02:00

Merged #85 perf(ui): cooperative shared-memory tile culling in UI compute shaders 2026-06-16 18:03:16 +02:00

Merged #86 fix(image): scope sampled-image upload barriers to the real consumer stage (#54) 2026-06-16 18:01:51 +02:00

Merged #84 perf(text): fold Ensure+Lookup into FontAtlas::EnsureAndGet (#53) 2026-06-16 17:44:21 +02:00

Merged #83 perf(font): upload only the dirty sub-rect of the glyph atlas (#51) 2026-06-16 17:43:23 +02:00

Merged #81 feat(window): multi-frame-in-flight frame pacing (#40) 2026-06-16 17:42:14 +02:00

Merged #82 perf(text): cache shaped runs in ShapeText (#52) 2026-06-16 17:41:36 +02:00

Merged #80 perf(shaders): drop nonuniformEXT on text font slots 2026-06-16 17:29:51 +02:00

Merged #79 perf(window): drop dead present-mode queries from swapchain recreate (#45) 2026-06-16 17:29:00 +02:00

Merged #77 perf(window): cache per-frame heap-bind structs across frames 2026-06-16 17:27:55 +02:00

Merged #78 perf(window): hoist invariant per-frame Vulkan info structs to members 2026-06-16 17:27:49 +02:00

Merged #76 perf(window): ring buffer for CRAFTER_TIMING frame times (#44) 2026-06-16 17:25:58 +02:00

Merged #39 feat(rt): BuildProcedural — accept a device AABB buffer as build input (#37) 2026-06-16 16:13:10 +02:00

Merged #38 feat(vulkan-rt): BLAS build options — fast-build/fast-trace + in-place refit (#36) 2026-06-16 15:38:35 +02:00

Merged #35 feat(vulkan-rt): Mesh::BuildProcedural — AABB (procedural) BLAS build path (#33) 2026-06-13 02:18:31 +02:00

Merged #34 feat(input): wire native mouse-wheel scroll on Wayland + Win32, normalize all backends to ±1/detent 2026-06-13 02:10:53 +02:00

Merged #31 feat(webgpu-rt): atomic pixel accumulator + raysPerPixel — >1 ray per pixel per bounce (#30) 2026-06-10 00:46:24 +02:00

Merged #28 feat(webgpu): HDR post-process primitives for bloom (#27) 2026-06-09 14:56:03 +02:00

Merged #26 fix(webgpu-rt): dynamic rayQuery TLAS leaf-start so picks hit for realistic instance counts (#25) 2026-06-04 15:33:55 +02:00

Merged #24 docs(vulkan-rt): document dynamic descriptor_heap-index hit-shader fault (#23) 2026-06-03 22:05:45 +02:00

Merged #22 fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute (#21) 2026-06-03 20:36:23 +02:00

Merged #20 fix(vulkan-rt): merge TLAS push constant into existing block (#18) 2026-06-03 04:29:01 +02:00

Merged #19 feat(vulkan): re-enable GPU-Assisted Validation 2026-06-03 04:11:00 +02:00

Merged #16 fix(vulkan-rt): work around NVIDIA descriptor-heap AS-read device-loss (#15) 2026-06-03 04:00:38 +02:00

Merged #14 feat(webgpu-rt): any-hit + AABB (procedural) geometry support 2026-06-03 00:10:17 +02:00

Merged #12 fix(webgpu): reshape wavefront TRACE/SHADE to 2-D to survive >4.19M rays 2026-06-01 13:10:05 +02:00

Merged #10 docs(vulkan-rt): native descriptor-heap AS read is an NVIDIA driver fault (#7) 2026-06-01 00:22:52 +02:00

Merged #9 fix(webgpu): request adapter's storage-buffer limit, not hardcoded 16 2026-05-31 23:58:19 +02:00

Merged #6 fix(vulkan): clear startup validation errors on native triangle 2026-05-31 22:59:48 +02:00

Merged #4 WebGPU RT: wavefront/streaming tracer (replaces megakernel) 2026-05-31 22:31:35 +02:00

Merged #2 WebGPU RT: enable TLAS spatial sort via bitonic network (plan phase 3) 2026-05-31 17:49:39 +02:00

82 issues closed from 2 users

Closed #155 Measure peformance improvements 2026-06-18 21:36:37 +02:00

Closed #153 Vulkan validation errors: per-frame acquire-barrier dstAccessMask/stage mismatch + setup-path cmd-buffer/buffer lifecycle 2026-06-18 20:05:06 +02:00

Closed #134 [perf] Win32 StartSync busy-spins one core at 100% when not updating (Window.cpp) 2026-06-18 16:01:29 +02:00

Closed #133 [perf] WebGPU full-buffer readback copies entire allocation even for a small prefix (WebGPUBuffer.cppm) 2026-06-18 16:01:19 +02:00

Closed #131 [perf] WebGPU GPU-owned instance runs upload one writeBuffer per element (RenderingElement3D-WebGPU.cpp) 2026-06-18 16:00:11 +02:00

Closed #130 [perf] WebGPU metadata flush uploads full 256 KB padded buffer every frame (RenderingElement3D-WebGPU.cpp) 2026-06-18 15:56:46 +02:00

Closed #132 [perf] UIRenderer::Dispatch heap-allocates a std::vector per custom dispatch (UI-WebGPU.cpp) 2026-06-18 15:54:36 +02:00

Closed #129 [perf] FontAtlas dirty-rect uses one union bounding box (FontAtlas.cpp) 2026-06-18 15:36:33 +02:00

Closed #128 [perf] DrawInputField recomputes caret X via full-prefix walk every frame (InputField.cpp) 2026-06-18 15:30:33 +02:00

Closed #123 [perf] shapedRuns_ eviction is all-or-nothing clear() at cap (UI-Shared.cpp) 2026-06-18 15:30:08 +02:00

Closed #124 [perf] Single-lane serial stream compaction stalls 63/64 threads — use subgroup prefix-sum (ui-fused.comp.glsl) 2026-06-18 15:27:30 +02:00

Closed #127 [perf] Unconditional destination imageLoad/imageStore before early-out (ui-quads.comp.glsl) 2026-06-18 15:27:08 +02:00

Closed #125 [perf] Hoist per-item/per-glyph loop-invariant math into shared memory at load (ui-images/text/fused) 2026-06-18 15:22:46 +02:00

Closed #122 [perf] ShapeText heap-allocates the cache-key std::string on every call, including hits (UI-Shared.cpp) 2026-06-18 15:19:44 +02:00

Closed #118 [perf] TLAS instance+metadata upload: O(n) rebuild + whole-buffer flush every frame (RenderingElement3D.cpp) 2026-06-18 15:07:44 +02:00

Closed #120 [perf] Staged UploadDeviceLocal allocates+frees a fresh staging buffer every call (VulkanBuffer.cppm) 2026-06-17 21:52:04 +02:00

Closed #119 [perf] Mesh::Refit re-uploads the full vertex buffer every frame (Mesh.cpp) 2026-06-17 21:51:26 +02:00

Closed #115 [perf] Frame-loop barriers use ALL_COMMANDS scope (inter-pass + acquire/present) (Window.cpp) 2026-06-17 21:45:14 +02:00

Closed #114 [perf] Per-image dedicated alloc + leaked persistent staging buffer (ImageVulkan.cppm) 2026-06-17 21:41:07 +02:00

Closed #116 [perf] ReclaimDeletions compacts the whole deletion queue every frame (Device.cpp) 2026-06-17 21:38:28 +02:00

Closed #126 [perf] Per-glyph-constant SDF AA scale recomputed per pixel (ui-text.comp.glsl) 2026-06-17 21:26:03 +02:00

Closed #121 [perf] Per-frame whole-buffer flush of TLAS instance+metadata buffers (RenderingElement3D.cpp) 2026-06-17 21:26:02 +02:00

Closed #117 [perf] Acquire/present barriers use ALL_COMMANDS scope (Window.cpp) 2026-06-17 21:21:54 +02:00

Closed #113 [perf] No buffer suballocator — vkAllocateMemory per buffer (VulkanBuffer.cppm) 2026-06-17 21:19:25 +02:00

Closed #110 MeshDecompressStagingRelease test fails on master: deletionQueue.size() != 1 after compressed Build 2026-06-17 20:51:19 +02:00

Closed #73 [perf] Mesh vertex/index/aabb are HOST_VISIBLE — place device-local (direct on ReBAR, staged otherwise) 2026-06-17 20:05:57 +02:00

Closed #75 [perf] TLAS metadataBuffer is HOST_VISIBLE, CPU-written + shader-read every frame 2026-06-17 19:50:55 +02:00

Closed #74 [perf] SaveFrame readback uses HOST_COHERENT (write-combined) — should be HOST_CACHED 2026-06-17 19:45:17 +02:00

Closed #72 [perf] RT shader binding table is HOST_VISIBLE, GPU-read every traceRays 2026-06-17 19:42:03 +02:00

Closed #67 [perf] compressedStaging reallocated and kept per compressed Build 2026-06-17 19:41:20 +02:00

Closed #65 [perf][MEDIUM] TLAS instance buffer is HOST_VISIBLE, read directly as AS build input 2026-06-17 19:38:14 +02:00

Closed #66 [perf] Per-mesh dedicated scratch buffer (VRAM waste) 2026-06-17 19:36:44 +02:00

Closed #68 [perf][LOW] Refit re-uploads immutable index buffer on UPDATE 2026-06-17 19:34:57 +02:00

Closed #71 [perf][LOW] Compressed-asset Update re-Resizes both staging buffers every call 2026-06-17 19:29:18 +02:00

Closed #101 [infra] Fence-keyed deferred resource-deletion queue (UAF since #40; unblocks #63/#66) 2026-06-17 15:21:48 +02:00

Closed #61 [perf][LOW] Per-descriptor write flushes all numFrames heap copies whole-size 2026-06-16 20:56:46 +02:00

Closed #70 [perf][LOW] Per-mip layout transitions issued one-at-a-time 2026-06-16 20:31:16 +02:00

Closed #64 [perf] TLAS instance/metadata buffers reallocated on instance-count change 2026-06-16 20:24:49 +02:00

Closed #69 [perf][LOW] No VkPipelineCache passed to vkCreateComputePipelines 2026-06-16 20:24:03 +02:00

Closed #63 [perf] VulkanBuffer::Resize always destroys+reallocates 2026-06-16 20:22:38 +02:00

Closed #62 [perf] Per-allocation vkAllocateMemory, no suballocator 2026-06-16 20:09:44 +02:00

Closed #89 [perf] Runtime upload-strategy helper: direct HOST_VISIBLE|DEVICE_LOCAL vs staging (ReBAR-aware) 2026-06-16 19:23:59 +02:00

Closed #47 [perf][MEDIUM] Add DispatchFused (additive) to collapse consecutive UI passes to one load/store 2026-06-16 19:12:21 +02:00

Closed #58 [perf][MEDIUM] Descriptor heaps force HOST_VISIBLE|DEVICE_LOCAL with no fallback 2026-06-16 19:09:31 +02:00

Closed #60 [perf][LOW] FlushDevice always flushes even on coherent memory 2026-06-16 19:07:43 +02:00

Closed #57 [perf][LOW] GetLineWidth/ScaleForSize recompute scale + per-glyph HMetrics uncached 2026-06-16 19:04:09 +02:00

Closed #50 [perf][LOW] uiResolveScreenPixel runs clip-rect compares even when unclipped 2026-06-16 18:59:48 +02:00

Closed #56 [perf][LOW] InputField hit-test is O(n^2): re-measures whole prefix per char 2026-06-16 18:55:35 +02:00

Closed #48 [perf][LOW] Narrow per-dispatch UI barrier to an image-subresource barrier (full removal: #47) 2026-06-16 18:54:34 +02:00

Closed #59 [perf][LOW] GetMemoryType returns first match, no preferred/fallback distinction 2026-06-16 18:04:21 +02:00

Closed #46 [perf][HIGH] UI tiles scan the full item list — no spatial culling 2026-06-16 18:03:16 +02:00

Closed #54 [perf][MEDIUM] TransitionImageLayout hardcodes RAY_TRACING stage for all shader reads 2026-06-16 18:01:51 +02:00

Closed #53 [perf][LOW] Ensure()+Lookup() do two hash-map probes per glyph 2026-06-16 17:44:21 +02:00

Closed #51 [perf][MEDIUM] Full 1 MiB font atlas re-upload on any single new glyph 2026-06-16 17:43:23 +02:00

Closed #40 [perf][HIGH] Frame-in-flight: per-frame fences + per-frame semaphores (remove per-frame vkQueueWaitIdle) 2026-06-16 17:42:14 +02:00

Closed #52 [perf][MEDIUM] Per-frame text re-shaping for static strings 2026-06-16 17:41:36 +02:00

Closed #49 [perf][LOW] nonuniformEXT on dynamically-uniform font slots (text shader) 2026-06-16 17:29:51 +02:00

Closed #45 [perf][LOW] Resize path: dead present-mode queries + presentModes vector 2026-06-16 17:29:00 +02:00

Closed #42 [perf][LOW] Descriptor-heap bind recorded unconditionally every frame 2026-06-16 17:27:55 +02:00

Closed #43 [perf][LOW] Invariant Vulkan structs rebuilt every frame 2026-06-16 17:27:49 +02:00

Closed #44 [perf][LOW] CRAFTER_TIMING frame-time history uses erase(begin()) every frame 2026-06-16 17:25:58 +02:00

Closed #41 [perf][MEDIUM] Single shared semaphore pair prevents multiple frames in flight 2026-06-16 17:14:45 +02:00

Closed #37 BuildProcedural: accept a device buffer as AABB build input (no host round-trip) 2026-06-16 16:13:10 +02:00

Closed #36 Accelration structure build options 2026-06-16 15:38:35 +02:00

Closed #33 Vulkan: Mesh::BuildProcedural — AABB (procedural) BLAS build path to match WebGPU 2026-06-13 02:18:31 +02:00

Closed #32 Mouse scroll never reaches Input on native: Wayland PointerListenerHandleAxis is an empty stub, Win32 lacks WM_MOUSEWHEEL 2026-06-13 02:10:53 +02:00

Closed #30 Wavefront RT: atomic pixel accumulator to allow >1 ray per pixel per bounce 2026-06-10 00:46:24 +02:00

Closed #29 Smoke doesn't move 2026-06-09 17:10:37 +02:00

Closed #27 Bloom / HDR post-process primitives for the WebGPU backend 2026-06-09 14:56:03 +02:00

Closed #25 WebGPU rayQuery TLAS traversal hardcodes leaf-start (16383) — picks always miss below 8193 instances 2026-06-04 15:33:55 +02:00

Closed #23 Dynamic descriptor_heap indexing faults the device in ray-tracing (closest-hit) shaders on NVIDIA 2026-06-03 22:05:45 +02:00

Closed #21 Vulkan RT: recursion depth hardcoded to 1, and the descriptor-heap AS-read workaround is never pushed for compute dispatches 2026-06-03 20:36:23 +02:00

Closed #18 #16 Doesn't work when shaders already define a push constant 2026-06-03 04:29:01 +02:00

Closed #17 Reneable GPU-AV 2026-06-03 04:11:00 +02:00

Closed #15 Find workaround to #7 driver issue 2026-06-03 04:00:38 +02:00

Closed #13 WebGPU anyhit and volume 2026-06-03 00:10:17 +02:00

Closed #11 WebGPU wavefront: 1-D indirect TRACE/SHADE dispatch overflows maxComputeWorkgroupsPerDimension at ~4K → black screen 2026-06-01 13:10:06 +02:00

Closed #7 VK_ERROR_DEVICE_LOST on native RT 2026-06-01 00:22:52 +02:00

Closed #8 WebGPU RT: device storage-buffer limit hardcoded to 16, breaks pipelines with >1 user storage buffer 2026-05-31 23:58:19 +02:00

Closed #5 Bunch of errors when starting native vulkan triangle 2026-05-31 22:59:48 +02:00

Closed #3 WebGPU RT: complete the wavefront rewrite (single deliverable — remaining phases) 2026-05-31 22:31:35 +02:00

Closed #1 WebGPU RT: wavefront rewrite of the software ray tracer 2026-05-31 17:53:10 +02:00

83 issues created by 1 user

Opened #1 WebGPU RT: wavefront rewrite of the software ray tracer 2026-05-31 16:53:15 +02:00

Opened #3 WebGPU RT: complete the wavefront rewrite (single deliverable — remaining phases) 2026-05-31 17:52:56 +02:00

Opened #5 Bunch of errors when starting native vulkan triangle 2026-05-31 22:42:18 +02:00

Opened #7 VK_ERROR_DEVICE_LOST on native RT 2026-05-31 23:15:24 +02:00

Opened #8 WebGPU RT: device storage-buffer limit hardcoded to 16, breaks pipelines with >1 user storage buffer 2026-05-31 23:46:23 +02:00

Opened #11 WebGPU wavefront: 1-D indirect TRACE/SHADE dispatch overflows maxComputeWorkgroupsPerDimension at ~4K → black screen 2026-06-01 12:55:23 +02:00

Opened #13 WebGPU anyhit and volume 2026-06-02 23:48:39 +02:00

Opened #15 Find workaround to #7 driver issue 2026-06-03 03:36:30 +02:00

Opened #17 Reneable GPU-AV 2026-06-03 04:04:54 +02:00

Opened #18 #16 Doesn't work when shaders already define a push constant 2026-06-03 04:06:26 +02:00

Opened #21 Vulkan RT: recursion depth hardcoded to 1, and the descriptor-heap AS-read workaround is never pushed for compute dispatches 2026-06-03 17:22:30 +02:00

Opened #23 Dynamic descriptor_heap indexing faults the device in ray-tracing (closest-hit) shaders on NVIDIA 2026-06-03 21:51:05 +02:00

Opened #25 WebGPU rayQuery TLAS traversal hardcodes leaf-start (16383) — picks always miss below 8193 instances 2026-06-04 15:12:58 +02:00

Opened #27 Bloom / HDR post-process primitives for the WebGPU backend 2026-06-09 14:31:14 +02:00

Opened #29 Smoke doesn't move 2026-06-09 17:10:14 +02:00

Opened #30 Wavefront RT: atomic pixel accumulator to allow >1 ray per pixel per bounce 2026-06-10 00:25:00 +02:00

Opened #32 Mouse scroll never reaches Input on native: Wayland PointerListenerHandleAxis is an empty stub, Win32 lacks WM_MOUSEWHEEL 2026-06-11 14:20:25 +02:00

Opened #33 Vulkan: Mesh::BuildProcedural — AABB (procedural) BLAS build path to match WebGPU 2026-06-12 13:39:21 +02:00

Opened #36 Accelration structure build options 2026-06-16 15:22:37 +02:00

Opened #37 BuildProcedural: accept a device buffer as AABB build input (no host round-trip) 2026-06-16 15:31:40 +02:00

Opened #40 [perf][HIGH] Frame-in-flight: per-frame fences + per-frame semaphores (remove per-frame vkQueueWaitIdle) 2026-06-16 16:51:29 +02:00

Opened #41 [perf][MEDIUM] Single shared semaphore pair prevents multiple frames in flight 2026-06-16 16:51:29 +02:00

Opened #42 [perf][LOW] Descriptor-heap bind recorded unconditionally every frame 2026-06-16 16:51:30 +02:00

Opened #43 [perf][LOW] Invariant Vulkan structs rebuilt every frame 2026-06-16 16:51:30 +02:00

Opened #44 [perf][LOW] CRAFTER_TIMING frame-time history uses erase(begin()) every frame 2026-06-16 16:51:30 +02:00

Opened #45 [perf][LOW] Resize path: dead present-mode queries + presentModes vector 2026-06-16 16:51:30 +02:00

Opened #46 [perf][HIGH] UI tiles scan the full item list — no spatial culling 2026-06-16 16:51:30 +02:00

Opened #47 [perf][MEDIUM] Add DispatchFused (additive) to collapse consecutive UI passes to one load/store 2026-06-16 16:51:31 +02:00

Opened #48 [perf][LOW] Narrow per-dispatch UI barrier to an image-subresource barrier (full removal: #47) 2026-06-16 16:51:31 +02:00

Opened #49 [perf][LOW] nonuniformEXT on dynamically-uniform font slots (text shader) 2026-06-16 16:51:31 +02:00

Opened #50 [perf][LOW] uiResolveScreenPixel runs clip-rect compares even when unclipped 2026-06-16 16:51:31 +02:00

Opened #51 [perf][MEDIUM] Full 1 MiB font atlas re-upload on any single new glyph 2026-06-16 16:51:31 +02:00

Opened #52 [perf][MEDIUM] Per-frame text re-shaping for static strings 2026-06-16 16:51:31 +02:00

Opened #53 [perf][LOW] Ensure()+Lookup() do two hash-map probes per glyph 2026-06-16 16:51:32 +02:00

Opened #54 [perf][MEDIUM] TransitionImageLayout hardcodes RAY_TRACING stage for all shader reads 2026-06-16 16:51:32 +02:00

Opened #55 [robustness] Font atlas has no eviction/repack; ShelfPlace fails permanently once full 2026-06-16 16:51:32 +02:00

Opened #56 [perf][LOW] InputField hit-test is O(n^2): re-measures whole prefix per char 2026-06-16 16:51:32 +02:00

Opened #57 [perf][LOW] GetLineWidth/ScaleForSize recompute scale + per-glyph HMetrics uncached 2026-06-16 16:51:32 +02:00

Opened #58 [perf][MEDIUM] Descriptor heaps force HOST_VISIBLE|DEVICE_LOCAL with no fallback 2026-06-16 16:51:33 +02:00

Opened #59 [perf][LOW] GetMemoryType returns first match, no preferred/fallback distinction 2026-06-16 16:51:33 +02:00

Opened #60 [perf][LOW] FlushDevice always flushes even on coherent memory 2026-06-16 16:51:33 +02:00

Opened #61 [perf][LOW] Per-descriptor write flushes all numFrames heap copies whole-size 2026-06-16 16:51:33 +02:00

Opened #62 [perf] Per-allocation vkAllocateMemory, no suballocator 2026-06-16 16:51:33 +02:00

Opened #63 [perf] VulkanBuffer::Resize always destroys+reallocates 2026-06-16 16:51:33 +02:00

Opened #64 [perf] TLAS instance/metadata buffers reallocated on instance-count change 2026-06-16 16:51:34 +02:00

Opened #65 [perf][MEDIUM] TLAS instance buffer is HOST_VISIBLE, read directly as AS build input 2026-06-16 16:51:34 +02:00

Opened #66 [perf] Per-mesh dedicated scratch buffer (VRAM waste) 2026-06-16 16:51:34 +02:00

Opened #67 [perf] compressedStaging reallocated and kept per compressed Build 2026-06-16 16:51:34 +02:00

Opened #68 [perf][LOW] Refit re-uploads immutable index buffer on UPDATE 2026-06-16 16:51:34 +02:00

Opened #69 [perf][LOW] No VkPipelineCache passed to vkCreateComputePipelines 2026-06-16 16:51:35 +02:00

Opened #70 [perf][LOW] Per-mip layout transitions issued one-at-a-time 2026-06-16 16:51:35 +02:00

Opened #71 [perf][LOW] Compressed-asset Update re-Resizes both staging buffers every call 2026-06-16 16:51:35 +02:00

Opened #72 [perf] RT shader binding table is HOST_VISIBLE, GPU-read every traceRays 2026-06-16 17:02:03 +02:00

Opened #73 [perf] Mesh vertex/index/aabb are HOST_VISIBLE — place device-local (direct on ReBAR, staged otherwise) 2026-06-16 17:10:54 +02:00

Opened #74 [perf] SaveFrame readback uses HOST_COHERENT (write-combined) — should be HOST_CACHED 2026-06-16 17:10:54 +02:00

Opened #75 [perf] TLAS metadataBuffer is HOST_VISIBLE, CPU-written + shader-read every frame 2026-06-16 17:10:54 +02:00

Opened #89 [perf] Runtime upload-strategy helper: direct HOST_VISIBLE|DEVICE_LOCAL vs staging (ReBAR-aware) 2026-06-16 18:55:02 +02:00

Opened #101 [infra] Fence-keyed deferred resource-deletion queue (UAF since #40; unblocks #63/#66) 2026-06-16 20:47:49 +02:00

Opened #110 MeshDecompressStagingRelease test fails on master: deletionQueue.size() != 1 after compressed Build 2026-06-17 19:50:31 +02:00

Opened #113 [perf] No buffer suballocator — vkAllocateMemory per buffer (VulkanBuffer.cppm) 2026-06-17 21:16:02 +02:00

Opened #114 [perf] Per-image dedicated alloc + leaked persistent staging buffer (ImageVulkan.cppm) 2026-06-17 21:18:52 +02:00

Opened #115 [perf] Frame-loop barriers use ALL_COMMANDS scope (inter-pass + acquire/present) (Window.cpp) 2026-06-17 21:18:52 +02:00

Opened #116 [perf] ReclaimDeletions compacts the whole deletion queue every frame (Device.cpp) 2026-06-17 21:18:53 +02:00

Opened #117 [perf] Acquire/present barriers use ALL_COMMANDS scope (Window.cpp) 2026-06-17 21:18:53 +02:00

Opened #118 [perf] TLAS instance+metadata upload: O(n) rebuild + whole-buffer flush every frame (RenderingElement3D.cpp) 2026-06-17 21:18:53 +02:00

Opened #119 [perf] Mesh::Refit re-uploads the full vertex buffer every frame (Mesh.cpp) 2026-06-17 21:18:53 +02:00

Opened #120 [perf] Staged UploadDeviceLocal allocates+frees a fresh staging buffer every call (VulkanBuffer.cppm) 2026-06-17 21:18:53 +02:00

Opened #121 [perf] Per-frame whole-buffer flush of TLAS instance+metadata buffers (RenderingElement3D.cpp) 2026-06-17 21:18:54 +02:00

Opened #122 [perf] ShapeText heap-allocates the cache-key std::string on every call, including hits (UI-Shared.cpp) 2026-06-17 21:18:54 +02:00

Opened #123 [perf] shapedRuns_ eviction is all-or-nothing clear() at cap (UI-Shared.cpp) 2026-06-17 21:18:54 +02:00

Opened #124 [perf] Single-lane serial stream compaction stalls 63/64 threads — use subgroup prefix-sum (ui-fused.comp.glsl) 2026-06-17 21:18:54 +02:00

Opened #125 [perf] Hoist per-item/per-glyph loop-invariant math into shared memory at load (ui-images/text/fused) 2026-06-17 21:18:54 +02:00

Opened #126 [perf] Per-glyph-constant SDF AA scale recomputed per pixel (ui-text.comp.glsl) 2026-06-17 21:18:55 +02:00

Opened #127 [perf] Unconditional destination imageLoad/imageStore before early-out (ui-quads.comp.glsl) 2026-06-17 21:18:55 +02:00

Opened #128 [perf] DrawInputField recomputes caret X via full-prefix walk every frame (InputField.cpp) 2026-06-17 21:18:55 +02:00

Opened #129 [perf] FontAtlas dirty-rect uses one union bounding box (FontAtlas.cpp) 2026-06-17 21:18:55 +02:00

Opened #130 [perf] WebGPU metadata flush uploads full 256 KB padded buffer every frame (RenderingElement3D-WebGPU.cpp) 2026-06-17 21:18:55 +02:00

Opened #131 [perf] WebGPU GPU-owned instance runs upload one writeBuffer per element (RenderingElement3D-WebGPU.cpp) 2026-06-17 21:18:55 +02:00

Opened #132 [perf] UIRenderer::Dispatch heap-allocates a std::vector per custom dispatch (UI-WebGPU.cpp) 2026-06-17 21:18:56 +02:00

Opened #133 [perf] WebGPU full-buffer readback copies entire allocation even for a small prefix (WebGPUBuffer.cppm) 2026-06-17 21:18:56 +02:00

Opened #134 [perf] Win32 StartSync busy-spins one core at 100% when not updating (Window.cpp) 2026-06-17 21:18:56 +02:00

Opened #153 Vulkan validation errors: per-frame acquire-barrier dstAccessMask/stage mismatch + setup-path cmd-buffer/buffer lifecycle 2026-06-18 18:40:09 +02:00

Opened #155 Measure peformance improvements 2026-06-18 21:07:09 +02:00