Commit graph

14184 commits

Author SHA1 Message Date
Bill Currie
e56b4a3a6d [qfcc] Strip off algebra types internally
It turns out the algebra types make expression dag creation much more
difficult resulting in missed optimizations (eg, recognizing `a × a`).
This fixes the dead cross products in `⋆(s.B × ⋆s.B)`
2024-02-08 13:56:59 +09:00
Bill Currie
cf756eb1a0 [qfcc] Emit statements for expressions only once
The switch to using expression dags instead of trees meant that the
statement generator could traverse sub-expressions multiple times. This
is inefficient but usually ok if there are no side effects. However,
side effects and branches (usually from ?:, due to labels) break: side
effects happen more than once, and labels get emitted multiple times
resulting in orphaned statement blocks (and, in the end, uninitialized
temporaries).
2024-02-08 13:56:59 +09:00
Bill Currie
701b0f3992 [qfcc] Print block label expressions first
Just running through the list of expressions in a block expression
results in label expressions within the block getting printed by
expressions that reference them and thus don't receive the correct next
pointer and wind up pointing to themselves. Printing the labels first
ensures they have the correct next pointer. However, I suspect there are
other ways things will get tangled.
2024-02-08 13:56:59 +09:00
Bill Currie
09d0e6b27c [render] Add tracy zones to render progs 2024-02-08 13:56:59 +09:00
Bill Currie
9247834a2f [vulkan] Remove a duplicate tracy zone
Fixes a compile failure when profiling.
2024-02-08 13:56:59 +09:00
Bill Currie
12ecc81470 [input] Use non-blocking IO for reading events
evdev can send multiple event packets for a single "event", but QF was
reading them one per frame, thus the feeling of buffered input at lower
frame rates (because they were buffered in the kernel). This also takes
care of most of the jerky motion with my 3d mouse, though there is still
a weird snap every second or so when rotating and translating at the
same time.
2024-02-02 08:41:26 +09:00
Bill Currie
9998a9b2c4 [vulkan] Clean up a couple of issues
found via using a new render setup. Just a stray commented bit of code
and lights affecting qskin alpha.
2024-02-02 07:31:52 +09:00
Bill Currie
3affd3582b [qwaq] Add an init_graphics function
This allows qwaq programs to provide a renderer configuration property
list.
2024-02-01 22:07:48 +09:00
Bill Currie
06d9b1a056 [vulkan] Use provided config property list
There's still a lot of work needed to separate out quake from
quakeforge, but this lets my test scene get a rather mangled scene
rendering (weird translucency: not sure what I've done wrong: probably
bad clear).
2024-02-01 22:07:40 +09:00
Bill Currie
11d970c7c9 [vulkan] Avoid segaults when reporting errors
Never fun.
2024-02-01 22:04:06 +09:00
Bill Currie
e96050daa5 [vulkan] Allow deletion of some null resources
I very much doubt it's all of them but it was enough to let QF shutdown
cleanly mid-initialization.
2024-02-01 22:03:28 +09:00
Bill Currie
a50eaab1e6 [cmem] Allow delete_memsuper on null memsuper
While not done for freeing cmem blocks, it helps clean up shutdown code
when the memsuper may not have been created.
2024-02-01 22:00:26 +09:00
Bill Currie
999f878b76 [vulkan] Rename alias_sampler to qskin_sampler
It's shared by both alias and iqm models.
2024-02-01 21:58:12 +09:00
Bill Currie
6f04c555a4 [ruamoko] Add support for cbuf handling
I'm not sure how this will turn out, but the idea is ruamoko code will
be able to create its own scripting "language".
2024-02-01 18:58:41 +09:00
Bill Currie
140fe93a9c [vulkan] Add some debug to the cascade shadows
It turns out what I thought was a cascade selection bug was just very
bad choice of cascade steps: factors of 8 just don't work nicely. I'm
not sure that simple factors work all that well, either. I need to make
the cascade system configurable and probably support more cascades.
2024-02-01 18:57:25 +09:00
Bill Currie
2996690bd1 [qwaq] Add a function to set imt context cbuf
Hopefully only temporary until I get ruamoko cbuf support done.
2024-02-01 15:28:43 +09:00
Bill Currie
926dd308c6 [renderer] Set default fog density to 0 2024-02-01 11:31:28 +09:00
Bill Currie
085f56367d [vulkan] Clear position.w to zero
This puts pixels that have not been rendered at infinity. I was rather
surprised to see fog in my test scene, but it depended on my position
relative to the origin, so something was definitely off (the pixels were
at the origin).
2024-02-01 11:27:08 +09:00
Bill Currie
c1b38196d1 [vulkan] Make CSM ranges consistent
I'm not sure why the final range was only a factor of 4 instead of 8.
There are still issues with range selection, but I'll look into them in
a bit (flying around my little test scene really shows the problems).
2024-02-01 11:24:16 +09:00
Bill Currie
e619b4524e [scene] Add support for a scene camera
Used only by qwaq, but I can fly around my little test scene now :)
2024-02-01 11:20:36 +09:00
Bill Currie
1bcc4dddb6 [ruamoko] Wrap some more input functions
IN_UpdateAxis (for nice handling of axis updates, especially relative
motion for mice) and IN_Binding_HandleEvent because registering an event
handler blocks qwaq's internall call to IN_Binding_HandleEvent.
2024-02-01 11:16:36 +09:00
Bill Currie
d409e595a8 [qwaq] Save and restore params around event handler
It turns out the parameter pointer save/restore I had done for detoured
functions is required for all nested calls. However, I had actually
completely forgotten about it. I updated the docs for that section.
2024-02-01 11:09:22 +09:00
Bill Currie
5fef8e6edb [qfcc] Implement quaternion multiplication
I'm surprised it took almost two years to discover that I had no
quaternion multiplications in any test code, but getting an ICE for a
quaternion-vector product, and the Hadamard product for
quaternion-quaternion was a bit of a nasty surprise.
2024-02-01 11:00:27 +09:00
Bill Currie
2e19e2d913 [ruamoko] Add wrapper for IN_SendConnectedDevices
And wrap input/event.h

event.h is a bit messy because of the data pointer in events, but it
works for now.
2024-02-01 01:40:46 +09:00
Bill Currie
0af727341f [qwaq] Use a qwaq-specific dirconf
While it breaks my little toy game I've been working on (long overdue,
really) and my test scene, at least now qwaq is a little more
independent of quake.
2024-01-31 00:19:20 +09:00
Bill Currie
6151bab0d1 [quakefs] Support loading dirconf directly
With this, it is a little easier to make qwaq independent of quake. The
default dirconf is still meant for quake, and fs_dirconf can still be
used to override the configuration.
2024-01-31 00:18:05 +09:00
Bill Currie
1d0b0f85af [vulkan] Return nullptr for missing cachepics
Better than storing such in the hash table only to get a segfault on
shutdown.
2024-01-31 00:14:16 +09:00
Bill Currie
743b06d5c1 [vulkan] Script render graph initialization sequence
While every possible subsystem needs an initialization call, all that
does is add the actual initialization task to the render graph system.
This allows the render graph to be fully configurable, initializing only
those subsystems that the graph needs.

Scripted initialization is still separated from startup as render graph
creation needs various resources (eg, attachments) defined before
creating render and compute passes, but all those need to be created
before the subsystems can actually start up.
2024-01-30 23:13:16 +09:00
Bill Currie
8e3532d543 [vulkan] Add a cvar to select between deferred and forward
Finally. However, it has effect only when no render config is provided.

When a config is provided, things will break currently as nothing is
done yet, but getting a config in will take some work in qwaq and also
the render graph system as I want to make the startup functions
configurable.
2024-01-30 23:13:16 +09:00
Bill Currie
f5e39ba263 [renderer] Allow render config to be specified
The config is a pre-parsed property list. Currently unsupported by
anything but Vulkan (but only a warning is given, not a hard error at
this stage), and Vulkan doesn't use it yet.
2024-01-30 23:13:16 +09:00
Bill Currie
db46dc8a55 [sys] Move terminal color escapes to sys.h
This puts them all in the one place, thus easier to use (and the reason
for the console charset change).
2024-01-30 23:13:16 +09:00
Bill Currie
9552f3c133 [console] Make quake encoding optional
Now, if either ormask is set or the first character of the string to be
printed is 1-3, the quake character set is used, otherwise utf-8 is
assumed. Other changes are for mapping untrusted strings.
2024-01-30 23:13:16 +09:00
Bill Currie
68bc9155ac [sw] Clean up some surface names
A few less warts, and some more consistency with surf and face.
2024-01-28 09:00:01 +09:00
Bill Currie
0a9cc91503 [renderer] Use 16 bits for d_lightstylevalue
Even the comment says it's 8.8, so no need for 32 bits for each value.
It seems to have made a very small improvement to my glsl stub test, but
it's probably just noise (< 0.5%). However, having it "officially" 16
bits means that cached values can be 16 bits thus reducing struct sizes
when I rework lightmap surface data (taking the cache from 16 to 8
bytes).
2024-01-28 09:00:01 +09:00
Bill Currie
c5fc34bb0b [vulkan] Correct dynamic light distance for lightmaps
I had gotten confused about how dynamic lights were calculated and thus
used the wrong radius in the final intensity calculation. Takes care of
the scruffy corners often visible on the dynamic lights.
2024-01-28 09:00:01 +09:00
Bill Currie
0401eeeb07 [console] Give camera and input windows decent defaults
Ie, move them out of the extreme top-left corner.
2024-01-28 09:00:01 +09:00
Bill Currie
36509f5296 [ui] Move draw_order update to before clearing
This fixes broken sub-menu placement and even windows overlapping the
top menu bar.
2024-01-28 09:00:01 +09:00
Bill Currie
013fea965b [vulkan] Actually blend lightmaps
An errant + resulted in an attempt to blend lightmaps resulting in using
only the final lightmap.
2024-01-28 09:00:01 +09:00
Bill Currie
cdca28bb10 [vulkan] Add bsp debug rendering to forward
Knowing where face edges are helps no end for lightmap debugging.
2024-01-28 09:00:01 +09:00
Bill Currie
559c5a51ed [vulkan] Fix a missed lightmap stage for forward
This gets dynamic lights working again (well, minus the bad updates, I
need to figure out what's up there, but they're nothing new). I guess I
checked only for things running, not that dynamic lights worked.
2024-01-28 09:00:01 +09:00
Bill Currie
17b00a3d05 [vulkan] Enable synchronization validation
And clean up the resulting errors. While some were tricky, there weren't
all that many: just some attachment issues and the multi-stage image
copy for scraps.

Fixing scraps required a barrier between copies. It might be overkill,
but a transfer_dst to transfer_dst image barrier worked.

Fixing attachments was a bit trickier:
 - depth needed early and late fragment tests to be treated as one stage
 - all attachments that were read later needed storeOp = none (using the
   extension)
 - and then finalLayout needed to be correct to avoid ghost transitions
 - as well, for some reason the deffered gbuffer subpass needed a depth
   dependency on the translucent pass even though neither one writes to
   the depth attachment (possibly a validation bug, needs more
   investigation).
2024-01-28 09:00:01 +09:00
Bill Currie
2203e2b4fd [gl] Use a struct for glpoly_t's vertices
I always hated the float array for the different attributes.
2024-01-28 09:00:01 +09:00
Bill Currie
bc9e85e429 [vulkan] Return default rendering to deferred
Until I design the system for run-time configuration of the render
graph. While forward is fast, it's... not pretty.
2024-01-23 14:54:59 +09:00
Bill Currie
bf50248e34 [vulkan] Remove the iqm fragment shaders
Really, they should never have existed, because iqm is a mesh format,
not a material spec (it just names materials used for the meshes).
2024-01-23 14:45:50 +09:00
Bill Currie
8f20638cd9 [vulkan] Implement deferred fog
It's not perfect (double fog on translucent surfaces, the
scatter/absorption isn't right, and no local lighting on the fog
itself), but it at least seems to look ok.
2024-01-23 14:32:30 +09:00
Bill Currie
60cb5a922a [vulkan] Add job tasks to be run on new scene
I think has been one of the biggest roadblocks to breaking free of
quake, so having dual render paths and thus the different new scene load
sequence has proven to be unexpected helpful. There's a lot more to be
done to make the render graph actually usable by anyone but me, but just
making scene load configurable frees up a lot. I think there needs to be
renderer startup/shutdown configuration too, but this seems to be enough
for now.
2024-01-21 13:36:17 +09:00
Bill Currie
fea08de4cb [renderer] Switch fog to be simple exponential
I don't know why exp(-dist^2) was thought to be a good idea, it's not at
all correct, and I think exp(-dist) looks better.
2024-01-21 01:27:49 +09:00
Bill Currie
2d56d21a24 [vulkan] Correct the position of the crosshair
It's meant to be drawn at its center, not top-left corner.
2024-01-21 01:21:16 +09:00
Bill Currie
8138b69186 [vulkan] Parameterize a few more forward vs deferred
Just scene and config load to go.
2024-01-20 23:36:12 +09:00
Bill Currie
778ffadd54 [vulkan] Implement fog for the forward renderer
Other than decoupled lightmap support, I think that has the vulkan
forward renderer feature complete (though a little buggy with its
lightmap updates and fisheye gets validation errors).
2024-01-20 19:45:45 +09:00