render3d: the terrain's GPU maps paged round the camera while the tiles are on
At the cut the whole 4096 height, normal and photograph textures go, replaced by a coarse 2048 level (the CPU's tt_coarse uploaded; the normal and photograph blitted down on the GPU, the photograph mipmapped) and a pool of fine tiles in three array textures - heights, normals, photograph, each layer a tile with a one-texel border - addressed through a tt_n^2 page table (u_tp_page: slot + 1, 0 = the coarse level). The pool holds the tiles within the reach (900 m, or the fog wall's when nearer) and a ring, and is made again when the fog wall changes its size (terrain_pages_fog). Once a frame (tp_frame, beside tt_frame) tiles past the reach and two tiles go and the wanted ones come in nearest first, 8 a frame, written into a staging buffer kept for the process (two halves, one per frame in flight) and copied into their layers inside the frame's own command buffer - no submit of their own - with the page table re-uploaded only when it changed. tp_bind binds the pool (or 1-layer stand-in arrays while paging is off, u_tp_on = 0) for every program that reads the ground: terrain_bind_height (models, scatter, shadow_bind, grass), terrain_bind_prog, the sun pass and the shadow bake. grass_cull.comp reads through the same page table. R3D_VKMEM prints the pool's line. Tiles off, nothing changes. Compile-only: not run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
329439cf61
commit
617ac10c5a
15 changed files with 571 additions and 12 deletions
|
|
@ -12,6 +12,7 @@ import "gpu_manifest.ludic"
|
|||
import "gpu_vk.ludic"
|
||||
import "vkmem_report.ludic"
|
||||
import "gpu_vk_res.ludic"
|
||||
import "gpu_vk_layers.ludic"
|
||||
import "gpu_vk_bc.ludic"
|
||||
import "texture_dds.ludic"
|
||||
import "prof.ludic"
|
||||
|
|
@ -27,6 +28,10 @@ import "terrain.ludic"
|
|||
import "terrain_chunks.ludic"
|
||||
import "terrain_tiles.ludic"
|
||||
import "terrain_tiles_cut.ludic"
|
||||
import "terrain_pages.ludic"
|
||||
import "terrain_pages_coarse.ludic"
|
||||
import "terrain_pages_frame.ludic"
|
||||
import "terrain_pages_fill.ludic"
|
||||
import "overlay.ludic"
|
||||
import "shadow.ludic"
|
||||
import "post.ludic"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue