Commit Graph

720 Commits

Author SHA1 Message Date
Ivan Avdeev
0980493bb2 vk: tweak image barriers so it draws rt frames
This makes RT rendering work w/o sync hazards.
But it will still fail with one if menu is called.

It's as much as it can go w/o proper state tracking.
2024-05-01 20:27:57 -04:00
Ivan Avdeev
660513fd5f vk: make validation not complain about first 2 RT frames
Not sure what's happening with the rest, but first couple works.
2024-05-01 17:21:40 -04:00
Ivan Avdeev
fcd9c77bea vk: make rt renderer not fail validation at startup 2024-05-01 17:21:22 -04:00
Ivan Avdeev
14ab0662df vk: issue a barrier for staging buffer uploads
Trad rendering still works with this slightly more tight sync model.

It is suboptimal as it doesn't really know the previous op on the
buffer, so it has to do the ALL_COMMANDS stages, which makes validation
a bit sore.
2024-05-01 16:04:52 -04:00
Ivan Avdeev
c3a41f9097 vk: create BOUNDED_ARRAY empty 2024-05-01 16:02:18 -04:00
Ivan Avdeev
2d49b9f983 vk: work around sync validation woes for trad renderer
This is a very dirty way of silencing errors, trading them for a
waterfall of warnings. But it will allow making progress for now.
2024-05-01 11:11:01 -04:00
Ivan Avdeev
8a648619c4 vk: revert -nort commit
`rt_force_disable` is perfectly fine, it just needs to be written into
either `vk.cfg` or `video.cfg` to work. Other configs are read *after*
`R_VkInit()` function get called.
2024-04-29 18:28:28 -04:00
Ivan Avdeev
68c076bce3 vk: add explicit depth buffer synchronization for trad renderer
Fixes sync hazard validation error for depth buffer.
2024-04-12 11:58:04 -04:00
Ivan Avdeev
bc294977fd vk: add -vknort argument to force disable RT 2024-04-12 11:01:43 -04:00
nilsoncore
3c7481a7cb Merge branch 'vulkan' into memory_usage 2024-03-25 08:27:41 +03:00
nilsoncore
4d2a6c0e1d vk: devmem: fix print formats for linux #2 2024-03-24 21:01:55 +03:00
nilsoncore
4bac2cc96f vk: devmem: fix print formats for linux. 2024-03-24 20:33:03 +03:00
nilsoncore
790bf25263 vk: devmem: fix previously conflicting code.
- `mem->priv_.devmem` -> `slot_index`;
- Move static `VK_DevMemUsageTypeString()` out of `devmem.h` header.
2024-03-22 06:31:39 +03:00
nilsoncore
8363cedf93 vk: devmem: resolve conflicts with w23:vulkan branch. 2024-03-22 06:05:51 +03:00
Ivan Avdeev
cf966b38cb vk: fix a couple of misc warnings 2024-02-07 09:41:45 -08:00
Ivan Avdeev
f9c77060d7 vk: unload previous skybox prior to loading a new one
Fixes #737
2024-02-07 09:40:33 -08:00
Ivan Avdeev
e5a33ea0c3 vk: don't forget to add new shaders 2024-02-06 10:20:35 -05:00
Ivan Avdeev
9fc1f85bcd vk: use original skybox for trad renderer
Also fix:
- a bunch of texture/image destruction issues
- `_xvk_remove_all_sky_surfaces` getting stuck
2024-02-05 13:21:21 -05:00
Ivan Avdeev
30f2b6372b vk: make trad render draw skybox
It does it in a super dirty way, trad renderer needs a massive
refactoring.

It also displays patched skybox, however, we need it to display the
oridingal one.
2024-02-05 12:52:20 -05:00
Ivan Avdeev
a2661fe95d vk: add skybox pipeline for traditional renderer
It is not wired up to render anything yet, but we just made sure that it
builds and gets destroyed.

Also, fixup dynamic BLAS double-free.
2024-02-05 10:57:50 -05:00
Ivan 'provod' Avdeev
cba60f7953 vk: rt: add workaround for holes in geometry
Once upon a time, there were some BLASes. There were the BLASes for dynamic geometry, that were to be used every frame to draw very dynamic things, like sprites and beams. They were initialized at the very begining of the renderer's lifetime, and were expected to live happily for the entire process duration.
However, an evil NewMap appeared. It didn't care abount anything or anyone, so when it came, it just cleared all the allocators, and allowed other BLASes to be allocated into the same space as dynamic BLASes were already given. This made BLASes live on top of each other, use each others toys and make them fight. They weren't happy.

So we just kill them and creat them again from scratch, when the evil NewMap comes.

The end.

Fixes #729
2024-02-02 11:45:43 -05:00
Ivan Avdeev
315073a564 vk: add -vkdbg_shaderprintf to enable printfs in shaders
Under `-vkvalidate` enables `debugPrintfEXT()` in shaders, allowing
extra validation and error reporting from shaders.
Severely degrades performance, so should be enabled only for debugging.
2024-02-01 12:57:12 -05:00
Ivan Avdeev
aaa6de330c vk: rt: add experimental second Á-Trous pass for indirect diffuse
Now indirect diffuse channel gets blurred with 2 Á-Trous passes. It
mostly follows the paper, except for Σd_i, which gives very bad
viusal artifacts.
2024-02-01 10:36:34 -05:00
Ivan Avdeev
a56e6a42a5 vk: rt: parametrize different light channels differently in denoiser 2024-01-29 12:49:32 -05:00
Ivan Avdeev
5d6c1d4bfc vk: rt: tune denoiser "a-trous" parameters a bit 2024-01-29 12:07:20 -05:00
Ivan Avdeev
1f8e9fe0c2 vk: rt: slightly cleanup bounce loop shader code 2024-01-29 11:30:41 -05:00
Ivan Avdeev
ae3f79c67a vk: rt: attenuate secondary bounces
`throughput` should be scaled based on BRDF. I.e. diffuse bounces should
be scales by base_color at the very least.

This fixes lighting being too bright after 3-5 bounces.
2024-01-29 11:02:48 -05:00
Ivan Avdeev
be8da3252a vk: rt: fixup too bright direct lighting 2024-01-26 14:38:31 -05:00
Ivan Avdeev
a578becdd9 vk: rt: add diffuse and specular debug display modes
These will display diffuse and specular channels, both direct and
indirect, after spatial denoiser, but before temporal one.
2024-01-26 14:02:19 -05:00
Ivan Avdeev
6169734f91 vk: rt: do À-Trous lighting denoise
Works reasonably well, but a bit under-tuned, and remains only single-pass for now.
2024-01-26 13:59:15 -05:00
Ivan Avdeev
cf59921c41 vk: rt: degrade spatial image quality by box blur denoiser
Our gaussian blur is incorrect, as it doesn't preserve luminance, and
the final imaga ends up being darker than it should be.

Do a box blur as a simple test. It does result in a correctly looking
white furnace test image (modulo square blocks and luminance leaking).
2024-01-26 12:50:08 -05:00
Ivan Avdeev
e8400398bd vk: rt: add debug non-blurring denoiser code
Enabling it makes it clear that blurSamples() loses luminance.
Also it exposes temporal denoiser glitches.
2024-01-26 11:24:49 -05:00
Ivan Avdeev
579b9e00ac vk: rt: enable white furnace via new rt_debug_flags 2024-01-26 10:52:17 -05:00
Ivan Avdeev
6d58ad8df0 vk: rt: add white furnace debug display mode
Known issues:
- it doesn't really look how it's supposed to look
- using debug display mode for it was a mistake
2024-01-26 10:34:46 -05:00
Ivan Avdeev
18269ebf81 vk: rt: fixup 2024-01-23 12:13:48 -05:00
Ivan Avdeev
7e7351c599 vk: rt: attenuate bounce channels better
Divide by probabilities, multiply specular by fresnel.
2024-01-23 11:24:47 -05:00
Ivan Avdeev
b01fa98c8b vk: rt: improve spec-vs-diff estimation for bounces
Estimate relative specular contribution based on fresnel term and
base_color. Pick bounce type based on that.
2024-01-23 10:47:21 -05:00
Ivan Avdeev
c7bf03c260 vk: rt: add incomplete and super experimental specular bounces
VNDF sampling is blatantly copypasted from 2023 paper
no specular BRDF attenuation is made
it's very dirty and not optimized
2024-01-22 10:37:50 -05:00
Ivan Avdeev
8359a04750 vk: rt: fixup bounce brightness
Shoulnd't have multiplied by diffuse BRDF result. It should be encoded
in diffuse-vs-specular split, and the cosine term is already taken care
of in sampling.
2024-01-19 12:51:32 -05:00
Ivan Avdeev
d20bbe1761 vk: attenuate flashlight 2024-01-19 12:26:06 -05:00
Ivan Avdeev
6e2a3d9004 vk: rt: add cvar to force backface culling for testing 2024-01-19 12:25:29 -05:00
Ivan Avdeev
e12b2c47b4 vk: rt: added minimal distance for legacy soft blending
Only engage soft particles/blending after a certain distance. Makes
certain see-beams-through-weapons visual glitches disappear.

Engages soft particles with a smoothstep so the don't immediately pop up
after a certain distance, rather appear gradually.
2024-01-19 12:02:26 -05:00
Ivan Avdeev
6ee8af040e vk: throttle zero normal messages 2024-01-19 11:42:15 -05:00
Ivan Avdeev
073dbc55f8 vk: fixup studio model zero normal printing 2024-01-19 11:39:26 -05:00
Ivan 'provod' Avdeev
344c804468 vk: remove extra includes 2024-01-19 11:34:44 -05:00
Ivan 'provod' Avdeev
5f3a0c233b vk: rt: investigate more nans
Found that some studio models end up producing zero-length normals. See #731
2024-01-19 11:34:31 -05:00
Ivan Avdeev
6a7cb77809 vk: shave todo yak 2024-01-18 11:37:16 -05:00
Ivan Avdeev
0e4e754fdb vk: cleanup todo a bit x2 2024-01-18 11:34:07 -05:00
Ivan Avdeev
e22f30608a vk: cleanup todo a bit 2024-01-18 11:33:45 -05:00
Ivan Avdeev
e808fa0d9d vk: rt: enable patching environment light solid angle
Two ways:
- skybox.mat `sun_solid_angle`
- entity patch field `_xvk_solid_angle`

Both values should be specified in steradians
2024-01-18 11:14:20 -05:00