InjectFix icon indicating copy to clipboard operation
InjectFix copied to clipboard

使用了BurstCompile的类和结构体不能进行注入,否则加载patch之后会报burst的错误

Open King098 opened this issue 5 years ago • 8 comments

Unity (0,0): Burst error BC1016: The managed function IFix.WrappersManagerImpl.GetPatch(int id) is not supported

King098 avatar Apr 10 '20 07:04 King098

+1

HahnSC avatar Dec 11 '20 12:12 HahnSC

额。。xx is not supported,不是应该找Unity去supported一下么?

chexiongsheng avatar Dec 17 '20 05:12 chexiongsheng

我这的版本 2019.4.X Burst 1.4.8 版本 有burstCompile 的类或结构体在config 配置中时, 在IOS Xcode导出的时 执行注入就失败了

thuris001 avatar Jun 17 '21 06:06 thuris001

当我用Unity2020.3.23.f1,包括InjectFix和以下组件进行iOS构建(Build Settings->iOS Build)时,我得到了一个错误。 有什么变通办法吗?

Component

namespace Examples
{
    public class Test : MonoBehaviour
    {
        [BurstCompile(CompileSynchronously = true)]
        private struct MyJob : IJob
        {
            public void Execute()
            {
            }
        }
    }

Build Error

(0,0): Burst error BC1016: The managed function `IFix.WrappersManagerImpl.GetPatch(int id)` is not supported
 at Examples.Test.MyJob.Execute(Examples.Test.MyJob* this)
 at Unity.Jobs.IJobExtensions.JobStruct`1<Examples.Test.MyJob>.Execute(ref Examples.Test.MyJob data, System.IntPtr additionalPtr, System.IntPtr bufferRangePatchData, ref Unity.Jobs.LowLevel.Unsafe.JobRanges ranges, int jobIndex) (at /Users/bokken/buildslave/unity/build/Runtime/Jobs/Managed/IJob.cs:30)
BuildFailedException: Burst compiler (1.4.7) failed running

yasee avatar Jan 25 '22 08:01 yasee

Burst编译器在OnPostBuildPlayerScriptDLLs中运行,但 InjectFix的IFixEditor.AutoInjectAssemblys首先被执行,并改变了程序集的内容,导致错误。

(0,0): Burst error BC1016: The managed function `IFix.WrappersManagerImpl.GetPatch(int id)` is not supported

 at Test.InverseX(UnityEngine.Quaternion rotation)
 at TestJob.ProcessAnimation(TestJob* this, UnityEngine.Animations.AnimationStream* stream)
 at UnityEngine.Animations.ProcessAnimationJobStruct`1<TestJob>.Execute(ref TestJob data, System.IntPtr animationStreamPtr, System.IntPtr methodIndex, ref Unity.Jobs.LowLevel.Unsafe.JobRanges ranges, int jobIndex) (at /Users/bokken/buildslave/unity/build/Modules/Animation/Managed/ProcessAnimationJobStruct.cs:49)

  at Unity.Burst.Editor.BurstAotCompiler+BclRunner.RunProgram (UnityEditor.Utils.Program p, System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) [0x001bf] in /Users/aaa/app/Library/PackageCache/[email protected]/Editor/BurstAotCompiler.cs:1011
  at Unity.Burst.Editor.BurstAotCompiler+BclRunner.RunManagedProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) [0x0003f] in /Users/aaa/app/Library/PackageCache/[email protected]/Editor/BurstAotCompiler.cs:928
  at Unity.Burst.Editor.BurstAotCompiler+BclRunner.RunManagedProgram (System.String exe, System.String args, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) [0x00000] in /Users/aaa/app/Library/PackageCache/[email protected]/Editor/BurstAotCompiler.cs:903
  at Unity.Burst.Editor.BurstAotCompiler.OnPostBuildPlayerScriptDLLsImpl (UnityEditor.Build.Reporting.BuildReport report) [0x007b6] in /Users/aaa/app/Library/PackageCache/[email protected]/Editor/BurstAotCompiler.cs:444
  at Unity.Burst.Editor.BurstAotCompiler.OnPostBuildPlayerScriptDLLs (UnityEditor.Build.Reporting.BuildReport report) [0x0000c] in /Users/aaa/app/Library/PackageCache/[email protected]/Editor/BurstAotCompiler.cs:164
  at UnityEditor.Build.BuildPipelineInterfaces.OnPostBuildPlayerScriptDLLs (UnityEditor.Build.Reporting.BuildReport report) [0x00033] in /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:516

yasee avatar Jan 26 '22 08:01 yasee

当我有-enableInjectFix参数时,我禁用了BurstCompiler,并将IFixEditor.AutoInject设置为true。

public class IFixInitializer
{
    [InitializeOnLoadMethod]
    static void Initialize()
    {
        var arguments = Environment.GetCommandLineArgs();
        if (Array.IndexOf(arguments, "-enableInjectFix") != -1)
        {
            IFixEditor.AutoInject = true;
            DisableBurstCompiler();
        }
        else
        {
            IFixEditor.AutoInject = false;
        }
    }

    static void DisableBurstCompiler()
    {
        var burstPlatformAotSettings = Type.GetType("Unity.Burst.Editor.BurstPlatformAotSettings,Unity.Burst.Editor");
        if (burstPlatformAotSettings == null) return;
        var getOrCreateSettings = burstPlatformAotSettings.GetMethod("GetOrCreateSettings", BindingFlags.NonPublic | BindingFlags.Static);
        var enableBurstCompilation = burstPlatformAotSettings.GetField("EnableBurstCompilation", BindingFlags.NonPublic | BindingFlags.Instance);
        var save = burstPlatformAotSettings.GetMethod("Save", BindingFlags.NonPublic | BindingFlags.Instance);
        var aotSettingObj = getOrCreateSettings.Invoke(null, new object[] {EditorUserBuildSettings.activeBuildTarget});
        enableBurstCompilation.SetValue(aotSettingObj, false);
        save.Invoke(aotSettingObj, new object[] {EditorUserBuildSettings.activeBuildTarget});
    }
}

yasee avatar Feb 03 '22 00:02 yasee

当我用Unity2020.3.23.f1,包括InjectFix和以下组件进行iOS构建(Build Settings->iOS Build)时,我得到了一个错误。 有什么变通办法吗?

Component

namespace Examples
{
    public class Test : MonoBehaviour
    {
        [BurstCompile(CompileSynchronously = true)]
        private struct MyJob : IJob
        {
            public void Execute()
            {
            }
        }
    }

Build Error

(0,0): Burst error BC1016: The managed function `IFix.WrappersManagerImpl.GetPatch(int id)` is not supported
 at Examples.Test.MyJob.Execute(Examples.Test.MyJob* this)
 at Unity.Jobs.IJobExtensions.JobStruct`1<Examples.Test.MyJob>.Execute(ref Examples.Test.MyJob data, System.IntPtr additionalPtr, System.IntPtr bufferRangePatchData, ref Unity.Jobs.LowLevel.Unsafe.JobRanges ranges, int jobIndex) (at /Users/bokken/buildslave/unity/build/Runtime/Jobs/Managed/IJob.cs:30)
BuildFailedException: Burst compiler (1.4.7) failed running

你这个改了么

AnyueKami avatar Dec 26 '23 09:12 AnyueKami

Unity (0,0): Burst error BC1016: The managed function IFix.WrappersManagerImpl.GetPatch(int id) is not supported

你好,当时这个问题是怎么解决的,我也遇到了同样的问题。

AnyueKami avatar Dec 27 '23 07:12 AnyueKami