Allow 64-bit hex literals and const-evaluate unary ops (#6616)

* Allow 64-bit hex literals

* Implement const evaluation for unary 64-bit ops

* Test 64-bit hex literals

* Add changelog entry
This commit is contained in:
Sludge 2024-11-26 03:54:12 +01:00 committed by GitHub
parent 3016c56db6
commit a9f14c7a90
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 721 additions and 709 deletions

View File

@ -98,6 +98,7 @@ By @ErichDonGubler in [#6456](https://github.com/gfx-rs/wgpu/pull/6456), [#6148]
- Fix an issue where `naga` CLI would incorrectly skip the first positional argument when `--stdin-file-path` was specified. By @ErichDonGubler in [#6480](https://github.com/gfx-rs/wgpu/pull/6480).
- Fix textureNumLevels in the GLSL backend. By @magcius in [#6483](https://github.com/gfx-rs/wgpu/pull/6483).
- Support 64-bit hex literals and unary operations in constants [#6616](https://github.com/gfx-rs/wgpu/pull/6616).
- Implement `quantizeToF16()` for WGSL frontend, and WGSL, SPIR-V, HLSL, MSL, and GLSL backends. By @jamienicol in [#6519](https://github.com/gfx-rs/wgpu/pull/6519).
- Add support for GLSL `usampler*` and `isampler*`. By @DavidPeicho in [#6513](https://github.com/gfx-rs/wgpu/pull/6513).
@ -128,7 +129,7 @@ By @ErichDonGubler in [#6456](https://github.com/gfx-rs/wgpu/pull/6456), [#6148]
- Handle query set creation failure as an internal error that loses the `Device`, rather than panicking. By @ErichDonGubler in [#6505](https://github.com/gfx-rs/wgpu/pull/6505).
- Ensure that `Features::TIMESTAMP_QUERY` is set when using timestamp writes in render and compute passes. By @ErichDonGubler in [#6497](https://github.com/gfx-rs/wgpu/pull/6497).
- Check for device mismatches when beginning render and compute passes. By @ErichDonGubler in [#6497](https://github.com/gfx-rs/wgpu/pull/6497).
- Check for device mismatches when beginning render and compute passes. By @ErichDonGubler in [#6497](https://github.com/gfx-rs/wgpu/pull/6497).
- Lower `QUERY_SET_MAX_QUERIES` (and enforced limits) from 8192 to 4096 to match WebGPU spec. By @ErichDonGubler in [#6525](https://github.com/gfx-rs/wgpu/pull/6525).
- Allow non-filterable float on texture bindings never used with samplers when using a derived bind group layout. By @ErichDonGubler in [#6531](https://github.com/gfx-rs/wgpu/pull/6531/).
- Replace potentially unsound usage of `PreHashedMap` with `FastHashMap`. By @jamienicol in [#6541](https://github.com/gfx-rs/wgpu/pull/6541).

View File

@ -216,7 +216,12 @@ fn parse(input: &str) -> (Result<Number, NumberError>, &str) {
rest_to_str!(bytes),
)
} else {
let kind = consume_map!(bytes, [b'i' => IntKind::I32, b'u' => IntKind::U32]);
let kind = consume_map!(bytes, [
b'i' => IntKind::I32,
b'u' => IntKind::U32,
b'l', b'i' => IntKind::I64,
b'l', b'u' => IntKind::U64,
]);
(parse_hex_int(digits, kind), rest_to_str!(bytes))
}

View File

@ -1742,6 +1742,7 @@ impl<'a> ConstantEvaluator<'a> {
Expression::Literal(value) => Expression::Literal(match op {
UnaryOperator::Negate => match value {
Literal::I32(v) => Literal::I32(v.wrapping_neg()),
Literal::I64(v) => Literal::I64(v.wrapping_neg()),
Literal::F32(v) => Literal::F32(-v),
Literal::AbstractInt(v) => Literal::AbstractInt(v.wrapping_neg()),
Literal::AbstractFloat(v) => Literal::AbstractFloat(-v),
@ -1753,7 +1754,9 @@ impl<'a> ConstantEvaluator<'a> {
},
UnaryOperator::BitwiseNot => match value {
Literal::I32(v) => Literal::I32(!v),
Literal::I64(v) => Literal::I64(!v),
Literal::U32(v) => Literal::U32(!v),
Literal::U64(v) => Literal::U64(!v),
Literal::AbstractInt(v) => Literal::AbstractInt(!v),
_ => return Err(ConstantEvaluatorError::InvalidUnaryOpArg),
},

View File

@ -41,7 +41,7 @@ var<storage, read_write> output_arrays: StorageCompatible;
fn int64_function(x: i64) -> i64 {
var val: i64 = i64(constant_variable);
// A number too big for i32
val += 31li - 1002003004005006li;
val += 31li - 1002003004005006li + -0x7fffffffffffffffli;
// Constructing an i64 from an AbstractInt
val += val + i64(5);
// Constructing a i64 from other types and other types from u64.
@ -89,8 +89,8 @@ fn int64_function(x: i64) -> i64 {
fn uint64_function(x: u64) -> u64 {
var val: u64 = u64(constant_variable);
// A number too big for u32
val += 31lu + 1002003004005006lu;
// Numbers too big for u32 (u64::MAX)
val += 31lu + 18446744073709551615lu - 0xfffffffffffffffflu;
// Constructing a u64 from an AbstractInt
val += val + u64(5);
// Constructing a u64 from other types and other types from u64.

View File

@ -63,81 +63,81 @@ int64_t int64_function(int64_t x)
{
int64_t val = 20L;
int64_t _e6 = val;
val = (_e6 + (31L - 1002003004005006L));
int64_t _e8 = val;
int64_t _e11 = val;
val = (_e11 + (_e8 + 5L));
uint _e15 = input_uniform.val_u32_;
int64_t _e16 = val;
int64_t _e20 = val;
val = (_e20 + int64_t((_e15 + uint(_e16))));
int _e24 = input_uniform.val_i32_;
int64_t _e25 = val;
int64_t _e29 = val;
val = (_e29 + int64_t((_e24 + int(_e25))));
float _e33 = input_uniform.val_f32_;
int64_t _e34 = val;
int64_t _e38 = val;
val = (_e38 + int64_t((_e33 + float(_e34))));
int64_t _e42 = input_uniform.val_i64_;
int64_t _e45 = val;
val = (_e45 + (_e42).xxx.z);
uint64_t _e49 = input_uniform.val_u64_;
int64_t _e51 = val;
val = (_e51 + _e49);
uint64_t2 _e55 = input_uniform.val_u64_2_;
int64_t _e58 = val;
val = (_e58 + _e55.y);
uint64_t3 _e62 = input_uniform.val_u64_3_;
int64_t _e65 = val;
val = (_e65 + _e62.z);
uint64_t4 _e69 = input_uniform.val_u64_4_;
int64_t _e72 = val;
val = (_e72 + _e69.w);
int64_t _e78 = input_uniform.val_i64_;
int64_t _e81 = input_storage.Load<int64_t>(128);
output.Store(128, (_e78 + _e81));
int64_t2 _e87 = input_uniform.val_i64_2_;
int64_t2 _e90 = input_storage.Load<int64_t2>(144);
output.Store(144, (_e87 + _e90));
int64_t3 _e96 = input_uniform.val_i64_3_;
int64_t3 _e99 = input_storage.Load<int64_t3>(160);
output.Store(160, (_e96 + _e99));
int64_t4 _e105 = input_uniform.val_i64_4_;
int64_t4 _e108 = input_storage.Load<int64_t4>(192);
output.Store(192, (_e105 + _e108));
int64_t _e114[2] = Constructarray2_int64_t_(input_arrays.Load<int64_t>(16+0), input_arrays.Load<int64_t>(16+8));
val = (_e8 + ((31L - 1002003004005006L) + -9223372036854775807L));
int64_t _e10 = val;
int64_t _e13 = val;
val = (_e13 + (_e10 + 5L));
uint _e17 = input_uniform.val_u32_;
int64_t _e18 = val;
int64_t _e22 = val;
val = (_e22 + int64_t((_e17 + uint(_e18))));
int _e26 = input_uniform.val_i32_;
int64_t _e27 = val;
int64_t _e31 = val;
val = (_e31 + int64_t((_e26 + int(_e27))));
float _e35 = input_uniform.val_f32_;
int64_t _e36 = val;
int64_t _e40 = val;
val = (_e40 + int64_t((_e35 + float(_e36))));
int64_t _e44 = input_uniform.val_i64_;
int64_t _e47 = val;
val = (_e47 + (_e44).xxx.z);
uint64_t _e51 = input_uniform.val_u64_;
int64_t _e53 = val;
val = (_e53 + _e51);
uint64_t2 _e57 = input_uniform.val_u64_2_;
int64_t _e60 = val;
val = (_e60 + _e57.y);
uint64_t3 _e64 = input_uniform.val_u64_3_;
int64_t _e67 = val;
val = (_e67 + _e64.z);
uint64_t4 _e71 = input_uniform.val_u64_4_;
int64_t _e74 = val;
val = (_e74 + _e71.w);
int64_t _e80 = input_uniform.val_i64_;
int64_t _e83 = input_storage.Load<int64_t>(128);
output.Store(128, (_e80 + _e83));
int64_t2 _e89 = input_uniform.val_i64_2_;
int64_t2 _e92 = input_storage.Load<int64_t2>(144);
output.Store(144, (_e89 + _e92));
int64_t3 _e98 = input_uniform.val_i64_3_;
int64_t3 _e101 = input_storage.Load<int64_t3>(160);
output.Store(160, (_e98 + _e101));
int64_t4 _e107 = input_uniform.val_i64_4_;
int64_t4 _e110 = input_storage.Load<int64_t4>(192);
output.Store(192, (_e107 + _e110));
int64_t _e116[2] = Constructarray2_int64_t_(input_arrays.Load<int64_t>(16+0), input_arrays.Load<int64_t>(16+8));
{
int64_t _value2[2] = _e114;
int64_t _value2[2] = _e116;
output_arrays.Store(16+0, _value2[0]);
output_arrays.Store(16+8, _value2[1]);
}
int64_t _e115 = val;
int64_t _e117 = val;
val = (_e117 + abs(_e115));
int64_t _e119 = val;
int64_t _e120 = val;
val = (_e119 + abs(_e117));
int64_t _e121 = val;
int64_t _e122 = val;
int64_t _e123 = val;
val = (_e123 + clamp(_e119, _e120, _e121));
int64_t _e125 = val;
val = (_e125 + clamp(_e121, _e122, _e123));
int64_t _e127 = val;
int64_t _e130 = val;
val = (_e130 + dot((_e125).xx, (_e127).xx));
int64_t _e129 = val;
int64_t _e132 = val;
int64_t _e133 = val;
val = (_e132 + dot((_e127).xx, (_e129).xx));
int64_t _e134 = val;
int64_t _e135 = val;
val = (_e135 + max(_e132, _e133));
int64_t _e137 = val;
int64_t _e138 = val;
val = (_e137 + max(_e134, _e135));
int64_t _e139 = val;
int64_t _e140 = val;
val = (_e140 + min(_e137, _e138));
int64_t _e142 = val;
val = (_e142 + min(_e139, _e140));
int64_t _e144 = val;
val = (_e144 + sign(_e142));
int64_t _e146 = val;
return _e146;
val = (_e146 + sign(_e144));
int64_t _e148 = val;
return _e148;
}
typedef uint64_t ret_Constructarray2_uint64_t_[2];
@ -150,78 +150,78 @@ uint64_t uint64_function(uint64_t x_1)
{
uint64_t val_1 = 20uL;
uint64_t _e6 = val_1;
val_1 = (_e6 + (31uL + 1002003004005006uL));
uint64_t _e8 = val_1;
uint64_t _e11 = val_1;
val_1 = (_e11 + (_e8 + 5uL));
uint _e15 = input_uniform.val_u32_;
uint64_t _e16 = val_1;
uint64_t _e20 = val_1;
val_1 = (_e20 + uint64_t((_e15 + uint(_e16))));
int _e24 = input_uniform.val_i32_;
uint64_t _e25 = val_1;
uint64_t _e29 = val_1;
val_1 = (_e29 + uint64_t((_e24 + int(_e25))));
float _e33 = input_uniform.val_f32_;
uint64_t _e34 = val_1;
uint64_t _e38 = val_1;
val_1 = (_e38 + uint64_t((_e33 + float(_e34))));
uint64_t _e42 = input_uniform.val_u64_;
uint64_t _e45 = val_1;
val_1 = (_e45 + (_e42).xxx.z);
int64_t _e49 = input_uniform.val_i64_;
uint64_t _e51 = val_1;
val_1 = (_e51 + _e49);
int64_t2 _e55 = input_uniform.val_i64_2_;
uint64_t _e58 = val_1;
val_1 = (_e58 + _e55.y);
int64_t3 _e62 = input_uniform.val_i64_3_;
uint64_t _e65 = val_1;
val_1 = (_e65 + _e62.z);
int64_t4 _e69 = input_uniform.val_i64_4_;
uint64_t _e72 = val_1;
val_1 = (_e72 + _e69.w);
uint64_t _e78 = input_uniform.val_u64_;
uint64_t _e81 = input_storage.Load<uint64_t>(16);
output.Store(16, (_e78 + _e81));
uint64_t2 _e87 = input_uniform.val_u64_2_;
uint64_t2 _e90 = input_storage.Load<uint64_t2>(32);
output.Store(32, (_e87 + _e90));
uint64_t3 _e96 = input_uniform.val_u64_3_;
uint64_t3 _e99 = input_storage.Load<uint64_t3>(64);
output.Store(64, (_e96 + _e99));
uint64_t4 _e105 = input_uniform.val_u64_4_;
uint64_t4 _e108 = input_storage.Load<uint64_t4>(96);
output.Store(96, (_e105 + _e108));
uint64_t _e114[2] = Constructarray2_uint64_t_(input_arrays.Load<uint64_t>(0+0), input_arrays.Load<uint64_t>(0+8));
val_1 = (_e8 + ((31uL + 18446744073709551615uL) - 18446744073709551615uL));
uint64_t _e10 = val_1;
uint64_t _e13 = val_1;
val_1 = (_e13 + (_e10 + 5uL));
uint _e17 = input_uniform.val_u32_;
uint64_t _e18 = val_1;
uint64_t _e22 = val_1;
val_1 = (_e22 + uint64_t((_e17 + uint(_e18))));
int _e26 = input_uniform.val_i32_;
uint64_t _e27 = val_1;
uint64_t _e31 = val_1;
val_1 = (_e31 + uint64_t((_e26 + int(_e27))));
float _e35 = input_uniform.val_f32_;
uint64_t _e36 = val_1;
uint64_t _e40 = val_1;
val_1 = (_e40 + uint64_t((_e35 + float(_e36))));
uint64_t _e44 = input_uniform.val_u64_;
uint64_t _e47 = val_1;
val_1 = (_e47 + (_e44).xxx.z);
int64_t _e51 = input_uniform.val_i64_;
uint64_t _e53 = val_1;
val_1 = (_e53 + _e51);
int64_t2 _e57 = input_uniform.val_i64_2_;
uint64_t _e60 = val_1;
val_1 = (_e60 + _e57.y);
int64_t3 _e64 = input_uniform.val_i64_3_;
uint64_t _e67 = val_1;
val_1 = (_e67 + _e64.z);
int64_t4 _e71 = input_uniform.val_i64_4_;
uint64_t _e74 = val_1;
val_1 = (_e74 + _e71.w);
uint64_t _e80 = input_uniform.val_u64_;
uint64_t _e83 = input_storage.Load<uint64_t>(16);
output.Store(16, (_e80 + _e83));
uint64_t2 _e89 = input_uniform.val_u64_2_;
uint64_t2 _e92 = input_storage.Load<uint64_t2>(32);
output.Store(32, (_e89 + _e92));
uint64_t3 _e98 = input_uniform.val_u64_3_;
uint64_t3 _e101 = input_storage.Load<uint64_t3>(64);
output.Store(64, (_e98 + _e101));
uint64_t4 _e107 = input_uniform.val_u64_4_;
uint64_t4 _e110 = input_storage.Load<uint64_t4>(96);
output.Store(96, (_e107 + _e110));
uint64_t _e116[2] = Constructarray2_uint64_t_(input_arrays.Load<uint64_t>(0+0), input_arrays.Load<uint64_t>(0+8));
{
uint64_t _value2[2] = _e114;
uint64_t _value2[2] = _e116;
output_arrays.Store(0+0, _value2[0]);
output_arrays.Store(0+8, _value2[1]);
}
uint64_t _e115 = val_1;
uint64_t _e117 = val_1;
val_1 = (_e117 + abs(_e115));
uint64_t _e119 = val_1;
uint64_t _e120 = val_1;
val_1 = (_e119 + abs(_e117));
uint64_t _e121 = val_1;
uint64_t _e122 = val_1;
uint64_t _e123 = val_1;
val_1 = (_e123 + clamp(_e119, _e120, _e121));
uint64_t _e125 = val_1;
val_1 = (_e125 + clamp(_e121, _e122, _e123));
uint64_t _e127 = val_1;
uint64_t _e130 = val_1;
val_1 = (_e130 + dot((_e125).xx, (_e127).xx));
uint64_t _e129 = val_1;
uint64_t _e132 = val_1;
uint64_t _e133 = val_1;
val_1 = (_e132 + dot((_e127).xx, (_e129).xx));
uint64_t _e134 = val_1;
uint64_t _e135 = val_1;
val_1 = (_e135 + max(_e132, _e133));
uint64_t _e137 = val_1;
uint64_t _e138 = val_1;
val_1 = (_e137 + max(_e134, _e135));
uint64_t _e139 = val_1;
uint64_t _e140 = val_1;
val_1 = (_e140 + min(_e137, _e138));
uint64_t _e142 = val_1;
return _e142;
val_1 = (_e142 + min(_e139, _e140));
uint64_t _e144 = val_1;
return _e144;
}
[numthreads(1, 1, 1)]

View File

@ -43,79 +43,79 @@ long int64_function(
device StorageCompatible& output_arrays
) {
long val = 20L;
long _e6 = val;
val = _e6 + (31L - 1002003004005006L);
long _e8 = val;
long _e11 = val;
val = _e11 + (_e8 + 5L);
uint _e15 = input_uniform.val_u32_;
long _e16 = val;
long _e20 = val;
val = _e20 + static_cast<long>(_e15 + static_cast<uint>(_e16));
int _e24 = input_uniform.val_i32_;
long _e25 = val;
long _e29 = val;
val = _e29 + static_cast<long>(_e24 + static_cast<int>(_e25));
float _e33 = input_uniform.val_f32_;
long _e34 = val;
long _e38 = val;
val = _e38 + static_cast<long>(_e33 + static_cast<float>(_e34));
long _e42 = input_uniform.val_i64_;
long _e45 = val;
val = _e45 + metal::long3(_e42).z;
ulong _e49 = input_uniform.val_u64_;
long _e51 = val;
val = _e51 + as_type<long>(_e49);
metal::ulong2 _e55 = input_uniform.val_u64_2_;
long _e58 = val;
val = _e58 + as_type<metal::long2>(_e55).y;
metal::ulong3 _e62 = input_uniform.val_u64_3_;
long _e65 = val;
val = _e65 + as_type<metal::long3>(_e62).z;
metal::ulong4 _e69 = input_uniform.val_u64_4_;
long _e72 = val;
val = _e72 + as_type<metal::long4>(_e69).w;
long _e78 = input_uniform.val_i64_;
long _e81 = input_storage.val_i64_;
output.val_i64_ = _e78 + _e81;
metal::long2 _e87 = input_uniform.val_i64_2_;
metal::long2 _e90 = input_storage.val_i64_2_;
output.val_i64_2_ = _e87 + _e90;
metal::long3 _e96 = input_uniform.val_i64_3_;
metal::long3 _e99 = input_storage.val_i64_3_;
output.val_i64_3_ = _e96 + _e99;
metal::long4 _e105 = input_uniform.val_i64_4_;
metal::long4 _e108 = input_storage.val_i64_4_;
output.val_i64_4_ = _e105 + _e108;
type_12 _e114 = input_arrays.val_i64_array_2_;
output_arrays.val_i64_array_2_ = _e114;
long _e115 = val;
val = _e8 + ((31L - 1002003004005006L) + -9223372036854775807L);
long _e10 = val;
long _e13 = val;
val = _e13 + (_e10 + 5L);
uint _e17 = input_uniform.val_u32_;
long _e18 = val;
long _e22 = val;
val = _e22 + static_cast<long>(_e17 + static_cast<uint>(_e18));
int _e26 = input_uniform.val_i32_;
long _e27 = val;
long _e31 = val;
val = _e31 + static_cast<long>(_e26 + static_cast<int>(_e27));
float _e35 = input_uniform.val_f32_;
long _e36 = val;
long _e40 = val;
val = _e40 + static_cast<long>(_e35 + static_cast<float>(_e36));
long _e44 = input_uniform.val_i64_;
long _e47 = val;
val = _e47 + metal::long3(_e44).z;
ulong _e51 = input_uniform.val_u64_;
long _e53 = val;
val = _e53 + as_type<long>(_e51);
metal::ulong2 _e57 = input_uniform.val_u64_2_;
long _e60 = val;
val = _e60 + as_type<metal::long2>(_e57).y;
metal::ulong3 _e64 = input_uniform.val_u64_3_;
long _e67 = val;
val = _e67 + as_type<metal::long3>(_e64).z;
metal::ulong4 _e71 = input_uniform.val_u64_4_;
long _e74 = val;
val = _e74 + as_type<metal::long4>(_e71).w;
long _e80 = input_uniform.val_i64_;
long _e83 = input_storage.val_i64_;
output.val_i64_ = _e80 + _e83;
metal::long2 _e89 = input_uniform.val_i64_2_;
metal::long2 _e92 = input_storage.val_i64_2_;
output.val_i64_2_ = _e89 + _e92;
metal::long3 _e98 = input_uniform.val_i64_3_;
metal::long3 _e101 = input_storage.val_i64_3_;
output.val_i64_3_ = _e98 + _e101;
metal::long4 _e107 = input_uniform.val_i64_4_;
metal::long4 _e110 = input_storage.val_i64_4_;
output.val_i64_4_ = _e107 + _e110;
type_12 _e116 = input_arrays.val_i64_array_2_;
output_arrays.val_i64_array_2_ = _e116;
long _e117 = val;
val = _e117 + metal::abs(_e115);
long _e119 = val;
long _e120 = val;
val = _e119 + metal::abs(_e117);
long _e121 = val;
long _e122 = val;
long _e123 = val;
val = _e123 + metal::clamp(_e119, _e120, _e121);
long _e125 = val;
metal::long2 _e126 = metal::long2(_e125);
val = _e125 + metal::clamp(_e121, _e122, _e123);
long _e127 = val;
metal::long2 _e128 = metal::long2(_e127);
long _e130 = val;
val = _e130 + ( + _e126.x * _e128.x + _e126.y * _e128.y);
long _e129 = val;
metal::long2 _e130 = metal::long2(_e129);
long _e132 = val;
long _e133 = val;
val = _e132 + ( + _e128.x * _e130.x + _e128.y * _e130.y);
long _e134 = val;
long _e135 = val;
val = _e135 + metal::max(_e132, _e133);
long _e137 = val;
long _e138 = val;
val = _e137 + metal::max(_e134, _e135);
long _e139 = val;
long _e140 = val;
val = _e140 + metal::min(_e137, _e138);
long _e142 = val;
val = _e142 + metal::min(_e139, _e140);
long _e144 = val;
val = _e144 + metal::select(metal::select(-1, 1, (_e142 > 0)), 0, (_e142 == 0));
long _e146 = val;
return _e146;
val = _e146 + metal::select(metal::select(-1, 1, (_e144 > 0)), 0, (_e144 == 0));
long _e148 = val;
return _e148;
}
ulong uint64_function(
@ -127,76 +127,76 @@ ulong uint64_function(
device StorageCompatible& output_arrays
) {
ulong val_1 = 20uL;
ulong _e6 = val_1;
val_1 = _e6 + (31uL + 1002003004005006uL);
ulong _e8 = val_1;
ulong _e11 = val_1;
val_1 = _e11 + (_e8 + 5uL);
uint _e15 = input_uniform.val_u32_;
ulong _e16 = val_1;
ulong _e20 = val_1;
val_1 = _e20 + static_cast<ulong>(_e15 + static_cast<uint>(_e16));
int _e24 = input_uniform.val_i32_;
ulong _e25 = val_1;
ulong _e29 = val_1;
val_1 = _e29 + static_cast<ulong>(_e24 + static_cast<int>(_e25));
float _e33 = input_uniform.val_f32_;
ulong _e34 = val_1;
ulong _e38 = val_1;
val_1 = _e38 + static_cast<ulong>(_e33 + static_cast<float>(_e34));
ulong _e42 = input_uniform.val_u64_;
ulong _e45 = val_1;
val_1 = _e45 + metal::ulong3(_e42).z;
long _e49 = input_uniform.val_i64_;
ulong _e51 = val_1;
val_1 = _e51 + as_type<ulong>(_e49);
metal::long2 _e55 = input_uniform.val_i64_2_;
ulong _e58 = val_1;
val_1 = _e58 + as_type<metal::ulong2>(_e55).y;
metal::long3 _e62 = input_uniform.val_i64_3_;
ulong _e65 = val_1;
val_1 = _e65 + as_type<metal::ulong3>(_e62).z;
metal::long4 _e69 = input_uniform.val_i64_4_;
ulong _e72 = val_1;
val_1 = _e72 + as_type<metal::ulong4>(_e69).w;
ulong _e78 = input_uniform.val_u64_;
ulong _e81 = input_storage.val_u64_;
output.val_u64_ = _e78 + _e81;
metal::ulong2 _e87 = input_uniform.val_u64_2_;
metal::ulong2 _e90 = input_storage.val_u64_2_;
output.val_u64_2_ = _e87 + _e90;
metal::ulong3 _e96 = input_uniform.val_u64_3_;
metal::ulong3 _e99 = input_storage.val_u64_3_;
output.val_u64_3_ = _e96 + _e99;
metal::ulong4 _e105 = input_uniform.val_u64_4_;
metal::ulong4 _e108 = input_storage.val_u64_4_;
output.val_u64_4_ = _e105 + _e108;
type_11 _e114 = input_arrays.val_u64_array_2_;
output_arrays.val_u64_array_2_ = _e114;
ulong _e115 = val_1;
val_1 = _e8 + ((31uL + 18446744073709551615uL) - 18446744073709551615uL);
ulong _e10 = val_1;
ulong _e13 = val_1;
val_1 = _e13 + (_e10 + 5uL);
uint _e17 = input_uniform.val_u32_;
ulong _e18 = val_1;
ulong _e22 = val_1;
val_1 = _e22 + static_cast<ulong>(_e17 + static_cast<uint>(_e18));
int _e26 = input_uniform.val_i32_;
ulong _e27 = val_1;
ulong _e31 = val_1;
val_1 = _e31 + static_cast<ulong>(_e26 + static_cast<int>(_e27));
float _e35 = input_uniform.val_f32_;
ulong _e36 = val_1;
ulong _e40 = val_1;
val_1 = _e40 + static_cast<ulong>(_e35 + static_cast<float>(_e36));
ulong _e44 = input_uniform.val_u64_;
ulong _e47 = val_1;
val_1 = _e47 + metal::ulong3(_e44).z;
long _e51 = input_uniform.val_i64_;
ulong _e53 = val_1;
val_1 = _e53 + as_type<ulong>(_e51);
metal::long2 _e57 = input_uniform.val_i64_2_;
ulong _e60 = val_1;
val_1 = _e60 + as_type<metal::ulong2>(_e57).y;
metal::long3 _e64 = input_uniform.val_i64_3_;
ulong _e67 = val_1;
val_1 = _e67 + as_type<metal::ulong3>(_e64).z;
metal::long4 _e71 = input_uniform.val_i64_4_;
ulong _e74 = val_1;
val_1 = _e74 + as_type<metal::ulong4>(_e71).w;
ulong _e80 = input_uniform.val_u64_;
ulong _e83 = input_storage.val_u64_;
output.val_u64_ = _e80 + _e83;
metal::ulong2 _e89 = input_uniform.val_u64_2_;
metal::ulong2 _e92 = input_storage.val_u64_2_;
output.val_u64_2_ = _e89 + _e92;
metal::ulong3 _e98 = input_uniform.val_u64_3_;
metal::ulong3 _e101 = input_storage.val_u64_3_;
output.val_u64_3_ = _e98 + _e101;
metal::ulong4 _e107 = input_uniform.val_u64_4_;
metal::ulong4 _e110 = input_storage.val_u64_4_;
output.val_u64_4_ = _e107 + _e110;
type_11 _e116 = input_arrays.val_u64_array_2_;
output_arrays.val_u64_array_2_ = _e116;
ulong _e117 = val_1;
val_1 = _e117 + metal::abs(_e115);
ulong _e119 = val_1;
ulong _e120 = val_1;
val_1 = _e119 + metal::abs(_e117);
ulong _e121 = val_1;
ulong _e122 = val_1;
ulong _e123 = val_1;
val_1 = _e123 + metal::clamp(_e119, _e120, _e121);
ulong _e125 = val_1;
metal::ulong2 _e126 = metal::ulong2(_e125);
val_1 = _e125 + metal::clamp(_e121, _e122, _e123);
ulong _e127 = val_1;
metal::ulong2 _e128 = metal::ulong2(_e127);
ulong _e130 = val_1;
val_1 = _e130 + ( + _e126.x * _e128.x + _e126.y * _e128.y);
ulong _e129 = val_1;
metal::ulong2 _e130 = metal::ulong2(_e129);
ulong _e132 = val_1;
ulong _e133 = val_1;
val_1 = _e132 + ( + _e128.x * _e130.x + _e128.y * _e130.y);
ulong _e134 = val_1;
ulong _e135 = val_1;
val_1 = _e135 + metal::max(_e132, _e133);
ulong _e137 = val_1;
ulong _e138 = val_1;
val_1 = _e137 + metal::max(_e134, _e135);
ulong _e139 = val_1;
ulong _e140 = val_1;
val_1 = _e140 + metal::min(_e137, _e138);
ulong _e142 = val_1;
return _e142;
val_1 = _e142 + metal::min(_e139, _e140);
ulong _e144 = val_1;
return _e144;
}
kernel void main_(

View File

@ -1,14 +1,14 @@
; SPIR-V
; Version: 1.0
; Generator: rspirv
; Bound: 372
; Bound: 375
OpCapability Shader
OpCapability Int64
OpExtension "SPV_KHR_storage_buffer_storage_class"
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %356 "main"
OpExecutionMode %356 LocalSize 1 1 1
OpEntryPoint GLCompute %359 "main"
OpExecutionMode %359 LocalSize 1 1 1
OpMemberDecorate %14 0 Offset 0
OpMemberDecorate %14 1 Offset 4
OpMemberDecorate %14 2 Offset 8
@ -91,380 +91,383 @@ OpMemberDecorate %36 0 Offset 0
%51 = OpConstant %3 20
%52 = OpConstant %3 31
%53 = OpConstant %3 1002003004005006
%54 = OpConstant %3 5
%56 = OpTypePointer Function %3
%65 = OpTypePointer Uniform %5
%74 = OpTypePointer Uniform %6
%75 = OpConstant %5 1
%84 = OpTypePointer Uniform %7
%93 = OpTypePointer Uniform %3
%94 = OpConstant %5 7
%101 = OpTypePointer Uniform %4
%102 = OpConstant %5 3
%108 = OpTypePointer Uniform %8
%109 = OpConstant %5 4
%116 = OpTypePointer Uniform %9
%117 = OpConstant %5 5
%124 = OpTypePointer Uniform %10
%125 = OpConstant %5 6
%132 = OpTypePointer StorageBuffer %3
%139 = OpTypePointer StorageBuffer %11
%140 = OpTypePointer Uniform %11
%141 = OpConstant %5 8
%148 = OpTypePointer StorageBuffer %12
%149 = OpTypePointer Uniform %12
%150 = OpConstant %5 9
%157 = OpTypePointer StorageBuffer %13
%158 = OpTypePointer Uniform %13
%159 = OpConstant %5 10
%166 = OpTypePointer StorageBuffer %17
%186 = OpConstantNull %3
%214 = OpTypeFunction %4 %4
%220 = OpConstant %4 31
%221 = OpConstant %4 1002003004005006
%222 = OpConstant %4 5
%224 = OpTypePointer Function %4
%286 = OpTypePointer StorageBuffer %4
%293 = OpTypePointer StorageBuffer %8
%300 = OpTypePointer StorageBuffer %9
%307 = OpTypePointer StorageBuffer %10
%314 = OpTypePointer StorageBuffer %15
%334 = OpConstantNull %4
%357 = OpTypeFunction %2
%363 = OpConstant %4 67
%364 = OpConstant %3 60
%370 = OpConstant %5 11
%54 = OpConstant %3 -9223372036854775807
%55 = OpConstant %3 5
%57 = OpTypePointer Function %3
%67 = OpTypePointer Uniform %5
%76 = OpTypePointer Uniform %6
%77 = OpConstant %5 1
%86 = OpTypePointer Uniform %7
%95 = OpTypePointer Uniform %3
%96 = OpConstant %5 7
%103 = OpTypePointer Uniform %4
%104 = OpConstant %5 3
%110 = OpTypePointer Uniform %8
%111 = OpConstant %5 4
%118 = OpTypePointer Uniform %9
%119 = OpConstant %5 5
%126 = OpTypePointer Uniform %10
%127 = OpConstant %5 6
%134 = OpTypePointer StorageBuffer %3
%141 = OpTypePointer StorageBuffer %11
%142 = OpTypePointer Uniform %11
%143 = OpConstant %5 8
%150 = OpTypePointer StorageBuffer %12
%151 = OpTypePointer Uniform %12
%152 = OpConstant %5 9
%159 = OpTypePointer StorageBuffer %13
%160 = OpTypePointer Uniform %13
%161 = OpConstant %5 10
%168 = OpTypePointer StorageBuffer %17
%188 = OpConstantNull %3
%216 = OpTypeFunction %4 %4
%222 = OpConstant %4 31
%223 = OpConstant %4 18446744073709551615
%224 = OpConstant %4 5
%226 = OpTypePointer Function %4
%289 = OpTypePointer StorageBuffer %4
%296 = OpTypePointer StorageBuffer %8
%303 = OpTypePointer StorageBuffer %9
%310 = OpTypePointer StorageBuffer %10
%317 = OpTypePointer StorageBuffer %15
%337 = OpConstantNull %4
%360 = OpTypeFunction %2
%366 = OpConstant %4 67
%367 = OpConstant %3 60
%373 = OpConstant %5 11
%40 = OpFunction %3 None %41
%39 = OpFunctionParameter %3
%38 = OpLabel
%55 = OpVariable %56 Function %51
%56 = OpVariable %57 Function %51
%44 = OpAccessChain %42 %23 %43
%46 = OpAccessChain %45 %26 %43
%48 = OpAccessChain %47 %29 %43
%49 = OpAccessChain %45 %32 %43
%50 = OpAccessChain %47 %35 %43
OpBranch %57
%57 = OpLabel
%58 = OpISub %3 %52 %53
%59 = OpLoad %3 %55
%60 = OpIAdd %3 %59 %58
OpStore %55 %60
%61 = OpLoad %3 %55
%62 = OpIAdd %3 %61 %54
%63 = OpLoad %3 %55
%64 = OpIAdd %3 %63 %62
OpStore %55 %64
%66 = OpAccessChain %65 %44 %43
%67 = OpLoad %5 %66
%68 = OpLoad %3 %55
%69 = OpUConvert %5 %68
%70 = OpIAdd %5 %67 %69
%71 = OpSConvert %3 %70
%72 = OpLoad %3 %55
%73 = OpIAdd %3 %72 %71
OpStore %55 %73
%76 = OpAccessChain %74 %44 %75
%77 = OpLoad %6 %76
%78 = OpLoad %3 %55
%79 = OpSConvert %6 %78
%80 = OpIAdd %6 %77 %79
%81 = OpSConvert %3 %80
%82 = OpLoad %3 %55
%83 = OpIAdd %3 %82 %81
OpStore %55 %83
%85 = OpAccessChain %84 %44 %16
%86 = OpLoad %7 %85
%87 = OpLoad %3 %55
%88 = OpConvertSToF %7 %87
%89 = OpFAdd %7 %86 %88
%90 = OpConvertFToS %3 %89
%91 = OpLoad %3 %55
%92 = OpIAdd %3 %91 %90
OpStore %55 %92
%95 = OpAccessChain %93 %44 %94
%96 = OpLoad %3 %95
%97 = OpCompositeConstruct %12 %96 %96 %96
%98 = OpCompositeExtract %3 %97 2
%99 = OpLoad %3 %55
%100 = OpIAdd %3 %99 %98
OpStore %55 %100
%103 = OpAccessChain %101 %44 %102
%104 = OpLoad %4 %103
%105 = OpBitcast %3 %104
%106 = OpLoad %3 %55
%107 = OpIAdd %3 %106 %105
OpStore %55 %107
%110 = OpAccessChain %108 %44 %109
%111 = OpLoad %8 %110
%112 = OpBitcast %11 %111
%113 = OpCompositeExtract %3 %112 1
%114 = OpLoad %3 %55
%115 = OpIAdd %3 %114 %113
OpStore %55 %115
%118 = OpAccessChain %116 %44 %117
%119 = OpLoad %9 %118
%120 = OpBitcast %12 %119
%121 = OpCompositeExtract %3 %120 2
%122 = OpLoad %3 %55
%123 = OpIAdd %3 %122 %121
OpStore %55 %123
%126 = OpAccessChain %124 %44 %125
%127 = OpLoad %10 %126
%128 = OpBitcast %13 %127
%129 = OpCompositeExtract %3 %128 3
%130 = OpLoad %3 %55
%131 = OpIAdd %3 %130 %129
OpStore %55 %131
%133 = OpAccessChain %93 %44 %94
%134 = OpLoad %3 %133
%135 = OpAccessChain %132 %46 %94
OpBranch %58
%58 = OpLabel
%59 = OpISub %3 %52 %53
%60 = OpIAdd %3 %59 %54
%61 = OpLoad %3 %56
%62 = OpIAdd %3 %61 %60
OpStore %56 %62
%63 = OpLoad %3 %56
%64 = OpIAdd %3 %63 %55
%65 = OpLoad %3 %56
%66 = OpIAdd %3 %65 %64
OpStore %56 %66
%68 = OpAccessChain %67 %44 %43
%69 = OpLoad %5 %68
%70 = OpLoad %3 %56
%71 = OpUConvert %5 %70
%72 = OpIAdd %5 %69 %71
%73 = OpSConvert %3 %72
%74 = OpLoad %3 %56
%75 = OpIAdd %3 %74 %73
OpStore %56 %75
%78 = OpAccessChain %76 %44 %77
%79 = OpLoad %6 %78
%80 = OpLoad %3 %56
%81 = OpSConvert %6 %80
%82 = OpIAdd %6 %79 %81
%83 = OpSConvert %3 %82
%84 = OpLoad %3 %56
%85 = OpIAdd %3 %84 %83
OpStore %56 %85
%87 = OpAccessChain %86 %44 %16
%88 = OpLoad %7 %87
%89 = OpLoad %3 %56
%90 = OpConvertSToF %7 %89
%91 = OpFAdd %7 %88 %90
%92 = OpConvertFToS %3 %91
%93 = OpLoad %3 %56
%94 = OpIAdd %3 %93 %92
OpStore %56 %94
%97 = OpAccessChain %95 %44 %96
%98 = OpLoad %3 %97
%99 = OpCompositeConstruct %12 %98 %98 %98
%100 = OpCompositeExtract %3 %99 2
%101 = OpLoad %3 %56
%102 = OpIAdd %3 %101 %100
OpStore %56 %102
%105 = OpAccessChain %103 %44 %104
%106 = OpLoad %4 %105
%107 = OpBitcast %3 %106
%108 = OpLoad %3 %56
%109 = OpIAdd %3 %108 %107
OpStore %56 %109
%112 = OpAccessChain %110 %44 %111
%113 = OpLoad %8 %112
%114 = OpBitcast %11 %113
%115 = OpCompositeExtract %3 %114 1
%116 = OpLoad %3 %56
%117 = OpIAdd %3 %116 %115
OpStore %56 %117
%120 = OpAccessChain %118 %44 %119
%121 = OpLoad %9 %120
%122 = OpBitcast %12 %121
%123 = OpCompositeExtract %3 %122 2
%124 = OpLoad %3 %56
%125 = OpIAdd %3 %124 %123
OpStore %56 %125
%128 = OpAccessChain %126 %44 %127
%129 = OpLoad %10 %128
%130 = OpBitcast %13 %129
%131 = OpCompositeExtract %3 %130 3
%132 = OpLoad %3 %56
%133 = OpIAdd %3 %132 %131
OpStore %56 %133
%135 = OpAccessChain %95 %44 %96
%136 = OpLoad %3 %135
%137 = OpIAdd %3 %134 %136
%138 = OpAccessChain %132 %49 %94
OpStore %138 %137
%142 = OpAccessChain %140 %44 %141
%143 = OpLoad %11 %142
%144 = OpAccessChain %139 %46 %141
%137 = OpAccessChain %134 %46 %96
%138 = OpLoad %3 %137
%139 = OpIAdd %3 %136 %138
%140 = OpAccessChain %134 %49 %96
OpStore %140 %139
%144 = OpAccessChain %142 %44 %143
%145 = OpLoad %11 %144
%146 = OpIAdd %11 %143 %145
%147 = OpAccessChain %139 %49 %141
OpStore %147 %146
%151 = OpAccessChain %149 %44 %150
%152 = OpLoad %12 %151
%153 = OpAccessChain %148 %46 %150
%146 = OpAccessChain %141 %46 %143
%147 = OpLoad %11 %146
%148 = OpIAdd %11 %145 %147
%149 = OpAccessChain %141 %49 %143
OpStore %149 %148
%153 = OpAccessChain %151 %44 %152
%154 = OpLoad %12 %153
%155 = OpIAdd %12 %152 %154
%156 = OpAccessChain %148 %49 %150
OpStore %156 %155
%160 = OpAccessChain %158 %44 %159
%161 = OpLoad %13 %160
%162 = OpAccessChain %157 %46 %159
%155 = OpAccessChain %150 %46 %152
%156 = OpLoad %12 %155
%157 = OpIAdd %12 %154 %156
%158 = OpAccessChain %150 %49 %152
OpStore %158 %157
%162 = OpAccessChain %160 %44 %161
%163 = OpLoad %13 %162
%164 = OpIAdd %13 %161 %163
%165 = OpAccessChain %157 %49 %159
OpStore %165 %164
%167 = OpAccessChain %166 %48 %75
%168 = OpLoad %17 %167
%169 = OpAccessChain %166 %50 %75
OpStore %169 %168
%170 = OpLoad %3 %55
%171 = OpExtInst %3 %1 SAbs %170
%172 = OpLoad %3 %55
%173 = OpIAdd %3 %172 %171
OpStore %55 %173
%174 = OpLoad %3 %55
%175 = OpLoad %3 %55
%176 = OpLoad %3 %55
%178 = OpExtInst %3 %1 SMax %174 %175
%177 = OpExtInst %3 %1 SMin %178 %176
%179 = OpLoad %3 %55
%180 = OpIAdd %3 %179 %177
OpStore %55 %180
%181 = OpLoad %3 %55
%182 = OpCompositeConstruct %11 %181 %181
%183 = OpLoad %3 %55
%164 = OpAccessChain %159 %46 %161
%165 = OpLoad %13 %164
%166 = OpIAdd %13 %163 %165
%167 = OpAccessChain %159 %49 %161
OpStore %167 %166
%169 = OpAccessChain %168 %48 %77
%170 = OpLoad %17 %169
%171 = OpAccessChain %168 %50 %77
OpStore %171 %170
%172 = OpLoad %3 %56
%173 = OpExtInst %3 %1 SAbs %172
%174 = OpLoad %3 %56
%175 = OpIAdd %3 %174 %173
OpStore %56 %175
%176 = OpLoad %3 %56
%177 = OpLoad %3 %56
%178 = OpLoad %3 %56
%180 = OpExtInst %3 %1 SMax %176 %177
%179 = OpExtInst %3 %1 SMin %180 %178
%181 = OpLoad %3 %56
%182 = OpIAdd %3 %181 %179
OpStore %56 %182
%183 = OpLoad %3 %56
%184 = OpCompositeConstruct %11 %183 %183
%187 = OpCompositeExtract %3 %182 0
%188 = OpCompositeExtract %3 %184 0
%189 = OpIMul %3 %187 %188
%190 = OpIAdd %3 %186 %189
%191 = OpCompositeExtract %3 %182 1
%192 = OpCompositeExtract %3 %184 1
%193 = OpIMul %3 %191 %192
%185 = OpIAdd %3 %190 %193
%194 = OpLoad %3 %55
%195 = OpIAdd %3 %194 %185
OpStore %55 %195
%196 = OpLoad %3 %55
%197 = OpLoad %3 %55
%198 = OpExtInst %3 %1 SMax %196 %197
%199 = OpLoad %3 %55
%200 = OpIAdd %3 %199 %198
OpStore %55 %200
%201 = OpLoad %3 %55
%202 = OpLoad %3 %55
%203 = OpExtInst %3 %1 SMin %201 %202
%204 = OpLoad %3 %55
%205 = OpIAdd %3 %204 %203
OpStore %55 %205
%206 = OpLoad %3 %55
%207 = OpExtInst %3 %1 SSign %206
%208 = OpLoad %3 %55
%209 = OpIAdd %3 %208 %207
OpStore %55 %209
%210 = OpLoad %3 %55
OpReturnValue %210
%185 = OpLoad %3 %56
%186 = OpCompositeConstruct %11 %185 %185
%189 = OpCompositeExtract %3 %184 0
%190 = OpCompositeExtract %3 %186 0
%191 = OpIMul %3 %189 %190
%192 = OpIAdd %3 %188 %191
%193 = OpCompositeExtract %3 %184 1
%194 = OpCompositeExtract %3 %186 1
%195 = OpIMul %3 %193 %194
%187 = OpIAdd %3 %192 %195
%196 = OpLoad %3 %56
%197 = OpIAdd %3 %196 %187
OpStore %56 %197
%198 = OpLoad %3 %56
%199 = OpLoad %3 %56
%200 = OpExtInst %3 %1 SMax %198 %199
%201 = OpLoad %3 %56
%202 = OpIAdd %3 %201 %200
OpStore %56 %202
%203 = OpLoad %3 %56
%204 = OpLoad %3 %56
%205 = OpExtInst %3 %1 SMin %203 %204
%206 = OpLoad %3 %56
%207 = OpIAdd %3 %206 %205
OpStore %56 %207
%208 = OpLoad %3 %56
%209 = OpExtInst %3 %1 SSign %208
%210 = OpLoad %3 %56
%211 = OpIAdd %3 %210 %209
OpStore %56 %211
%212 = OpLoad %3 %56
OpReturnValue %212
OpFunctionEnd
%213 = OpFunction %4 None %214
%212 = OpFunctionParameter %4
%211 = OpLabel
%223 = OpVariable %224 Function %20
%215 = OpAccessChain %42 %23 %43
%216 = OpAccessChain %45 %26 %43
%217 = OpAccessChain %47 %29 %43
%218 = OpAccessChain %45 %32 %43
%219 = OpAccessChain %47 %35 %43
OpBranch %225
%225 = OpLabel
%226 = OpIAdd %4 %220 %221
%227 = OpLoad %4 %223
%228 = OpIAdd %4 %227 %226
OpStore %223 %228
%229 = OpLoad %4 %223
%230 = OpIAdd %4 %229 %222
%231 = OpLoad %4 %223
%232 = OpIAdd %4 %231 %230
OpStore %223 %232
%233 = OpAccessChain %65 %215 %43
%234 = OpLoad %5 %233
%235 = OpLoad %4 %223
%236 = OpUConvert %5 %235
%237 = OpIAdd %5 %234 %236
%238 = OpUConvert %4 %237
%239 = OpLoad %4 %223
%240 = OpIAdd %4 %239 %238
OpStore %223 %240
%241 = OpAccessChain %74 %215 %75
%242 = OpLoad %6 %241
%243 = OpLoad %4 %223
%244 = OpSConvert %6 %243
%245 = OpIAdd %6 %242 %244
%246 = OpUConvert %4 %245
%247 = OpLoad %4 %223
%248 = OpIAdd %4 %247 %246
OpStore %223 %248
%249 = OpAccessChain %84 %215 %16
%250 = OpLoad %7 %249
%251 = OpLoad %4 %223
%252 = OpConvertUToF %7 %251
%253 = OpFAdd %7 %250 %252
%254 = OpConvertFToU %4 %253
%255 = OpLoad %4 %223
%256 = OpIAdd %4 %255 %254
OpStore %223 %256
%257 = OpAccessChain %101 %215 %102
%258 = OpLoad %4 %257
%259 = OpCompositeConstruct %9 %258 %258 %258
%260 = OpCompositeExtract %4 %259 2
%261 = OpLoad %4 %223
%262 = OpIAdd %4 %261 %260
OpStore %223 %262
%263 = OpAccessChain %93 %215 %94
%264 = OpLoad %3 %263
%265 = OpBitcast %4 %264
%266 = OpLoad %4 %223
%267 = OpIAdd %4 %266 %265
OpStore %223 %267
%268 = OpAccessChain %140 %215 %141
%269 = OpLoad %11 %268
%270 = OpBitcast %8 %269
%271 = OpCompositeExtract %4 %270 1
%272 = OpLoad %4 %223
%273 = OpIAdd %4 %272 %271
OpStore %223 %273
%274 = OpAccessChain %149 %215 %150
%275 = OpLoad %12 %274
%276 = OpBitcast %9 %275
%277 = OpCompositeExtract %4 %276 2
%278 = OpLoad %4 %223
%279 = OpIAdd %4 %278 %277
OpStore %223 %279
%280 = OpAccessChain %158 %215 %159
%281 = OpLoad %13 %280
%282 = OpBitcast %10 %281
%283 = OpCompositeExtract %4 %282 3
%284 = OpLoad %4 %223
%285 = OpIAdd %4 %284 %283
OpStore %223 %285
%287 = OpAccessChain %101 %215 %102
%288 = OpLoad %4 %287
%289 = OpAccessChain %286 %216 %102
%290 = OpLoad %4 %289
%291 = OpIAdd %4 %288 %290
%292 = OpAccessChain %286 %218 %102
OpStore %292 %291
%294 = OpAccessChain %108 %215 %109
%295 = OpLoad %8 %294
%296 = OpAccessChain %293 %216 %109
%297 = OpLoad %8 %296
%298 = OpIAdd %8 %295 %297
%299 = OpAccessChain %293 %218 %109
OpStore %299 %298
%301 = OpAccessChain %116 %215 %117
%302 = OpLoad %9 %301
%303 = OpAccessChain %300 %216 %117
%304 = OpLoad %9 %303
%305 = OpIAdd %9 %302 %304
%306 = OpAccessChain %300 %218 %117
OpStore %306 %305
%308 = OpAccessChain %124 %215 %125
%309 = OpLoad %10 %308
%310 = OpAccessChain %307 %216 %125
%311 = OpLoad %10 %310
%312 = OpIAdd %10 %309 %311
%313 = OpAccessChain %307 %218 %125
OpStore %313 %312
%315 = OpAccessChain %314 %217 %43
%316 = OpLoad %15 %315
%317 = OpAccessChain %314 %219 %43
OpStore %317 %316
%318 = OpLoad %4 %223
%319 = OpCopyObject %4 %318
%320 = OpLoad %4 %223
%321 = OpIAdd %4 %320 %319
OpStore %223 %321
%322 = OpLoad %4 %223
%323 = OpLoad %4 %223
%324 = OpLoad %4 %223
%326 = OpExtInst %4 %1 UMax %322 %323
%325 = OpExtInst %4 %1 UMin %326 %324
%327 = OpLoad %4 %223
%328 = OpIAdd %4 %327 %325
OpStore %223 %328
%329 = OpLoad %4 %223
%330 = OpCompositeConstruct %8 %329 %329
%331 = OpLoad %4 %223
%332 = OpCompositeConstruct %8 %331 %331
%335 = OpCompositeExtract %4 %330 0
%336 = OpCompositeExtract %4 %332 0
%337 = OpIMul %4 %335 %336
%338 = OpIAdd %4 %334 %337
%339 = OpCompositeExtract %4 %330 1
%340 = OpCompositeExtract %4 %332 1
%341 = OpIMul %4 %339 %340
%333 = OpIAdd %4 %338 %341
%342 = OpLoad %4 %223
%343 = OpIAdd %4 %342 %333
OpStore %223 %343
%344 = OpLoad %4 %223
%345 = OpLoad %4 %223
%346 = OpExtInst %4 %1 UMax %344 %345
%347 = OpLoad %4 %223
%348 = OpIAdd %4 %347 %346
OpStore %223 %348
%349 = OpLoad %4 %223
%350 = OpLoad %4 %223
%351 = OpExtInst %4 %1 UMin %349 %350
%352 = OpLoad %4 %223
%353 = OpIAdd %4 %352 %351
OpStore %223 %353
%354 = OpLoad %4 %223
OpReturnValue %354
%215 = OpFunction %4 None %216
%214 = OpFunctionParameter %4
%213 = OpLabel
%225 = OpVariable %226 Function %20
%217 = OpAccessChain %42 %23 %43
%218 = OpAccessChain %45 %26 %43
%219 = OpAccessChain %47 %29 %43
%220 = OpAccessChain %45 %32 %43
%221 = OpAccessChain %47 %35 %43
OpBranch %227
%227 = OpLabel
%228 = OpIAdd %4 %222 %223
%229 = OpISub %4 %228 %223
%230 = OpLoad %4 %225
%231 = OpIAdd %4 %230 %229
OpStore %225 %231
%232 = OpLoad %4 %225
%233 = OpIAdd %4 %232 %224
%234 = OpLoad %4 %225
%235 = OpIAdd %4 %234 %233
OpStore %225 %235
%236 = OpAccessChain %67 %217 %43
%237 = OpLoad %5 %236
%238 = OpLoad %4 %225
%239 = OpUConvert %5 %238
%240 = OpIAdd %5 %237 %239
%241 = OpUConvert %4 %240
%242 = OpLoad %4 %225
%243 = OpIAdd %4 %242 %241
OpStore %225 %243
%244 = OpAccessChain %76 %217 %77
%245 = OpLoad %6 %244
%246 = OpLoad %4 %225
%247 = OpSConvert %6 %246
%248 = OpIAdd %6 %245 %247
%249 = OpUConvert %4 %248
%250 = OpLoad %4 %225
%251 = OpIAdd %4 %250 %249
OpStore %225 %251
%252 = OpAccessChain %86 %217 %16
%253 = OpLoad %7 %252
%254 = OpLoad %4 %225
%255 = OpConvertUToF %7 %254
%256 = OpFAdd %7 %253 %255
%257 = OpConvertFToU %4 %256
%258 = OpLoad %4 %225
%259 = OpIAdd %4 %258 %257
OpStore %225 %259
%260 = OpAccessChain %103 %217 %104
%261 = OpLoad %4 %260
%262 = OpCompositeConstruct %9 %261 %261 %261
%263 = OpCompositeExtract %4 %262 2
%264 = OpLoad %4 %225
%265 = OpIAdd %4 %264 %263
OpStore %225 %265
%266 = OpAccessChain %95 %217 %96
%267 = OpLoad %3 %266
%268 = OpBitcast %4 %267
%269 = OpLoad %4 %225
%270 = OpIAdd %4 %269 %268
OpStore %225 %270
%271 = OpAccessChain %142 %217 %143
%272 = OpLoad %11 %271
%273 = OpBitcast %8 %272
%274 = OpCompositeExtract %4 %273 1
%275 = OpLoad %4 %225
%276 = OpIAdd %4 %275 %274
OpStore %225 %276
%277 = OpAccessChain %151 %217 %152
%278 = OpLoad %12 %277
%279 = OpBitcast %9 %278
%280 = OpCompositeExtract %4 %279 2
%281 = OpLoad %4 %225
%282 = OpIAdd %4 %281 %280
OpStore %225 %282
%283 = OpAccessChain %160 %217 %161
%284 = OpLoad %13 %283
%285 = OpBitcast %10 %284
%286 = OpCompositeExtract %4 %285 3
%287 = OpLoad %4 %225
%288 = OpIAdd %4 %287 %286
OpStore %225 %288
%290 = OpAccessChain %103 %217 %104
%291 = OpLoad %4 %290
%292 = OpAccessChain %289 %218 %104
%293 = OpLoad %4 %292
%294 = OpIAdd %4 %291 %293
%295 = OpAccessChain %289 %220 %104
OpStore %295 %294
%297 = OpAccessChain %110 %217 %111
%298 = OpLoad %8 %297
%299 = OpAccessChain %296 %218 %111
%300 = OpLoad %8 %299
%301 = OpIAdd %8 %298 %300
%302 = OpAccessChain %296 %220 %111
OpStore %302 %301
%304 = OpAccessChain %118 %217 %119
%305 = OpLoad %9 %304
%306 = OpAccessChain %303 %218 %119
%307 = OpLoad %9 %306
%308 = OpIAdd %9 %305 %307
%309 = OpAccessChain %303 %220 %119
OpStore %309 %308
%311 = OpAccessChain %126 %217 %127
%312 = OpLoad %10 %311
%313 = OpAccessChain %310 %218 %127
%314 = OpLoad %10 %313
%315 = OpIAdd %10 %312 %314
%316 = OpAccessChain %310 %220 %127
OpStore %316 %315
%318 = OpAccessChain %317 %219 %43
%319 = OpLoad %15 %318
%320 = OpAccessChain %317 %221 %43
OpStore %320 %319
%321 = OpLoad %4 %225
%322 = OpCopyObject %4 %321
%323 = OpLoad %4 %225
%324 = OpIAdd %4 %323 %322
OpStore %225 %324
%325 = OpLoad %4 %225
%326 = OpLoad %4 %225
%327 = OpLoad %4 %225
%329 = OpExtInst %4 %1 UMax %325 %326
%328 = OpExtInst %4 %1 UMin %329 %327
%330 = OpLoad %4 %225
%331 = OpIAdd %4 %330 %328
OpStore %225 %331
%332 = OpLoad %4 %225
%333 = OpCompositeConstruct %8 %332 %332
%334 = OpLoad %4 %225
%335 = OpCompositeConstruct %8 %334 %334
%338 = OpCompositeExtract %4 %333 0
%339 = OpCompositeExtract %4 %335 0
%340 = OpIMul %4 %338 %339
%341 = OpIAdd %4 %337 %340
%342 = OpCompositeExtract %4 %333 1
%343 = OpCompositeExtract %4 %335 1
%344 = OpIMul %4 %342 %343
%336 = OpIAdd %4 %341 %344
%345 = OpLoad %4 %225
%346 = OpIAdd %4 %345 %336
OpStore %225 %346
%347 = OpLoad %4 %225
%348 = OpLoad %4 %225
%349 = OpExtInst %4 %1 UMax %347 %348
%350 = OpLoad %4 %225
%351 = OpIAdd %4 %350 %349
OpStore %225 %351
%352 = OpLoad %4 %225
%353 = OpLoad %4 %225
%354 = OpExtInst %4 %1 UMin %352 %353
%355 = OpLoad %4 %225
%356 = OpIAdd %4 %355 %354
OpStore %225 %356
%357 = OpLoad %4 %225
OpReturnValue %357
OpFunctionEnd
%356 = OpFunction %2 None %357
%355 = OpLabel
%358 = OpAccessChain %42 %23 %43
%359 = OpAccessChain %45 %26 %43
%360 = OpAccessChain %47 %29 %43
%361 = OpAccessChain %45 %32 %43
%362 = OpAccessChain %47 %35 %43
OpBranch %365
%365 = OpLabel
%366 = OpFunctionCall %4 %213 %363
%367 = OpFunctionCall %3 %40 %364
%368 = OpBitcast %4 %367
%369 = OpIAdd %4 %366 %368
%371 = OpAccessChain %286 %361 %370
OpStore %371 %369
%359 = OpFunction %2 None %360
%358 = OpLabel
%361 = OpAccessChain %42 %23 %43
%362 = OpAccessChain %45 %26 %43
%363 = OpAccessChain %47 %29 %43
%364 = OpAccessChain %45 %32 %43
%365 = OpAccessChain %47 %35 %43
OpBranch %368
%368 = OpLabel
%369 = OpFunctionCall %4 %215 %366
%370 = OpFunctionCall %3 %40 %367
%371 = OpBitcast %4 %370
%372 = OpIAdd %4 %369 %371
%374 = OpAccessChain %289 %364 %373
OpStore %374 %372
OpReturn
OpFunctionEnd

View File

@ -35,150 +35,150 @@ var<storage, read_write> output_arrays: StorageCompatible;
fn int64_function(x: i64) -> i64 {
var val: i64 = 20li;
let _e6 = val;
val = (_e6 + (31li - 1002003004005006li));
let _e8 = val;
let _e11 = val;
val = (_e11 + (_e8 + 5li));
let _e15 = input_uniform.val_u32_;
let _e16 = val;
let _e20 = val;
val = (_e20 + i64((_e15 + u32(_e16))));
let _e24 = input_uniform.val_i32_;
let _e25 = val;
let _e29 = val;
val = (_e29 + i64((_e24 + i32(_e25))));
let _e33 = input_uniform.val_f32_;
let _e34 = val;
let _e38 = val;
val = (_e38 + i64((_e33 + f32(_e34))));
let _e42 = input_uniform.val_i64_;
let _e45 = val;
val = (_e45 + vec3(_e42).z);
let _e49 = input_uniform.val_u64_;
let _e51 = val;
val = (_e51 + bitcast<i64>(_e49));
let _e55 = input_uniform.val_u64_2_;
let _e58 = val;
val = (_e58 + bitcast<vec2<i64>>(_e55).y);
let _e62 = input_uniform.val_u64_3_;
let _e65 = val;
val = (_e65 + bitcast<vec3<i64>>(_e62).z);
let _e69 = input_uniform.val_u64_4_;
let _e72 = val;
val = (_e72 + bitcast<vec4<i64>>(_e69).w);
let _e78 = input_uniform.val_i64_;
let _e81 = input_storage.val_i64_;
output.val_i64_ = (_e78 + _e81);
let _e87 = input_uniform.val_i64_2_;
let _e90 = input_storage.val_i64_2_;
output.val_i64_2_ = (_e87 + _e90);
let _e96 = input_uniform.val_i64_3_;
let _e99 = input_storage.val_i64_3_;
output.val_i64_3_ = (_e96 + _e99);
let _e105 = input_uniform.val_i64_4_;
let _e108 = input_storage.val_i64_4_;
output.val_i64_4_ = (_e105 + _e108);
let _e114 = input_arrays.val_i64_array_2_;
output_arrays.val_i64_array_2_ = _e114;
let _e115 = val;
val = (_e8 + ((31li - 1002003004005006li) + -9223372036854775807li));
let _e10 = val;
let _e13 = val;
val = (_e13 + (_e10 + 5li));
let _e17 = input_uniform.val_u32_;
let _e18 = val;
let _e22 = val;
val = (_e22 + i64((_e17 + u32(_e18))));
let _e26 = input_uniform.val_i32_;
let _e27 = val;
let _e31 = val;
val = (_e31 + i64((_e26 + i32(_e27))));
let _e35 = input_uniform.val_f32_;
let _e36 = val;
let _e40 = val;
val = (_e40 + i64((_e35 + f32(_e36))));
let _e44 = input_uniform.val_i64_;
let _e47 = val;
val = (_e47 + vec3(_e44).z);
let _e51 = input_uniform.val_u64_;
let _e53 = val;
val = (_e53 + bitcast<i64>(_e51));
let _e57 = input_uniform.val_u64_2_;
let _e60 = val;
val = (_e60 + bitcast<vec2<i64>>(_e57).y);
let _e64 = input_uniform.val_u64_3_;
let _e67 = val;
val = (_e67 + bitcast<vec3<i64>>(_e64).z);
let _e71 = input_uniform.val_u64_4_;
let _e74 = val;
val = (_e74 + bitcast<vec4<i64>>(_e71).w);
let _e80 = input_uniform.val_i64_;
let _e83 = input_storage.val_i64_;
output.val_i64_ = (_e80 + _e83);
let _e89 = input_uniform.val_i64_2_;
let _e92 = input_storage.val_i64_2_;
output.val_i64_2_ = (_e89 + _e92);
let _e98 = input_uniform.val_i64_3_;
let _e101 = input_storage.val_i64_3_;
output.val_i64_3_ = (_e98 + _e101);
let _e107 = input_uniform.val_i64_4_;
let _e110 = input_storage.val_i64_4_;
output.val_i64_4_ = (_e107 + _e110);
let _e116 = input_arrays.val_i64_array_2_;
output_arrays.val_i64_array_2_ = _e116;
let _e117 = val;
val = (_e117 + abs(_e115));
let _e119 = val;
let _e120 = val;
val = (_e119 + abs(_e117));
let _e121 = val;
let _e122 = val;
let _e123 = val;
val = (_e123 + clamp(_e119, _e120, _e121));
let _e125 = val;
val = (_e125 + clamp(_e121, _e122, _e123));
let _e127 = val;
let _e130 = val;
val = (_e130 + dot(vec2(_e125), vec2(_e127)));
let _e129 = val;
let _e132 = val;
let _e133 = val;
val = (_e132 + dot(vec2(_e127), vec2(_e129)));
let _e134 = val;
let _e135 = val;
val = (_e135 + max(_e132, _e133));
let _e137 = val;
let _e138 = val;
val = (_e137 + max(_e134, _e135));
let _e139 = val;
let _e140 = val;
val = (_e140 + min(_e137, _e138));
let _e142 = val;
val = (_e142 + min(_e139, _e140));
let _e144 = val;
val = (_e144 + sign(_e142));
let _e146 = val;
return _e146;
val = (_e146 + sign(_e144));
let _e148 = val;
return _e148;
}
fn uint64_function(x_1: u64) -> u64 {
var val_1: u64 = 20lu;
let _e6 = val_1;
val_1 = (_e6 + (31lu + 1002003004005006lu));
let _e8 = val_1;
let _e11 = val_1;
val_1 = (_e11 + (_e8 + 5lu));
let _e15 = input_uniform.val_u32_;
let _e16 = val_1;
let _e20 = val_1;
val_1 = (_e20 + u64((_e15 + u32(_e16))));
let _e24 = input_uniform.val_i32_;
let _e25 = val_1;
let _e29 = val_1;
val_1 = (_e29 + u64((_e24 + i32(_e25))));
let _e33 = input_uniform.val_f32_;
let _e34 = val_1;
let _e38 = val_1;
val_1 = (_e38 + u64((_e33 + f32(_e34))));
let _e42 = input_uniform.val_u64_;
let _e45 = val_1;
val_1 = (_e45 + vec3(_e42).z);
let _e49 = input_uniform.val_i64_;
let _e51 = val_1;
val_1 = (_e51 + bitcast<u64>(_e49));
let _e55 = input_uniform.val_i64_2_;
let _e58 = val_1;
val_1 = (_e58 + bitcast<vec2<u64>>(_e55).y);
let _e62 = input_uniform.val_i64_3_;
let _e65 = val_1;
val_1 = (_e65 + bitcast<vec3<u64>>(_e62).z);
let _e69 = input_uniform.val_i64_4_;
let _e72 = val_1;
val_1 = (_e72 + bitcast<vec4<u64>>(_e69).w);
let _e78 = input_uniform.val_u64_;
let _e81 = input_storage.val_u64_;
output.val_u64_ = (_e78 + _e81);
let _e87 = input_uniform.val_u64_2_;
let _e90 = input_storage.val_u64_2_;
output.val_u64_2_ = (_e87 + _e90);
let _e96 = input_uniform.val_u64_3_;
let _e99 = input_storage.val_u64_3_;
output.val_u64_3_ = (_e96 + _e99);
let _e105 = input_uniform.val_u64_4_;
let _e108 = input_storage.val_u64_4_;
output.val_u64_4_ = (_e105 + _e108);
let _e114 = input_arrays.val_u64_array_2_;
output_arrays.val_u64_array_2_ = _e114;
let _e115 = val_1;
val_1 = (_e8 + ((31lu + 18446744073709551615lu) - 18446744073709551615lu));
let _e10 = val_1;
let _e13 = val_1;
val_1 = (_e13 + (_e10 + 5lu));
let _e17 = input_uniform.val_u32_;
let _e18 = val_1;
let _e22 = val_1;
val_1 = (_e22 + u64((_e17 + u32(_e18))));
let _e26 = input_uniform.val_i32_;
let _e27 = val_1;
let _e31 = val_1;
val_1 = (_e31 + u64((_e26 + i32(_e27))));
let _e35 = input_uniform.val_f32_;
let _e36 = val_1;
let _e40 = val_1;
val_1 = (_e40 + u64((_e35 + f32(_e36))));
let _e44 = input_uniform.val_u64_;
let _e47 = val_1;
val_1 = (_e47 + vec3(_e44).z);
let _e51 = input_uniform.val_i64_;
let _e53 = val_1;
val_1 = (_e53 + bitcast<u64>(_e51));
let _e57 = input_uniform.val_i64_2_;
let _e60 = val_1;
val_1 = (_e60 + bitcast<vec2<u64>>(_e57).y);
let _e64 = input_uniform.val_i64_3_;
let _e67 = val_1;
val_1 = (_e67 + bitcast<vec3<u64>>(_e64).z);
let _e71 = input_uniform.val_i64_4_;
let _e74 = val_1;
val_1 = (_e74 + bitcast<vec4<u64>>(_e71).w);
let _e80 = input_uniform.val_u64_;
let _e83 = input_storage.val_u64_;
output.val_u64_ = (_e80 + _e83);
let _e89 = input_uniform.val_u64_2_;
let _e92 = input_storage.val_u64_2_;
output.val_u64_2_ = (_e89 + _e92);
let _e98 = input_uniform.val_u64_3_;
let _e101 = input_storage.val_u64_3_;
output.val_u64_3_ = (_e98 + _e101);
let _e107 = input_uniform.val_u64_4_;
let _e110 = input_storage.val_u64_4_;
output.val_u64_4_ = (_e107 + _e110);
let _e116 = input_arrays.val_u64_array_2_;
output_arrays.val_u64_array_2_ = _e116;
let _e117 = val_1;
val_1 = (_e117 + abs(_e115));
let _e119 = val_1;
let _e120 = val_1;
val_1 = (_e119 + abs(_e117));
let _e121 = val_1;
let _e122 = val_1;
let _e123 = val_1;
val_1 = (_e123 + clamp(_e119, _e120, _e121));
let _e125 = val_1;
val_1 = (_e125 + clamp(_e121, _e122, _e123));
let _e127 = val_1;
let _e130 = val_1;
val_1 = (_e130 + dot(vec2(_e125), vec2(_e127)));
let _e129 = val_1;
let _e132 = val_1;
let _e133 = val_1;
val_1 = (_e132 + dot(vec2(_e127), vec2(_e129)));
let _e134 = val_1;
let _e135 = val_1;
val_1 = (_e135 + max(_e132, _e133));
let _e137 = val_1;
let _e138 = val_1;
val_1 = (_e137 + max(_e134, _e135));
let _e139 = val_1;
let _e140 = val_1;
val_1 = (_e140 + min(_e137, _e138));
let _e142 = val_1;
return _e142;
val_1 = (_e142 + min(_e139, _e140));
let _e144 = val_1;
return _e144;
}
@compute @workgroup_size(1, 1, 1)