Commit graph

14458 commits

Author SHA1 Message Date
Bill Currie
00781160e2 [qfcc] Remove the node from its own edges
This gets rid of the funny little self-loop edge in dags dot files that
has bothered me for a while. It was just because the node to which an
identifier was attached happened to be the parent of the identifier's
leaf node.
2024-02-21 22:41:08 +09:00
Bill Currie
b842913ca9 [qfcc] Remove special treatment for flow/func statements
The fix in bdafdad0d5 for
`while (count--)` never did appeal to me. I think I understood the core
problem at the time, but I hadn't figured out how to use a var's
use/define sets to detect the write-before-read. Using them allows the
special handling for flow control to be removed, making things more
robust. The function call handling has been superfluous since the
Ruamoko instruction set required the auxiliary operands on the call
statements.
2024-02-21 22:41:08 +09:00
Bill Currie
1fb4a556d7 [qfcc] Remove old ptrmove code from dag creation
It doesn't seem to help any, and removing it doesn't break anything
(that is tested), and I'm working on better handling of ptrmove support.
2024-02-21 22:41:08 +09:00
Bill Currie
9a38cdfd78 [qfcc] Clean up dag item counting and init
Not by much really, but using one "aux" count instead of different
types, and using functions to iterate through the statement's aux
operands makes the code easier to read.
2024-02-21 22:41:08 +09:00
Bill Currie
768113d37b [qfcc] Replace expr_file_line with a scoped version
Two birds with one stone: eliminates most of the problems with going
const-correct with expr_t, and it make dealing with internally generated
expressions at random locations much easier as the set source location
affects all new expressions created within that scope, to any depth.
Debug output is much easier to read now.
2024-02-21 22:41:08 +09:00
Bill Currie
a6b59d4a42 [util] Make FREE a little more macro-correct
That is, use ()s around uses of p
2024-02-21 22:41:08 +09:00
Bill Currie
6e8c98433a [qfcc] Fix a missed const type_t 2024-02-21 22:41:08 +09:00
Bill Currie
b9aad99381 [qfcc] Clean up warning and notice return types
They never needed to return expr.
2024-02-21 22:41:08 +09:00
Bill Currie
1df7674c65 [gamecode] Add a handle view
Handle type encodings aren't actually compatible with basic type
encodings as their width is always one and thus the tag field collides
with the basic type encoding's width field.
2024-02-21 22:41:08 +09:00
Bill Currie
d7a1bb5a01 [gamecode] Use designated initializer syntax for structs
Mostly for consistency with arrays, but also it may be useful for
cutting and pasting data.
2024-02-21 22:41:08 +09:00
Bill Currie
4576de816d [gamecode] Print array contents in pr_debug_array_view
This makes it much easier to check data in progs files.
2024-02-21 22:41:08 +09:00
Bill Currie
131ad9013c [qfcc] Tidy up expr_assign_copy a little
It proved that expr_assign_copy wasn't the cause of any problems, but I
cleaned up some of its types a little.
2024-02-21 22:41:08 +09:00
Bill Currie
35e2044bfa [qfcc] Fix nested compound initializers
Add static array indexing. This gets the compoundinit test working.
2024-02-21 22:41:08 +09:00
Bill Currie
19965e7cbd [qfcc] Add a failing test case for compound initializers
It turns out that compound intializers break on when the nesting level
increases (eg, initializing vectors in structs in arrays).
2024-02-21 22:41:08 +09:00
Bill Currie
1b4db639af [qfcc] Handle quaternion (in)equality tests
I'm surprised this didn't come up earlier.
2024-02-21 22:41:08 +09:00
Bill Currie
0e7c80e9fe [qfcc] Use ud-chains for ptrmove pointer analysis
ptrmove was not treating its indirect source operand as used because the
pointer wasn't checked for its source.

This fixes part of ptrstructinit, but there's a lot more breakage in
that test: it looks like all sorts of fun with arrays.
2024-02-21 22:41:08 +09:00
Bill Currie
ab69e65e02 [qfcc] Add failing test case for pointer struct initialization 2024-02-21 22:41:08 +09:00
Bill Currie
3a22091455 [qfcc] add pointer validity check function to test-harness 2024-02-21 22:41:08 +09:00
Bill Currie
192eb11235 [qfcc] Dereference most array types properly
This should prevent some fun bugs in the future (it's what necessitated
the const-correct patch).
2024-02-20 16:47:06 +09:00
Bill Currie
f0dfe47a32 [qfcc] Make type_t mostly const-correct
There were a few places where some const-casts were needed, but they're
localized to code that's supposed to manipulate types (but I do want to
come up with something to clean that up).
2024-02-20 16:47:04 +09:00
Bill Currie
6e71aadfa4 [qfcc] Use dereference_type for initialized arrays
In particular, when the size is inferred from the compound initializer.
Fixes a fun "incomplete type" error.
2024-02-20 16:46:02 +09:00
Bill Currie
fa5c3ab12e [qfcc] Support arrays in dereference_type
This is needed to get the correct type from arrays of typedefed
elements.
2024-02-20 16:46:02 +09:00
Bill Currie
827ca3cf27 [qfcc] Make array_type const-correct
As such... need to cast away the const when calling append_type (which
should probably become internal).
2024-02-20 16:46:02 +09:00
Bill Currie
32a8287fc1 [ruamoko] Add some functions to get joints
Still not very useful, but the internal format for iqm is proving to be
rather limiting.
2024-02-20 16:46:02 +09:00
Bill Currie
3d26aafbea [qfcc] Unalias def ops too
When I implemented the st_alias handing (d8a78fc849) I was
unsure if I needed to unalias aliased defs too, but it turns out to have
been necessary: this is what caused my 2d PGA dynamics test to blow up
strangely due to the GA vector loaded from an array into a local
variable getting the local var replaced by a temp but the var itself
being read later in the code (uninitialized variable due to incorrect
optimization... oops).
2024-02-20 16:46:02 +09:00
Bill Currie
37fe0bc4ed [qfcc] Fix some 2d PGA bugs
When sum_expr gets a null expression as one of its args, it simply
returns the other arg, but that arg needs to have the correct type
applied.

Handle zero (null result) cross product in bivector geometric product.

Clean up types in bivector * vector geometric product.
2024-02-20 16:46:02 +09:00
Bill Currie
946211bca2 [qfcc] Use a better name for a var
Looking at the code afterwards, I realized flips would be a far better
name than mask. Not sure what I was thinking when I wrote the code.
2024-02-20 16:46:02 +09:00
Bill Currie
e9cea29cae [gatest] Implement undual and antiwedge 2024-02-20 16:46:02 +09:00
Bill Currie
cf814cd9d1 [input] Fully initialize the focus event 2024-02-20 16:46:02 +09:00
Bill Currie
7509916d71 [qwaq] Clean up some debug output
Some leftover prints from getting geometric algebra support working in
qdb.
2024-02-20 16:46:02 +09:00
Bill Currie
40f04ff33e [qfcc] Implement undual and use for regressive product
I'm not sure the regressive product is right (overall sign), but that's
actually partly a problem in the math itself (duals and the regressive
product still get poked at, so it may be just a matter of
interpretation).
2024-02-20 16:46:02 +09:00
Bill Currie
10861986fb [qfcc] Add tests for the hodge dual 2024-02-20 16:46:02 +09:00
Bill Currie
d319ce6106 [qfcc] Support multi-vector comparison
I'm not sure anything other than == or != has much meaning on anything
but scalars and pseudo scalars, but all comparisons are supported as a
simple boolean test. Any missing components are assumed to be 0. If
nothing else, it makes unit tests easier to write.
2024-02-20 16:46:02 +09:00
Bill Currie
11b247918e [qfcc] Find current algebra context for duals
Now finding the dual of a scalar works, too (need a context as otherwise
the pseudo-scalar is unknown).
2024-02-20 16:45:55 +09:00
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