Commit graph

13306 commits

Author SHA1 Message Date
Bill Currie
3da7ca4421 [qfcc] Support qc function local variables
This had gotten completely lost in the rework.
2023-02-14 12:45:04 +09:00
Bill Currie
3a297c70b3 [qfcc] Handle qc function field parameters
The type system rewrite had lost some of the checks for function fields.
This puts the actual code in the one place and covers parameters as well
as globals.
2023-02-14 12:45:04 +09:00
Bill Currie
fa97074aff [qfcc] Update vector constant folding checks
Internally, * is not really a valid operator for vectors since it can
have many meanings. This didn't cause trouble until trying to build
everything in game-source (since there's still a lot of legacy code in
there).
2023-02-14 12:45:04 +09:00
Bill Currie
b7ad02c71d [qfcc] Use float for v6 comparisons
While simple types used floats, functions, vectors and entities used
ints. This doesn't go so well when compiling for v6 progs.
2023-02-14 12:45:04 +09:00
Bill Currie
67eb38173b [qfcc] Back out incorrect precedence check changes
The precedence check changes done in
63795e790b seem to have been incorrect
(game-source/ctf produced many false positives), so putting that check
against '=' back into the code seems like a good idea (no more false
positives). That sounds a bit cargo-cult, but I'm really not sure what I
was thinking when I did the changes (probably just tired).
2023-02-14 12:45:04 +09:00
Bill Currie
a2b5ebde65 [qfcc] Treat parameter shadowing as an error
This applies only to the top-level scope of the function. I'm not sure
if it's right for traditional quakec code, but that can be adjusted
easily enough.
2023-02-14 12:45:04 +09:00
Bill Currie
bc2204d446 [qfcc] Differentiate symtabs by intended use
The symtab code itself cares only about global/not global for the size
of the hash table, but other code can use the symtab type for various
checks (eg, parameter shadowing).
2023-02-14 12:45:04 +09:00
Bill Currie
65e15c2dd0 [cexpr] Keep track of unidentified symbol names
At least with a push-parser, by the time the parser has figured out it
has an identifier, the lexer has forgotten the token, thus the annoying
and uninformative "undefined identifier " error messages. Since
identifiers should always have a value (and functions need a function
type), setting up a dummy symbol with just the identifier name
duplicated seems to do the trick. It is a bit wasteful of memory if
there are a lot of such errors between cmem resets, though.
2023-02-14 12:45:04 +09:00
Bill Currie
cb99c4d907 [cexpr] Support casts from plist to vector
This makes specifying colors in the vulkan parser a lot easier.
2023-02-14 12:45:04 +09:00
Bill Currie
9706d2d9ce [plist] Fix a typo in a comment 2023-02-14 12:45:04 +09:00
Bill Currie
d5b93c20b3 [plist] Pass array index/label to the parse function
I ran into the need to get at the label of labeled array element and the
best way seemed to be by setting the name field of the plfield_t item
passed to the parser function, and then found that PL_ParseSymtab
already does this. I then decided passing the array index would also be
good, and the offset field made sense.
2023-02-14 12:45:04 +09:00
Bill Currie
35df90cb3f [ruamoko] Add qfot_basic_t to qfot_type_t
qfot_basic_t is necessary for getting at the width of basic value types
(int, uint, float, long, ulong, double) in order to distinguish between
scalars and vectors of those types.

I had forgotten this when doing the Ruamoko VM and qfcc changes.
2023-02-14 12:45:04 +09:00
Bill Currie
fc7c96d208 [qfcc] Support C's full type system
Along with QuakeC's, of course. This fixes type typeredef2 test (a lot
of work for one little syntax error). Unfortunately, it came at the cost
of requiring `>>` in front of state expressions on C-style functions
(QuakeC-style functions are unaffected). Also, there are now two
shift/reduce conflicts with structs and unions (but these same conflicts
are in gcc 3.4).

This has highlighted the need for having the equivalent of the
expression tree for the declaration system as there are now several
hacks to deal with the separation of types and declarators. But that's a
job for another week.

The grammar constructs for declarations come from gcc 3.4's parser (I
think it's the last version of gcc that used bison. Also, 3.4 is still
GPL 2, so no chance of an issue there).
2023-02-14 12:45:04 +09:00
Bill Currie
02432311c5 [qfcc] Add a function to print the source line
It's not used anywhere, but it saves me a lot of grief when debugging.
2023-02-14 12:45:04 +09:00
Bill Currie
35f4f2e692 [qfcc] Move basic specifier creation into qc-lex
This simplifies type type_specifier rule significantly as now TYPE_SPEC
(was TYPE) includes all types and their basic modifiers (long, short,
signed, unsigned). This should allow me to make the type system closer
to gcc's (as of 3.4 as that seems to be the last version that used a
bison parser) and thus fix typeredef2.
2023-02-14 12:45:04 +09:00
Bill Currie
5f22a322df [qfcc] Allow redefined typedefs if the same type
This fixes typeredef1, and will allow typeredef2 to pass once the
grammar is sorted out.
2023-02-14 12:45:04 +09:00
Bill Currie
e974e9d758 [qfcc] Add some failing typedef redef tests
typeredef1 parses properly but fails due to it erroneously complaining
that foo is redeclared as a different kind of object (it's the same
kind).

typeredef2 is the real problem in that it's a syntax error when it
should not be. This has proven to be a show-stopper for development on
my laptop as it has very recent vulkan headers which have such a
duplicate typedef.
2023-02-14 12:45:04 +09:00
Bill Currie
99d32d5e54 [client] Add a comment on light attenuation
Saves me having to look in the shader every time.
2023-02-14 12:45:04 +09:00
Bill Currie
2a28b342ee Merge branch 'wip-twod' 2023-01-22 10:15:56 +09:00
Bill Currie
a561558748 [console] Switch to using a canvas for the console
While the console background is broken in that alpha doesn't work, it's
now rendered correctly in all renderers.
2023-01-22 03:45:50 +09:00
Bill Currie
89afcfcb6d [ui] Add a lateupdate component to canvas
Like update, the function takes just a view, but is useful for updates
that need to run after the other components are run.
2023-01-22 03:43:58 +09:00
Bill Currie
158c45d120 [vulkan] Correct calculation of conback position
The problem with setting con_size to 0.5 and con_speed to 0 is it's
difficult to tell when the console positioning is backwards.
2023-01-22 03:28:32 +09:00
Bill Currie
254fcff8ff [ecs] Find correct correct sub-pool range
Returning -1 for key > value doesn't work too well for bsearch.
2023-01-22 01:04:23 +09:00
Bill Currie
bc041d6291 [vulkan] Zero draw's frame structs
Some of the queues start don't get fully initialized, but rather than go
through everything making sure they do, it's just easier to zero the
whole lot at the beginning.
2023-01-21 16:35:21 +09:00
Bill Currie
d10cfb348e [client] Ensure status char buffers are cleared
Fixes uninitialized values when hud_pl is enabled for overkill in qw (pl
is never updated, so it never gets set).
2023-01-21 16:33:45 +09:00
Bill Currie
3d52caadec [ecs] Avoid shuffling components in empty ranges
When bubbling a component past an empty range, there's no need for any
actual movement other than adjusting the range itself, and doing so
corrupts the sparse/dense array relationship. Fixes a segfault when
hiding the deathmatch overlay (that resulted from the change to using
canvases).
2023-01-21 13:58:43 +09:00
Bill Currie
03e867f0f8 [ui] Remove some extra debug outlines
Forcing hidden views and doing the outlines for the screen canvas were
part of sorting out weirdnesses with canvases and component sub-pools.
2023-01-21 11:20:09 +09:00
Bill Currie
3c8f02c655 [client] Switch to using canvases for screen and hud
Canvases provide layered rendering as for each canvas all components are
rendered in turn.
2023-01-21 03:43:18 +09:00
Bill Currie
f0fab885d4 [ui] Get canvas into a usable state
Canvas_SortComponentPool now takes the raw canvas component id as it is
specialized to the canvas subpools.

Canvas_SetLen resizes the root view and then updates the hierarchy for
every canvas in the system.

Canvas_InitSys sets up the component system with the systems it needs
(canvas, view, text). This is required to ensure view_href is just past
the canvas components as it is needed for retrieving the actual canvas
component (and thus sub-pool range ids) from arbitrary views in the
canvas.

Entities are fetched with the correct offset from the pool entities.
2023-01-21 03:26:02 +09:00
Bill Currie
9384442834 [ecs] Remove a debug print 2023-01-21 03:14:27 +09:00
Bill Currie
4949f52b58 [console] Move gib hud control into hud
I don't know why it was ever in console.
2023-01-21 02:57:05 +09:00
Bill Currie
1c368724e8 [gib] Fix an struct forward declaration 2023-01-21 02:30:26 +09:00
Bill Currie
32cead5f88 [ui] Add a function to create a new canvas entity
The entity has only a canvas component and (root) view component
attached. The plan is to use it for screen-space canvases.
2023-01-20 15:57:29 +09:00
Bill Currie
873d400766 [scene] Remove scene_resources_t struct
It was made unnecessary by the ECS changes.
2023-01-20 15:53:51 +09:00
Bill Currie
68c7003991 [console] Separate loading and initialization
This will make it easy for client code to set up data needed by the
console before the console initializes. It already separates console
cvar setup and initialization, which has generally been a good thing.
2023-01-20 13:27:17 +09:00
Bill Currie
06fdef52e8 Clean up some unneeded console.h includes 2023-01-20 12:59:45 +09:00
Bill Currie
ae0b781818 [vulkan] Implement water warp
The separated output pass made the implementation very easy, as did
having most of the parts already in place.
2023-01-19 23:05:06 +09:00
Bill Currie
d7b1fceb12 [vulkan] Remove a dead FIXME
The flashing pink around the Q menu cursor was caused by vulkan command
buffer writes and draw queue population being out of phase, which was
fixed by the recent screen update changes (specifically,
42441e87d4).
2023-01-19 21:36:03 +09:00
Bill Currie
cdc5f8a912 [vulkan] Get line rendering working again
Rather important for debugging 2d stuff (draw's lines are 2d-only).
Other than translucent console, this gets the vulkan draw api back to
full operation.
2023-01-19 21:29:39 +09:00
Bill Currie
b91a76cbcc [vulkan] Get Draw_TextBox working again
This needed either more font ids to be supported, or small lump pics (up
to 32 x 32) to be loaded into the atlas. I went with both. The menus
don't use Draw_TextBox, but quakeworld's netgraph does.
2023-01-19 17:56:37 +09:00
Bill Currie
91adb6ad6c [console] Go back to using Draw_ConsoleBackground
Using Draw_FitPic was for testing.
2023-01-19 17:35:30 +09:00
Bill Currie
e332164329 [vulkan] Implement fitted pic rendering
This makes use of slice rendering to achieve the effective scaling, but
the slice data is created only when needed so pics that never use slices
don't waste 16 vertices.
2023-01-19 17:18:51 +09:00
Bill Currie
7785eebe4c [vulkan] Clean up some unnecessary interface functions
Not all the empty stubs have been removed as the core model and skin
code still needs to be cleaned up.
2023-01-19 12:58:02 +09:00
Bill Currie
9349a739db [renderer] Run particle update in renderer update
This has little effect on sw/gl/glsl, but makes it so the particle
system isn't run on the CPU (redundantly) for vulkan.
2023-01-19 12:39:26 +09:00
Bill Currie
42441e87d4 [vulkan] Create a vulkan-specific UpdateScreen
The goal is to get vulkan relying on the "renderpass" abstraction, but
this gets vulkan up and running again, and even fixes the rendering
issues (in the end, getting canvas working wasn't required, but is still
planned).
2023-01-19 11:33:49 +09:00
Bill Currie
93e5c84a20 [gui] Link against freetype and harfbuzz
Ran into the issue while testing the screen update change ("release"
build couldn't run due to broken plugins).
2023-01-19 11:11:05 +09:00
Bill Currie
07d5749a4e [renderer] Make the core of SCR_UpdateScreen dynamic
This is a bit of a hack to allow me to work on vulkan's screen update
"pipeline" without having to mess with the other renderers, since it
turns out they're (currently) fundamentally incompatible.
2023-01-19 11:10:48 +09:00
Bill Currie
d2467f1424 [vulkan] Use dynamic descriptors for dynamic verts
When a pic needs dynamic vertices (eg, for sub-pics), a descriptor set
is allocated and updated if one has not been created for the pic. This
is done each frame: the descriptor sets are recycled (there currently is
rarely a need for more than a small handful of dynamic descriptors, so
64 should be plenty for now).

Unfortunately, due to the order of operations issue between draw items
getting queued and submitting commands to vulkan (the cause of the pics
not rendering correctly per 8fff71ed4b),
the validation layers complain (correctly) about the command buffers
being executed with updated descriptor sets. Getting the canvas system
up and running will fix that.
2023-01-17 20:49:22 +09:00
Bill Currie
4e1ddaa964 [renderer] Add fitted pic rendering
The pic is scaled to fill the specified rect (then clipped to the
screen (effectively)). Done just for the console background for now, but
it will be used for slice-pics as well.

Not implemented for vulkan yet as I'm still thinking about the
descriptor management needed for the instanced rendering.

Making the conback rendering conditional gave an approximately 3% speed
boost to glsl with the GL stub (~12200fps to ~12550fps), for either
conback render method.
2023-01-17 11:33:47 +09:00
Bill Currie
96c82106f9 [sw] Remove hand loop unrolling from pic and conback
GCC has done a better job for about twenty years. Readability for the
win :).
2023-01-17 11:31:46 +09:00