Files
2026-07-06 00:10:01 +01:00

3.5 KiB
Raw Permalink Blame History

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 prRhiCreateInstanceVkvpGetInstanceProfileSupport 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.