Commit Graph

11604 Commits

Author SHA1 Message Date
Bill Currie c8e6f71a30 [renderer] Remove tinst from msurface_t
Its sole purpose was to pass the newly allocated instsurf when chaining
an instance model (ammo box, etc) surface, but using expresion
statements removes the need for such shenanigans, and even makes
msurface_t that little bit smaller (though a separate array would be
much better for cache coherence).

More importantly, the relevant code is actually easier to understand: I
spent way too long working out what tinst was for and why it was never
cleared.
2021-07-13 16:02:47 +09:00
Bill Currie 1078bd9efa [util] Implement Sys_Free for windows
And get the tests so they can (sort of) be run.
2021-07-12 18:55:16 +09:00
Bill Currie 0a847f92f1 [util] Use mmap/munmap for cmem internal alloc/free
This reduces the overhead needed to manage the memory blocks as the
blocks are guaranteed to be page-aligned. Also, the superblock is now
alllocated from within one of the memory blocks it manages. While this
does slightly reduce the available cachelines within the first block (by
one or two depending on 32 vs 64 bit pointers), it removes the need for
an extra memory allocation (probably via malloc) for the superblock.
2021-07-12 16:33:47 +09:00
Bill Currie 12450fe6b8 [vid] Remove redundant direct, conbuffer and conrowbytes 2021-07-11 13:44:00 +09:00
Bill Currie 6db6f8f0e2 [win] Fix a pile of bitrot
Man, those bits rot quickly. Must be stored with a rotfish.
2021-07-11 13:30:52 +09:00
Bill Currie c636f7413d [util] Fix yet another suggested const warning
I keep forgetting to do an optimized build test
2021-07-11 13:29:05 +09:00
Bill Currie 108d2a0746 [qw] Fix an uninitialized var use
Found by valgrind
2021-07-11 12:31:34 +09:00
Bill Currie 6dff00a9da [qw] Move netgraph below the console
Also, make nq draw the vid views (in theory, it loads too fast to see
the loading pic).
2021-07-11 12:05:14 +09:00
Bill Currie edbf4d262a [qw] Make the netgraph scale logarithmic
Full scale is 1s, but now ms timings are visible even with the default
height.
2021-07-11 11:02:37 +09:00
Bill Currie 91eeae5186 [qw] Clean up netgraph somewhat
The renderer's LineGraph now takes a height parameter, and netgraph now
uses cl_* cvars instead of r_* (which never really made sense),
including it's own height cvar (the render graphs still use
r_graphheight).
2021-07-11 10:59:27 +09:00
Bill Currie c4ee7ff68a [qw] Check packet size before checking ping ack
Ping ack (A2A_ACK) is always a 1-byte packet, so check that the A2A_ACK
is the only byte in the packet before passing the packet to the server
list code. Fixes the mysterious dropped packet every 256 packets as the
low eight bits of the packet's sequence number equalled A2A_ACK.
2021-07-11 09:26:05 +09:00
Bill Currie 3c0ad2ca71 [qw] Fix some server status output issues
The uptime display had not been updated for the offset Sys_DoubleTime,
so add Sys_DoubleTimeBase to make it easy to use Sys_DoubleTime as
uptime.

Line up the layout of the client list was not consistent for drop and
qport.
2021-07-11 08:18:02 +09:00
Bill Currie c4cc5b2756 [sw32] Fix the over-tall netgraph lines 2021-07-11 00:12:03 +09:00
Bill Currie a05210d864 [video] Get 16 and 32 bit sw32 mostly working in x11
Lighting on alias models seems to be borked, and skies are borked in
both sw renderers (seems to be nothing to do with this commit, though).
2021-07-11 00:09:41 +09:00
Bill Currie 34dd434147 [qwaq] Fix missing gib library references
Not sure why static builds worked and dynamic didn't, but...
2021-07-10 18:31:22 +09:00
Bill Currie ed606fb670 [render] Fix some incorrect r_data references
The render plugins have made a bit of a mess of getting at the data and
thus it's a tad confusing how to get at it in different places. Really
needs a proper cleanup :(
2021-07-10 18:30:46 +09:00
Bill Currie 755ef524e4 [video] Use views instead of conwidth and conheight
conwidth and conheight have been moved into vid.conview (probably change
the name at some time), and scr_vrect has been replaced by a view as
well. This makes it much easier to create 2d elements that follow the
screen size (taking advantage of a view's gravity) which will, in the
end, make changing the window size easier.
2021-07-10 18:04:34 +09:00
Bill Currie a75c027b7f [ui] Add two view manipulation functions
One moves and resizes the view in one operation as a bit of an
optimization as moving and resizing both update any child views, and
this does only one update.

The other sets the gravity and updates any child views as their
absolute positions would change as well as the updated view's absolute
position.
2021-07-10 17:57:59 +09:00
Bill Currie 4b1eb0d760 [sw] Speed up Draw_FadeScreen
It now processes 4 pixels at a time and uses a bit mask instead of a
conditional to set 3 of the 4 pixels to black. On top of the 4:1 pixel
processing and avoiding inner-loop conditional jumps, gcc unrolls the
loop, so Draw_FadeScreen itself is more than 4x as fast as it was. The
end result is about 5% (3fps) speedup to timedemo demo1 on my 900MHz
EEE Pc when nq has been hacked to always draw the fade-screen.
2021-07-08 14:18:06 +09:00
Bill Currie ef6dd422e5 [qfcc] Add source line number to statement blocks
For statement dot blocks.
2021-07-06 18:06:47 +09:00
Bill Currie f18e1366ba [vulkan] Silence vkgen's debug output
It was hidden by qwaq-curses, but the switch to using qwaq-cmd made it
pretty obvious.
2021-07-06 12:27:21 +09:00
Bill Currie ae58a8ba5d [qwaq] Create a commandline-only version of qwaq
qwaq-curses has its place, but its use for running vkgen was really a
placeholder because I didn't feel like sorting out the different
initialization requirements at the time. qwaq-cmd has the (currently
unnecessary) threading power of qwaq-curses, but doesn't include any UI
stuff and thus doesn't need curses. The work also paves the way for
qwaq-x11 to become a proper engine (though sorting out its init will be
taken care of later).

Fixes #15.
2021-07-06 12:25:24 +09:00
Bill Currie 490cf966f9 [vulkan] Fix compiling on 32-bit systems
Casting between ints and pointers can be awkward.
2021-07-06 11:54:12 +09:00
Bill Currie e81d690b51 [input] Create QF input library using keys.c
This refactors (as such) keys.c so that it no longer depends on console
or gib, and pulls keys out of video targets. The eventual plan is to
move all high-level general input handling into libQFinput, and probably
low-level (eg, /dev/input handling for joysticks etc on Linux).

Fixes #8
2021-07-05 16:26:07 +09:00
Bill Currie ddc6f6bcb0 [qfcc] Un-dereference src expression early for movep
The VM has no pointer to direct reference move instruction.

Fixes #9
2021-06-30 20:05:27 +09:00
Bill Currie 9d140d1d15 [qfcc] Use {>...} for unnamed alias types
The ... is the encoding of the aliased type. Avoids (null) in the
encoding. Fixes #10.
2021-06-30 11:00:05 +09:00
Bill Currie d9e7730d91 [audio] Add a cvar for jack port names
Fixes #2
2021-06-29 20:03:13 +09:00
Bill Currie c554dee0f8 [build] Autoconfiscate simd support
The default is to enable (and autodetect based on lscpu) simd support,
or the mode can be specified via --enable-simd=mode. --disable-simd
disables the support but ensures gcc will still compile the float vector
types.
2021-06-29 15:39:15 +09:00
Bill Currie a3aebc983b [qfcc] Add dependency edges for moved labels
When moving an identifier label from one node to another, the first node
must be evaluated before the second node, which the edge guarantees.
However, code for swapping two variables

    t = a; a = b; b = t;

creates a dependency cycle. The solution is to create a new leaf node
for the source operand of the assignment. This fixes the swap.r test
without pessimizing postop code.

This takes care of the core problem in #3, but there is still room for
improvement in that the load/store can be combined into a move.
2021-06-29 14:42:16 +09:00
Bill Currie 76b3bedb72 [qfcc] Revert "Kill dag leaf nodes on assignment."
This reverts commit 2fcda44ab0.

Killing the node is not the correcgt answer as it blocks many
optimization opportunities. The correct answer is adding edges to
describe the temporal dependencies. Of course, this breaks the swap.r
test.
2021-06-29 12:09:35 +09:00
Bill Currie 5291cfb03d [qfcc] Keep track of reachable dag nodes
In order to correctly handle swap-style code

    { t = a; a = b; b = t; }

edges need to be created for each of the assignments moving an
identifier lable, but the dag must remain acyclic (the above example
wants to create a cycle). Having the reachable nodes recorded makes
checking for potential loops a quick operation.
2021-06-29 09:41:03 +09:00
Bill Currie 0d1fad12f0 [qfcc] Add some comments 2021-06-29 09:12:57 +09:00
Bill Currie d50f2c3145 [qfcc] Correctly check for constant op
Identifiers can be constants. I don't remember quite what it fixed other
than some bogus kill relations in the dags (which might have caused
issues later).
2021-06-28 20:25:26 +09:00
Bill Currie 38a6ccdc85 [qfcc] Use indexed initializers for expr functions
This will make adding new expression types easier (though the current
reason for doing so has been abandoned for now).
2021-06-28 18:12:15 +09:00
Bill Currie 365e298908 [qfcc] Make internal_error const correct
This way it can be used with const expr objects.
2021-06-28 18:12:15 +09:00
Bill Currie d865095d0b [gamecode] Check for nil entity
Fixes a segfault when disassembling progs.dat files that access entity
fields as the accessed entity will generally be nil.
2021-06-28 18:12:15 +09:00
Bill Currie 139a6aee87
Merge pull request #17 from ionenwks/noexecstack
Add GNU-stack notes to assembly files
2021-06-28 10:16:46 +09:00
Bill Currie 789ef6be63
Merge pull request #18 from digitall/avx-fix
[simd] fix build when avx2 is not available, but avx is.
2021-06-28 10:12:32 +09:00
Bill Currie f8ffb12713 [audio] Clean up jack and alsa dependencies
I had forgotten to test with shared libs and it turns out jack and alsa
were directly accessing symbols in the renderer (and in jack's case,
linking in a duplicate of the renderer).

Fixes #16.
2021-06-27 01:57:59 +09:00
Bill Currie 0be609e0fd [util] Make PI_LoadPlugin always call general init function
As the root cause for #16 was something else, this fixes only the basic
cvar initialization, but does fix #19 (for now, at least).
2021-06-26 16:18:05 +09:00
Bill Currie a66e6ad262 [sudio] Fix the SDL audio target
I forgot about SDL in my testing for #16. I do still need to fix the
windows targets.
2021-06-26 14:25:02 +09:00
Bill Currie 53a7fbfe95 [audio] Move jack from renderer to targets
The JACK Audio Connection Kit support is now just an output target
rather than a full duplicate of the renderer (in pull mode). This is
what I wanted to to back when I first added jack support, but I needed
to get the renderer working asynchronously without affecting any of the
other outputs.

Fixes #16.
2021-06-25 18:32:48 +09:00
Bill Currie a1a89bdb7e [audio] Clean up a few minor style issues 2021-06-25 16:52:09 +09:00
Bill Currie 580464d6be [audio] Disable extra update for pull targets
This fixes a segfault that snuck in due to testsound not using
S_ExgraUpdate.
2021-06-25 14:24:24 +09:00
Bill Currie 02ff875cd6 [audio] Add optional on_update output function
on_update is for pull-model outpput targets to do periodic synchronous
checks (eg, checking that the connection to the actual output device is
still alive and reviving it if necessary)
2021-06-25 13:52:50 +09:00
Bill Currie db7e99d842 [audio] Allow output plugins to specify model
Output plugins can use either a push model (synchronous) or a pull
model (asynchronous). The ALSA plugin now uses the pull model. This
paves the way for making jack output a simple output plugin rather than
the combined render/output plugin it currently is (for #16) as now
snd_dma works with both models.
2021-06-25 11:41:42 +09:00
Bill Currie 79825db539 [audio] Clean up alsa init and add error checking
This gets the alsa target working nicely for mmapped outout. I'm not
certain, but I think it will even deal with NPOT buffer sizes (I copied
the code from libasound's sample pcm.c, thus the uncertainty).
Non-mmapped output isn't supported yet, but the alsa target now works
nicely for pull rendering.

However, some work still needs to be done for recovery failure: either
disable the sound system, or restart the driver entirely (preferable).
2021-06-25 09:50:31 +09:00
Bill Currie ec66db399e [audio] Fix broken cd plugin struct
The plugin struct cleanup accidentaly added unwanted fields to the cd
plugin functions.
2021-06-24 16:34:47 +09:00
Bill Currie 54bc7a83ba [audio] Fix missed compile issues
Due to not having wildmidi on my eeepc.
2021-06-24 00:14:33 +09:00
Bill Currie fc907e232f [audio] Rework alsa to use a pull model
This brings the alsa driver in line with the jack render (progress
towards #16), but breaks most of the other drivers (for now: one step at
a time). The idea is that once the pull model is working for at least
one other target, the jack renderer can become just another target like
it should have been in the first place (but I needed to get the pull
model working first, then forgot about it).

Correct state checking is not done yet, but testsound does produce what
seems to be fairly good sound when it starts up correctly (part of the
state checking (or lack thereof), I imagine).
2021-06-24 00:08:05 +09:00