Commit Graph

1453 Commits

Author SHA1 Message Date
Hans-Kristian Arntzen
ecc94ccd1a Merge branch 'legacy-color-4comp' of git://github.com/crosire/SPIRV-Cross 2018-09-12 09:37:40 +02:00
crosire
3d39652853 Add tests for previous fix 2018-09-11 20:57:56 +02:00
crosire
0cdfbe490b Fix invalid code generation for shader model 3 when fragment shader output is not a four-component vector 2018-09-11 20:29:24 +02:00
crosire
f6ce7a9b92 Add user-specific Visual Studio files to gitignore 2018-09-11 20:28:11 +02:00
Hans-Kristian Arntzen
403011e973
Merge pull request #684 from cdavis5e/msl-builtin-vector-cast
MSL: Cast uses of builtin vectors to their declared SPIR-V type.
2018-09-11 19:59:58 +02:00
Chip Davis
6757ef8512 Use bitcast_to_builtin_load() instead of hacking to_expression().
This only affects the builtin when it is used, and not when it's passed
to a function. It's a lot cleaner than the way I was doing it before.

Remove the `to_expression()` hack.
2018-09-11 11:15:17 -05:00
Hans-Kristian Arntzen
af907fe496
Merge pull request #690 from KhronosGroup/bitcast-builtin-compute
GLSL: Bitcast loads from builtin compute variables.
2018-09-11 10:05:41 +02:00
Hans-Kristian Arntzen
32a0d05e05 Bitcast loads from builtin compute variables. 2018-09-11 09:43:28 +02:00
Chip Davis
acb3fac747 Opt for a simple value cast in lieu of a bitcast. 2018-09-10 14:05:36 -05:00
Hans-Kristian Arntzen
c04d9e5c0e
Merge pull request #688 from KhronosGroup/fix-682
Support Component decoration in GLSL.
2018-09-10 12:36:57 +02:00
Hans-Kristian Arntzen
63f6466065 Support Component decoration in GLSL. 2018-09-10 12:13:26 +02:00
Hans-Kristian Arntzen
7a32167d63
Merge pull request #687 from KhronosGroup/fix-683
Add a helper function to improve reflection on runtime sized arrays.
2018-09-10 11:51:40 +02:00
Hans-Kristian Arntzen
e86018f8a1 Add a helper function to improve reflection on runtime sized arrays. 2018-09-10 11:08:47 +02:00
Hans-Kristian Arntzen
6ca16b2a5e
Merge pull request #686 from KhronosGroup/fix-685
Fix composite array declarations in MSL.
2018-09-10 10:45:36 +02:00
Hans-Kristian Arntzen
af672b7a4b Add composite array test shaders for GLSL and HLSL as well. 2018-09-10 10:21:08 +02:00
Hans-Kristian Arntzen
57a15dfb0c Run format_all.sh. 2018-09-10 10:08:02 +02:00
Hans-Kristian Arntzen
aa17a02efb Add test shader for composite array initialization. 2018-09-10 10:05:00 +02:00
Hans-Kristian Arntzen
b114889102 Only declare typed initializer list for non-array types.
Also, cleanup now redundant constant_expression virtualization for MSL.
2018-09-10 10:04:17 +02:00
Chip Davis
f7dad9da66 MSL: Cast uses of builtin vectors to their declared SPIR-V type.
In SPIR-V, builtin integral vectors can be either signed or unsigned,
but in MSL they're always unsigned. Unfortunately, the MSL spec forbids
implicit conversions between vector types--even if the corresponding
scalar types would implicitly convert. If you try, the result is a
cryptic error message such as:

```
program_source:37:60: error: cannot convert between vector values of different size ('int4' (aka 'vector_int4') and 'vector_uint4' (vector of 4 'unsigned int' values))
            float4 r3 = as_type<float4>((as_type<int4>(r0) * gl_LocalInvocationID.xyyy) + as_type<int4>(r2));
                                         ~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
```

Therefore, uses of these builtins must be explicitly cast, since the
rest of the binary likely assumes that the builtin is of its declared
type.
2018-09-08 21:17:54 -05:00
Hans-Kristian Arntzen
9ffd4172b4
Merge pull request #680 from cdavis5e/msl-varying-components
MSL: Account for components when assigning locations to varyings.
2018-09-07 16:01:53 +02:00
Hans-Kristian Arntzen
228491c093
Merge pull request #681 from KhronosGroup/fix-679
MSL: Do not emit function constants for version < 1.2.
2018-09-07 10:04:40 +02:00
Hans-Kristian Arntzen
652d8263e5 Use correct spirv-cross version when testing MSL 1.1 shaders. 2018-09-07 09:45:25 +02:00
Hans-Kristian Arntzen
32823b0838 MSL: Do not emit function constants for version < 1.2. 2018-09-07 09:33:34 +02:00
Hans-Kristian Arntzen
9572276a95 Add missing reference file. 2018-09-07 09:29:10 +02:00
Chip Davis
4b99fdd5d0 MSL: Account for components when assigning locations to varyings.
Two varyings (vertex outputs/fragment inputs) might have the same
location but be in different components--e.g. the compiler may have
packed what were two different varyings into a single varying vector.
Giving both varyings the same `[[user]]` attribute won't work--it may
yield unexpected results, or flat out fail to link. We could eventually
pack such varyings into a single vector, but that would require us to
handle the case where the varyings are different types--e.g. a `float`
and a `uint` packed into the same vector. For now, it seems most
prudent to give them unique `[[user]]` locations and let Apple's
compiler work out the best way to pack them.
2018-09-06 13:52:33 -05:00
Hans-Kristian Arntzen
8c7282bda1
Merge pull request #677 from cdavis5e/msl-lerp-quals
MSL: Handle interpolation qualifiers.
2018-09-06 19:57:52 +02:00
Chip Davis
674f97a40e Handle interpolation qualifiers on the entire struct, too. 2018-09-06 12:29:42 -05:00
Chip Davis
1e51b235af Add tests showing we don't emit interpolation qualifiers in vertex shaders.
In MSL, these only have an effect on fragment `[[stage_in]]` members.
They have no effect in vertex shaders. The Khronos front end doesn't
even emit the SPIR-V decorations for them.
2018-09-06 12:28:22 -05:00
Chip Davis
dbb98ffd81 Fix formatting. 2018-09-06 09:52:45 -05:00
Chip Davis
9e6469bd40 MSL: Handle interpolation qualifiers. 2018-09-05 12:02:07 -05:00
Hans-Kristian Arntzen
301e5c8076
Merge pull request #676 from cdavis5e/image-write-operand-words
MSL: Correct number of words to skip in OpImageWrite.
2018-09-05 17:44:21 +02:00
Chip Davis
1958438f69 Add optimized reference output for added test case. 2018-09-05 10:15:40 -05:00
Chip Davis
680ef9d773 MSL: Correct number of words to skip in OpImageWrite.
The length field in `Instruction` doesn't include the initial
opcode/length word. We only need to skip three words instead of four.
2018-09-05 10:02:25 -05:00
Hans-Kristian Arntzen
b34d411466
Merge pull request #675 from cdavis5e/buffer-write-coord
MSL: Emit spvTexelBufferCoord() on ImageWrite to a Buffer as well.
2018-09-05 09:17:15 +02:00
Chip Davis
9fbe39c9c0 MSL: Emit spvTexelBufferCoord() on ImageWrite to a Buffer as well.
This is necessary to get the coordinates to give to the texture's
`write()` method.
2018-09-04 12:14:34 -05:00
Hans-Kristian Arntzen
917ca818ed
Merge pull request #673 from cdavis5e/min-max-clamp
MSL: Emit F{Min,Max,Clamp} as fast:: and N{Min,Max,Clamp} as precise::.
2018-09-04 15:15:18 +02:00
Chip Davis
b76a330baf Update a bunch of test cases that I missed. 2018-09-03 17:31:15 -05:00
Chip Davis
65f3565781 Try once again to appease spirv-val. 2018-09-03 10:53:29 -05:00
Chip Davis
6d306108d3 Really fix validation. 2018-09-03 10:32:12 -05:00
Chip Davis
0598aa2712 Hopefully correct test shader so it will validate. 2018-09-03 09:49:48 -05:00
Hans-Kristian Arntzen
93e167eb0f Add some uncommitted reference files. 2018-09-03 12:39:40 +02:00
Hans-Kristian Arntzen
1391cb5827
Merge pull request #674 from KhronosGroup/fix-670
MSL: Implement multisampled array textures.
2018-09-03 12:28:09 +02:00
Hans-Kristian Arntzen
452a65324e Use new macos -std= flag in Metal compiler. 2018-09-03 12:03:14 +02:00
Hans-Kristian Arntzen
ea65ec4ac6 brew update python3 fails on xcode10 image. 2018-09-03 11:15:03 +02:00
Hans-Kristian Arntzen
0c1d4d8b6a MSL: Support texture2d_ms_array. 2018-09-03 11:02:31 +02:00
Hans-Kristian Arntzen
778f998cd2 MSL: Throw error on multisampled array textures. 2018-09-03 10:21:59 +02:00
Chip Davis
27af716c3a MSL: Emit F{Min,Max,Clamp} as fast:: and N{Min,Max,Clamp} as precise::.
This roughly matches their semantics in SPIR-V and MSL. For `FMin`,
`FMax`, and `FClamp`, and the Metal functions `fast::min()`,
`fast::max()`, and `fast::clamp()`, the result is undefined if any
operand is NaN. For the 'N' operations and their corresponding MSL
`precise::` functions, the result is consistent with IEEE 754 (first
non-NaN wins; result is NaN if all operands are NaN).

We can only do this with 32-bit floats, though, because Metal only
provides these variants for `float`. `half` only has one variant of
these functions that is presumably consistent with IEEE 754. I guess
that's OK; the SPIR-V spec only says that `F{Min,Max,Clamp}` are
undefined for NaNs. Performance might suffer, though.
2018-09-01 23:01:46 -05:00
Hans-Kristian Arntzen
6fd66664e8
Merge pull request #672 from cdavis5e/unord-relational-ops
MSL: Support unordered relational operators.
2018-09-01 20:04:37 +02:00
Chip Davis
0829a786d2 Add tests for FUnord comparisons of vectors. 2018-09-01 12:42:07 -05:00
Chip Davis
d3233690cb MSL: Support unordered relational operators.
The SPIR-V spec says that these check if the operands either are
unordered or satisfy the given condition. So that's just what we'll do,
using Metal's `isunordered()` stdlib function. Apple's optimizers ought
to be able to collapse that to a single unordered compare.
2018-08-31 13:54:42 -05:00