107 lines
5.0 KiB
C#
107 lines
5.0 KiB
C#
|
using System;
|
||
|
|
||
|
namespace Unity.Collections
|
||
|
{
|
||
|
/// <summary>
|
||
|
///
|
||
|
/// </summary>
|
||
|
[Obsolete("Use GenerateTestsForBurstCompatibility (UnityUpgradable) -> GenerateTestsForBurstCompatibilityAttribute", true)]
|
||
|
public class BurstCompatibleAttribute : Attribute
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Documents and enforces (via generated tests) that the tagged method or property has to stay burst compatible.
|
||
|
/// </summary>
|
||
|
/// <remarks>This attribute cannot be used with private methods or properties.</remarks>
|
||
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Constructor, AllowMultiple = true)]
|
||
|
public class GenerateTestsForBurstCompatibilityAttribute : Attribute
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Burst compatible compile target.
|
||
|
/// </summary>
|
||
|
public enum BurstCompatibleCompileTarget
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Player.
|
||
|
/// </summary>
|
||
|
Player,
|
||
|
|
||
|
/// <summary>
|
||
|
/// Editor.
|
||
|
/// </summary>
|
||
|
Editor,
|
||
|
|
||
|
/// <summary>
|
||
|
/// Player and editor.
|
||
|
/// </summary>
|
||
|
PlayerAndEditor
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Types to be used for the declared generic type or method.
|
||
|
/// </summary>
|
||
|
/// <remarks>
|
||
|
/// The generic type arguments are tracked separately for types and methods. Say a generic type also contains
|
||
|
/// a generic method, like in the case of Foo<T>.Bar<U>(T baz, U blah). You must specify
|
||
|
/// GenericTypeArguments for Foo and also for Bar to establish the concrete types for T and U. When code
|
||
|
/// generation occurs for the Burst compatibility tests, any time T appears (in the definition of Foo)
|
||
|
/// it will be replaced with the generic type argument you specified for Foo and whenever U appears
|
||
|
/// (in method Bar's body) it will be replaced by whatever generic type argument you specified for the method
|
||
|
/// Bar.
|
||
|
/// </remarks>
|
||
|
public Type[] GenericTypeArguments { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// Specifies the symbol that must be defined in order for the method to be tested for Burst compatibility.
|
||
|
/// </summary>
|
||
|
public string RequiredUnityDefine = null;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Specifies whether code should be Burst compiled for the player, editor, or both.
|
||
|
/// </summary>
|
||
|
/// <remarks>
|
||
|
/// When set to BurstCompatibleCompileTarget.Editor, the generated Burst compatibility code will be
|
||
|
/// surrounded by #if UNITY_EDITOR to ensure that the Burst compatibility test will only be executed in the
|
||
|
/// editor. The code will be compiled with Burst function pointers. If you have a non-null RequiredUnityDefine,
|
||
|
/// an #if with the RequiredUnityDefine will also be emitted.<para/> <para/>
|
||
|
///
|
||
|
/// When set to BurstCompatibilityCompileTarget.Player, the generated Burst compatibility code will
|
||
|
/// only be surrounded by an #if containing the RequiredUnityDefine (or nothing if RequiredUnityDefine is null).
|
||
|
/// Instead of compiling with Burst function pointers, a player build is started where the Burst AOT compiler
|
||
|
/// will verify the Burst compatibility. This is done to speed up Burst compilation for the compatibility tests
|
||
|
/// since Burst function pointer compilation is not done in parallel.<para/> <para/>
|
||
|
///
|
||
|
/// When set to BurstCompatibilityCompileTarget.PlayerAndEditor, the generated Burst compatibility code will
|
||
|
/// only be surrounded by an #if containing the RequiredUnityDefine (or nothing if RequiredUnityDefine is null).
|
||
|
/// The code will be compiled both by the editor (using Burst function pointers) and with a player build (using
|
||
|
/// Burst AOT).<para/> <para/>
|
||
|
///
|
||
|
/// For best performance of the Burst compatibility tests, prefer to use BurstCompatibilityCompileTarget.Player
|
||
|
/// as much as possible.
|
||
|
/// </remarks>
|
||
|
public BurstCompatibleCompileTarget CompileTarget = BurstCompatibleCompileTarget.Player;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Attribute to exclude a method from burst compatibility testing even though the containing type is.
|
||
|
/// </summary>
|
||
|
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Constructor)]
|
||
|
public class ExcludeFromBurstCompatTestingAttribute : Attribute
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Reason for excluding a method from being included in generated Burst compilation tests
|
||
|
/// </summary>
|
||
|
public string Reason { get; set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// Create this attribute with the reason to exclude from burst compatibility testing.
|
||
|
/// </summary>
|
||
|
/// <param name="_reason">Reason target is not burst compatible.</param>
|
||
|
public ExcludeFromBurstCompatTestingAttribute(string _reason)
|
||
|
{
|
||
|
Reason = _reason;
|
||
|
}
|
||
|
}
|
||
|
}
|