From 64809f553b4fa7ffba241a093ff6a6d339dafa14 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Wed, 28 Dec 2022 16:05:02 +0200 Subject: [PATCH 1/2] Skip cached rules assembly after changing project references --- Source/Tools/Flax.Build/Build/Assembler.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Tools/Flax.Build/Build/Assembler.cs b/Source/Tools/Flax.Build/Build/Assembler.cs index aa7e7e215..dcc6e84ca 100644 --- a/Source/Tools/Flax.Build/Build/Assembler.cs +++ b/Source/Tools/Flax.Build/Build/Assembler.cs @@ -81,6 +81,13 @@ namespace Flax.Build if (lastWriteTime > recentWriteTime) recentWriteTime = lastWriteTime; } + + // Skip when project references were changed + { + DateTime lastWriteTime = File.GetLastWriteTime(Globals.Project.ProjectPath); + if (lastWriteTime > recentWriteTime) + recentWriteTime = lastWriteTime; + } DateTime cacheTime = File.Exists(_cachePath) ? DateTime.FromBinary(long.Parse(File.ReadAllText(_cachePath))) From 77478f951579e858162966df8da7801bafb3062d Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Fri, 30 Dec 2022 01:34:46 +0200 Subject: [PATCH 2/2] Fix managed and native array field marshalling --- Source/Engine/Engine/NativeInterop.cs | 28 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Source/Engine/Engine/NativeInterop.cs b/Source/Engine/Engine/NativeInterop.cs index 0c1f93864..c56c85216 100644 --- a/Source/Engine/Engine/NativeInterop.cs +++ b/Source/Engine/Engine/NativeInterop.cs @@ -1311,16 +1311,14 @@ namespace FlaxEngine internal static void ToManagedFieldArray(FieldInfo field, ref T fieldOwner, IntPtr fieldPtr, out int fieldOffset) { - fieldOffset = Unsafe.SizeOf(); - if (fieldAlignment > 1) - { - IntPtr fieldStartPtr = fieldPtr; - fieldPtr = EnsureAlignment(fieldPtr, fieldAlignment); - fieldOffset += (fieldPtr - fieldStartPtr).ToInt32(); - } + // Follows the same marshalling semantics with reference types + fieldOffset = Unsafe.SizeOf(); + IntPtr fieldStartPtr = fieldPtr; + fieldPtr = EnsureAlignment(fieldPtr, IntPtr.Size); + fieldOffset += (fieldPtr - fieldStartPtr).ToInt32(); ref TField[] fieldValueRef = ref GetFieldReference(field, ref fieldOwner); - MarshalHelperValueType.ToManagedArray(ref fieldValueRef, fieldPtr, false); + MarshalHelperValueType.ToManagedArray(ref fieldValueRef, Unsafe.Read(fieldPtr.ToPointer()), false); } internal static void ToNativeField(FieldInfo field, ref T fieldOwner, IntPtr fieldPtr, out int fieldOffset) @@ -1342,16 +1340,24 @@ namespace FlaxEngine { internal static void ToManagedField(FieldInfo field, ref T fieldOwner, IntPtr fieldPtr, out int fieldOffset) { + fieldOffset = Unsafe.SizeOf(); + IntPtr fieldStartPtr = fieldPtr; + fieldPtr = EnsureAlignment(fieldPtr, IntPtr.Size); + fieldOffset += (fieldPtr - fieldStartPtr).ToInt32(); + ref TField fieldValueRef = ref GetFieldReference(field, ref fieldOwner); - MarshalHelperReferenceType.ToManaged(ref fieldValueRef, Marshal.ReadIntPtr(fieldPtr), false); - fieldOffset = IntPtr.Size; + MarshalHelperReferenceType.ToManaged(ref fieldValueRef, Unsafe.Read(fieldPtr.ToPointer()), false); } internal static void ToNativeField(FieldInfo field, ref T fieldOwner, IntPtr fieldPtr, out int fieldOffset) { + fieldOffset = Unsafe.SizeOf(); + IntPtr fieldStartPtr = fieldPtr; + fieldPtr = EnsureAlignment(fieldPtr, IntPtr.Size); + fieldOffset += (fieldPtr - fieldStartPtr).ToInt32(); + ref TField fieldValueRef = ref GetFieldReference(field, ref fieldOwner); MarshalHelperReferenceType.ToNative(ref fieldValueRef, fieldPtr); - fieldOffset = IntPtr.Size; } } }