Refactor SPMD jobs for true vectorized/masked execution
- Change IJobSPMD.Execute to (indices, mask, ctx) signature for all arities, enabling proper vectorized/masked SPMD execution. - Update all SPMD job wrappers, extension methods, and test jobs to use new interface. - Add AVX2 gather/masked gather support to MathV.GatherVector2/3/4 and related methods; use [ConstantExpected] byte scale. - Improve gather/select logic, pointer arithmetic, and overloads for ref/int* index access. - Refactor GGXMipGenerationBenchmark and jobs for SPMD, with per-mip-level vectorized jobs and improved memory access. - Clean up code, fix naming, update comments, and bump version to 1.3.6.
This commit is contained in:
@@ -291,10 +291,9 @@ internal unsafe struct NoiseJobMathSPMD : IJobSPMD<float>
|
||||
return T.Lerp(T.Lerp(d00, d10, uY), T.Lerp(d01, d11, uY), uX);
|
||||
}
|
||||
|
||||
public readonly void Execute<TLane>(int baseIndex, ref readonly JobExecutionContext ctx)
|
||||
public readonly void Execute<TLane>(TLane indices, TLane mask, ref readonly JobExecutionContext ctx)
|
||||
where TLane : unmanaged, ISPMDLane<TLane, float>
|
||||
{
|
||||
var indices = TLane.Sequence(baseIndex, 1f);
|
||||
var w = TLane.Create(width);
|
||||
var h = TLane.Create(height);
|
||||
|
||||
@@ -302,6 +301,6 @@ internal unsafe struct NoiseJobMathSPMD : IJobSPMD<float>
|
||||
var uvY = TLane.Floor(indices / w) / h;
|
||||
|
||||
var result = Noise(uvX, uvY);
|
||||
result.Store(buffers + baseIndex);
|
||||
result.Store(buffers + (int)indices[0]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user