Here is my loop:
// cap a
var capACenter = vertOffset;
verts[vertOffset++] = new Vertex { position = a, uv = new float2(0, 0.5f) };
var capAFirst = vertOffset;
var capAOffset = vertOffset;
for (var i = 0; i <= capSegments; i++)
{
var t = i / (float)capSegments;
var angle = math.PI * t;
var cosA = math.cos(angle);
var sinA = math.sin(angle);
var posA = a - rightA * cosA - segDirA * halfWidth * sinA;
var uv = new float2(-0.5f * sinA, 0.5f - 0.5f * cosA); // calculate UVs 'correctly'
verts[capAOffset + i] = new Vertex { position = posA, uv = uv };
}
// write back offset that should have been incremented inside loop
vertOffset += capSegments + 1;
Here is the reason:
---------------------------
Remark Type: Analysis
Message: BuildBillboardQuadJob.cs:186:0: loop not vectorized: value that could not be identified as reduction is used outside the loop
Pass: loop-vectorize
Remark: NonReductionValueUsedOutsideLoop
Function: BuildBillboardQuadJob, Tracing, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.GenerateCaps(BuildBillboardQuadJob*, Tracing, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null this, Unity.Collections.NativeArray`1[[BuildBillboardQuadJob+Vertex, Tracing, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null verts, Unity.Collections.NativeArray`1[[System.UInt16, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null indices, System.Int32&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 vertOffset, System.Int32&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 indexOffset) -> System.Void, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089_9723e40b7a4e00b747f85c6c9abcaf1c from Tracing, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
---------------------------
Is it the Vertex struct? (just a float3 and a float2). Or the verts native array? Everything else is floats, float3s, and ints.
Also, should I be trying to vectorize this? Just want to see how fast I can push things tbh. It's a quick loop, between 2-255 times, with expected values at ~12 (although it will happen a lot). Will vectorization provide any benifit?