Ivan Avdeev
0d8a7f76f5
Merge pull request #529 from w23/E260
...
- [x] Improves #528 a bit
- [x] Fixes #523
- [x] Fix ![image](https://user-images.githubusercontent.com/321361/235242886-bbae06cf-4375-4e11-bae0-8bc4e7644d59.png )
- [ ] ~верни зеркало! ![image](https://user-images.githubusercontent.com/321361/235250971-6652e2b2-e531-4b41-b603-1c50306b7ea3.png )~
- [x] test_brush2 лесенки пропали на растеризации
2023-05-01 10:45:31 -07:00
Ivan Avdeev
54d909b715
vk: make sure blending is the same as for gl for brush models
...
Essentially just copy R_SetRenderMode() logic to vk_brush
2023-05-01 10:27:30 -07:00
Alibek Omarov
12dbfb467a
ref: vk: studio: port optimized R_LightLambert function
2023-04-29 22:57:02 +03:00
Ivan Avdeev
b93ef2e52c
vk: fix freeing NULL bmodel memory
2023-04-28 13:29:02 -07:00
Ivan 'provod' Avdeev
e1d250e8da
vk: split geometries into static and animated
...
Load geometries only once, and then update only those which have animated textures.
Fixes #523
2023-04-28 12:35:48 -07:00
Ivan 'provod' Avdeev
f722f38617
vk: infotool: mark ent index as dynamic
2023-04-28 11:31:41 -07:00
Ivan 'provod' Avdeev
52f99ec329
rt: only upload kusochki when needed
...
- Once at load
- When color/mode/prevxform changed
Breaks animated textures.
#523
2023-04-28 11:19:57 -07:00
Ivan Avdeev
b17c00654b
vk: silence a couple NOT IMPLEMENTED messages
...
- We're not going to implement R_ShowTextures for ref_vk, at least in
its gl form.
- It seems that Mod_GetCurrentVis() can just return NULL, at least
ref_soft does it.
Fixes #269 , fixes #254
2023-04-28 10:32:01 -07:00
Ivan Avdeev
3447dfc5d6
rt: linearize alpha value for blending
...
This makes transparent brushes look more correct. But also makes sprites
look a bit dull.
Fixes #528
2023-04-28 10:12:15 -07:00
Alibek Omarov
62590dd2a9
ref: vk: use safe string functions, as unsafe versions were removed from libpublic
2023-04-28 17:43:50 +03:00
Alibek Omarov
e5e2a63ba2
ref: vk: fix matrix4x4_identity to m_matrix4x4_identity which conflicts in Vita port
2023-04-28 17:43:01 +03:00
Alibek Omarov
a117338435
ref: vk: port to RefAPI 4
2023-04-28 17:34:05 +03:00
Alibek Omarov
c4757058e1
Merge upstream master
2023-04-28 17:15:31 +03:00
Alibek Omarov
cb3b16e2ec
engine: client: implement v_dark in engine, instead of making it ref-specific
2023-04-28 16:52:22 +03:00
Ivan Avdeev
8ac1a76259
rt: rename traceAdditive to traceSimpleBlending
...
This is to more clearly distinguish between simple blended things that
don't participate in lighting, and future more involved blending with
refraction and being affected by light
2023-04-27 10:59:38 -07:00
Ivan Avdeev
847777fb6b
rt: do not forget to clear scratch buffer before loading new map
...
Fixes rare random crashes when loading maps with many models in it.
2023-04-27 10:59:38 -07:00
Ivan Avdeev
0b8b5b571b
rt: sort transparent geometry ray hits
...
Limit to 8 layer for now. Seems to be working just fine.
VGPR usage and performance impact will be checked later.
2023-04-27 10:59:38 -07:00
Ivan Avdeev
b79a65f8a1
rt: fixup incorrect oit application
...
Still doesn't work for us, as we also have purely emissive/additive
polygons. wOIT doesn't seem to support that fundamentally, each surface
should still attenuate the background.
Didn't even get to the _weighted_ part of it because of that.
2023-04-27 10:59:38 -07:00
Ivan Avdeev
449bcc4db9
rt: fixup blending emissive in background
2023-04-27 10:59:38 -07:00
Ivan Avdeev
ae510dd3ff
rt: use kusok.model.color
...
Fixes blending differences in test_brush/test_sprite maps. They now look
fairly similar (modulo color correction).
OIT is still a bit off, but good enough for now
2023-04-27 10:59:38 -07:00
Ivan 'provod' Avdeev
d6a41bc041
rt: try weighted oit
...
Known issues:
- test_brush blend modes are broken
- emissive does not participate in weighted oit properly
2023-04-27 10:59:38 -07:00
Ivan 'provod' Avdeev
d576818550
rt: implement mix blending with undefined order
...
Known issues:
- apparently BLEND_MIX surfaces should also participate in lighting. Figure out how.
- sensitive to ray tracing order. Need proper OIT (or hacks)
2023-04-27 10:59:38 -07:00
Ivan 'provod' Avdeev
3800d6559e
rt: restore glow
...
This required uploaded kusochki only later during frame time, just before rendering the model. Otherwise they would get incorrect rendermode.
Also add blend mode debug colors.
2023-04-27 10:59:38 -07:00
Ivan 'provod' Avdeev
1ebc1d207c
rt: commoditize setting material mode
...
Known issues:
- Breaks sprite glow for some reason.
2023-04-27 10:59:38 -07:00
Ivan 'provod' Avdeev
5b370509fe
rt: group Material and ModelMetadata in Kusok
...
They have mismatching frequencies. ModelMetadata should be per-Model, there should be only a few dozen of these.
There maybe hundreds (or even thousands) of materials, but one material can be still referenced by many kusochki.
This only moves fields into new structs, which still belong to Kusok. The real extraction will happen later, see #52 .
2023-04-27 10:59:38 -07:00
Alibek Omarov
27aad9f4a0
ref: gl: add size argument to COM_Default/ReplaceExtension calls
2023-04-26 05:20:45 +03:00
Alibek Omarov
8b96e7ca87
ref: add size argument to COM_FileBase calls
2023-04-26 05:20:45 +03:00
Alibek Omarov
8f207362a5
public: remove Q_sprintf, and patch all code that used it to use Q_snprintf instead
2023-04-26 05:20:45 +03:00
Alibek Omarov
096ee34f67
public: remove Q_vsprintf, replace by proper Q_vsnprintf proper calls
...
Fixes weird off by one error caused by glibc updates? I didn't tracked
what causes it exactly but replacing it seems to work. Anyway, we should
remove all 99999 hacks in libpublic.
2023-04-23 18:19:28 +03:00
Ivan Avdeev
935c2e7f5e
rt: remove a bunch of extra material flags
...
These are either unused, or their meaning can be recovered through other
means.
2023-04-21 23:34:27 -07:00
Ivan Avdeev
41b033efbd
vk: comment various material-related things
...
This is in preparation for #460
2023-04-21 23:34:27 -07:00
Ivan Avdeev
e9f15edbd5
vk: fix refercing func_wall ents by indexes; only model names work
2023-04-19 20:25:00 -07:00
Ivan Avdeev
d7660cf358
vk: patch func_wall ents by their index, not model name
...
Note that referencing them by ent->index inside the engine is not
possible, as this index is not stable enough.
2023-04-19 20:25:00 -07:00
Ivan Avdeev
ca2a794341
vk: patch func_wall model/ents visible offsets
...
Fixes #335
Patching is still done using "model" key, using "_xvk_ent_id" needs
complete overhaul of how patching is done
2023-04-19 20:25:00 -07:00
Ivan Avdeev
7c6e22bb2c
rt: extract basic func_wall patching support from PR #506
...
That PR has more stuff in it which we decided to drop.
This commit only contains:
- Detection of func_wall models, and adding their lights as static
(fixes #415 ).
- Patching func_wall models offsets, #335 . Does not yet patch them
visually, but patches their light sources. Will be addressed in next
commits. Patching is done via model name, not entity id, also will be
fixed.
- Does not address culling (#118 ). This is the part dropped from the PR.
Needs different approach. TBD
2023-04-19 20:25:00 -07:00
Ivan Avdeev
cfddb75bc5
rt: remove freeze_models functionality ( #513 )
...
It's been obsolete and broken for many months now.
Fixes #509
2023-04-15 10:51:34 -07:00
Ivan Avdeev
b4dde5bafd
rt: don't cull c/cw triangles to fix shadow leaks ( #508 )
...
de_cbble contains a bunch of floating boxes, which makes sunlight leak if internal back-facing surfaces are culled.
Generally, we should not be culling ray traced triangles (unless absolutely necessary for correctness), as it makes the shader perform additional unnecessary checks.
Try disabling culling universally and see whether it breaks anything.
Fixes #507
2023-04-15 09:44:04 -07:00
Alibek Omarov
f55ef63e26
ref: optimize R_LightLambert function
...
* Quick exit if no local lights
* Try to minimize Q_min() checks by apply it on temp variables
* Cap final light values only once, after all local lights are calculated
2023-04-14 20:33:07 +03:00
Ivan Avdeev
2dd4059704
vk: fix func_wall surface patching
...
Non-worldmodel models were using incorrect surface indexes when asking
for surface patches.
2023-04-14 10:08:40 -07:00
Ivan Avdeev
b894337d0e
vk: fix validation errors for empty combufs
2023-04-13 11:03:36 -07:00
Ivan Avdeev
1b0c8c763e
vk: slightly improve texcoord patching
...
Now _xvk_tex_offset and _xvk_tex_scale can be used independently to
offset or scale texture coordinates for given surface list.
2023-04-13 11:03:36 -07:00
Ivan Avdeev
b5e5d699bc
vk: deduplicate map (re)loading code
2023-04-13 11:03:36 -07:00
Ivan Avdeev
b3ffd911bb
vk: allow dynamic surface/material patching
...
Refactor NewMap and patch loading a bit.
2023-04-13 11:03:36 -07:00
Ivan Avdeev
90591cfb3d
vk: add patching props for surface texture coordinates
2023-04-12 11:57:07 -07:00
Ivan Avdeev
1fd9e49f63
vk: add normal_scale to materials
2023-04-12 11:57:07 -07:00
Ivan Avdeev
9116b0268e
vk: scale metalness/roughness textures by m/r values in material
...
fixes #342
2023-04-12 11:57:07 -07:00
Ivan Avdeev
51318fc77f
vk: read alpha for material base_color, fixes #308
2023-04-12 11:57:07 -07:00
Ivan Avdeev
139807a559
vk: profiler: add device/driver info
2023-04-10 12:05:35 -07:00
Ivan Avdeev
c917c7a818
vk: profiler: move graphs a bit lower
2023-04-10 10:24:57 -07:00
Ivan Avdeev
93153dd87e
vk: profiler: tame the gpu scopes ladder
2023-04-10 10:24:57 -07:00
Ivan Avdeev
084874c5c8
vk: profiler: add gpu scopes for staging uploads
2023-04-10 10:24:57 -07:00
Ivan Avdeev
a38f990ef5
vk: attempt to fix 32 bit build
2023-04-10 10:24:57 -07:00
Ivan 'provod' Avdeev
fdab0f7536
vk: fix windows compilation
2023-04-10 10:24:57 -07:00
Ivan Avdeev
92ce698292
vk: profiler: cover staging with combuf scopes; add build_as time
2023-04-10 10:24:57 -07:00
Ivan Avdeev
f6201e460f
vk: profiler: register gpu scopes as metrics for graph purposes
2023-04-10 10:24:57 -07:00
Ivan Avdeev
6d43e02dd3
vk: profiler: draw internal gpu side frame structure
2023-04-10 10:24:57 -07:00
Ivan Avdeev
1bf6f6ee74
vk: profiler: extract gpu timestamps in a generic manner
2023-04-10 10:24:57 -07:00
Ivan Avdeev
73a6cf596a
vk: init combuf
...
it does just work lol
2023-04-10 10:24:57 -07:00
Ivan Avdeev
4bd62ccbc0
[draft] vk: start refactoring commandbuffer/gpu profiler
...
Consolidate VkCommandBuffer management into a single entity. (somewhat
done for framectl, not done for staging)
Make sure that we pass enough metadata to be able to timestamp scopes in
cmdbuf.
It does compile, but it won't work: not all init code paths are used.
Also, there are many changes, so other failure modes are totally
possible.
2023-04-10 10:24:57 -07:00
Alibek Omarov
79624fa400
ref: gl: cleanup unused functions
2023-04-03 05:09:33 +03:00
Alibek Omarov
550ced9c36
ref: gl: cleanup unused functions in frustum
2023-04-03 05:05:32 +03:00
Alibek Omarov
fd795d5612
ref: soft: cleanup unused functions
2023-04-03 04:57:41 +03:00
Ivan Avdeev
5c7bd9d285
vk: profiler: add low/hi watermarks for frame time graph
2023-03-29 11:59:22 -07:00
Ivan Avdeev
cea37acfd2
vk: profiler: add width, and other improvements
...
- r_speeds_graphs_width now can be used to limit graphs width
- tweak layout slightly
- improve range printing based on metric semantic
2023-03-29 11:59:22 -07:00
Ivan 'provod' Avdeev
b5dfef5574
vk: profiler: scale graphs properly
...
respect dpi scale
2023-03-29 11:59:22 -07:00
Ivan Avdeev
adab64b797
vk: profiler: make graphs thin, add background
2023-03-29 11:59:22 -07:00
Ivan Avdeev
33aa4bc259
vk: profiler: add cvar for selecting metrics to plot
...
also:
- invert graphs
- add text labels
- fix vertical gaps
2023-03-29 11:59:22 -07:00
Ivan Avdeev
af96609c04
vk: profiler: automatic graph range
2023-03-29 11:59:22 -07:00
Ivan Avdeev
2b2e69da72
vk: profiler: start implementing universal metric graphs
2023-03-29 11:59:22 -07:00
Alibek Omarov
67903b55cc
ref: soft: adapt to RefAPI 4 changes
2023-03-28 21:34:43 +03:00
Alibek Omarov
55bf0e8a53
ref: gl: adapt to RefAPI 4 changes
2023-03-28 20:45:26 +03:00
Ivan Avdeev
8afd23a2d4
vk: profiler: clear metrics explicitly
2023-03-25 12:03:41 -07:00
Ivan Avdeev
1ae3ae4774
vk: profiler: register scopes and cpu/frame/gpu times as metrics
...
Make all the numbers we show as universal metrics
2023-03-25 12:03:41 -07:00
Ivan Avdeev
89f49276a5
vk: profiler: add beams count metric
2023-03-25 12:03:41 -07:00
Ivan Avdeev
68761fbbbb
vk: profiler: add sprites count metric
2023-03-25 12:03:41 -07:00
Ivan Avdeev
2976f753e1
vk: profiler: add more lights metrics
2023-03-25 12:03:41 -07:00
Ivan Avdeev
2db83a22a5
vk: profiler: add studio models count metric
2023-03-25 12:03:41 -07:00
Ivan Avdeev
f2ebcd663b
vk: profiler: explicit metric types; also more metrics
2023-03-25 12:03:41 -07:00
Ivan Avdeev
8ecfae5bf0
vk: profiler: simplify metric registration
2023-03-25 12:03:41 -07:00
Ivan Avdeev
cdc2a1258a
vk: profiler: add staging stats
2023-03-25 12:03:41 -07:00
Ivan Avdeev
3b47c7315a
vk: profiler: add dynamic model count
2023-03-25 12:03:41 -07:00
Ivan Avdeev
160a69d2cc
vk: profiler: add BLAS stats
2023-03-25 12:03:41 -07:00
Ivan Avdeev
e0e9305628
vk: profiler: add a way to add arbitrary metrics to profiler
2023-03-25 12:03:41 -07:00
Ivan Avdeev
576b4163b9
vk: profiler: rename slows to speeds (enough kekage)
2023-03-25 12:03:41 -07:00
Ivan 'provod' Avdeev
5f38f3467d
rt: originate ray on the near plane
...
fixes #63
also, compute max distance based on the far plane distance
2023-03-24 14:04:30 -07:00
Alibek Omarov
8bb5ec5e26
ref: remove renderer description export, it's unused now
2023-03-24 02:54:14 +03:00
Ivan 'provod' Avdeev
4a5fc186ea
vk: profiler: fixup incorrect __FUNCTION__ macro usage
...
No idea how it could work before
2023-03-21 11:59:57 -07:00
Ivan Avdeev
e1afb2a9de
vk: profiler: collect and display ref cpu busy and waiting times
2023-03-21 11:59:57 -07:00
Ivan Avdeev
5d23494cfc
vk: profiler: use existing R_SpeedsMessage to display profiling data
2023-03-21 11:59:57 -07:00
Ivan Avdeev
9d8ec1bc9d
vk: profiler: control profiler with r_speeds command
...
use bits to enable particular performance data display:
0 -- off
1 -- simple frame time
2 -- more object count and sizes statistics (TODO)
4 -- overall gpu usage (TODO)
8 -- extended intra-frame data, function times graph, etc
2023-03-21 11:59:57 -07:00
Ivan Avdeev
55af70c422
vk: profiler: remove noisy printf
2023-03-21 11:59:57 -07:00
Ivan Avdeev
bcb1d367b9
vk: profiler: refactor plotting functions slightly
2023-03-21 11:59:57 -07:00
Ivan Avdeev
2b8f74ff0e
vk: profiler: minor cleanup
2023-03-21 11:59:57 -07:00
Ivan 'provod' Avdeev
b4b63492f2
vk: profiler: fixup time scaling on windows
2023-03-21 11:59:57 -07:00
Ivan Avdeev
22d4202ad9
vk: profiler: draw total gpu time
...
Use VK_EXT_calibrated_timestamps to convert to host time.
2023-03-21 11:59:57 -07:00
Ivan Avdeev
a66c44a266
vk: convert query timestamps to ns
...
also, fix linux build
2023-03-21 11:59:57 -07:00
Ivan 'provod' Avdeev
93a539df74
vk: display gpu time taken for a previous frame
...
its value will be incorrect for non-nv cards which have non-1 timestampPeriod
2023-03-21 11:59:57 -07:00
Ivan 'provod' Avdeev
be95b65b22
vk: add better scope macro for profiler
...
also cover synchrnoized slow uploading for staging
2023-03-21 11:59:57 -07:00
Ivan 'provod' Avdeev
9a5e1fec4a
vk: scale profiling bars the same way the font is scale
...
make sizes consistent with the default font on hidpi displays
2023-03-21 11:59:57 -07:00
Ivan Avdeev
2872b4d237
vk: add profiling pause, add swapchain acquire scope
2023-03-21 11:59:57 -07:00