| … | 549 unchanged lines hidden | ||
| 550 | 550 | destroy_shader: proc(handle: Shader_Handle), | |
| 551 | 551 | ||
| 552 | 552 | // --- Draw --- | |
| 553 | + | draw: proc( | |
| 554 | + | ctx: Frame_Context, | |
| 555 | + | vertex_count, instance_count: u32, | |
| 556 | + | first_vertex: u32, | |
| 557 | + | first_instance: u32, | |
| 558 | + | ), | |
| 553 | 559 | draw_indexed: proc( | |
| 554 | 560 | ctx: Frame_Context, | |
| 555 | 561 | index_count, instance_count: u32, | |
| … | 70 unchanged lines hidden | ||
| 626 | 632 | b.destroy_framebuffer != nil && | |
| 627 | 633 | b.create_shader_module != nil && | |
| 628 | 634 | b.destroy_shader != nil && | |
| 635 | + | b.draw != nil && | |
| 629 | 636 | b.draw_indexed != nil && | |
| 630 | 637 | b.create_compute_pipeline != nil && | |
| 631 | 638 | b.destroy_compute_pipeline != nil && | |
| … | 10 unchanged lines hidden | ||
| … | 411 unchanged lines hidden | ||
| 412 | 412 | destroy_shader = destroy_shader_d3d11, | |
| 413 | 413 | ||
| 414 | 414 | // Draw | |
| 415 | + | draw = draw_d3d11, | |
| 415 | 416 | draw_indexed = draw_indexed_d3d11, | |
| 416 | 417 | ||
| 417 | 418 | // Compute | |
| … | 173 unchanged lines hidden | ||
Diff hidden because this file has more than 800 lines.
Diff hidden because this file has more than 800 lines.
Diff hidden because this file has more than 800 lines.
| … | 216 unchanged lines hidden | ||
| 217 | 217 | destroy_framebuffer = destroy_framebuffer_opengl, | |
| 218 | 218 | create_shader_module = create_shader_module_opengl, | |
| 219 | 219 | destroy_shader = destroy_shader_opengl, | |
| 220 | + | draw = draw_opengl, | |
| 220 | 221 | draw_indexed = draw_indexed_opengl, | |
| 221 | 222 | create_compute_pipeline = create_compute_pipeline_opengl, | |
| 222 | 223 | destroy_compute_pipeline = destroy_compute_pipeline_opengl, | |
| … | 82 unchanged lines hidden | ||
Diff hidden because this file has more than 800 lines.
| … | 362 unchanged lines hidden | ||
| 363 | 363 | destroy_shader = destroy_shader_vk, | |
| 364 | 364 | ||
| 365 | 365 | // Draw | |
| 366 | + | draw = draw_vk, | |
| 366 | 367 | draw_indexed = draw_indexed_vk, | |
| 367 | 368 | ||
| 368 | 369 | // Compute | |
| … | 172 unchanged lines hidden | ||
Diff hidden because this file has more than 800 lines.
Diff hidden because this file has more than 800 lines.
| … | 53 unchanged lines hidden | ||
| 54 | 54 | ||
| 55 | 55 | D3D12 runtime fence behavior cannot be executed by Linux CI. D3D12 lifetime and transition work is accepted by static backend checks, pure fence-order tests where available, and explicit Windows runtime verification debt. | |
| 56 | 56 | ||
| 57 | + | Current backend sync matrix: | |
| 58 | + | ||
| 59 | + | | Backend | Compute barrier scope | Sampled target feedback | Runtime proof | | |
| 60 | + | | --- | --- | --- | --- | | |
| 61 | + | | Vulkan | Conservative compute-write barrier for later shader reads/writes plus vertex/index fetch. Indirect command reads stay Phase 7. | Render pass final layouts come from target usage; descriptor layout is caller-declared. | Static checks now; device smoke gate still needed. | | |
| 62 | + | | D3D11 | Immediate context resolves many SRV/RTV/UAV conflicts by auto-unbinding and debug warnings. Manual hazard cleanup needs slot tracking before it is safe. | No explicit image states; render-target/SRV overlap needs future warning-proof validation, not broad unbinds. | Windows runtime deferred. | | |
| 63 | + | | D3D12 | Global UAV barrier only. Storage descriptor binding is still a separate unsupported root-signature gap. | Render/depth targets transition to write at pass begin and to shader-resource lazily when bound as sampled descriptors. | Windows runtime deferred. | | |
| 64 | + | | OpenGL | Storage, texture-fetch, and framebuffer barriers are emitted after compute when requested. Indirect command barriers stay Phase 7. | Feedback-loop validation is a future diagnostics gap; current backend does not track attached texture handles at descriptor bind. | Linux device smoke gate still needed. | | |
| 65 | + | ||
| 57 | 66 | ## Public frame shape | |
| 58 | 67 | ||
| 59 | 68 | Target API shape: | |
| … | 184 unchanged lines hidden | ||