Commit Graph

378 Commits

Author SHA1 Message Date
Ivan Avdeev 48b7fcb153 vk: add a bunch of profiler metrics
Done as part of investigation for #555
2023-09-08 14:12:35 -04:00
NightFox f3b55c63bb
Update rads
performance improvement for c1a0/c1a0d
2023-09-08 17:39:27 +03:00
NightFox 9c7d8a6ee0
Update patches 2023-09-08 17:17:23 +03:00
Ivan 'provod' Avdeev 6d749ea8d0 vk: synchronize updating kusochki
Do not aggravate the validator by uploading to the same memory region twice. Make sure that there's synchronization between updating kusochki.

Fixes #553
2023-09-07 11:19:41 -04:00
Ivan Avdeev 13eef5dda2 vk: silence a bunch of verbose logs
There are some limits that we hit multiple times in a frame that result
int S_ERROR logs. Throttle them

Fixes #545
2023-09-07 10:43:21 -04:00
Ivan Avdeev b8eb6156a8 vk: studio: allow late "pre"loading for studio models
Sometimes the initial list of models doesn't contain everything that is
used later. I don't know why. So detect this and allow loading model
infos later.

Fixes #546
2023-09-07 10:18:31 -04:00
Ivan Avdeev bdbfbef8a2 vk: add commented out normal debugging code 2023-09-05 13:06:00 -04:00
Ivan Avdeev f42ea011f1 vk: mapents: fix not clearing smoothing groups 2023-09-05 13:03:53 -04:00
Ivan Avdeev 58ed5e7277 vk: brush: add explicit smoothing group inclusion 2023-09-05 12:54:57 -04:00
Ivan Avdeev 61416cfc66 vk: brush: do not link pairs that were explicitly excluded in patches
This doesn't work as expected in some cases, as surfaces might still get
linked transitively by neighbours. Solving this seems non-trivial for
now, but maybe we can just live with it
2023-09-05 12:35:28 -04:00
Ivan Avdeev d8d5019971 vk: filter smoothing normals by texture
thanks to G.I.F
2023-09-05 12:07:02 -04:00
Ivan Avdeev 0856e9e70d vk: add patchable smoothing threshold
Automatically smooth normals between surfaces with normals less than 45
degrees off.

Can be adjusted from map.bsp.patch file like this (e.g. to 50 degrees):
```
{
	"_xvk_smoothing_threshold" "50"
}
```
2023-09-04 14:35:19 -04:00
Ivan Avdeev a9dcf94f1b vk: add initial support for brush surface normal smoothing
Lots of artifacts

Relevant: #139, #348
2023-09-04 13:49:03 -04:00
Ivan Avdeev 1d9b987379 vk: treat emissive animated texture frames as polylights
Probably not the most optimal solution, but it works.

Fixes, #458
2023-08-31 12:49:30 -04:00
Ivan Avdeev 9c4fd15e65 vk: fix animated textures for brush models 2023-08-31 12:11:17 -04:00
Ivan Avdeev 3e14591082 vk: wkrutily lampotschkee
fixed missing emissive values for brush models
2023-08-31 11:45:51 -04:00
Ivan Avdeev ea1a98716d vk: restore dynamic polygon lights 2023-08-29 13:39:36 -04:00
Ivan Avdeev 0ccc107859 vk: associate more logs with modules 2023-08-29 13:12:35 -04:00
Ivan Avdeev 6d3c5bfa3e vk: add runtime-toggleable debug logs with module granularity
Use e.g. `vk_debug_log "mat,tex,brush"` to enable verbose debug (-dev 2)
logs for Material, Textures and Brush modules.
2023-08-29 12:31:57 -04:00
Ivan Avdeev e978871470 remove unused vk_previous_frame module 2023-08-28 13:12:02 -04:00
Ivan Avdeev ffa9603747 vk: studio: fix motion vectors for denoiser
Track prev_verts by render submodel
2023-08-28 12:59:54 -04:00
Ivan 'provod' Avdeev 2dc68544d6 vk: studio: remove obsolete comments 2023-08-28 09:11:48 -07:00
Ivan 'provod' Avdeev 45a141aa36 vk: studio: clear submodule cache at appropriate times
Add render refcount to submodels to diagnose when it can't properly clear things due to them being used somewhere still.

Also add `speeds.submodels_cache_{dynamic,static}` counters to show how many submodels render models have been allocated.
2023-08-28 09:11:48 -07:00
Ivan 'provod' Avdeev 03fc537d54 vk: studio: implement proper per-submodel rendermodel cache
Gives out individual render submodels for dynamic ones, receives and remembers them when they are not needed anymore.

Stores only one render submodel for static ones. Reuses/instantiates it for everyone.
2023-08-28 09:11:48 -07:00
Ivan 'provod' Avdeev c42cf2088c vk: studio: handle first half of entity reuse
Detect whether studio model has changed, and replace it with a new one.
It does (as predicted) run into a gpu sync issue if reuse happened while previous frame with the old user is still being drawn.
2023-08-28 09:11:48 -07:00
Ivan 'provod' Avdeev 567d014ada vk: studio: precompute per-submodel dynamic-ness
Basically go through all sequences and bones, and try to find out whether a given submodel is affected by animation frames.
2023-08-28 09:11:48 -07:00
Ivan 'provod' Avdeev 9636b541c5 vk: studio: make dynamic-ness detection more granular
also comment on the upcoming submodel caching plans
2023-08-28 09:11:48 -07:00
Ivan Avdeev 47cc51d9b1 vk: studio: track studio model state by entity 2023-08-28 09:11:48 -07:00
Ivan Avdeev 09d8534b01 vk: studio: extract all model/cache stuff into separate files 2023-08-28 09:11:48 -07:00
Ivan Avdeev f99d43ec4c add a bunch of wip changes wrt studio model cache 2023-08-28 09:11:48 -07:00
Ivan Avdeev f691b4b4b0 vk: add "persistent" speeds metrics for used memory, etc
Renames previous METRICS to COUNTERS. These are still reset to zero
every frame.

Adds new METRICS which are preserved, maintained externally to speeds,
and only sampled by speeds code once per frame.

Also adds new metrics:
- `studio.cached_submodels` -- number of submodels in cache
- `geom.used` -- memory used by long allocations
- `geom.{vertices,indices}` -- counts of vertices/indices for long
  allocations
- `geom.dyn_{vertices,indices}` -- counts of vertices/indices for
  single-frame dynamic allocations
2023-06-14 11:23:09 -07:00
Ivan Avdeev d13c0d4748 vk: add studio dynamic and static submodels metrics 2023-06-13 12:19:18 -07:00
Ivan Avdeev 5dda220751 vk/speeds: preserve metric names that might not be registered initially
When `r_speeds_graphs` cvar is read for the first time, not all metrics
might be registered yet. It leads to some graphs missing.

Retry searching for these metrics on further frames, thus preserving the
graph list from previous session fully.
2023-06-13 11:52:46 -07:00
Ivan Avdeev c72ff1d0c5 vk: add ability to delete graphs by their names
Also, track single changes vs cvar changes: do not reload everything
from cvar on every update
2023-06-13 10:32:32 -07:00
Ivan Avdeev 0b47621f69 vk: add r_speeds_graph <add/del/clear> command
Allows adding graphs w/o editing the cvar manually

Delete is not implemented yet
2023-06-13 10:12:41 -07:00
Ivan Avdeev 046ae3d7f3 vk: rename metrics to module.name, prettify list
- Add variable name and registration src:line to the
  `r_speeds_list_metrics` output. Makes it easier to reason about where
  does this metric come from.
- Group metrics by their modules, makes it easier to discover.
- Do not print the list immediately on command, do it later in the
  frame. Makes it print correct latest frame values.
2023-06-13 09:39:50 -07:00
Ivan Avdeev 6583ed0c31 vk: fixup sequences fps formatting 2023-06-09 11:34:39 -07:00
Ivan 'provod' Avdeev ba041fce36 vk: update animated studio models geometry
Still slightly KORYAVY as:
- there's no cache eviction, it might get full pretty quick
- static-vs-dynamic animation decision is pretty rudimentary, might consider non-animated things as dynamic
- args passing vs global state is meh
2023-06-09 11:28:30 -07:00
Ivan 'provod' Avdeev cadf3dbdfc rt: update blas for brush water
Enable updating rt_blas, and use that for updating brush water models
2023-06-09 10:03:00 -07:00
Ivan Avdeev 406a5f9d4b vk: remove old dynamic beam segs code 2023-06-07 10:54:09 -07:00
Ivan Avdeev 4409e57a8d rt: fix dynamic models colors 2023-06-07 10:43:54 -07:00
Ivan Avdeev 0b8fe6fe33 rt: implement fast dynamic models
It works, and works really fast.
Known issues:
- missing colors
2023-06-07 10:24:29 -07:00
Ivan Avdeev e6bf0c452a rt: more removals 2023-06-06 11:21:47 -07:00
Ivan Avdeev 789982277d rt: remove more unused and obsolete things 2023-06-06 10:50:16 -07:00
Ivan Avdeev 98f8300ca2 vk: remove lots of obsolete code
TriApi/dynamic stuff is still not passed to RT, but removing old code
makes it easier to reason about.
2023-06-06 10:40:10 -07:00
Ivan Avdeev 8e0a9ac4d4 vk: remove old dynamic model implementation too
Breaks dynamic model RT rendering, as it is not implemented yet
2023-06-06 10:20:00 -07:00
Ivan Avdeev c105d45265 vk: remove public render dynamic model api
It still remains internally, and generates too many BLASes.
2023-06-06 09:50:24 -07:00
Ivan Avdeev 0e13ed38c1 vk: revert beam segs to use triapi, like gl 2023-06-06 09:29:05 -07:00
Ivan Avdeev c271078196 vk/speeds: print current metric value next to graphs 2023-06-06 09:27:52 -07:00
Ivan Avdeev 3e2e5e7cb2 vk: remove old dynamic model api usage from brush+water
This makes water static for now, and also makes it look weird, e.g.:
- no culling of water sides (it is "dynamic" in a sense that it's an
  entity property, not model property)
2023-06-05 12:53:25 -07:00
Ivan 'provod' Avdeev a2b0164e03 vk: put barney back together
Fixes computing total vertices/indices count. Were referencing the same `pmesh` for all meshes.

Floating and missing heads issue seems to be due to incorrect fixed animation frames. I.e. animation frames contain offsets to the correct positions. Should be fixed when animations are done.
2023-06-03 12:10:56 -07:00
Ivan Avdeev df102994c4 vk: pre-build and cache studio submodels on first draw
Known issues:
- no animations, stuck at first rendered frame of a given submodel.
  This is as intended for now, needs BLAS update functionality not yet implemented.
- wrong positions/transforms. Reasons unknown. May be "as intended" too.
- missing heads
- Barney model corruption. Consistent between maps/instances/animation
  frames.
2023-06-02 11:49:02 -07:00
Ivan Avdeev c34c56e203 vk: add r_speeds_list_metrics command, with filter 2023-06-01 12:12:10 -07:00
Ivan Avdeev 3bbca26087 vk: fix disappearing sprites for traditional renderer 2023-06-01 11:42:23 -07:00
Ivan Avdeev 72acf4882d vk: orient sprites to camera
Somehow makes sprites correctly oriented (and winding-culled) for ray
tracing, but makes them disappear (winding-culled) for traditional
renderer. This makes zero sense.
2023-06-01 11:00:50 -07:00
Ivan Avdeev edb151bd1b rt: apply instanced texture overrides to rt_model; makes sprites apply correct textures 2023-06-01 10:15:30 -07:00
Ivan Avdeev 8f47115a01 rt: hide internal apis 2023-06-01 09:25:55 -07:00
Ivan Avdeev ed4d0070f8 vk: override sprite textures for quad instances
Applies correct sprite textures for traditional renderer. Doesn't apply
them to RT yet.
2023-05-31 11:00:28 -07:00
Ivan 'provod' Avdeev 32cb4f73be vk: fixup sprite size and color, also reorient it
Sprites are still not oriented properly though
2023-05-31 10:16:06 -07:00
Ivan 'provod' Avdeev dd8f06ae60 rt: recreate sprite model on every map
This is a workaround for inconsistent memory management: some subsystems completely clear their memories and start allocating from zero. This leads to overwriting long lived sprite model with garbage.

TODO FIXME
2023-05-31 10:15:27 -07:00
Ivan 'provod' Avdeev 8b50ebb035 rt: pass and assign rt_blas debug names 2023-05-31 10:13:40 -07:00
Ivan Avdeev e9ea962bc0 vk: begin refactoring rendermodel api, instantiate sprites, crash gpu 2023-05-31 09:39:27 -07:00
Ivan 'provod' Avdeev c157c9acfc rt: don't forget to add new blases to render list 2023-05-31 08:46:34 -07:00
Ivan Avdeev 0853f1c182 rt: start adding new rt_blas-based rt_model_t
Make brush models use it. Black screen, kekw. But not explicit error
messages. Need to investigate.
2023-05-30 12:14:44 -07:00
Ivan Avdeev 7ee16cd82f vk: track block/geom/brush lifetimes
Make sure that things get created and destroyed at the right times.
Allow longer-than-map block allocations.
Fix brush model leaks -- previously they weren't destroyed on map
change/game exit properly. Also free geometry ranges accordingly.

Add a note about map loading process, and various models lifetimes.
2023-05-26 10:45:44 -07:00
Ivan Avdeev d24961db15 vk: add block allocator draft
The intent is to manage long-vs-single-frame allocations better.
Previously long allocations were map-long bump allocations, and couldn't be freed
mid-map, as there was neither a reference to the allocated range, nor a
way to actully free it.

Add a two-mode block allocator (similar to previous debuffer alloc) that
allows making long and once allocations. But now long allocations are
backed by "pool" allocator and return references to the range.

This commit doesn't do the deallocation yet, so map chaning doesn't yet
work.
2023-05-25 12:12:18 -07:00
Ivan Avdeev 9200cbfc25 rt: step even closer to explicit blas+kusochki management
- stop tracking color/xform/mmode with vk_ray_model
- do not expose model to things that don't need to know
2023-05-22 11:02:40 -07:00
Ivan Avdeev 8724efd748 rt: massage vk_ray_model a bit
- explicitly group cache-related fields
- move kusochki allocation to where it's actually used

this makes a step towards better blas management from bottom up
2023-05-22 10:39:48 -07:00
Ivan Avdeev 322e7bc419 vk: recreate suboptimal swapchains with correct synchronization 2023-05-18 12:32:00 -07:00
Ivan Avdeev b5f79f3815 rt: DRY the accel creation code 2023-05-18 12:10:21 -07:00
Ivan Avdeev e55e411639 vk: add a couple of TODO comments 2023-05-18 12:00:58 -07:00
Ivan Avdeev b65f84793a rt: start refactoring blas/tlas mgmt code
Draft the new accel/blas apis. Consolidate everything accel-related into
vk_ray_accel.c. Start splitting into more atomic functions. Prepare for
blas-model+kusochki split. etc etc.

The new code isn't really used yet.
2023-05-18 11:59:14 -07:00
Ivan Avdeev 4af9f65cd0 vk: use better debug_break in validation errors callback
Allows us to continue in gdb
2023-05-18 11:58:00 -07:00
Ivan Avdeev 7060a86662 rt: propose rt_blas api 2023-05-17 11:28:09 -07:00
Ivan Avdeev 14a648d16c rt: prepare for blas mgmt refactoring
1. Rename models passed to TLAS to instances.
2. Remove BLAS validation: old, doesn't make sense anymore.
3. Draft general blas mgmt approach in NOTES.md
2023-05-17 10:42:18 -07:00
Ivan Avdeev 7d6c12218f vk: comment on why we need inverse model matrix 2023-05-15 09:47:03 -07:00
Ivan Avdeev e54913f8af rt: improve prev frame bone matrix tracking for studio models
Still has some artifacts, but is generally rather close. Will look at
this again when caching studio model BLASes, as we'd be able to look at
them without extra animations.
2023-05-15 09:47:03 -07:00
Ivan Avdeev 091c61a45f vk: make sure studio model vertices are local space
TODO:
- revert not applying rotationmatrix in local vk_studio code
- make sure that prev_frame stuff hasn't changed
2023-05-15 09:47:03 -07:00
Ivan Avdeev e49f517dc0 vk: don't apply studio model matrix to vertices 2023-05-15 09:47:03 -07:00
NightFox c91db96008 update patches 2023-05-05 15:12:28 -07:00
NightFox e86e16235c add rad files for cstrike 2023-05-05 15:12:28 -07:00
NightFox a2c6e3b444 Add cs_assault.rad 2023-05-05 15:12:28 -07:00
NightFox 596d35ddfa update rad files 2023-05-05 15:12:28 -07:00
NightFox b49dca536d Rename c1a3b.bsp.patch to c1a3b-dayone.bsp.patch 2023-05-05 15:12:28 -07:00
NightFox d2f45c53a0 Rename c1a3c.bsp.patch to c1a3c-dayone.bsp.patch 2023-05-05 15:12:28 -07:00
NightFox 48f9813edd update patches 2023-05-05 15:12:28 -07:00
Ivan Avdeev babfbb08ab vk: improve mvp matrix handling a bit 2023-05-04 11:10:22 -07:00
Ivan Avdeev 4f43b316a6 rt: material: print fauly lines on unknown keys 2023-05-04 11:10:22 -07:00
Ivan Avdeev 481aa651c6 vk: refactor passing m,v,p matrices around
View and projection now set only once in a logical place.
Model matrix is now closely associated with its model, and not stored as
a global state.
2023-05-04 11:10:22 -07:00
Ivan Avdeev 0b6ef9fd65 vk: remove a couple unused things from vk_render draw structs 2023-05-04 11:10:22 -07:00
Ivan 'provod' Avdeev 58433a2221 rt: only load textures for potentially usable materials
Skip loading textures for materials which are not going to be used.
2023-05-04 11:10:22 -07:00
Ivan 'provod' Avdeev 1cfb183cbd rt: extract per-model data from kusochki 2023-05-01 17:03:22 -07:00
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
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
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
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
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
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
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
Ivan Avdeev 1c9ff300a9 vk: draw profiler scope blocks
also add a couple more scopes to rendering
2023-03-21 11:59:57 -07:00
Ivan Avdeev be59d1d8e9 vk: tune profiler colors and animation a bit 2023-03-21 11:59:57 -07:00
Ivan Avdeev 39f2d78199 vk: start refactoring profiler
Convert direct stack manipulation to simple and cheap event writing.
Draw rudimentary frame times graph.

Related to #412
2023-03-21 11:59:57 -07:00
NightFox 190a691c6d Add simple soft shadows by @LifeKILLED
This is a temporary solution.
2023-03-18 11:39:56 -07:00
NightFox e5658f59cd
Update rads & patches (#479) 2023-03-18 11:38:11 -07:00
Ivan Avdeev 01de5957d8
vk: respect TF_NEAREST/CLAMP/BORDER flags (#471)
Use these flags to pick the right sampler. Fixes issues with blurry and leaking fonts, lines in main menu tiles, etc.

fixes #439, fixes #79
2023-03-08 14:16:21 -08:00
Ivan 'provod' Avdeev 6d7fd41494 rt: increase model cache size, fix #449
Apparently just increasing the model cache size limit is fine.
"LRU" cache eviction was not even used when testing.
2023-03-04 12:46:37 -08:00
Ivan 'provod' Avdeev 21534c044b rt: fix uploading too many light cells, fix #451
c5a1 has ~230k light cells, and tries to upload 77MiB of them. Previous staging size of 64MiB wasn't enough.
2023-03-04 12:46:37 -08:00
Ivan 'provod' Avdeev 62392ac4b6 rt: increase kusochki limit to 32768, fix #85
boot_camp worldmodel has ~11k surfaces, which means it will need at least 22k kusochki for 1:1 static:dynamic split.
2023-03-04 12:46:37 -08:00
Ivan 'provod' Avdeev c1483216ef rt: increase MAX_ACCELS to 2048, fix #366
test_shaders_room3 has lots of sprites, and currently we create a new BLAS for each sprite.
This is not great, and a proper fix would probably mean consolidating all dynamic transparent things into BLASes per render mode or something. But for now we can just increase the limit
2023-03-04 12:46:37 -08:00
Ivan 'provod' Avdeev 78a1b24e11 rt: enable entity light, fix #115 2023-03-04 12:46:37 -08:00
Ivan 'provod' Avdeev dc698c16dc vk: make sure deleted textures are not referenced in staging
This fixes -vkvalidate and fixes #464
2023-03-04 12:46:37 -08:00
NightFox 8ed23cb40f
More correct emissive textures (#456)
Я подобрал новое компромиссное значение которое не требует clamp.
Это не идеально, но пока сойдёт. Может давать немного больше солнечных зайчиков чем с clamp.
Позже надо будет разобраться с самим kusok.emissive.
2023-03-04 09:41:05 -08:00
Ivan Avdeev c47c314512 rt: clear geom emissive values prior to loading light data
fix #104
2023-03-03 16:41:16 -08:00
Ivan Avdeev 4f2eb7680b rt: propagate emissive color patches to kusochki
Fixes #330

Also, fix incorrect patch application introduced by previous commit, it
would not read the patch color value, and could only switch the light
off.
2023-03-02 23:23:31 -08:00
Ivan Avdeev a284567002 rt: refactor loading surface lights, fix #417
Do not entangle brush model loading with loading surface lights.
Do a separate pass over brush model surfaces for the sole purpose of
finding light sources. Enables consistent live-reloading light data
after patching entities/surface/rad files.
2023-03-02 22:32:08 -08:00
Ivan Avdeev 58c9a9920e rt: do not allow direct access to pached surfaces 2023-03-02 20:27:18 -08:00
NightFox ed9a06cae1 Update lighting patches 2023-03-01 22:50:02 -08:00
Ivan 'provod' Avdeev 8a457a17c2 rt: compute tangents for studio models
Enables applying normal maps to studio models.

Fixes #220, fixes #241
2023-03-01 10:47:31 -08:00
Ivan 'provod' Avdeev 6b1e84308a rt: fix checking for skybox shadow intersection
Doing tereminate-on-first-hit is incorrect, as we might accidentally hit the skybox geometry first, and consider this as no shadow.
Unfortunately we have to explicitly find a closest hit and check whether that was a skybox.

Maybe there's even a better way, e.g. querying for skybox-only geometry first, and only then checking for a terminate-on-first-hit for everything else. But it likely doesn't matter that much, and would need profiling anyway.

Fixes #424 and #413
2023-02-28 18:50:07 -08:00
Ivan 'provod' Avdeev 59e8a8c4c3 rt: only overshoot additive for glow mode
Add another flag to kusochki for glow geometry.
Move flags to a new kusok.flags field.

Fixes #231 (or at least makes it not stand out too much)
2023-02-28 17:50:50 -08:00