wgpu/naga/tests/out/msl/wgsl-math-functions.msl
Sam 6e76a98c99
[naga const-eval] LiteralVector and some demo builtins (#8223)
* [naga] Add `LiteralVector` and `match_literal_vector!`

Co-authored-by: SelkoSays <70065171+SelkoSays@users.noreply.github.com>
Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>

* [naga] Implement builtins dot, length, distance, normalize in const using LiteralVector

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>

* Update snapshots

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
Co-authored-by: SelkoSays <70065171+SelkoSays@users.noreply.github.com>
2025-10-18 07:28:09 -04:00

97 lines
3.2 KiB
Plaintext

// language: metal1.0
#include <metal_stdlib>
#include <simd/simd.h>
using metal::uint;
struct _modf_result_f32_ {
float fract;
float whole;
};
struct _modf_result_vec2_f32_ {
metal::float2 fract;
metal::float2 whole;
};
struct _modf_result_vec4_f32_ {
metal::float4 fract;
metal::float4 whole;
};
struct _frexp_result_f32_ {
float fract;
int exp;
};
struct _frexp_result_vec4_f32_ {
metal::float4 fract;
metal::int4 exp;
};
_modf_result_f32_ naga_modf(float arg) {
float other;
float fract = metal::modf(arg, other);
return _modf_result_f32_{ fract, other };
}
_modf_result_vec2_f32_ naga_modf(metal::float2 arg) {
metal::float2 other;
metal::float2 fract = metal::modf(arg, other);
return _modf_result_vec2_f32_{ fract, other };
}
_modf_result_vec4_f32_ naga_modf(metal::float4 arg) {
metal::float4 other;
metal::float4 fract = metal::modf(arg, other);
return _modf_result_vec4_f32_{ fract, other };
}
_frexp_result_f32_ naga_frexp(float arg) {
int other;
float fract = metal::frexp(arg, other);
return _frexp_result_f32_{ fract, other };
}
_frexp_result_vec4_f32_ naga_frexp(metal::float4 arg) {
int4 other;
metal::float4 fract = metal::frexp(arg, other);
return _frexp_result_vec4_f32_{ fract, other };
}
fragment void main_(
) {
metal::float4 v = metal::float4(0.0);
float a = ((1.0) * 57.295779513082322865);
float b = ((1.0) * 0.017453292519943295474);
metal::float4 c = ((v) * 57.295779513082322865);
metal::float4 d = ((v) * 0.017453292519943295474);
metal::float4 e = metal::saturate(v);
metal::float4 g = metal::refract(v, v, 1.0);
metal::int4 sign_b = metal::int4(-1, -1, -1, -1);
metal::float4 sign_d = metal::float4(-1.0, -1.0, -1.0, -1.0);
metal::int2 flb_b = metal::int2(-1, -1);
metal::uint2 flb_c = metal::uint2(0u, 0u);
metal::int2 ftb_c = metal::int2(0, 0);
metal::uint2 ftb_d = metal::uint2(0u, 0u);
metal::uint2 ctz_e = metal::uint2(32u, 32u);
metal::int2 ctz_f = metal::int2(32, 32);
metal::uint2 ctz_g = metal::uint2(0u, 0u);
metal::int2 ctz_h = metal::int2(0, 0);
metal::int2 clz_c = metal::int2(0, 0);
metal::uint2 clz_d = metal::uint2(31u, 31u);
float lde_a = metal::ldexp(1.0, 2);
metal::float2 lde_b = metal::ldexp(metal::float2(1.0, 2.0), metal::int2(3, 4));
_modf_result_f32_ modf_a = naga_modf(1.5);
float modf_b = naga_modf(1.5).fract;
float modf_c = naga_modf(1.5).whole;
_modf_result_vec2_f32_ modf_d = naga_modf(metal::float2(1.5, 1.5));
float modf_e = naga_modf(metal::float4(1.5, 1.5, 1.5, 1.5)).whole.x;
float modf_f = naga_modf(metal::float2(1.5, 1.5)).fract.y;
_frexp_result_f32_ frexp_a = naga_frexp(1.5);
float frexp_b = naga_frexp(1.5).fract;
int frexp_c = naga_frexp(1.5).exp;
int frexp_d = naga_frexp(metal::float4(1.5, 1.5, 1.5, 1.5)).exp.x;
float quantizeToF16_a = float(half(1.0));
metal::float2 quantizeToF16_b = metal::float2(metal::half2(metal::float2(1.0, 1.0)));
metal::float3 quantizeToF16_c = metal::float3(metal::half3(metal::float3(1.0, 1.0, 1.0)));
metal::float4 quantizeToF16_d = metal::float4(metal::half4(metal::float4(1.0, 1.0, 1.0, 1.0)));
return;
}