render3d: VkAllocationCallbacks counted (R3D_ALLOC_VK), pipeline create infos freed, actor pool at init
Plan 25.1c: vk_mac.ll's @lvk_ac (posix_memalign under a 16-byte header of scope/offset/size, atomic counters) passed at every render3d create/destroy (49 sites; the caps probe keeps its own null pair); lvk_ac_bytes/_peak/_allocs/_scope_bytes for the fence, Vk.alloc_bytes. vk_win.ll: null and 0. MoltenVK 1.4.2 counted 0 live bytes through them in steady. Fence findings: gvk_pipeline freed its 17 create infos (and reuses one bufs list); actor_init fills ac_spare with 512 records (actor_fresh, m4_new, v3_new at first placement in play). Compiled, not run (the user's call). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
edb33400b3
commit
df6ea046c3
10 changed files with 266 additions and 52 deletions
|
|
@ -163,6 +163,18 @@ program Steady {
|
|||
let am = gltf_load(render3d_st, "packages/ludic.lab/plate", "plate.gltf", "plate")
|
||||
actor_rounds(render3d_st, am, 20)
|
||||
let grew_a = actor_rounds(render3d_st, am, 2000)
|
||||
# with R3D_ALLOC_VK=1 MoltenVK's own host allocations are counted (plan 25.1c): what a frame
|
||||
# leaves among them, read the same way
|
||||
var vk_live: long = 0
|
||||
var vk_grew: long = 0
|
||||
if render3d_st.gvk_ac != null {
|
||||
frame_rounds(render3d_st, 60)
|
||||
let v0 = Vk.alloc_bytes()
|
||||
frame_rounds(render3d_st, 600)
|
||||
vk_live = Vk.alloc_bytes()
|
||||
vk_grew = vk_live - v0
|
||||
print(`steady: Vulkan's host allocations {vk_live} bytes live (object {Vk.alloc_scope_bytes(1)}, command {Vk.alloc_scope_bytes(0)}), a frame kept {vk_grew} over 600`)
|
||||
}
|
||||
let grew_r = ramp_rounds(render3d_st, am)
|
||||
let grew_s = stream_rounds(render3d_st, am)
|
||||
let text = Fs.read_text("packages/ludic.lab/plate/plate.gltf")
|
||||
|
|
@ -194,6 +206,11 @@ program Steady {
|
|||
ok = false
|
||||
print("steady: FAILED - a frame drawing more than before leaves memory behind")
|
||||
}
|
||||
# MoltenVK 1.4.2 honours the callbacks for few of its objects (it read 0 live): only growth fails
|
||||
if render3d_st.gvk_ac != null and vk_grew > 0 {
|
||||
ok = false
|
||||
print("steady: FAILED - Vulkan's counted host allocations grow with the frame")
|
||||
}
|
||||
if grew_s >= 4096 {
|
||||
ok = false
|
||||
print("steady: FAILED - streaming new ground leaves memory behind")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue