Add docs/NOTES_renderer_v3.md
This commit is contained in:
parent
07efd27209
commit
6b830f3ff2
43
docs/NOTES_renderer_v3.md
Normal file
43
docs/NOTES_renderer_v3.md
Normal file
@ -0,0 +1,43 @@
|
||||
# GFX/Renderer v3
|
||||
|
||||
- Build around draw indirect
|
||||
- Keep many meshlets together in one large buffer
|
||||
- Meshlet: 128 triangles
|
||||
- Mesh: List of meshlets
|
||||
- Do compute based culling per VIEW
|
||||
- Each View gets a list of mesh-refs (expanded to meshlet refs), and associated transforms
|
||||
- **Optional:**
|
||||
- These are, by default, permanent, allowing us to build a efficient bvh.
|
||||
- Mark nodes as deleted, only collapse once the entire subtree is deleted.
|
||||
|
||||
Draw/Materials:
|
||||
- Culling outputs tri-idx, meshlet for every pixel (For hardware that supports it, this could use raytracing)
|
||||
- Meshlet refers to a (sub)material (via index)
|
||||
- Per tile, create a list of draw indirect commands and a read-back buffer containing the (sub-)material index for each draw (+ total nr of draws)
|
||||
- CPU loops over materials, issueing draw indirect calls upon material changes
|
||||
- The ref to a sub-material may be made via meshlet -> material and view type -> sub-material
|
||||
|
||||
Some (most) sub-materials could draw into a gbuffer.
|
||||
|
||||
SubMaterialData is baked into structs containing constants and/or bindless ids.
|
||||
Kept in one huge buffer
|
||||
SubMaterial:
|
||||
- Data
|
||||
- PSO
|
||||
Material:
|
||||
- View Type -> SubMaterial
|
||||
|
||||
Frame Graph - Each view is a pass. Can re-use existing?
|
||||
|
||||
Renderer API:
|
||||
- CreateMesh(data) -> MeshRef
|
||||
- InstantiateMesh(MeshRef) -> MeshRef
|
||||
- CreateView(type) -> View
|
||||
- AddToView(MeshRef, Transform, Material) -> InstanceRef
|
||||
- RemoveFromView(InstanceRef)
|
||||
- UpdateInView(InstanceRef, Transform, Material)
|
||||
- SetViewCamera(View, Camera)
|
||||
- RenderView(View)
|
||||
- CreateMaterial(NumSubMaterials, SubMaterialInfo*) -> Material
|
||||
- CreateTexture(Format, W, H, NumMipLevels, Optional<InitialData*>) -> Texture
|
||||
- EnqueueTextureUpdate(Texture, MipLevel, NewData)
|
Loading…
Reference in New Issue
Block a user