/// <summary>
 /// Creates a <see cref="MethodDeclarationSyntax"/> instance for the <c>InitializeFromDispatchData</c> method.
 /// </summary>
 /// <param name="dispatchInfo">The dispatch info gathered for the current shader.</param>
 /// <returns>The resulting <see cref="MethodDeclarationSyntax"/> instance for the <c>InitializeFromDispatchData</c> method.</returns>
 public static MethodDeclarationSyntax GetSyntax(DispatchDataInfo dispatchInfo)
 {
     // This code produces a method declaration as follows:
     //
     // readonly void global::ComputeSharp.D2D1.__Internals.ID2D1Shader.InitializeFromDispatchData(global::System.ReadOnlySpan<byte> data)
     // {
     //     <BODY>
     // }
     return
         (MethodDeclaration(PredefinedType(Token(SyntaxKind.VoidKeyword)), Identifier(nameof(InitializeFromDispatchData)))
          .WithExplicitInterfaceSpecifier(ExplicitInterfaceSpecifier(IdentifierName($"global::ComputeSharp.D2D1.__Internals.{nameof(ID2D1Shader)}")))
          .AddParameterListParameters(Parameter(Identifier("data")).WithType(
                                          GenericName(Identifier("global::System.ReadOnlySpan"))
                                          .AddTypeArgumentListArguments(PredefinedType(Token(SyntaxKind.ByteKeyword)))))
          .WithBody(Block(GetDispatchDataUnloadingStatements(dispatchInfo.FieldInfos))));
 }
 /// <summary>
 /// Creates a <see cref="MethodDeclarationSyntax"/> instance for the <c>LoadDispatchDataMethod</c> method.
 /// </summary>
 /// <param name="dispatchInfo">The dispatch info gathered for the current shader.</param>
 /// <returns>The resulting <see cref="MethodDeclarationSyntax"/> instance for the <c>LoadDispatchDataMethod</c> method.</returns>
 public static MethodDeclarationSyntax GetSyntax(DispatchDataInfo dispatchInfo)
 {
     // This code produces a method declaration as follows:
     //
     // readonly void global::ComputeSharp.D2D1.__Internals.ID2D1Shader.LoadDispatchData<TLoader>(ref TLoader loader)
     // {
     //     <BODY>
     // }
     return
         (MethodDeclaration(PredefinedType(Token(SyntaxKind.VoidKeyword)), Identifier(nameof(LoadDispatchData)))
          .WithExplicitInterfaceSpecifier(ExplicitInterfaceSpecifier(IdentifierName($"global::ComputeSharp.D2D1.__Internals.{nameof(ID2D1Shader)}")))
          .AddModifiers(Token(SyntaxKind.ReadOnlyKeyword))
          .AddTypeParameterListParameters(TypeParameter(Identifier("TLoader")))
          .AddParameterListParameters(Parameter(Identifier("loader")).AddModifiers(Token(SyntaxKind.RefKeyword)).WithType(IdentifierName("TLoader")))
          .WithBody(Block(GetDispatchDataLoadingStatements(dispatchInfo.FieldInfos, dispatchInfo.Root32BitConstantCount))));
 }