Commit graph

14 commits

Author SHA1 Message Date
Bill Currie
1d0135be52 [qfcc] Support nil in matrix construction
While not used by glsl, ruamoko will and qfcc does internally.
2025-01-09 17:48:39 +09:00
Bill Currie
ae0cfe47cc [qfcc] Dereference constructor parameters
Sometimes, premature optimization can help, but whatever. Finally,
alias.vert compiles, but the output is fairly broken (incorrect handling
of `return` and the parameters aren't initialized).
2024-12-11 23:22:28 +09:00
Bill Currie
36c0b45bab [qfcc] Add an @construct type function
I decided to not mess with actual casts. In retrospect, this is probably
for the best as it avoids any bit-cast conflicts, but should allow for
block initializers with a few tweaks. `@construct (type, args...)` in
Ruamoko follows the same path as `type(args...)` in glsl.
2024-12-11 13:54:11 +09:00
Bill Currie
bc1b9893a7 [qfcc] Fix vector constructions from scalars
Yet another bit of is_vector/is_nonscalar confusion.
2024-12-05 16:11:59 +09:00
Bill Currie
277c5a2318 [qfcc] Optimize matrix construction from a matrix
If the source matrix has at least as many rows as the new matrix, then
the columns are taken from the columns (possibly shortened via swizzle).
2024-12-05 11:45:01 +09:00
Bill Currie
ad45715359 [qfcc] Clean up duplicated vector list construction
I wound up with a few too many copies for my liking.
2024-12-05 11:13:08 +09:00
Bill Currie
81aa77b142 [qfcc] Optimize matrix construction from vectors
When the number of supplied vectors matches the number of columns in the
matrix and all vectors have the same width as the number of rows in the
matrix, there's no need to expand the vectors into components only to be
gathered again.
2024-12-05 10:31:32 +09:00
Bill Currie
14e39627cc [qfcc] Construct matrices by vectors
SPIR-V requires that matrices are constructed from vectors rather than
individual components. While not optimal, iqm.vert's output now passes
spirv-val. Also probably still lots wrong with fine details.
2024-12-05 10:03:01 +09:00
Bill Currie
c185d2463b [qfcc] Support matrices in spirv output
With a few more fixes, iqm.vert builds nicely.
2024-12-05 00:26:07 +09:00
Bill Currie
a4eefa6204 [qfcc] Implement matrix construction for constants
Non-constant matrices are not implemented yet, and it turns out
vector-matrix multiplication produces incorrect vector types (for
vec4*mat3x4)
2024-11-25 12:39:14 +09:00
Bill Currie
39514e4f3d [qfcc] Implement swizzle and arrays for spir-v
Arrays done via the field code since they use the same opcode and logic.
For now swizzles are just swizzles and don't support zeroing or negating
(but doing one or the other (not both) should be easy).
2024-11-18 12:29:25 +09:00
Bill Currie
22794caf11 [qfcc] Support vector value expressions for spir-v
It seems constant initializers are different from constants in an
expression.
2024-11-16 18:54:31 +09:00
Bill Currie
d46620fcf4 [qfcc] Add declaration expressions
Now declarations can be deferred too, thus things like generic/template
and inline functions should be possible. However, the most important
thing is this is a step towards a cleaner middle layer for compilation,
separating front-end language from back-end code-gen.
2024-10-04 11:51:34 +09:00
Bill Currie
ee6e38e2f9 [qfcc] Implement glsl's contructors for math types
I don't think this includes bools yet, and matrices aren't supported
yet, but float vectors work quite nicely.
2024-08-30 13:54:33 +09:00