Commit Graph

1638 Commits

Author SHA1 Message Date
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
Hans-Kristian Arntzen
e14bf77b1a
Merge pull request #668 from cdavis5e/shader-draw-parameters
Support the shader_draw_parameters extension.
2018-08-30 15:15:53 +02:00
Chip Davis
94f33dc566 Fix MSL shader_draw_parameters reference output. 2018-08-29 14:17:11 -05:00
Chip Davis
348aecc59f Remove extra newline.
vim doesn't display the newline terminating a file, because every file
is supposed to have one. Travis does. That threw me off.
2018-08-29 14:04:20 -05:00
Chip Davis
e00e5b3b2c Appease tests that check for exact matches and not equivalent semantics. 2018-08-29 13:53:12 -05:00
Chip Davis
d63751a5a3 Really fix shader_draw_parameters tests (hopefully for good). 2018-08-29 13:42:09 -05:00
Chip Davis
2de572ac53 Add new tests for GLSL 4.50 shaders. 2018-08-29 13:32:01 -05:00
Chip Davis
84eb889d73 Fix reference output of shader_draw_parameters tests. 2018-08-29 13:31:43 -05:00
Chip Davis
2ee8ebbc62 Throw an exception anytime we try to compile DrawIndex to MSL. 2018-08-29 12:05:33 -05:00
Chip Davis
56a9b73685 Add test cases for SPV_KHR_shader_draw_parameters. 2018-08-29 12:04:29 -05:00
Chip Davis
97d01b6450 Punt on DrawIndex in MSL for now.
Metal doesn't properly support this.
2018-08-29 10:21:42 -05:00
Chip Davis
3dc23615dd Fix formatting. 2018-08-29 10:08:33 -05:00
Chip Davis
fcad019e11 Support the shader_draw_parameters extension. 2018-08-29 10:07:21 -05:00
Hans-Kristian Arntzen
f284acae5f MSL: Add test case for gl_FragDepth when used in function. 2018-08-29 09:21:48 +02:00
Chip Davis
1fd8cd9468 [MSL] Give the FragDepth builtin a type of float. 2018-08-28 13:47:50 -05:00
Hans-Kristian Arntzen
d964117cce
Merge pull request #666 from KhronosGroup/fix-665
MSL: Fix naming issue of aliased global variables.
2018-08-27 10:35:38 +02:00