using Burst.Compiler.IL.Tests.Helpers; using NUnit.Framework; using Unity.Mathematics; namespace Burst.Compiler.IL.Tests { [TestFixture] internal partial class VectorsMaths { [TestCompiler] public static ulong HalfToFloatAndDouble() { return math.asuint(new half {value = 0x0000}) + math.asulong(new half {value = 0x1000}); } // --------------------------------------------------------- // asfloat // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float AsFloatInt4(ref int4 a) { return Vectors.ConvertToFloat(math.asfloat(a)); } [TestCompiler(DataRange.Standard)] public static float AsFloatInt3(ref int3 a) { return Vectors.ConvertToFloat(math.asfloat(a)); } [TestCompiler(DataRange.Standard)] public static float AsFloatInt2(ref int2 a) { return Vectors.ConvertToFloat(math.asfloat(a)); } [TestCompiler(DataRange.Standard)] public static float AsFloatUInt4(ref uint4 a) { return Vectors.ConvertToFloat(math.asfloat(a)); } // --------------------------------------------------------- // asint // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static int AsIntFloat4(ref float4 a) { return Vectors.ConvertToInt(math.asint(a)); } [TestCompiler(DataRange.Standard)] public static int AsIntFloat3(ref float3 a) { return Vectors.ConvertToInt(math.asint(a)); } [TestCompiler(DataRange.Standard)] public static int AsIntFloat2(ref float2 a) { return Vectors.ConvertToInt(math.asint(a)); } // --------------------------------------------------------- // asuint // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static int AsUIntFloat4(ref float4 a) { return Vectors.ConvertToInt(math.asuint(a)); } [TestCompiler(DataRange.Standard)] public static int AsUIntFloat3(ref float3 a) { return Vectors.ConvertToInt(math.asuint(a)); } [TestCompiler(DataRange.Standard)] public static int AsUIntFloat2(ref float2 a) { return Vectors.ConvertToInt(math.asuint(a)); } // --------------------------------------------------------- // compress // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static unsafe int CompressInt4(ref int4 value, ref bool4 mask) { var temp = default(TestCompressInt4); var ptr = &temp.Value0; var count = math.compress(ptr, 0, value, mask); int result = 0; for (int i = 0; i < count; i++) { result = result * 397 + ptr[i]; } return result; } // --------------------------------------------------------- // compress // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static unsafe uint CompressUInt4(ref uint4 value, ref bool4 mask) { var temp = default(TestCompressUInt4); var ptr = &temp.Value0; var count = math.compress(ptr, 0, value, mask); uint result = 0; for (int i = 0; i < count; i++) { result = result * 397 + ptr[i]; } return result; } // --------------------------------------------------------- // compress // --------------------------------------------------------- // IL2CPP codegen on Android fixed in 2023.1 // ... but now it's broken on Switch // ... and also broken on macOS #if BURST_TESTS_ONLY || (UNITY_2023_1_OR_NEWER && !UNITY_SWITCH && !UNITY_STANDALONE_OSX) [TestCompiler(DataRange.Standard, DataRange.Standard)] public static unsafe float CompressFloat4(ref float4 value, ref bool4 mask) { var temp = default(TestCompressFloat4); var ptr = &temp.Value0; var count = math.compress(ptr, 0, value, mask); float result = 0; for (int i = 0; i < count; i++) { result = result * 397 + ptr[i]; } return result; } #endif // --------------------------------------------------------- // count_bits // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static int CountBitsInt(int value) { return math.countbits(value); } [TestCompiler(DataRange.Standard)] public static int CountBitsInt2(ref int2 value) { return Vectors.ConvertToInt(math.countbits(value)); } [TestCompiler(DataRange.Standard)] public static int CountBitsInt3(ref int3 value) { return Vectors.ConvertToInt(math.countbits(value)); } [TestCompiler(DataRange.Standard)] public static int CountBitsInt4(ref int4 value) { return Vectors.ConvertToInt(math.countbits(value)); } [TestCompiler(DataRange.Standard)] public static int CountBitsUInt(uint value) { return math.countbits(value); } [TestCompiler(DataRange.Standard)] public static int CountBitsUInt2(ref uint2 value) { return Vectors.ConvertToInt(math.countbits(value)); } [TestCompiler(DataRange.Standard)] public static int CountBitsUInt3(ref uint3 value) { return Vectors.ConvertToInt(math.countbits(value)); } [TestCompiler(DataRange.Standard)] public static int CountBitsUInt4(ref uint4 value) { return Vectors.ConvertToInt(math.countbits(value)); } [TestCompiler(DataRange.Standard)] public static int CountBitsLong(long value) { return math.countbits(value); } [TestCompiler(DataRange.Standard)] public static int CountBitsULong(ulong value) { return math.countbits(value); } // --------------------------------------------------------- // lzcnt // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static int LzCntInt(int value) { return math.lzcnt(value); } [TestCompiler(DataRange.Standard)] public static int LzCntInt2(ref int2 value) { return Vectors.ConvertToInt(math.lzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int LzCntInt3(ref int3 value) { return Vectors.ConvertToInt(math.lzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int LzCntInt4(ref int4 value) { return Vectors.ConvertToInt(math.lzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int LzCntUInt(uint value) { return math.lzcnt(value); } [TestCompiler(DataRange.Standard)] public static int LzCntUInt2(ref uint2 value) { return Vectors.ConvertToInt(math.lzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int LzCntUInt3(ref uint3 value) { return Vectors.ConvertToInt(math.lzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int LzCntUInt4(ref uint4 value) { return Vectors.ConvertToInt(math.lzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int LzCntLong(long value) { return math.lzcnt(value); } [TestCompiler(DataRange.Standard)] public static int LzCntULong(ulong value) { return math.lzcnt(value); } // --------------------------------------------------------- // tzcnt // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static int TzCntInt(int value) { return math.tzcnt(value); } [TestCompiler(DataRange.Standard)] public static int TzCntInt2(ref int2 value) { return Vectors.ConvertToInt(math.tzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int TzCntInt3(ref int3 value) { return Vectors.ConvertToInt(math.tzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int TzCntInt4(ref int4 value) { return Vectors.ConvertToInt(math.tzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int TzCntUInt(uint value) { return math.tzcnt(value); } [TestCompiler(DataRange.Standard)] public static int TzCntUInt2(ref uint2 value) { return Vectors.ConvertToInt(math.tzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int TzCntUInt3(ref uint3 value) { return Vectors.ConvertToInt(math.tzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int TzCntUInt4(ref uint4 value) { return Vectors.ConvertToInt(math.tzcnt(value)); } [TestCompiler(DataRange.Standard)] public static int TzCntLong(long value) { return math.tzcnt(value); } [TestCompiler(DataRange.Standard)] public static int TzCntULong(ulong value) { return math.tzcnt(value); } // --------------------------------------------------------- // min // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Min4(ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.min(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Min3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.min(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Min2(ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.min(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Min(float a, float b) { return math.min(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static int MinInt4(ref int4 a, ref int4 b) { return Vectors.ConvertToInt(math.min(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static int MinInt3(ref int3 a, ref int3 b) { return Vectors.ConvertToInt(math.min(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static int MinInt2(ref int2 a, ref int2 b) { return Vectors.ConvertToInt(math.min(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static int MinInt(int a, int b) { return math.min(a, b); } // --------------------------------------------------------- // max // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Max4(ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.max(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Max3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.max(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Max2(ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.max(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Max(float a, float b) { return math.max(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static int MaxInt4(ref int4 a, ref int4 b) { return Vectors.ConvertToInt(math.max(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static int MaxInt3(ref int3 a, ref int3 b) { return Vectors.ConvertToInt(math.max(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static int MaxInt2(ref int2 a, ref int2 b) { return Vectors.ConvertToInt(math.max(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float MaxInt(int a, int b) { return math.max(a, b); } // --------------------------------------------------------- // lerp // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive|DataRange.Zero)] public static float Lerp4(ref float4 a, ref float4 b, float w) { return Vectors.ConvertToFloat(math.lerp(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Lerp3(ref float3 a, ref float3 b, float w) { return Vectors.ConvertToFloat(math.lerp(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Lerp2(ref float2 a, ref float2 b, float w) { return Vectors.ConvertToFloat(math.lerp(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Lerp(float a, float b, float w) { return math.lerp(a, b, w); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Lerp4_4(ref float4 a, ref float4 b, ref float4 w) { return Vectors.ConvertToFloat(math.lerp(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Lerp3_3(ref float3 a, ref float3 b, ref float3 w) { return Vectors.ConvertToFloat(math.lerp(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Lerp2_2(ref float2 a, ref float2 b, ref float2 w) { return Vectors.ConvertToFloat(math.lerp(a, b, w)); } // --------------------------------------------------------- // mad // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Mad4(ref float4 a, ref float4 b, ref float4 c) { return Vectors.ConvertToFloat(math.mad(a, b, c)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Mad3(ref float3 a, ref float3 b, ref float3 c) { return Vectors.ConvertToFloat(math.mad(a, b, c)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Mad2(ref float2 a, ref float2 b, ref float2 c) { return Vectors.ConvertToFloat(math.mad(a, b, c)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Mad(float a, float b, float c) { return math.mad(a, b, c); } // --------------------------------------------------------- // clamp // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Clamp4(ref float4 x, ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.clamp(x, a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Clamp3(ref float3 x, ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.clamp(x, a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Clamp2(ref float2 x, ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.clamp(x, a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Clamp(float x, float a, float b) { return math.clamp(x, a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static int ClampInt4(ref int4 x, ref int4 a, ref int4 b) { return Vectors.ConvertToInt(math.clamp(x, a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static int ClampInt3(ref int3 x, ref int3 a, ref int3 b) { return Vectors.ConvertToInt(math.clamp(x, a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static int ClampInt2(ref int2 x, ref int2 a, ref int2 b) { return Vectors.ConvertToInt(math.clamp(x, a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static int ClampInt(int x, int a, int b) { return math.clamp(x, a, b); } // --------------------------------------------------------- // saturate // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Saturate4(ref float4 x) { return Vectors.ConvertToFloat(math.saturate(x)); } [TestCompiler(DataRange.Standard)] public static float Saturate3(ref float3 x) { return Vectors.ConvertToFloat(math.saturate(x)); } [TestCompiler(DataRange.Standard)] public static float Saturate2(ref float2 x) { return Vectors.ConvertToFloat(math.saturate(x)); } [TestCompiler(DataRange.Standard)] public static float Saturate(float x) { return math.saturate(x); } // --------------------------------------------------------- // abs // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Abs4(ref float4 x) { return Vectors.ConvertToFloat(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static float Abs3(ref float3 x) { return Vectors.ConvertToFloat(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static float Abs2(ref float2 x) { return Vectors.ConvertToFloat(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static float Abs(float x) { return math.abs(x); } [TestCompiler(DataRange.Standard)] public static double AbsDouble4(ref double4 x) { return Vectors.ConvertToDouble(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static double AbsDouble3(ref double3 x) { return Vectors.ConvertToDouble(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static double AbsDouble2(ref double2 x) { return Vectors.ConvertToDouble(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static double AbsDouble(double x) { return math.abs(x); } [TestCompiler(DataRange.Standard)] public static int AbsInt4(ref int4 x) { return Vectors.ConvertToInt(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static int AbsInt3(ref int3 x) { return Vectors.ConvertToInt(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static int AbsInt2(ref int2 x) { return Vectors.ConvertToInt(math.abs(x)); } [TestCompiler(DataRange.Standard)] public static int AbsInt(int x) { return math.abs(x); } // --------------------------------------------------------- // dot // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Dot4(ref float4 a, ref float4 b) { return math.dot(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Dot3(ref float3 a, ref float3 b) { return math.dot(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Dot2(ref float2 a, ref float2 b) { return math.dot(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Dot(float a, float b) { return math.dot(a, b); } // --------------------------------------------------------- // cmin // --------------------------------------------------------- [TestCompiler(DataRange.Standard & ~DataRange.NaN)] // TODO: Does no handle NaN correctly public static float CMin4(ref float4 input) { return math.cmin(input); } [TestCompiler(DataRange.Standard & ~DataRange.NaN)] // TODO: Does no handle NaN correctly public static float CMin3(ref float3 input) { return math.cmin(input); } [TestCompiler(DataRange.Standard & ~DataRange.NaN)] // TODO: Does no handle NaN correctly public static float CMin2(ref float2 input) { return math.cmin(input); } [TestCompiler(DataRange.Standard)] public static float CMinInt4(ref int4 input) { return math.cmin(input); } [TestCompiler(DataRange.Standard)] public static float CMinInt3(ref int3 input) { return math.cmin(input); } [TestCompiler(DataRange.Standard)] public static float CMinInt2(ref int2 input) { return math.cmin(input); } // --------------------------------------------------------- // cmax // --------------------------------------------------------- [TestCompiler(DataRange.Standard & ~DataRange.NaN)] // TODO: Does no handle NaN correctly public static float CMax4(ref float4 input) { return math.cmax(input); } [TestCompiler(DataRange.Standard & ~DataRange.NaN)] // TODO: Does no handle NaN correctly public static float CMax3(ref float3 input) { return math.cmax(input); } [TestCompiler(DataRange.Standard & ~DataRange.NaN)] // TODO: Does no handle NaN correctly public static float CMax2(ref float2 input) { return math.cmax(input); } [TestCompiler(DataRange.Standard)] public static float CMaxInt4(ref int4 input) { return math.cmax(input); } [TestCompiler(DataRange.Standard)] public static float CMaxInt3(ref int3 input) { return math.cmax(input); } [TestCompiler(DataRange.Standard)] public static float CMaxInt2(ref int2 input) { return math.cmax(input); } // --------------------------------------------------------- // csum // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static double CSum4d(ref double4 input) { return math.csum(input); } [TestCompiler(DataRange.Standard)] public static float CSum4(ref float4 input) { return math.csum(input); } [TestCompiler(DataRange.Standard)] public static float CSum3(ref float3 input) { return math.csum(input); } [TestCompiler(DataRange.Standard)] public static float CSum2(ref float2 input) { return math.csum(input); } [TestCompiler(DataRange.Standard)] public static float CSumInt4(ref int4 input) { return math.csum(input); } [TestCompiler(DataRange.Standard)] public static float CSumInt3(ref int3 input) { return math.csum(input); } [TestCompiler(DataRange.Standard)] public static float CSumInt2(ref int2 input) { return math.csum(input); } // --------------------------------------------------------- // acos // --------------------------------------------------------- [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ACos4(ref float4 input) { return Vectors.ConvertToFloat(math.acos(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ACos3(ref float3 input) { return Vectors.ConvertToFloat(math.acos(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ACos2(ref float2 input) { return Vectors.ConvertToFloat(math.acos(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ACos(float input) { return math.acos(input); } // --------------------------------------------------------- // asin // --------------------------------------------------------- [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ASin4(ref float4 input) { return Vectors.ConvertToFloat(math.asin(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ASin3(ref float3 input) { return Vectors.ConvertToFloat(math.asin(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ASin2(ref float2 input) { return Vectors.ConvertToFloat(math.asin(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ASin(float input) { return math.asin(input); } // --------------------------------------------------------- // atan // --------------------------------------------------------- [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan_4(ref float4 input) { return Vectors.ConvertToFloat(math.atan(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan_3(ref float3 input) { return Vectors.ConvertToFloat(math.atan(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan_2(ref float2 input) { return Vectors.ConvertToFloat(math.atan(input)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan(float input) { return math.atan(input); } // --------------------------------------------------------- // atan2 // --------------------------------------------------------- [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive, DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan2_4(ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.atan2(a, b)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive, DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan2_3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.atan2(a, b)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive, DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan2_2(ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.atan2(a, b)); } [TestCompiler(DataRange.MinusOneInclusiveToOneInclusive, DataRange.MinusOneInclusiveToOneInclusive)] public static float ATan2(float a, float b) { return math.atan2(a, b); } // --------------------------------------------------------- // cos // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static double Cos4d(ref double4 input) { return Vectors.ConvertToDouble(math.cos(input)); } [TestCompiler(DataRange.Standard)] public static float Cos4(ref float4 input) { return Vectors.ConvertToFloat(math.cos(input)); } [TestCompiler(DataRange.Standard)] public static float Cos3(ref float3 input) { return Vectors.ConvertToFloat(math.cos(input)); } [TestCompiler(DataRange.Standard)] public static float Cos2(ref float2 input) { return Vectors.ConvertToFloat(math.cos(input)); } [TestCompiler(DataRange.Standard)] public static float Cos(float input) { return math.cos(input); } // --------------------------------------------------------- // cosh // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static double Cosh4d(ref double4 input) { return Vectors.ConvertToDouble(math.cosh(input)); } [TestCompiler(DataRange.Standard)] public static float Cosh4(ref float4 input) { return Vectors.ConvertToFloat(math.cosh(input)); } [TestCompiler(DataRange.Standard)] public static float Cosh3(ref float3 input) { return Vectors.ConvertToFloat(math.cosh(input)); } [TestCompiler(DataRange.Standard)] public static float Cosh2(ref float2 input) { return Vectors.ConvertToFloat(math.cosh(input)); } [TestCompiler(DataRange.Standard)] public static float Cosh(float input) { return math.cosh(input); } // --------------------------------------------------------- // sin // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static double Sin4d(ref double4 input) { return Vectors.ConvertToDouble(math.sin(input)); } [TestCompiler(DataRange.Standard)] public static float Sin4(ref float4 input) { return Vectors.ConvertToFloat(math.sin(input)); } [TestCompiler(DataRange.Standard)] public static float Sin3(ref float3 input) { return Vectors.ConvertToFloat(math.sin(input)); } [TestCompiler(DataRange.Standard)] public static float Sin2(ref float2 input) { return Vectors.ConvertToFloat(math.sin(input)); } [TestCompiler(DataRange.Standard)] public static float Sin(float input) { return math.sin(input); } // --------------------------------------------------------- // sinh // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Sinh4(ref float4 input) { return Vectors.ConvertToFloat(math.sinh(input)); } [TestCompiler(DataRange.Standard)] public static float Sinh3(ref float3 input) { return Vectors.ConvertToFloat(math.sinh(input)); } [TestCompiler(DataRange.Standard)] public static float Sinh2(ref float2 input) { return Vectors.ConvertToFloat(math.sinh(input)); } [TestCompiler(DataRange.Standard)] public static float Sinh(float input) { return math.sinh(input); } // --------------------------------------------------------- // sincos // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float SinCos4(ref float4 input) { float4 sina, cosa; math.sincos(input, out sina, out cosa); return Vectors.ConvertToFloat(sina) + Vectors.ConvertToFloat(cosa) * 7.1f; } [TestCompiler(DataRange.Standard)] public static float SinCos3(ref float3 input) { float3 sina, cosa; math.sincos(input, out sina, out cosa); return Vectors.ConvertToFloat(sina) + Vectors.ConvertToFloat(cosa) * 7.1f; } [TestCompiler(DataRange.Standard)] public static float SinCos2(ref float2 input) { float2 sina, cosa; math.sincos(input, out sina, out cosa); return Vectors.ConvertToFloat(sina) + Vectors.ConvertToFloat(cosa) * 7.1f; } [TestCompiler(DataRange.Standard)] public static float SinCos(float input) { float sina, cosa; math.sincos(input, out sina, out cosa); return sina + cosa * 7.1f; } // --------------------------------------------------------- // tanh // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Tanh4(ref float4 input) { return Vectors.ConvertToFloat(math.tanh(input)); } [TestCompiler(DataRange.Standard)] public static float Tanh3(ref float3 input) { return Vectors.ConvertToFloat(math.tanh(input)); } [TestCompiler(DataRange.Standard)] public static float Tanh2(ref float2 input) { return Vectors.ConvertToFloat(math.tanh(input)); } [TestCompiler(DataRange.Standard)] public static float Tanh(float input) { return math.tanh(input); } // --------------------------------------------------------- // sqrt // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Sqrt4(ref float4 input) { return Vectors.ConvertToFloat(math.sqrt(input)); } [TestCompiler(DataRange.Standard)] public static float Sqrt3(ref float3 input) { return Vectors.ConvertToFloat(math.sqrt(input)); } [TestCompiler(DataRange.Standard)] public static float Sqrt2(ref float2 input) { return Vectors.ConvertToFloat(math.sqrt(input)); } [TestCompiler(DataRange.Standard)] public static float Sqrt(float input) { return math.sqrt(input); } // --------------------------------------------------------- // rsqrt // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float RSqrt4(ref float4 input) { return Vectors.ConvertToFloat(math.rsqrt(input)); } [TestCompiler(DataRange.Standard)] public static float RSqrt3(ref float3 input) { return Vectors.ConvertToFloat(math.rsqrt(input)); } [TestCompiler(DataRange.Standard)] public static float RSqrt2(ref float2 input) { return Vectors.ConvertToFloat(math.rsqrt(input)); } [TestCompiler(DataRange.Standard)] public static float RSqrt(float input) { return math.rsqrt(input); } // --------------------------------------------------------- // floor // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Floor4(ref float4 input) { return Vectors.ConvertToFloat(math.floor(input)); } [TestCompiler(DataRange.Standard)] public static float Floor3(ref float3 input) { return Vectors.ConvertToFloat(math.floor(input)); } [TestCompiler(DataRange.Standard)] public static float Floor2(ref float2 input) { return Vectors.ConvertToFloat(math.floor(input)); } [TestCompiler(DataRange.Standard)] public static float Floor(float input) { return math.floor(input); } // --------------------------------------------------------- // ceil // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Ceil4(ref float4 input) { return Vectors.ConvertToFloat(math.ceil(input)); } [TestCompiler(DataRange.Standard)] public static float Ceil3(ref float3 input) { return Vectors.ConvertToFloat(math.ceil(input)); } [TestCompiler(DataRange.Standard)] public static float Ceil2(ref float2 input) { return Vectors.ConvertToFloat(math.ceil(input)); } [TestCompiler(DataRange.Standard)] public static float Ceil(float input) { return math.ceil(input); } // --------------------------------------------------------- // round // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Round4(ref float4 input) { return Vectors.ConvertToFloat(math.round(input)); } [TestCompiler(DataRange.Standard)] public static float Round3(ref float3 input) { return Vectors.ConvertToFloat(math.round(input)); } [TestCompiler(DataRange.Standard)] public static float Round2(ref float2 input) { return Vectors.ConvertToFloat(math.round(input)); } [TestCompiler(DataRange.Standard)] public static float Round(float input) { return math.round(input); } // --------------------------------------------------------- // frac // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Frac4(ref float4 input) { return Vectors.ConvertToFloat(math.frac(input)); } [TestCompiler(DataRange.Standard)] public static float Frac3(ref float3 input) { return Vectors.ConvertToFloat(math.frac(input)); } [TestCompiler(DataRange.Standard)] public static float Frac2(ref float2 input) { return Vectors.ConvertToFloat(math.frac(input)); } [TestCompiler(DataRange.Standard)] public static float Frac(float input) { return math.frac(input); } // --------------------------------------------------------- // rcp // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Rcp4(ref float4 input) { return Vectors.ConvertToFloat(math.rcp(input)); } [TestCompiler(DataRange.Standard)] public static float Rcp3(ref float3 input) { return Vectors.ConvertToFloat(math.rcp(input)); } [TestCompiler(DataRange.Standard)] public static float Rcp2(ref float2 input) { return Vectors.ConvertToFloat(math.rcp(input)); } [TestCompiler(DataRange.Standard)] public static float Rcp(float input) { return math.rcp(input); } // --------------------------------------------------------- // sign // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Sign4(ref float4 input) { return Vectors.ConvertToFloat(math.sign(input)); } [TestCompiler(DataRange.Standard)] public static float Sign3(ref float3 input) { return Vectors.ConvertToFloat(math.sign(input)); } [TestCompiler(DataRange.Standard)] public static float Sign2(ref float2 input) { return Vectors.ConvertToFloat(math.sign(input)); } [TestCompiler(DataRange.Standard)] public static float Sign(float input) { return math.sign(input); } // --------------------------------------------------------- // pow // --------------------------------------------------------- [TestCompiler(DataRange.Standard & ~(DataRange.NaN | DataRange.Zero), DataRange.Standard)] [TestCompiler(DataRange.Standard & ~(DataRange.NaN), DataRange.Standard & ~(DataRange.Zero))] public static float Pow4(ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.pow(a, b)); } [TestCompiler(DataRange.Standard & ~(DataRange.NaN | DataRange.Zero), DataRange.Standard)] [TestCompiler(DataRange.Standard & ~(DataRange.NaN), DataRange.Standard & ~(DataRange.Zero))] public static float Pow3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.pow(a, b)); } [TestCompiler(DataRange.Standard & ~(DataRange.NaN | DataRange.Zero), DataRange.Standard)] [TestCompiler(DataRange.Standard & ~(DataRange.NaN), DataRange.Standard & ~(DataRange.Zero))] public static float Pow2(ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.pow(a, b)); } [TestCompiler(DataRange.Standard & ~(DataRange.NaN | DataRange.Zero), DataRange.Standard)] [TestCompiler(DataRange.Standard & ~(DataRange.NaN), DataRange.Standard & ~(DataRange.Zero))] public static float Pow(float a, float b) { return math.pow(a, b); } // --------------------------------------------------------- // exp // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Exp4(ref float4 input) { return Vectors.ConvertToFloat(math.exp(input)); } [TestCompiler(DataRange.Standard)] public static float Exp3(ref float3 input) { return Vectors.ConvertToFloat(math.exp(input)); } [TestCompiler(DataRange.Standard)] public static float Exp2(ref float2 input) { return Vectors.ConvertToFloat(math.exp(input)); } [TestCompiler(DataRange.Standard)] public static float Exp(float input) { return math.exp(input); } // --------------------------------------------------------- // mod // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Mod4(ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.fmod(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Mod3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.fmod(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Mod2(ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.fmod(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Mod(float a, float b) { return math.fmod(a, b); } // --------------------------------------------------------- // normalize // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Normalize4(ref float4 input) { return Vectors.ConvertToFloat(math.normalize(input)); } [TestCompiler(DataRange.Standard)] public static float Normalize3(ref float3 input) { return Vectors.ConvertToFloat(math.normalize(input)); } [TestCompiler(DataRange.Standard)] public static float Normalize2(ref float2 input) { return Vectors.ConvertToFloat(math.normalize(input)); } // --------------------------------------------------------- // length // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static float Length4(ref float4 input) { return math.length(input); } [TestCompiler(DataRange.Standard)] public static float Length3(ref float3 input) { return math.length(input); } [TestCompiler(DataRange.Standard)] public static float Length2(ref float2 input) { return math.length(input); } [TestCompiler(DataRange.Standard)] public static float Length(float input) { return math.length(input); } // --------------------------------------------------------- // distance // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Distance4(ref float4 a, ref float4 b) { return math.distance(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Distance3(ref float3 a, ref float3 b) { return math.distance(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Distance2(ref float2 a, ref float2 b) { return math.distance(a, b); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Distance(float a, float b) { return math.distance(a, b); } // --------------------------------------------------------- // cross // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Cross3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.cross(a, b)); } // --------------------------------------------------------- // smoothstep // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Smoothstep4(ref float4 a, ref float4 b, float w) { return Vectors.ConvertToFloat(math.smoothstep(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Smoothstep3(ref float3 a, ref float3 b, float w) { return Vectors.ConvertToFloat(math.smoothstep(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Smoothstep2(ref float2 a, ref float2 b, float w) { return Vectors.ConvertToFloat(math.smoothstep(a, b, w)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.ZeroExclusiveToOneInclusive | DataRange.Zero)] public static float Smoothstep(float a, float b, float w) { return math.smoothstep(a, b, w); } // --------------------------------------------------------- // any // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static bool Any4(ref float4 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool Any32(ref float3 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool Any(ref float2 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool AnyInt4(ref int4 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool AnyInt3(ref int3 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool AnyInt2(ref int2 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool AnyBool4(ref bool4 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool AnyBool3(ref bool3 input) { return math.any(input); } [TestCompiler(DataRange.Standard)] public static bool AnyBool2(ref bool2 input) { return math.any(input); } // --------------------------------------------------------- // all // --------------------------------------------------------- [TestCompiler(DataRange.Standard)] public static bool All4(ref float4 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool All3(ref float3 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool All2(ref float2 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool AllInt4(ref int4 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool AllInt3(ref int3 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool AllInt2(ref int2 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool AllBool4(ref bool4 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool AllBool3(ref bool3 input) { return math.all(input); } [TestCompiler(DataRange.Standard)] public static bool AllBool2(ref bool2 input) { return math.all(input); } // --------------------------------------------------------- // select // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Select4(ref bool4 c, ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.select(a, b, c)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Select3(ref bool3 c, ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.select(a, b, c)); } [TestCompiler(DataRange.Standard, DataRange.Standard, DataRange.Standard)] public static float Select(ref bool2 c, ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.select(a, b, c)); } // --------------------------------------------------------- // step // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Step4(ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.step(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Step3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.step(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Step2(ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.step(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Step(float a, float b) { return math.step(a, b); } // --------------------------------------------------------- // reflect // --------------------------------------------------------- [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Reflect4(ref float4 a, ref float4 b) { return Vectors.ConvertToFloat(math.reflect(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Reflect3(ref float3 a, ref float3 b) { return Vectors.ConvertToFloat(math.reflect(a, b)); } [TestCompiler(DataRange.Standard, DataRange.Standard)] public static float Reflect2(ref float2 a, ref float2 b) { return Vectors.ConvertToFloat(math.reflect(a, b)); } struct TestCompressInt4 { #pragma warning disable 0649 public int Value0; public int Value1; public int Value2; public int Value3; #pragma warning restore 0649 } struct TestCompressUInt4 { #pragma warning disable 0649 public uint Value0; public uint Value1; public uint Value2; public uint Value3; #pragma warning restore 0649 } struct TestCompressFloat4 { #pragma warning disable 0649 public float Value0; public float Value1; public float Value2; public float Value3; #pragma warning restore 0649 } } }