Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions Packages/com.unity.cloud.gltfast/Runtime/Scripts/Jobs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1026,7 +1026,8 @@ unsafe struct ConvertColorsRgbUInt8ToRGBAFloatJob : IJobParallelFor
public byte* input;

[WriteOnly]
public NativeSlice<float4> result;
[NativeDisableUnsafePtrRestriction]
public float4* result;

public void Execute(int i)
{
Expand All @@ -1050,7 +1051,8 @@ unsafe struct ConvertColorsRgbUInt16ToRGBAFloatJob : IJobParallelFor
public ushort* input;

[WriteOnly]
public NativeSlice<float4> result;
[NativeDisableUnsafePtrRestriction]
public float4* result;

public void Execute(int i)
{
Expand Down Expand Up @@ -1164,7 +1166,8 @@ unsafe struct ConvertColorsRgbaUInt8ToRGBAFloatJob : IJobParallelFor
public byte* input;

[WriteOnly]
public NativeSlice<float4> result;
[NativeDisableUnsafePtrRestriction]
public float4* result;

public void Execute(int i)
{
Expand Down Expand Up @@ -2323,10 +2326,11 @@ public void Execute(int i)
}

[BurstCompile]
struct SortAndNormalizeBoneWeightsJob : IJobParallelFor
unsafe struct SortAndNormalizeBoneWeightsJob : IJobParallelFor
{

public NativeArray<VBones> bones;
[NativeDisableUnsafePtrRestriction]
public VBones* bones;

/// <summary>
/// Number of skin weights that are taken into account (project quality setting)
Expand Down Expand Up @@ -2408,9 +2412,10 @@ static unsafe void Swap(ref VBones v, int a, int b)

#if GLTFAST_SAFE
[BurstCompile]
struct RenormalizeBoneWeightsJob : IJobParallelFor {
unsafe struct RenormalizeBoneWeightsJob : IJobParallelFor {

public NativeArray<VBones> bones;
[NativeDisableUnsafePtrRestriction]
public VBones* bones;

public unsafe void Execute(int index) {
var v = bones[index];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@ sealed class VertexBufferBones : IDisposable
readonly ICodeLogger m_Logger;

NativeArray<VBones> m_Data;
readonly unsafe byte* m_VDataPtr;

public VertexBufferBones(int vertexCount, ICodeLogger logger)
public unsafe VertexBufferBones(int vertexCount, ICodeLogger logger)
{
m_Logger = logger;
Profiler.BeginSample("AllocateNativeArray");
m_Data = new NativeArray<VBones>(vertexCount, VertexBufferGeneratorBase.defaultAllocator);
m_VDataPtr = (byte*)m_Data.GetUnsafeReadOnlyPtr();
Profiler.EndSample();
}

Expand All @@ -44,8 +46,6 @@ IGltfBuffers buffers
{
m_Logger?.Error(LogCode.SparseAccessor, "bone weights");
}
var vDataPtr = (byte*)m_Data.GetUnsafeReadOnlyPtr();

JobHandle weightsHandle;
JobHandle jointsHandle;

Expand All @@ -55,7 +55,7 @@ IGltfBuffers buffers
weightsAcc.count,
weightsAcc.componentType,
weightsByteStride,
(float4*)(vDataPtr + offset * sizeof(VBones)),
(float4*)(m_VDataPtr + offset * sizeof(VBones)),
32
);
if (h.HasValue)
Expand All @@ -80,7 +80,7 @@ IGltfBuffers buffers
jointsAcc.count,
jointsAcc.componentType,
jointsByteStride,
(uint4*)(vDataPtr + offset * sizeof(VBones) + sizeof(float4)),
(uint4*)(m_VDataPtr + offset * sizeof(VBones) + sizeof(float4)),
32,
m_Logger
);
Expand Down Expand Up @@ -111,18 +111,19 @@ IGltfBuffers buffers
#endif
var job = new SortAndNormalizeBoneWeightsJob
{
bones = m_Data,
bones = (VBones*)(m_VDataPtr + offset * sizeof(VBones)),
skinWeights = math.max(1, skinWeights)
};
jobHandle = job.Schedule(m_Data.Length, GltfImport.DefaultBatchCount, jobHandle);

jobHandle = job.Schedule(weightsAcc.count, GltfImport.DefaultBatchCount, jobHandle);
}
#if GLTFAST_SAFE
else {
// Re-normalizing alone is sufficient
var job = new RenormalizeBoneWeightsJob {
bones = m_Data,
bones = (VBones*)(m_VDataPtr + offset * sizeof(VBones)),
};
jobHandle = job.Schedule(m_Data.Length, GltfImport.DefaultBatchCount, jobHandle);
jobHandle = job.Schedule(weightsAcc.count, GltfImport.DefaultBatchCount, jobHandle);
}
#endif

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ IGltfBuffers buffers
colorAcc.componentType,
colorAcc.GetAttributeType(),
byteStride,
m_Data.Slice(offset, colorAcc.count)
colorAcc.count,
(float4*)((byte*)m_Data.GetUnsafePtr() + offset * sizeof(float4))
);
if (h.HasValue)
{
Expand Down Expand Up @@ -92,7 +93,8 @@ public void Dispose()
GltfComponentType inputType,
GltfAccessorAttributeType attributeType,
int inputByteStride,
NativeSlice<float4> output
int count,
float4* output
)
{
Profiler.BeginSample("PrepareColors32");
Expand All @@ -110,7 +112,7 @@ NativeSlice<float4> output
inputByteStride = inputByteStride > 0 ? inputByteStride : 3,
result = output
};
jobHandle = job.Schedule(output.Length, GltfImport.DefaultBatchCount);
jobHandle = job.Schedule(count, GltfImport.DefaultBatchCount);
}
break;
case GltfComponentType.Float:
Expand All @@ -119,9 +121,9 @@ NativeSlice<float4> output
{
input = (byte*)input,
inputByteStride = inputByteStride > 0 ? inputByteStride : 12,
result = (float4*)output.GetUnsafePtr()
result = output
};
jobHandle = job.Schedule(output.Length, GltfImport.DefaultBatchCount);
jobHandle = job.Schedule(count, GltfImport.DefaultBatchCount);
}
break;
case GltfComponentType.UnsignedShort:
Expand All @@ -132,7 +134,7 @@ NativeSlice<float4> output
inputByteStride = inputByteStride > 0 ? inputByteStride : 6,
result = output
};
jobHandle = job.Schedule(output.Length, GltfImport.DefaultBatchCount);
jobHandle = job.Schedule(count, GltfImport.DefaultBatchCount);
}
break;
default:
Expand All @@ -152,7 +154,7 @@ NativeSlice<float4> output
inputByteStride = inputByteStride > 0 ? inputByteStride : 4,
result = output
};
jobHandle = job.Schedule(output.Length, GltfImport.DefaultBatchCount);
jobHandle = job.Schedule(count, GltfImport.DefaultBatchCount);
}
break;
case GltfComponentType.Float:
Expand All @@ -161,9 +163,9 @@ NativeSlice<float4> output
{
var job = new Jobs.MemCopyJob
{
bufferSize = output.Length * 16,
bufferSize = count * 16,
input = input,
result = output.GetUnsafeReadOnlyPtr()
result = output
};
jobHandle = job.Schedule();
}
Expand All @@ -173,12 +175,12 @@ NativeSlice<float4> output
{
input = (byte*)input,
inputByteStride = inputByteStride,
result = (float4*)output.GetUnsafePtr()
result = output
};
#if UNITY_COLLECTIONS
jobHandle = job.ScheduleBatch(output.Length,GltfImport.DefaultBatchCount);
jobHandle = job.ScheduleBatch(count,GltfImport.DefaultBatchCount);
#else
jobHandle = job.Schedule(output.Length, GltfImport.DefaultBatchCount);
jobHandle = job.Schedule(count, GltfImport.DefaultBatchCount);
#endif
}
}
Expand All @@ -189,12 +191,12 @@ NativeSlice<float4> output
{
input = (ushort*)input,
inputByteStride = inputByteStride > 0 ? inputByteStride : 8,
result = (float4*)output.GetUnsafePtr()
result = output
};
#if UNITY_COLLECTIONS
jobHandle = job.ScheduleBatch(output.Length,GltfImport.DefaultBatchCount);
jobHandle = job.ScheduleBatch(count,GltfImport.DefaultBatchCount);
#else
jobHandle = job.Schedule(output.Length, GltfImport.DefaultBatchCount);
jobHandle = job.Schedule(count, GltfImport.DefaultBatchCount);
#endif
}
break;
Expand Down