Burst でコンパイルされたコードの呼び出し
Burst でコンパイルされたメソッドは、マネージコードから直接呼び出すことができます。ジェネリックメソッドや、宣言する型がジェネリックであるメソッドの呼び出しはサポートされていませんが、それ以外は 関数ポインター と同じルールが適用されます。しかし、関数ポインターに必要な追加のボイラープレートについて心配する必要はありません。
以下の例に、Burst でコンパイルされるユーティリティクラスを示します。これは構造体を使用しているので、関数ポインター のルールに従い参照渡しを行います。
[BurstCompile]
public static class MyBurstUtilityClass
{
[BurstCompile]
public static void BurstCompiled_MultiplyAdd(in float4 mula, in float4 mulb, in float4 add, out float4 result)
{
result = mula * mulb + add;
}
}
このメソッドをマネージコードから使用するには、以下のようにします。
public class MyMonoBehaviour : MonoBehaviour
{
void Start()
{
var mula = new float4(1, 2, 3, 4);
var mulb = new float4(-1,1,-1,1);
var add = new float4(99,0,0,0);
MyBurstUtilityClass.BurstCompiled_MultiplyAdd(mula, mulb, add, out var result);
Debug.Log(result);
}
}
このスクリプトをオブジェクトにアタッチして実行すると、float4(98f, 2f, -3f, 4f) がログに出力されます。
コードの変換
Burst では、IL Post Processing を使用して、コードを関数ポインターと呼び出しに自動的に変換します。詳細については、関数ポインター に関するドキュメントを参照してください。
直接呼び出しへの変換を無効にするには、以下のように BurstCompile オプションに DisableDirectCall = true を追加します。これにより、Post Processor でコードが実行されなくなります。
[BurstCompile]
public static class MyBurstUtilityClass
{
[BurstCompile(DisableDirectCall = true)]
public static void BurstCompiled_MultiplyAdd(in float4 mula, in float4 mulb, in float4 add, out float4 result)
{
result = mula * mulb + add;
}
}