Add SPMD lane reductions, gather, and SinCos API changes
- Added MaskLoad, Gather, and reduction methods (ReduceAdd, ReduceMax, ReduceMin) to ISPMDLane<TSelf, TNumber> with XML docs - Changed SinCos to use out parameters instead of tuple return - Implemented reductions in ScalarLane and WideLane (loop-based, TODO: SIMD) - Added GetUnsafePtr to ISPMDLane - Extended MathV to support Sin, Cos, SinCos, Tan, Asin, Acos, Atan, Atan2 for Vector2/3/4 - Improved WideLane.Sequence to use best vector type - Updated GGX mip generation for new SinCos signature - Bumped version to 1.3.2 - Enabled PNG dumping in GGX benchmark
This commit is contained in:
@@ -63,16 +63,11 @@ internal unsafe struct GGXMipGenerationJobSPMD<TFloat, TInt> : IJobParallelFor
|
||||
|
||||
var phi = 2.0f * PI * Xi.x;
|
||||
|
||||
// Clamp the inside of the cosTheta Sqrt to prevent NaN on division precision edges
|
||||
var cosThetaInner = TFloat.Max((1.0f - Xi.y) / (1.0f + (a * a - 1.0f) * Xi.y), TFloat.Zero);
|
||||
var cosTheta = TFloat.Sqrt(cosThetaInner);
|
||||
|
||||
// Clamp the inside of sinTheta to prevent sqrt of negative floating-point errors
|
||||
var sinThetaInner = TFloat.Max(1.0f - cosTheta * cosTheta, TFloat.Zero);
|
||||
var sinTheta = TFloat.Sqrt(sinThetaInner);
|
||||
var cosTheta = TFloat.Sqrt((1.0f - Xi.y) / (1.0f + (a * a - 1.0f) * Xi.y));
|
||||
var sinTheta = TFloat.Sqrt(1.0f - cosTheta * cosTheta);
|
||||
|
||||
// Spherical to Cartesian coordinates (Halfway vector)
|
||||
var (sinPhi, cosPhi) = TFloat.SinCos(phi);
|
||||
TFloat.SinCos(phi, out var sinPhi, out var cosPhi);
|
||||
var H = MathV.Create<TFloat, float>(cosPhi * sinTheta, sinPhi * sinTheta, cosTheta);
|
||||
|
||||
// Tangent space to World space
|
||||
@@ -496,7 +491,7 @@ public unsafe class GGXMipGenerationBenchmark
|
||||
[GlobalCleanup]
|
||||
public void Cleanup()
|
||||
{
|
||||
#if false
|
||||
#if true
|
||||
for (var i = 0; i < _mipLevels; i++)
|
||||
{
|
||||
DumpMipLevelToPng(_pResult[i], (int)_pMipLevels[i].width, (int)_pMipLevels[i].height, $"C:\\Users\\Misaki\\Downloads\\Im\\mip_level_{i}.png");
|
||||
|
||||
Reference in New Issue
Block a user