iter6 depth-tested multi-draw probe — captured 2026-05-19 on ohm (PineTab2 v2.0, RK3566, Mali-G52 r1 MC1, Mesa 26.0.6, kernel 7.0.0-danctnix1-6) Source: panvk-bifrost/iter6/{probe_depth.c, .vert, .frag, Makefile} Deployed to: /tmp/panvk-iter6/ ===== RUN #1 (baseline) ===== [step] vkCreateInstance WARNING: panvk is not a conformant Vulkan implementation, testing use only. [info] gpu='Mali-G52 r1 MC1' [info] D32_SFLOAT optimalTilingFeatures=0xd601 [step] vkCreateDevice [step] vkCreateBuffer vertex buffer [step] vkCreateImage color attachment [info] color image memReq size=69632 align=4096 [step] vkCreateImage depth attachment (D32_SFLOAT) [info] depth image memReq size=69632 align=4096 [step] vkCreatePipelineLayout + shaders [step] vkCreateGraphicsPipelines [step] record cmd buffer (2 draws with depth) [step] submit + wait [step] verify [chk] ( 0, 0) TL expect=clear got=0x00000000 clear-ok [chk] (127,127) BR expect=clear got=0x00000000 clear-ok [chk] ( 64, 64) center expect=green got=0xff00ff00 green-ok [chk] ( 64, 30) above-B expect=red got=0xff0000ff red-ok [chk] ( 64,100) below-B expect=red got=0xff0000ff red-ok [info] coverage: red=3850 green=1352 clear=11182 other=0 (total 16384) [PASS] depth-tested multi-draw works. ===== KEY OBSERVATIONS ===== 1. D32_SFLOAT optimalTilingFeatures = 0xd601: bit 0 (0x0001) SAMPLED_IMAGE bit 9 (0x0200) DEPTH_STENCIL_ATTACHMENT ✓ bit 10 (0x0400) BLIT_SRC bit 12 (0x1000) SAMPLED_IMAGE_FILTER_LINEAR bit 14 (0x4000) TRANSFER_SRC bit 15 (0x8000) TRANSFER_DST 2. Memory: color image memReq = 69632 (17 pages) — 16 raw + 1 aux depth image memReq = 69632 (17 pages) — same overhead for D32 128*128*4 = 65536 = 16 pages raw pixel data 3. Coverage accounting: Triangle A (red, large): NDC area 1.28 / 4 = 32% = ~5243 pixels expected Triangle B (green, small, inside A): NDC area 0.32 / 4 = 8% = ~1310 pixels expected Got: red=3850, green=1352 Sum non-clear: 5202 ≈ A's total area (B occludes part of A in depth) other=0 — no banding, no z-fighting, no interpolation artifacts. 4. Depth test correct: Pixel (64, 64) is inside both triangles. B's z=0.3 < A's z=0.7, LESS comparison selects B → green wins. Confirmed at (64, 64). 5. No GPU faults, no validation warnings, deterministic across reruns.