Commit Graph

3072 Commits

Author SHA1 Message Date
Hans-Kristian Arntzen
f72bb3c6f5 Improve handling of INT_MIN/INT64_MIN literals.
We cannot naively convert these to decimal literals. C/C++ (and thus
MSL) has extremely awkward literal promotion rules.
2021-09-30 16:29:30 +02:00
Hans-Kristian Arntzen
9462b90067
Merge pull request #1752 from billhollings/function-constants-opquantize
MSL: Support synthetic functions in function constants.
2021-09-30 14:06:10 +02:00
Hans-Kristian Arntzen
325f107c5b
Merge pull request #1745 from billhollings/location-component-vecsize
MSL: Track location component to match vecsize between shader stages.
2021-09-30 14:02:25 +02:00
Bill Hollings
ec054dad7f MSL: Support synthetic functions in function constants.
Emit synthetic functions before function constants.
Support use of spvQuantizeToF16() in function constants for numerical
behavior consistency with the op code.
Ensure subnormal results from OpQuantizeToF16 are flushed to zero per SPIR-V spec.

Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
Any MSL reference shader that inclues a synthetic function is affected,
since the location it is emitted has changed.
2021-09-28 19:10:16 -04:00
Hans-Kristian Arntzen
dee35bf3ce
Merge pull request #1749 from billhollings/fastmath-quantize
MSL: Honor infinities in OpQuantizeToF16 when compiling using fast-math.
2021-09-27 13:09:33 +02:00
Bill Hollings
ba66a91402 MSL: Use vec<T, n> in template SpvHalfTypeSelector for function spvQuantizeToF16().
Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
2021-09-25 14:36:42 -04:00
Bill Hollings
a2671e35b0 MSL: Consolidate spvQuantizeToF16() functions into a single template function.
Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
2021-09-24 14:41:15 -04:00
Bill Hollings
5742047b24 MSL: Honor infinities in OpQuantizeToF16 when compiling using fast-math.
Add spvQuantizeToF16() family of synthetic functions to convert
from float to half and back again, and add function attribute
[[clang::optnone]] to honor infinities during conversions.

Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
2021-09-24 11:22:05 -04:00
Hans-Kristian Arntzen
05ac99ae23
Merge pull request #1748 from billhollings/fastmath-nocontraction
MSL: Honor DecorationNoContraction when compiling using fast-math.
2021-09-24 12:17:42 +02:00
Bill Hollings
fb3defc9ef MSL: Honor DecorationNoContraction when compiling using fast-math.
Add [[clang::optnone]] attribute to spvF*() functions used for handling
floating point operations decorated with DecorationNoContraction.

Just using precise::fma() did not work.

Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
2021-09-23 14:37:08 -04:00
Bill Hollings
548a23da34 MSL: Track location component to match vecsize between shader stages.
Matching output/input struct member types between shader stages could fail if
a location is shared between members, each using different components of that
location, because the member vecsize was only stored once for the location.

Add MSLShaderInput::component member.
Use LocationComponentPair to key inputs_by_location, instead of just location.
ensure_correct_input_type() pass component value as well as location.
2021-09-23 09:56:04 -04:00
Hans-Kristian Arntzen
fe1af2ae72
Merge pull request #1747 from KhronosGroup/ci-fix
Fix CI
2021-09-23 13:09:38 +02:00
Hans-Kristian Arntzen
d579444a82
Merge pull request #1744 from billhollings/location-attribute-fix
MSL: Fix location and component variable matching between shader stages.
2021-09-23 12:45:02 +02:00
Hans-Kristian Arntzen
6628e10fc6
Merge pull request #1746 from billhollings/fast-math-per-vulkan
MSL: Selectively enable fast-math in MSL code to match Vulkan CTS results.
2021-09-23 12:37:33 +02:00
Hans-Kristian Arntzen
3ca99bbbcc Remove tests for Ubuntu 16.04.
Github Actions nuked support for 16.04 and all CI runs are failing.
2021-09-23 12:33:46 +02:00
Hans-Kristian Arntzen
0f12557695 Remove obsolete Travis CI YML. 2021-09-23 12:32:40 +02:00
Bill Hollings
40141ffddf MSL: Selectively enable fast-math in MSL code to match Vulkan CTS results.
Based on CTS testing, math optimizations between MSL and Vulkan are inconsistent.
In some cases, enabling MSL's fast-math compilation option matches Vulkan's math
results. In other cases, disabling it does. Broadly enabling or disabling fast-math
across all shaders results in some CTS test failures either way.

To fix this, selectively enable/disable fast-math optimizations in the MSL code,
using metal::fast and metal::precise function namespaces, where supported, and
the [[clang::optnone]] function attribute otherwise.

Adjust SPIRV-Cross unit test reference shaders to accommodate these changes.
2021-09-22 18:58:31 -04:00
Bill Hollings
86dfac12c8 MSL: Fix location and component variable matching between shader stages.
Consolidate derivation of Metal 'user(locnL_C)' output/input location
and component attribute qualifier, to establish SVOT across stages.
2021-09-18 18:55:12 -04:00
Hans-Kristian Arntzen
b81334a513
Merge pull request #1738 from billhollings/return-value-after-discard-terminator
MSL: Return fragment function value even when last SPIR-V Op is discard (OpKill).
2021-09-15 11:55:39 +02:00
Bill Hollings
2a150f5a2f MSL: Add explanatory comment requested in PR review. 2021-09-14 14:58:42 -04:00
Bill Hollings
35e92e6ffb MSL: Return fragment function value even when last SPIR-V Op is discard (OpKill).
Add test shader for new functionality.
Add legacy test reference shader for unrelated buffer-bitcast
test, that doesn't seem to have been added previously.
2021-09-12 16:28:21 -04:00
Hans-Kristian Arntzen
c2500e504d
Merge pull request #1735 from billhollings/add-const-op-exprs
Add support for additional ops in OpSpecConstantOp.
2021-09-06 11:31:18 +02:00
Bill Hollings
472f9d4f6d Add tests for OpSpecConstantOp ops OpQuantizeToF16 and OpSRem.
Tests provided by @cdavis5e.
2021-09-05 16:51:04 -04:00
Bill Hollings
5fb1ca4f0d Add support for additional ops in OpSpecConstantOp.
MSL: Support op OpQuantizeToF16 in OpSpecConstantOp.
All: Support op OpSRem in OpSpecConstantOp.
2021-09-03 18:20:49 -04:00
Hans-Kristian Arntzen
51d8e7be94
Merge pull request #1734 from KhronosGroup/buffer-reference-uvec2
GLSL: Emit GL_EXT_buffer_reference_uvec2 as required.
2021-09-02 14:12:31 +02:00
Hans-Kristian Arntzen
b8f1e71907 GLSL: Emit GL_EXT_buffer_reference_uvec2 as required. 2021-09-02 13:17:13 +02:00
Hans-Kristian Arntzen
d6fe75df10
Merge pull request #1732 from KhronosGroup/fix-1731
Fix switch fallthrough case in some cases.
2021-08-31 18:31:31 +02:00
Hans-Kristian Arntzen
23c4480d8e Fix switch fallthrough case in some cases. 2021-08-31 17:24:09 +02:00
Hans-Kristian Arntzen
0e2880ab99
Merge pull request #1729 from KhronosGroup/fix-1726
MSL: Consider that function/private variables can be block-like.
2021-08-23 14:55:13 +02:00
Hans-Kristian Arntzen
2eea6a579b MSL: Consider that function/private variables can be block-like.
Handles a special case with array copies.
The implementation of this fix is not perfect, but should be good
enough for time being.
2021-08-23 13:26:45 +02:00
Hans-Kristian Arntzen
840d4483bc
Merge pull request #1728 from KhronosGroup/fix-1727
Track temporary access for OpArrayLength result.
2021-08-23 13:26:34 +02:00
Hans-Kristian Arntzen
5b0cafb416 Track temporary access for OpArrayLength result.
The argument is a literal, but result is still a temporary.
2021-08-23 12:43:41 +02:00
Hans-Kristian Arntzen
c062b6b852
Merge pull request #1725 from billhollings/fix-duplicate-glposition
MSL: Fix duplicate gl_Position outputs when gl_Position defined but unused.
2021-08-23 11:37:10 +02:00
Hans-Kristian Arntzen
fad1590786
Merge pull request #1722 from billhollings/row-maj-mtx-store-from-const
MSL: Support row-major transpose when storing matrix from constant RHS matrix.
2021-08-23 11:29:01 +02:00
Hans-Kristian Arntzen
27e7abeab1
Merge pull request #1724 from billhollings/msl-const-expr-casting
MSL: Fix casting in constant expressions with different sizes.
2021-08-23 11:23:25 +02:00
Bill Hollings
e76fcf9309 MSL: Add test for fixes to MSL constant expression type down-casting. 2021-08-16 13:56:05 -04:00
Bill Hollings
3105e82b2e MSL: Fix duplicate gl_Position outputs when gl_Position defined but unused.
When gl_Position is defined by SPIR-V, but neither used nor initialized,
it appeared twice in the MSL output, as gl_Position and glPosition_1.

The existing tests for whether an output is active check only that it is
used by an op, or initialized. Adding the implicit gl_Position also marked
the existing gl_Position as active, duplicating the output variable.

Fix is that when checking for the need to add an implicit gl_Position
output, also check if the var is already defined in the shader,
and just needs to be marked as active.
Add test shader.
2021-08-16 11:23:15 -04:00
Bill Hollings
a75fe07546 MSL: Fix casting in constant expressions with different sizes.
Previous casting in constant expressions used as_type<> between
types of different overall sizes.
Add check for overall size (width * vecsize) to ensure as_type<> will work,
otherwise use regular cast. Also beef up test of integer values to also check
vecsize, and use regular casts for those.
2021-08-12 16:19:46 -04:00
Bill Hollings
9552ca5473 MSL: Support row-major transpose when storing matrix from constant RHS matrix.
Remove test and exception when storing row-major matrix
from RHS that is not a SPIRExpression.
Add test shaders.
2021-08-12 09:08:35 -04:00
Hans-Kristian Arntzen
bab4e5911b
Merge pull request #1716 from KhronosGroup/terminator-access-fix
Handle value access in terminators.
2021-07-29 15:48:51 +02:00
Hans-Kristian Arntzen
cb613eb675 Handle value access in terminators.
Fixes case where value is created inside loop body and consumed by a
return outside it.
2021-07-29 15:27:52 +02:00
Hans-Kristian Arntzen
1964799fba
Merge pull request #1715 from KhronosGroup/precise-fp16-fp64
GLSL: Emit precise for fp16/fp64 types as well.
2021-07-26 22:45:18 +02:00
Hans-Kristian Arntzen
ac11a91792 GLSL: Emit precise for fp16/fp64 types as well. 2021-07-26 22:05:55 +02:00
Hans-Kristian Arntzen
cd22336a38
Merge pull request #1712 from cdavis5e/msl-subgroup-ballot-simplify
MSL: Simplify spvSubgroupBallot().
2021-07-22 12:15:33 +02:00
Chip Davis
03ad13bae6 MSL: Simplify spvSubgroupBallot().
A bitcast to `uint2` will do just fine. I honestly don't know why I
didn't do it this way earlier.
2021-07-21 00:25:09 -05:00
Hans-Kristian Arntzen
18f3cd6810 GLSL: Ensure ray query object decls are flushed if allocated in Function.
glslang always emits Private variables, but DXC not so much.
2021-07-20 12:04:00 +02:00
Hans-Kristian Arntzen
e51630595f
Merge pull request #1711 from KhronosGroup/fix-1690
GLSL: Implement GL_EXT_ray_query.
2021-07-19 14:37:09 +02:00
Hans-Kristian Arntzen
5b227cc57c GLSL: Implement GL_EXT_ray_query. 2021-07-19 14:01:21 +02:00
Hans-Kristian Arntzen
6196e3b029 MSL: Remove redundant path for SampleMask. 2021-07-15 16:34:06 +02:00
Hans-Kristian Arntzen
2fcbef398c
Merge pull request #1709 from billhollings/fix-sample-mask-in
MSL: Adjust gl_SampleMaskIn for sample-shading and/or fixed sample mask.
2021-07-15 16:32:35 +02:00