Commit graph

17 commits

Author SHA1 Message Date
janis afb322fa93
rendergraph: dynamic-rendering render passes, single-pass compiler, perf
- Add BeginRendering/EndRendering commands with imported/created attachment
  views, view plumbing, and aspect-gated depth/stencil slots
- Derive and validate render-pass spans at compile time; contract spans into
  single DAG nodes before hazard analysis; hoist cross-boundary barriers to
  pass begins with in-pass policy and created-view resolution
- Replace the four-pass ordering pipeline with a single command walk
  (build_command_orderings): span derivation, validation, lifetime-only
  injection, dependency edges, and Kahn batching in one pass; batches are
  ranges into execution_order and RenderPassSpan keeps only begin/end
- Perf: node-collapsed frontier analysis, dense command/resource indexing
  (no SipHash on hot paths), inline barrier storage, exact preallocation,
  lazy Kahn ready heap, scoped barrier fast paths
- Scope buffer and image alias barriers to the incoming resource per the
  Vulkan resource-memory-aliasing rules (availability unscoped, visibility
  scoped to the new owner)
- Add criterion compile benchmarks (two_pass/{no_pass,pass}/per_{20,50,100})
2026-10-29 00:51:52 +01:00
janis 4bf2d874b0
todo 2026-10-28 00:06:09 +01:00
janis 5e4bc0ccf0
rendergraph: correct transient-resource aliasing with pooled placement
Lifetimes derive from the real dependency ordering (retained DAG +
compile-time happens-before closure), not command-index intervals.
Aliasing is restricted to the single-queue contract; alias reuse is
synchronized with memory/image barriers anchored at first-use commands.

- renderer_device: aliasable shared allocations (CAN_ALIAS), memory-
  requirements queries incl. dedicated hints, offset-aware
  bind_buffer/image_memory2, grouped bind under one allocator lock
- renderer_resources: unallocated resource creation, requirements
  cached in Allocation::Unmanaged (OnceLock), MemoryGroup pooling with
  intersecting memoryTypeBits, bind-time validation
- renderer_rendergraph: retained dependency DAG, happens_before
  closure, batch lifetimes, Placement type, plan_placements with
  pooled aliasing (first-fit over offset-sorted ranges, pool classes
  split by bufferImageGranularity), alias-barrier construction,
  placement/bind error variants
- perf: quadratic compile/resolve paths eliminated (per-resource
  indexing, frontier caching, backward-scan prune, cached recording
  index, recorder scratch reuse); single requirements query per
  resource through plan/validate/bind
- design plan + GPU-gated validation tests
2026-10-27 01:57:27 +01:00
janis f7c67f9872
managed descriptorsets 2026-10-26 02:11:29 +01:00
janis d901fe250b
feat: new draw command with arguments and resource tracking 2026-10-25 23:04:27 +01:00
janis d896a207de
refactor: simplify barrier building logic and remove unused structures 2026-10-25 22:27:01 +01:00
janis ac1b6c9cc8
idk? barrier stuff 2026-10-25 21:44:21 +01:00
janis 8d8595a0e3
queue transfer in graph barrier 2026-10-25 17:33:12 +01:00
janis f84b2a1ea4
response to llm review 2026-10-25 02:28:35 +01:00
janis c0f60b890c
dont consider imported resources in the lifetimes building 2026-10-25 02:50:03 +02:00
janis 88512b37ac
change interferrence graph impl 2026-10-25 01:56:04 +02:00
janis 51a2e69f74
fewer btrees 2026-10-25 01:36:34 +02:00
janis 6a41cccf8b
extract kahn algo and build interference graph 2026-10-25 00:42:27 +02:00
janis 195cf3e08a
extract graph compilation logic 2026-10-25 00:18:52 +02:00
janis 5f7bbba49d
custom resource descriptors for graph 2026-10-25 00:13:26 +02:00
janis d367b4d05b
use renderer_resources 2026-10-24 23:05:51 +02:00
janis e7a6536df5
initial renderer_rendergraph 2026-10-24 22:23:02 +02:00