- Clear split between static and dynamic geometry within the same buffer
- Store previous frame geometry data longer
- Use simpler ring buffer for allocation
- Add waf unit tests for alolcator
Known issues:
- ray tracing still glitches a lot
Обновлённые рады и патчи карт для лучей. Куча ненужных источников выкинута, местами освещение переделано в пользу реализма. Попытка вытянуть освещение через доступные светящиеся поверхности. Список радов и патчей будет потихоньку обновляться. Это первая ревизия, во второй будут исправляться пропущенные ошибки и коррекция освещения относительно новых материалов.
Для патчей исправлен масштаб яркости у светящихся текстур.
Также теперь рад файлы лежат в data/valve/maps/ а патчи в data/valve/luchiki/maps/. Теперь возможно добавлять другие моды.
Split concerns:
- validation layers help with correctness, but not performance (*generally)
- debug markers help with profiling (and ony sometimes with correctness too)
These were conflated into a single `-vkdebug` arg.
And sometimes you need only markers and no validation for performance.
(Validation is like 30% slower)
Make it so that:
- `-vkdebug` enables only debug names and time markers, but not validation
- `-vkvalidate` enables validation layers and also debug markers
still not fully correct or robust, but passes validation
missing correctness things:
- Nx light data buffers
- Nx dynamic model buffers
- Nx dynamic BLASes
quite likely will also need (depending on update strategy, direct vs upload):
- Nx light data buffers
- Nx UBOs
probably fine since frames don't really overlap:
- single TLAS
adds multiple command buffers and bits of synchronization.
is not correct at all:
- no depth buffer barrier
- no ubo slots in render
- no proper render memory management
- no ray tracing support whatsoever
- ... etc
this moves one step closer to fully dynamic resources and automatic
barriers.
next steps would be:
- passes declaring their bindings at creation time
- resources automatically preparing values based on that declaration
- automatic barriers
- single descriptor pool stored at resources (aware of frames in flight,
etc)
- parsing shaders to generate binding declaration
(look how easy that was! yay passes!
... still need to do spir-v parsing to extract bindings though)
perf (c1a0 lobby, 720p, 6900XT)
- total ray tracing time: 15.2ms
- primary: 0.7ms v:80/80 s:60/128 lds:2048 o:12/16 (-4v +1o)
- dir poly: 13.8ms v:256/256 s:98/128 lds:2048 o:4/16 (-28v +1o)
- dir point: 0.9ms v:85/96 s:68/128 lds:2048 o:10/16 (-6v +1o)
dir point and poly are not synchronized and overlap. but poly takes most
of the time, and point can only ramp up gradually at the very tail of
poly.
allows easily creating arbitrary ray tracing pipelines out of sets of
bindings and shaders
what's missing:
- optimal handling of duplicate shaders
- reading bindings from shaders (parse SPIR-V) instead of specifying in
code
- automatic resource creation according to binding definitions
- automatic barriers according to bindings interface