Skip to content

[Audit][High] GPass extent not updated when SSAO creation fails during swapchain recreate, causing infinite loop #725

Description

@MichaelFisher1997

🔍 Module Scanned\n (automated audit scan)\n\n## 📝 Summary\nIn , when a swapchain resize triggers recreation of G-pass and SSAO resources, if fails after has already destroyed the old resources and created new ones, the is never updated. This means the size mismatch check will always trigger on subsequent frames, causing an infinite recreation loop.\n\n## 📍 Location\n- File: \n- Function/Scope: \n\n## 🔴 Severity: High\n- High: Infinite recreation loop causing performance degradation and potential GPU hang\n\n## 💥 Impact\nWhen a window resize occurs and is called, the following sequence happens:\n1. succeeds (updates )\n2. fails with an error\n3. The error is caught and logged, but still reflects the old size from before the failed SSAO creation\n4. On the next frame, sees the size mismatch and triggers another recreation attempt\n5. This loops indefinitely if SSAO keeps failing (e.g., due to memory pressure)\n\n## 🔎 Evidence\n\n\nThe issue is that after succeeds, should be updated to match the new size. But the code path for updating is inside itself, which may not run if the resources were already created earlier in the recreation chain.\n\nAlso, when fails, execution continues after the catch block but retains stale values, causing the mismatch check to re-trigger.\n\n## 🛠️ Proposed Fix\n1. After successful , explicitly set before the SSAO call\n2. If SSAO fails, still update to the current swapchain extent (even if not matching) so the mismatch check doesn't loop\n3. Add a flag or tracking mechanism to prevent recursive recreation attempts within the same frame\n\nExample fix:\n\n\n## ✅ Acceptance Criteria\n- [ ] No infinite loop occurs when fails\n- [ ] is correctly updated after successful resource creation\n- [ ] Error paths still allow the game to continue rendering (graceful degradation)\n- [ ] Verified with Zig 0.16.0 + SDL3 Dev Environment

Compiler: 0.16.0
assets/shaders/vulkan/ui.vert
assets/shaders/vulkan/depth_pyramid.comp
assets/shaders/vulkan/ui_tex.frag
assets/shaders/vulkan/taa.vert
assets/shaders/vulkan/water.frag
assets/shaders/vulkan/lpv_inject.comp
assets/shaders/vulkan/ui_tex.vert
assets/shaders/vulkan/terrain.frag
assets/shaders/vulkan/water.vert
assets/shaders/vulkan/terrain.vert
assets/shaders/vulkan/bloom_downsample.vert
assets/shaders/vulkan/bloom_upsample.vert
assets/shaders/vulkan/debug_shadow.vert
assets/shaders/vulkan/fxaa.vert
assets/shaders/vulkan/post_process.vert
assets/shaders/vulkan/shadow.vert
assets/shaders/vulkan/sky.vert
assets/shaders/vulkan/ssao.vert
assets/shaders/vulkan/taa.vert
assets/shaders/vulkan/terrain.vert
assets/shaders/vulkan/ui.vert
assets/shaders/vulkan/ui_tex.vert
assets/shaders/vulkan/water.vert
assets/shaders/vulkan/bloom_downsample.frag
assets/shaders/vulkan/bloom_upsample.frag
assets/shaders/vulkan/debug_shadow.frag
assets/shaders/vulkan/fxaa.frag
assets/shaders/vulkan/g_pass.frag
assets/shaders/vulkan/post_process.frag
assets/shaders/vulkan/shadow.frag
assets/shaders/vulkan/sky.frag
assets/shaders/vulkan/ssao.frag
assets/shaders/vulkan/ssao_blur.frag
assets/shaders/vulkan/taa.frag
assets/shaders/vulkan/terrain.frag
assets/shaders/vulkan/terrain_debug.frag
assets/shaders/vulkan/ui.frag
assets/shaders/vulkan/ui_tex.frag
assets/shaders/vulkan/water.frag
assets/shaders/vulkan/culling.comp
assets/shaders/vulkan/depth_pyramid.comp
assets/shaders/vulkan/lpv_inject.comp
assets/shaders/vulkan/lpv_propagate.comp
assets/shaders/vulkan/mesh.comp
assets/shaders/vulkan/culling.comp
assets/shaders/vulkan/ssao.frag
assets/shaders/vulkan/debug_shadow.frag
assets/shaders/vulkan/ssao_blur.frag
assets/shaders/vulkan/shadow.vert
assets/shaders/vulkan/mesh.comp
assets/shaders/vulkan/sky.frag
assets/shaders/vulkan/shadow.frag
assets/shaders/vulkan/ui.frag
assets/shaders/vulkan/g_pass.frag
assets/shaders/vulkan/sky.vert
assets/shaders/vulkan/taa.frag
assets/shaders/vulkan/ssao.vert
assets/shaders/vulkan/debug_shadow.vert
assets/shaders/vulkan/lpv_propagate.comp\n\n## 📚 References\n- Related code: in \n- Similar pattern: and are called together in multiple places\n

Metadata

Metadata

Assignees

No one assigned

    Labels

    automated-auditIssues found by automated opencode audit scansbugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions