Commit graph

11129 commits

Author SHA1 Message Date
Bill Currie
ebcef5c8a4 [util] Deal with gcc optimizing out isnan checks
This occurs because of -ffast-math, but I need to investigate how much
of an impact disabling it has on QF's performance.
2020-12-21 14:14:38 +09:00
Bill Currie
ab04a1915e [build] Fix a pile of gcc 10 issues
gcc got stricter about array accesses, complicating progs macros, and
much better at detecting buffer overflows.
2020-12-21 14:14:29 +09:00
Bill Currie
af814ff9a8 [util] Add a cache-line aligned memory allocator
This was inspired by
Hoard: A Scalable Memory Allocator
  for Multithreaded Applications

 Emery D. Berger, Kathryn S. McKinley, Robert D. Blumofe, Paul R.
 Wilson,

It's not anywhere near the same implementation, but it did take a few
basic concepts. The idea is twofold:
1) A pool of memory from which blocks can be allocated and then freed
en-mass and is fairly efficient for small (4-16 byte) blocks
2) Tread safety for use with the Vulkan renderer (and any other
multi-threaded tasks).

However, based on the Hoard paper, small allocations are cache-line
aligned. On top of that, larger allocations are page aligned.

I suspect it would help qfvis somewhat if I ever get around to tweaking
qfvis to use cmem.
2020-12-21 14:14:29 +09:00
Bill Currie
62f3e1f428 [util] Calculate quaternion to rotate between two vectors
The calculation fails (produces NaN) if the vectors are anti-parallel,
but works for all other combinations. I came up with this implementation
when I discovered Unity's Quaternion.FromToRotation could did not work
with very small angles. This implementation will produce a usable
quaternion below 0.00255 degrees (though it will be slightly larger than
unit). Unity's failed such that I could see KSP's skybox snap while it
rotated around my test vessel.
2020-12-21 14:14:10 +09:00
Bill Currie
e991c44232 [util] Make a minor improvement to QuatMultVec
Switch from using addition to multiplication for doubling the value.

Also, fix lib/util/test Makemodule to actually work (too much c&p
coding).
2020-12-21 14:13:57 +09:00
Bill Currie
4a8818f0b6 [qfcc] Clean up some excess includes 2020-08-17 14:36:08 +09:00
Bill Currie
550b9c3bb2 [qfcc] Fix silent make rules flex and bison 2020-08-17 14:35:20 +09:00
Bill Currie
62c20aa4ab [ruamoko] Fix incorrect clearing of dtables
The problem was caused by passing the index into the dtables array to
dtable_get which expects a handle. A handle is the ones-compliment
negative of the index which means that handle 0 is invalid (but 0 was
being passed... oops). Fixes the segfault when qw-client-x11 connects to
a server.
2020-08-17 13:58:35 +09:00
Bill Currie
3413947e0c [qfmap] Update script.py from io_object_mu
While not necessary for qf (at this stage), this brings in support for
optionally not parsing strings and better utf-8 and wide char handling.
2020-07-17 20:11:44 +09:00
Bill Currie
900728169e [build] Support silent rules for sed 2020-07-17 01:20:02 +09:00
Bill Currie
91ff15ca7c [vulkan] Correct some plist errors in the renderpass
Typos and incorrect attachment array reference.
2020-07-17 00:33:00 +09:00
Bill Currie
f4c8d341e1 [vulkan] Implement most of the parser
This gets renderpass parsing almost working (not hooked up, though). The
missing bits are support for expressions for flags (namely support for
the | operator) and references (eg $swapchain.format). However, this
shows that the basic concept for the parser is working.
2020-07-17 00:29:53 +09:00
Bill Currie
8184c546db [vulkan] Fix dereference for non-pointer aliases
Fixes breakage for uint32_t for array/single handling.
2020-07-17 00:24:41 +09:00
Bill Currie
9f4f63796b [util] Fix some unitialized vars
Not sure how they got past gcc. Maybe a bug in 9.3.0?
2020-07-17 00:23:09 +09:00
Bill Currie
2b23e01d9a [util] Make PL_Type and PL_Line const-correct 2020-07-17 00:22:47 +09:00
Bill Currie
16c6818612 [util] Set parsed array size correctly
The array has to be allocated using byte elements and thus the size of
the array is the number of bytes, but it needs to be the actual number
of elements in the array. Problem caused by not knowing the actual type
(and C not having type variables anyway).
2020-07-16 22:14:19 +09:00
Bill Currie
26cd93f788 [util] Expose PL_Message
It's far to useful elsewhere.
2020-07-16 22:14:19 +09:00
Bill Currie
ef33adac56 [util] Make PL_String const correct 2020-07-16 22:14:19 +09:00
Bill Currie
72f583f16f [util] Fix some plist object parsing errors
Forgot to break after finding the field when parsing a dictionary
object, and use the correct parser for array objects.
2020-07-16 22:14:19 +09:00
Bill Currie
8290e3800f [qwaq] Ensure main thread return code gets returned
Needed for catching vkgen errors during the build.
2020-07-16 22:14:19 +09:00
Bill Currie
79177e96e8 [vulkan] Start work on scripted pipeline
Nothing is actually done yet other than parsing the built-in property
list to property list items (the actual parser is just a skeleton), but
everything compiles
2020-07-16 22:14:19 +09:00
Bill Currie
c6a8829a52 [util] Add code to parse a plist array to an array 2020-07-14 12:05:34 +09:00
Bill Currie
0945f30731 [vulkan] Use a property list to drive code gen
The property list specifies the base structures for which parser code
will be generated (along with any structures and enums upon which those
structures depend). It also defines option specialized parsers for
better control.
2020-07-05 16:53:35 +09:00
Bill Currie
7a478b4ce7 [libr] Make PLItem more useful
I can't say that I like what's there even now, but at least PLItem can
be used without a lot of casting. Really, Ruamoko needs dictionary and
string classes so reading a property list can build more natural object
trees rather than this mess from when I knew too little.
2020-07-05 16:53:35 +09:00
Bill Currie
f544a6f0b0 [qfcc] Treat null method return type as id
This prevents a segfault when the method's return type is undefined.
2020-07-05 16:53:35 +09:00
Bill Currie
e4ee5c70e0 [vulkan] Rework vkgen alias handling
This is much cleaner and now that all the types are there properly,
doing a parser generator should be easier.
2020-07-05 16:53:35 +09:00
Bill Currie
1914fa2756 [qwaq] Use full file path for file search
Fixes the memory leak (over 300 editors...)
2020-07-05 16:53:35 +09:00
Bill Currie
225ee0ed3c [qwaq] Use an actual condition variable for control
I think I wasn't sure at the time whether the simple variable was
required for pthread_cond_wait (and friends) to work properly, but it
is: the time between the target posting the debug event and the target
waiting on the condition variable turns out to sometimes be enough for
the debugger to handle the event and signal the target to continue,
resulting in the target waiting on a signal that will never come because
another debug event will not be sent by the target until AFTER it has
exited from the debug handler.
2020-07-05 16:53:35 +09:00
Bill Currie
1910941426 [qwaq] Handle key events differently when running
Pressing F8 (or n) while the debug target was running would cause it to
stop at that point. While it's certainly desirable to stop a runaway
target on demand, that should be with a different input. Now, commands
that start the target running are ignored while the target is running.
No commands for when the target is running have been implemented yet,
but the provision is there.
2020-07-05 16:53:35 +09:00
Bill Currie
98795bf604 [gamecode] Add a comment about returning temp strings 2020-07-05 16:53:35 +09:00
Bill Currie
64100efe78 [qwaq] Fix a typo 2020-07-05 16:53:35 +09:00
Bill Currie
2ca9f80d56 [vulkan] Split up vkgen
It worked as a proof of concept, but as the code itself needs to be a
bit smarter, it would be a lot smarter to break up that code to make it
easier to work on the individual parts.
2020-07-05 16:53:35 +09:00
Bill Currie
8bd5f4f201 [util] Add code to parse a dictionary to a struct
PL_ParseDictionary itself does only one level, but it takes care of the
key-field mappings and property list item type checking leaving the
actual parsing to a helper specified by the field. That helper is free
to call PL_ParseDictionary recursively.
2020-07-05 16:53:35 +09:00
Bill Currie
f6ea9e4d87 [util] Store source line in plist items
The first line of the parsed item is stored and can be retrieved using
PL_Line. Line numbers not stored for dictionary keys yet. Will be 0 for
any items generated by code rather than parsed from a file or string.
2020-07-01 21:47:09 +09:00
Bill Currie
12a35f3912 [build] Put that ar warning to rest 2020-06-28 23:32:38 +09:00
Bill Currie
cf3262991d [vulkan] Add a tool for making vulkan enum tables
The tables are generated from the enums pulled out of the vulkan headers
using a ruamoko program (thanks to its reflection capabilities). They
will be used for parsing property lists used to create render passes and
pipelines.
2020-06-28 19:08:18 +09:00
Bill Currie
6d4e370a25 [ruamoko] Handle 0-length @va_list for va_copy
Fixes a progs crash when using vsprintf with no format elements +
params.
2020-06-28 18:48:38 +09:00
Bill Currie
7f96b0fbed [qwaq] Fix incorrect setting of progs argc/argv 2020-06-28 18:30:01 +09:00
Bill Currie
19c75f5e49 [vulkan] Clean up QFV_CreateFramebuffer's prototype
It now takes qfv_imageviewset_t instead of separate count and
VkImageView array.
2020-06-28 13:53:11 +09:00
Bill Currie
aa8aaaaca9 [build] Support silent rules for qfcc 2020-06-26 10:52:06 +09:00
Bill Currie
ed42557dd1 [qfcc] Reset flowvars for aliased global variables
When a global variable is accessed via only an alias in a function the
actual def's flowvar would remain in the state it was from the last
function that accessed the global normally. This would result in invalid
flowvar accesses which can be difficult to reproduce (thus no test
case).
2020-06-25 22:45:12 +09:00
Bill Currie
8f2bc18a4f [build] Fix a merge error
Messed up the vulkan headers.
2020-06-25 19:51:40 +09:00
Bill Currie
c2559c7511 [qwaq] PR_RunPostLoadFuncs for qwaq-x11
Same issue as for the menus. But now I know why PR_LoadProgsFile is used
instead of PR_LoadProgs (at least for qwaq): avoidance of the gamedir
restriction (however, the menus are supposed to be restricted).
2020-06-25 19:38:33 +09:00
Bill Currie
c1ffb05b87 Remove dead Makefile.am
Forgot this in the merge.
2020-06-25 16:14:39 +09:00
Bill Currie
86b5b30b45 Merge branch 'master' into vulkan 2020-06-25 14:03:52 +09:00
Bill Currie
6d5ffa9f8e [build] Move to non-recursive make
There's still some cleanup to do, but everything seems to be working
nicely: `make -j` works, `make distcheck` passes. There is probably
plenty of bitrot in the package directories (RPM, debian), though.

The vc project files have been removed since those versions are way out
of date and quakeforge is pretty much dependent on gcc now anyway.

Most of the old Makefile.am files  are now Makemodule.am.  This should
allow for new Makefile.am files that allow local building (to be added
on an as-needed bases).  The current remaining Makefile.am files are for
standalone sub-projects.a

The installable bins are currently built in the top-level build
directory. This may change if the clutter gets to be too much.

While this does make a noticeable difference in build times, the main
reason for the switch was to take care of the growing dependency issues:
now it's possible to build tools for code generation (eg, using qfcc and
ruamoko programs for code-gen).
2020-06-25 11:35:37 +09:00
Bill Currie
df89e37afc [console] Call PR_RunPostLoadFuncs
This fixes the segfault when loading the menu progs. I had forgotten
that the menu code doesn't use PR_LoadProgs (I don't remember why.
Obsolete reason?).
2020-06-24 22:47:12 +09:00
Bill Currie
7ae047654b [util] Rework SEB affine/convex testing
When I ported SEB to python, I discovered that I apparently didn't
really understand the paper's description of the end condition and the
usage of the affine and convex sets for center testing. This cleans up
the test and makes SEB more correct for the cases that have less than 4
supporting points (especially when there are less than 4 points total).
2020-06-21 17:07:54 +09:00
Bill Currie
7c922d2320 Update the blender map editor for 2.80+ 2020-04-15 11:22:07 +09:00
Bill Currie
54f2e417dc [ruamoko] Fix daft str_str abi
Returning a string was a bad idea as it makes str_str difficult to use
with str_mid. (actually, iirc, it was the only reason I moved all
strings into progs memory... hmm).
2020-04-08 21:54:41 +09:00