Fix package dependency problem
All checks were successful
Publish NuGet Packages / publish (push) Successful in 1m47s

This commit is contained in:
2025-11-04 20:48:25 +09:00
parent 308c70d0e1
commit b914716225
29 changed files with 179 additions and 197 deletions

View File

@@ -1,4 +1,4 @@
using Misaki.HighPerformance.Image.Runtime;
using Misaki.HighPerformance.Image.Runtime;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -86,7 +86,7 @@ internal class AnimatedGifEnumerator : IEnumerator<AnimatedFrameResult>
Dispose(false);
}
protected unsafe virtual void Dispose(bool disposing)
protected virtual unsafe void Dispose(bool disposing)
{
if (_gif != null)
{

View File

@@ -1,8 +1,8 @@
using System.Threading;
using System.Threading;
namespace Misaki.HighPerformance.Image.Runtime
{
internal unsafe static class MemoryStats
internal static unsafe class MemoryStats
{
private static int _allocations;

View File

@@ -1,6 +1,6 @@
namespace Misaki.HighPerformance.Jobs;
namespace Misaki.HighPerformance.Jobs;
internal unsafe static class JobExecutor
internal static unsafe class JobExecutor
{
public static bool Execute<T>(void* pJobData, ref JobRanges jobRanges, ref int remainingBatches, int threadIndex)
where T : unmanaged, IJob

View File

@@ -1,4 +1,4 @@
using Misaki.HighPerformance.Collections;
using Misaki.HighPerformance.Collections;
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Utilities;
using System.Collections.Concurrent;
@@ -15,7 +15,7 @@ namespace Misaki.HighPerformance.Jobs;
/// of worker threads through job batching and work-stealing mechanisms. This class is thread-safe and can be used in
/// multi-threaded environments. However, it must be disposed when no longer needed to release resources and terminate
/// worker threads.</remarks>
public unsafe sealed class JobScheduler : IDisposable
public sealed unsafe class JobScheduler : IDisposable
{
private const int _SLEEP_THRESHOLD = 100;

View File

@@ -1,6 +1,4 @@
global using static Misaki.HighPerformance.LowLevel.Utilities.MemoryUtility;
global using static Misaki.HighPerformance.LowLevel.Utilities.MemoryUtility;
global using unsafe AllocFunc = delegate*<void*, nuint, nuint, Misaki.HighPerformance.LowLevel.Buffer.AllocationOption, void*>;
global using unsafe ReallocFunc = delegate*<void*, void*, nuint, nuint, nuint, Misaki.HighPerformance.LowLevel.Buffer.AllocationOption, void*>;
global using unsafe FreeFunc = delegate*<void*, void*, void>;
global using unsafe ReallocFunc = delegate*<void*, void*, nuint, nuint, nuint, Misaki.HighPerformance.LowLevel.Buffer.AllocationOption, void*>;

View File

@@ -1,4 +1,4 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;
namespace Misaki.HighPerformance.LowLevel.Buffer;
@@ -6,7 +6,7 @@ namespace Misaki.HighPerformance.LowLevel.Buffer;
/// Represents an allocated memory block with metadata.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public unsafe readonly struct MemoryBlock
public readonly unsafe struct MemoryBlock
{
/// <summary>
/// Pointer to the actual allocated memory.

View File

@@ -1,4 +1,4 @@
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Buffer;
namespace Misaki.HighPerformance.LowLevel.Collections.Contracts;
@@ -7,7 +7,7 @@ public unsafe interface IUnsafeCollection : IDisposable
/// <summary>
/// Indicates whether the object has been created. Returns true if the object is created, otherwise false.
/// </summary>
public bool IsCreated
bool IsCreated
{
get;
}
@@ -15,13 +15,13 @@ public unsafe interface IUnsafeCollection : IDisposable
/// <summary>
/// Removes all elements from the collection. The collection will be empty after this operation.
/// </summary>
public void Clear();
void Clear();
/// <summary>
/// Returns a pointer to an unmanaged memory location. This pointer can be used for low-level memory operations.
/// </summary>
/// <returns>The method returns a void pointer to the unsafe memory location.</returns>
public void* GetUnsafePtr();
void* GetUnsafePtr();
}
public unsafe interface IUnsafeCollection<T> : IUnsafeCollection, IEnumerable<T>
@@ -30,7 +30,7 @@ public unsafe interface IUnsafeCollection<T> : IUnsafeCollection, IEnumerable<T>
/// <summary>
/// Gets the number of elements in a collection. The value is read-only.
/// </summary>
public int Count
int Count
{
get;
}
@@ -40,7 +40,7 @@ public unsafe interface IUnsafeCollection<T> : IUnsafeCollection, IEnumerable<T>
/// </summary>
/// <remarks>This is to adjust the element count of the collection, not the size of the underlying buffer in memory.</remarks>
/// <param name="newSize">Specifies the new size to which the collection should be adjusted.</param>
public void Resize(int newSize, AllocationOption option);
void Resize(int newSize, AllocationOption option);
}
public unsafe interface IUnTypedCollection : IUnsafeCollection
@@ -48,11 +48,11 @@ public unsafe interface IUnTypedCollection : IUnsafeCollection
/// <summary>
/// The total size of the buffer in bytes.
/// </summary>
public uint Size
uint Size
{
get;
}
public ref T GetElementAt<T>(uint index)
ref T GetElementAt<T>(uint index)
where T : unmanaged;
}

View File

@@ -1,4 +1,4 @@
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Collections.Contracts;
using Misaki.HighPerformance.LowLevel.Contracts;
using Misaki.HighPerformance.LowLevel.Utilities;
@@ -292,7 +292,7 @@ public unsafe struct UnsafeSlotMap<T> : IUnsafeCollection<T>
_count = 0;
}
public unsafe readonly void* GetUnsafePtr()
public readonly unsafe void* GetUnsafePtr()
{
return _data.GetUnsafePtr();
}

View File

@@ -1,4 +1,4 @@
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Collections.Contracts;
using Misaki.HighPerformance.LowLevel.Contracts;
using Misaki.HighPerformance.LowLevel.Utilities;
@@ -61,7 +61,7 @@ public unsafe struct UnsafeSparseSet<T> : IUnsafeCollection<T>
get => Current;
}
public unsafe readonly void Dispose()
public readonly unsafe void Dispose()
{
}
}

View File

@@ -1,9 +1,9 @@
namespace Misaki.HighPerformance.LowLevel.Contracts;
namespace Misaki.HighPerformance.LowLevel.Contracts;
/// <summary>
/// A structure that encapsulates function pointers for memory allocation operations.
/// </summary>
public unsafe readonly struct AllocationHandle
public readonly unsafe struct AllocationHandle
{
/// <summary>
/// Gets a pointer to the allocator instance associated with this allocation handle.

View File

@@ -1,4 +1,4 @@
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Collections;
using Misaki.HighPerformance.LowLevel.Collections.Contracts;
using System.Runtime.InteropServices;
@@ -9,7 +9,7 @@ namespace Misaki.HighPerformance.LowLevel.Utilities;
/// Provides extension methods for copying elements between unsafe collections and spans, converting collections to
/// arrays or lists, and searching for values.
/// </summary>
public unsafe static class UnsafeCollectionExtensions
public static unsafe class UnsafeCollectionExtensions
{
/// <summary>
/// Copies elements from a source UnsafeCollection to a destination Span, ensuring both have the same size.

View File

@@ -1,8 +1,6 @@
using Microsoft.CodeAnalysis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Misaki.HighPerformance.Mathematics.CodeGen.Generators
{

View File

@@ -1,109 +0,0 @@
using System;
namespace Misaki.HighPerformance.Mathematics.CodeGen
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false)]
public class NumericTypeAttribute : Attribute
{
public NumericTypeAttribute(Type componentType, int componentSize, int row, int column, string typePrefix, bool arithmetic = true, bool canInverse = true, Type? elementType = default, Type? vectorType = default)
{
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false, AllowMultiple = true)]
public class NumericConvertableAttribute : Attribute
{
public NumericConvertableAttribute(string template, params Type[] types)
{
}
}
[Flags]
public enum SupportedVectorMath
{
None = 0,
Min = 1 << 0,
Max = 1 << 1,
Lerp = 1 << 2,
Unlerp = 1 << 3,
Remap = 1 << 4,
Mad = 1 << 5,
Clamp = 1 << 6,
Saturate = 1 << 7,
Abs = 1 << 8,
Dot = 1 << 9,
Tan = 1 << 10,
TanH = 1 << 11,
Atan = 1 << 12,
Atan2 = 1 << 13,
Cos = 1 << 14,
CosH = 1 << 15,
Acos = 1 << 16,
Sin = 1 << 17,
SinH = 1 << 18,
Asin = 1 << 19,
Floor = 1 << 20,
Ceil = 1 << 21,
Round = 1 << 22,
Trunc = 1 << 23,
Frac = 1 << 24,
Rcp = 1 << 25,
Sign = 1 << 26,
Pow = 1 << 27,
Exp = 1 << 28,
Exp2 = 1 << 29,
Exp10 = 1 << 30,
Log = 1 << 31,
Log2 = 1 << 32,
Log10 = 1 << 33,
Fmod = 1 << 34,
Modf = 1 << 35,
Sqrt = 1 << 36,
Rsqrt = 1 << 37,
Length = 1 << 38,
LengthSq = 1 << 39,
Distance = 1 << 40,
DistanceSq = 1 << 41,
Cross = 1 << 42,
SmoothStep = 1 << 43,
Select = 1 << 44,
Step = 1 << 45,
FaceForward = 1 << 46,
SinCos = 1 << 47,
Any = 1 << 48,
All = 1 << 49,
Normalize = 1 << 50,
Reflect = 1 << 51,
Refract = 1 << 52,
Project = 1 << 53,
CountBits = 1 << 54,
Lzcnt = 1 << 55,
Tzcnt = 1 << 56,
ReverseBits = 1 << 57,
Rol = 1 << 58,
Ror = 1 << 59,
CeilPow2 = 1 << 60,
CeilLog2 = 1 << 61,
FloorLog2 = 1 << 62,
Radians = 1 << 63,
Degrees = 1 << 64,
Cmin = 1 << 65,
Cmax = 1 << 66,
FloatingPointMask = ~0 & ~(CountBits | Lzcnt | Tzcnt | ReverseBits | Rol | Ror | CeilPow2 | CeilLog2 | FloorLog2),
IntegerMask = Min | Max | Mad | Clamp | Abs | Dot | Sign | Any | All | Select | CountBits | Lzcnt | Tzcnt | ReverseBits | Rol | Ror | CeilPow2 | CeilLog2 | FloorLog2 | Cmin | Cmax,
UnsignedIntegerMask = IntegerMask & ~(Sign),
}
[Flags]
public enum SupportedMatrixMath
{
Transpose = 1 << 0,
Determinant = 1 << 1,
Inverse = 1 << 2,
Adjugate = 1 << 3,
Cofactor = 1 << 4,
Minor = 1 << 5,
OuterProduct = 1 << 6,
}
}

View File

@@ -1,4 +1,4 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Misaki.HighPerformance.Mathematics.CodeGen.Generators;
using Misaki.HighPerformance.Mathematics.CodeGen.Models;
@@ -14,7 +14,7 @@ namespace Misaki.HighPerformance.Mathematics.CodeGen
// Create a provider that finds all types with NumericTypeAttribute
var typesWithAttribute = context.SyntaxProvider
.ForAttributeWithMetadataName(
fullyQualifiedMetadataName: typeof(NumericTypeAttribute).FullName,
fullyQualifiedMetadataName: "Misaki.HighPerformance.Mathematics.NumericTypeAttribute",
predicate: static (node, _) => node is ClassDeclarationSyntax or StructDeclarationSyntax,
transform: static (context, _) => GetTypeInfo(context))
.Where(static typeInfo => typeInfo is not null);
@@ -52,10 +52,10 @@ namespace Misaki.HighPerformance.Mathematics.CodeGen
// Get the attribute data
var attribute = typeSymbol.GetAttributes()
.FirstOrDefault(a => a.AttributeClass?.ToDisplayString() == typeof(NumericTypeAttribute).FullName);
.FirstOrDefault(a => a.AttributeClass?.ToDisplayString() == "Misaki.HighPerformance.Mathematics.NumericTypeAttribute");
var convertableAttributes = typeSymbol.GetAttributes()
.Where(a => a.AttributeClass?.ToDisplayString() == typeof(NumericConvertableAttribute).FullName);
.Where(a => a.AttributeClass?.ToDisplayString() == "Misaki.HighPerformance.Mathematics.NumericConvertableAttribute");
if (attribute == null)
{

View File

@@ -1,4 +1,4 @@
using System.Runtime.CompilerServices;
using System.Runtime.CompilerServices;
namespace Misaki.HighPerformance.Mathematics.Geometry;
@@ -232,13 +232,13 @@ public struct AABB : IEquatable<AABB>
return !(left == right);
}
public readonly override int GetHashCode()
public override readonly int GetHashCode()
{
return HashCode.Combine(Min, Max);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public readonly override string ToString()
public override readonly string ToString()
{
return string.Format("AABB({0}, {1})", Min, Max);
}

View File

@@ -1,4 +1,4 @@
namespace Misaki.HighPerformance.Mathematics.Geometry;
namespace Misaki.HighPerformance.Mathematics.Geometry;
public struct OBB : IEquatable<OBB>
{
@@ -38,7 +38,7 @@ public struct OBB : IEquatable<OBB>
max = centerProjection + r;
}
public unsafe readonly bool Overlaps(OBB other)
public readonly unsafe bool Overlaps(OBB other)
{
// Using the Separating Axis Theorem (SAT) for OBB-OBB intersection test
var axes = stackalloc float3[15];
@@ -109,12 +109,12 @@ public struct OBB : IEquatable<OBB>
return Rotation.Equals(other.Rotation) && Center.Equals(other.Center) && Extents.Equals(other.Extents);
}
public readonly override bool Equals(object? obj)
public override readonly bool Equals(object? obj)
{
return obj is OBB obb && Equals(obb);
}
public readonly override int GetHashCode()
public override readonly int GetHashCode()
{
return HashCode.Combine(Rotation, Center, Extents);
}

View File

@@ -1,4 +1,4 @@
using System.Runtime.CompilerServices;
using System.Runtime.CompilerServices;
namespace Misaki.HighPerformance.Mathematics.Geometry;
@@ -98,12 +98,12 @@ public struct SphereBounds : IEquatable<SphereBounds>
}
}
public readonly override string ToString()
public override readonly string ToString()
{
return $"Center: {Center}, Radius: {Radius}";
}
public readonly override int GetHashCode()
public override readonly int GetHashCode()
{
return HashCode.Combine(Center, Radius);
}

View File

@@ -6,14 +6,14 @@
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<Authors>Misaki</Authors>
<Version>1.2.5</Version>
<Version>1.2.6</Version>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageProjectUrl>https://git.personalnas.com/Misaki/Misaki.HighPerformance.git</PackageProjectUrl>
<RepositoryUrl>https://git.personalnas.com/Misaki/Misaki.HighPerformance.git</RepositoryUrl>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Misaki.HighPerformance.Mathematics.CodeGen\Misaki.HighPerformance.Mathematics.CodeGen.csproj" OutputItemType="Analyzer" />
<ProjectReference Include="..\Misaki.HighPerformance.Mathematics.CodeGen\Misaki.HighPerformance.Mathematics.CodeGen.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1,106 @@
namespace Misaki.HighPerformance.Mathematics;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false)]
public class NumericTypeAttribute : Attribute
{
public NumericTypeAttribute(Type componentType, int componentSize, int row, int column, string typePrefix, bool arithmetic = true, bool canInverse = true, Type? elementType = default, Type? vectorType = default)
{
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false, AllowMultiple = true)]
public class NumericConvertableAttribute : Attribute
{
public NumericConvertableAttribute(string template, params Type[] types)
{
}
}
[Flags]
public enum SupportedVectorMath
{
None = 0,
Min = 1 << 0,
Max = 1 << 1,
Lerp = 1 << 2,
Unlerp = 1 << 3,
Remap = 1 << 4,
Mad = 1 << 5,
Clamp = 1 << 6,
Saturate = 1 << 7,
Abs = 1 << 8,
Dot = 1 << 9,
Tan = 1 << 10,
TanH = 1 << 11,
Atan = 1 << 12,
Atan2 = 1 << 13,
Cos = 1 << 14,
CosH = 1 << 15,
Acos = 1 << 16,
Sin = 1 << 17,
SinH = 1 << 18,
Asin = 1 << 19,
Floor = 1 << 20,
Ceil = 1 << 21,
Round = 1 << 22,
Trunc = 1 << 23,
Frac = 1 << 24,
Rcp = 1 << 25,
Sign = 1 << 26,
Pow = 1 << 27,
Exp = 1 << 28,
Exp2 = 1 << 29,
Exp10 = 1 << 30,
Log = 1 << 31,
Log2 = 1 << 32,
Log10 = 1 << 33,
Fmod = 1 << 34,
Modf = 1 << 35,
Sqrt = 1 << 36,
Rsqrt = 1 << 37,
Length = 1 << 38,
LengthSq = 1 << 39,
Distance = 1 << 40,
DistanceSq = 1 << 41,
Cross = 1 << 42,
SmoothStep = 1 << 43,
Select = 1 << 44,
Step = 1 << 45,
FaceForward = 1 << 46,
SinCos = 1 << 47,
Any = 1 << 48,
All = 1 << 49,
Normalize = 1 << 50,
Reflect = 1 << 51,
Refract = 1 << 52,
Project = 1 << 53,
CountBits = 1 << 54,
Lzcnt = 1 << 55,
Tzcnt = 1 << 56,
ReverseBits = 1 << 57,
Rol = 1 << 58,
Ror = 1 << 59,
CeilPow2 = 1 << 60,
CeilLog2 = 1 << 61,
FloorLog2 = 1 << 62,
Radians = 1 << 63,
Degrees = 1 << 64,
Cmin = 1 << 65,
Cmax = 1 << 66,
FloatingPointMask = ~0 & ~(CountBits | Lzcnt | Tzcnt | ReverseBits | Rol | Ror | CeilPow2 | CeilLog2 | FloorLog2),
IntegerMask = Min | Max | Mad | Clamp | Abs | Dot | Sign | Any | All | Select | CountBits | Lzcnt | Tzcnt | ReverseBits | Rol | Ror | CeilPow2 | CeilLog2 | FloorLog2 | Cmin | Cmax,
UnsignedIntegerMask = IntegerMask & ~(Sign),
}
[Flags]
public enum SupportedMatrixMath
{
Transpose = 1 << 0,
Determinant = 1 << 1,
Inverse = 1 << 2,
Adjugate = 1 << 3,
Cofactor = 1 << 4,
Minor = 1 << 5,
OuterProduct = 1 << 6,
}

View File

@@ -1,5 +1,3 @@
using Misaki.HighPerformance.Mathematics.CodeGen;
namespace Misaki.HighPerformance.Mathematics;
[NumericType(typeof(bool), sizeof(bool), 2, 1, "global::Misaki.HighPerformance.Mathematics.bool", false, vectorType: typeof(byte))]

View File

@@ -1,5 +1,3 @@
using Misaki.HighPerformance.Mathematics.CodeGen;
namespace Misaki.HighPerformance.Mathematics;
[NumericType(typeof(double), sizeof(double), 2, 1, "global::Misaki.HighPerformance.Mathematics.double")]

View File

@@ -1,6 +1,3 @@
using Misaki.HighPerformance.Mathematics.CodeGen;
using System.Runtime.InteropServices;
namespace Misaki.HighPerformance.Mathematics;
[NumericType(typeof(float), sizeof(float), 2, 1, "global::Misaki.HighPerformance.Mathematics.float")]

View File

@@ -1,5 +1,3 @@
using Misaki.HighPerformance.Mathematics.CodeGen;
namespace Misaki.HighPerformance.Mathematics;
[NumericType(typeof(int), sizeof(int), 2, 1, "global::Misaki.HighPerformance.Mathematics.int")]

View File

@@ -4724,9 +4724,9 @@ public static partial class math
/// <param name="defaultvalue">Vector to return if normalized vector is not finite.</param>
/// <returns>The normalized vector or the default value if the normalized vector is not finite.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static public float2 normalizesafe(float2 x, float2 defaultvalue = new float2())
public static float2 normalizesafe(float2 x, float2 defaultvalue = new float2())
{
float len = math.dot(x, x);
var len = math.dot(x, x);
return math.select(defaultvalue, x * math.rsqrt(len), len > FLT_MIN_NORMAL);
}
@@ -4738,9 +4738,9 @@ public static partial class math
/// <param name="defaultvalue">Vector to return if normalized vector is not finite.</param>
/// <returns>The normalized vector or the default value if the normalized vector is not finite.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static public float3 normalizesafe(float3 x, float3 defaultvalue = new float3())
public static float3 normalizesafe(float3 x, float3 defaultvalue = new float3())
{
float len = math.dot(x, x);
var len = math.dot(x, x);
return math.select(defaultvalue, x * math.rsqrt(len), len > FLT_MIN_NORMAL);
}
@@ -4752,9 +4752,9 @@ public static partial class math
/// <param name="defaultvalue">Vector to return if normalized vector is not finite.</param>
/// <returns>The normalized vector or the default value if the normalized vector is not finite.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static public float4 normalizesafe(float4 x, float4 defaultvalue = new float4())
public static float4 normalizesafe(float4 x, float4 defaultvalue = new float4())
{
float len = math.dot(x, x);
var len = math.dot(x, x);
return math.select(defaultvalue, x * math.rsqrt(len), len > FLT_MIN_NORMAL);
}
@@ -4767,9 +4767,9 @@ public static partial class math
/// <param name="defaultvalue">Vector to return if normalized vector is not finite.</param>
/// <returns>The normalized vector or the default value if the normalized vector is not finite.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static public double2 normalizesafe(double2 x, double2 defaultvalue = new double2())
public static double2 normalizesafe(double2 x, double2 defaultvalue = new double2())
{
double len = math.dot(x, x);
var len = math.dot(x, x);
return math.select(defaultvalue, x * math.rsqrt(len), len > FLT_MIN_NORMAL);
}
@@ -4781,9 +4781,9 @@ public static partial class math
/// <param name="defaultvalue">Vector to return if normalized vector is not finite.</param>
/// <returns>The normalized vector or the default value if the normalized vector is not finite.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static public double3 normalizesafe(double3 x, double3 defaultvalue = new double3())
public static double3 normalizesafe(double3 x, double3 defaultvalue = new double3())
{
double len = math.dot(x, x);
var len = math.dot(x, x);
return math.select(defaultvalue, x * math.rsqrt(len), len > FLT_MIN_NORMAL);
}
@@ -4795,9 +4795,9 @@ public static partial class math
/// <param name="defaultvalue">Vector to return if normalized vector is not finite.</param>
/// <returns>The normalized vector or the default value if the normalized vector is not finite.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
static public double4 normalizesafe(double4 x, double4 defaultvalue = new double4())
public static double4 normalizesafe(double4 x, double4 defaultvalue = new double4())
{
double len = math.dot(x, x);
var len = math.dot(x, x);
return math.select(defaultvalue, x * math.rsqrt(len), len > FLT_MIN_NORMAL);
}
@@ -6039,7 +6039,7 @@ public static partial class math
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float2 refract(float2 i, float2 n, float indexOfRefraction)
{
float ni = dot(n, i);
var ni = dot(n, i);
var k = 1.0f - indexOfRefraction * indexOfRefraction * (1.0f - ni * ni);
return select(0.0f, indexOfRefraction * i - (indexOfRefraction * ni + sqrt(k)) * n, k >= 0);
}
@@ -6052,7 +6052,7 @@ public static partial class math
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float3 refract(float3 i, float3 n, float indexOfRefraction)
{
float ni = dot(n, i);
var ni = dot(n, i);
var k = 1.0f - indexOfRefraction * indexOfRefraction * (1.0f - ni * ni);
return select(0.0f, indexOfRefraction * i - (indexOfRefraction * ni + sqrt(k)) * n, k >= 0);
}
@@ -6065,7 +6065,7 @@ public static partial class math
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float4 refract(float4 i, float4 n, float indexOfRefraction)
{
float ni = dot(n, i);
var ni = dot(n, i);
var k = 1.0f - indexOfRefraction * indexOfRefraction * (1.0f - ni * ni);
return select(0.0f, indexOfRefraction * i - (indexOfRefraction * ni + sqrt(k)) * n, k >= 0);
}
@@ -6079,7 +6079,7 @@ public static partial class math
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static double2 refract(double2 i, double2 n, double indexOfRefraction)
{
double ni = dot(n, i);
var ni = dot(n, i);
var k = 1.0 - indexOfRefraction * indexOfRefraction * (1.0 - ni * ni);
return select(0.0f, indexOfRefraction * i - (indexOfRefraction * ni + sqrt(k)) * n, k >= 0);
}
@@ -6092,7 +6092,7 @@ public static partial class math
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static double3 refract(double3 i, double3 n, double indexOfRefraction)
{
double ni = dot(n, i);
var ni = dot(n, i);
var k = 1.0 - indexOfRefraction * indexOfRefraction * (1.0 - ni * ni);
return select(0.0f, indexOfRefraction * i - (indexOfRefraction * ni + sqrt(k)) * n, k >= 0);
}
@@ -6105,7 +6105,7 @@ public static partial class math
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static double4 refract(double4 i, double4 n, double indexOfRefraction)
{
double ni = dot(n, i);
var ni = dot(n, i);
var k = 1.0 - indexOfRefraction * indexOfRefraction * (1.0 - ni * ni);
return select(0.0f, indexOfRefraction * i - (indexOfRefraction * ni + sqrt(k)) * n, k >= 0);
}
@@ -8470,7 +8470,7 @@ public static partial class math
const uint Prime4 = 668265263;
const uint Prime5 = 374761393;
uint4* p = (uint4*)pBuffer;
var p = (uint4*)pBuffer;
var hash = seed + Prime5;
if (numBytes >= 16)
{

View File

@@ -1,4 +1,4 @@
using System.Runtime.CompilerServices;
using System.Runtime.CompilerServices;
using static Misaki.HighPerformance.Mathematics.math;

View File

@@ -1,5 +1,3 @@
using Misaki.HighPerformance.Mathematics.CodeGen;
namespace Misaki.HighPerformance.Mathematics;
[NumericType(typeof(uint), sizeof(uint), 2, 1, "global::Misaki.HighPerformance.Mathematics.uint")]

View File

@@ -1,4 +1,4 @@
//var threadCount = 8;
//var threadCount = 8;
//var map = new ConcurrentSlotMap<int>();
//var barrier = new Barrier(threadCount);

View File

@@ -1,4 +1,4 @@
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Buffer;
using Misaki.HighPerformance.LowLevel.Collections;
namespace Misaki.HighPerformance.Test.UnitTest.Collections;