From 7bd1d9f701e52e16c358d8e3382df07d6d0382f4 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Mon, 6 Jul 2026 00:10:01 +0100 Subject: [PATCH] Save session log --- documents/session-logs/2026-07-06.md | 52 ++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 documents/session-logs/2026-07-06.md diff --git a/documents/session-logs/2026-07-06.md b/documents/session-logs/2026-07-06.md new file mode 100644 index 0000000..d7dcd93 --- /dev/null +++ b/documents/session-logs/2026-07-06.md @@ -0,0 +1,52 @@ +# Session Log — 2026-07-06 + +## Completed +- **Build system**: Fixed Just 1.55.1 `[working-directory]` bug (literal paths required). + Set up `just build` for 6 object files: volk.c, wapp.c, pr_rhi_vk.c, pr_rhi_vk_vma.cpp, + vulkan_profiles.cpp, main.cpp. Linked with `-lSDL3 -lglm -ltinyobjloader -lktx -lslang -lvulkan`. +- **RHI backend completeness**: Filled in all missing functions (profiles validation, + swapchain/recreate, dynamic rendering, copy, queue submit, barriers, descriptor, + pipeline, sync) — 68 functions total in single `pr_rhi_vk.c`. +- **Bugfix — `prRhiPresentVk`**: Used `current_image_index` from acquire instead of + hardcoded `0`. +- **Bugfix — `extern "C"` linkage**: Added `extern "C"` guards in `pr_rhi.h` so C++ + callers (main.cpp) can link C-compiled backend symbols. +- **Bugfix — GPU name dangling pointers**: Added `device_name[256]`/`driver_info[256]` + to `PrRhiPhysicalDevice` struct, populated during enumeration. Getters return pointers + to these persistent buffers. +- **Bugfix — `volkInitialize()`**: Added call at start of `prRhiCreateInstanceVk` — + `vpGetInstanceProfileSupport` crashed because volk hadn't loaded the Vulkan loader. +- **Bugfix — scratch arena OOM**: Changed initial 128KB → 64MB _and_ the line-320 + reinit override 8MB → 64MB. Prevents OOM during mesh building. +- **Bugfix — stale mesh array pointers**: Captured return values of `wpArrayAppendAlloc` + in mesh-building loop — original code ignored the pointer, so `vertices`/`indices` + pointed to stale initial array after regrowth. +- **Bugfix — uninitialised Vulkan stack arrays**: Zero-initialised all 18 local Vulkan + struct array declarations (`VkImageMemoryBarrier2[16]`, `VkBufferMemoryBarrier2[16]`, + `VkRenderingAttachmentInfo[8]`, `VkBufferImageCopy[16]`, plus `VkDescriptorSetLayout[8]`, + `VkPushConstantRange[8]`, `VkVertexInputBindingDescription[8]`, + `VkVertexInputAttributeDescription[16]`, `VkDynamicState[2]`, `VkFormat[8]`, + `VkPipelineColorBlendAttachmentState[8]`, `VkDescriptorSetLayoutBinding[16]`, + `VkDescriptorBindingFlags[16]`, `VkDescriptorPoolSize[8]`, `VkDescriptorImageInfo[16]`, + `VkDescriptorBufferInfo[16]`, `VkFence[16]` (×2), `VkCommandBuffer[16]` (×2), + `VkDescriptorSet[16]`, `VkBuffer[16]`). Uninitialised `pNext`/`imageOffset` fields + caused GPU-side device-lost crashes. +- **Bugfix — `render_completed_semaphores` zero-length array**: `prRhiAcquireNextImage` + returns swapchain image INDEX (0 on first call), not image count. Used as array capacity, + this allocated 0 semaphores, causing out-of-bounds access in render loop → SIGSEGV. + Fixed by reading `app.swapchain->image_count` instead. +- **Demo renders**: `build/prism` now launches a window, loads `suzanne0.ktx` / `suzanne1.ktx`, + renders textured Suzanne mesh with mouse orbit + keyboard mesh selection. + +## Key Decisions +- Just 1.55.1 bug: `[working-directory: '{{BUILDDIR}}']` causes "could not find the shell `sh`" + — literal paths or no `[working-directory]` attribute required. +- VMA implementation in separate `pr_rhi_vk_vma.cpp` (compiled as C++). +- `PrRhiPhysicalDevice` stores `device_name[256]`/`driver_info[256]` to avoid dangling pointers. +- All stack Vulkan struct arrays must be `= {0}` initialised — C backend does not zero + auto vars, and uninitialised `pNext`/offset fields cause GPU driver crashes. + +## Next Steps +1. Review code for structural/design quality issues the user already noticed. +2. Add `wpMemArenaAllocatorTempBegin`/`TempEnd` markers around scratch allocations. +3. Consider adding `prRhiGetSwapchainImageCount` accessor for encapsulation.