diff --git a/src/Android/Avalonia.Android/Avalonia.Android.csproj b/src/Android/Avalonia.Android/Avalonia.Android.csproj
index 236422885a..170cc088fb 100644
--- a/src/Android/Avalonia.Android/Avalonia.Android.csproj
+++ b/src/Android/Avalonia.Android/Avalonia.Android.csproj
@@ -4,7 +4,6 @@
$(AvsMinSupportedAndroidVersion)
true
Avalonia.Android.Internal
- true
diff --git a/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj b/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj
index 2c5734ed45..e6a4e2724b 100644
--- a/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj
+++ b/src/Avalonia.OpenGL/Avalonia.OpenGL.csproj
@@ -3,7 +3,6 @@
$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0
true
- true
diff --git a/src/Avalonia.Vulkan/Avalonia.Vulkan.csproj b/src/Avalonia.Vulkan/Avalonia.Vulkan.csproj
index e270d64d70..59b8e62708 100644
--- a/src/Avalonia.Vulkan/Avalonia.Vulkan.csproj
+++ b/src/Avalonia.Vulkan/Avalonia.Vulkan.csproj
@@ -3,7 +3,6 @@
$(AvsCurrentTargetFramework);$(AvsLegacyTargetFrameworks);netstandard2.0
true
- true
diff --git a/src/tools/DevGenerators/GetProcAddressInitialization.cs b/src/tools/DevGenerators/GetProcAddressInitialization.cs
index 2983010b1c..d2ef6194fb 100644
--- a/src/tools/DevGenerators/GetProcAddressInitialization.cs
+++ b/src/tools/DevGenerators/GetProcAddressInitialization.cs
@@ -198,17 +198,19 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
.AppendLine("\");");
foreach(var p in method.Parameters)
- if (NeedsPin(p.Type))
+ if (NeedsPin(p.Type, p.RefKind))
classBuilder.Pad(2)
.Append("fixed(")
- .Append(MapToNative(p.Type))
+ .Append(MapToNative(p.Type, p.RefKind))
.Append(" @__p_")
.Append(p.Name)
.Append(" = ")
+ .Append(p.RefKind != RefKind.None ? "&" : "")
.Append(p.Name)
.AppendLine(")");
classBuilder.Pad(2);
+
if (!method.ReturnsVoid)
classBuilder.Append("return ");
@@ -224,10 +226,9 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
firstArg = false;
else
invokeBuilder.Append(", ");
- AppendRefKind(invokeBuilder, p.RefKind);
invokeBuilder
.Append("@")
- .Append(ConvertToNative(p.Name, p.Type));
+ .Append(ConvertToNative(p.Name, p.Type, p.RefKind));
}
invokeBuilder.Append(")");
@@ -278,16 +279,16 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
return sb;
}
- static bool NeedsPin(ITypeSymbol type)
+ static bool NeedsPin(ITypeSymbol type, RefKind refKind)
{
- if (type.TypeKind == TypeKind.Array)
+ if (type.TypeKind == TypeKind.Array || refKind != RefKind.None)
return true;
return false;
}
- static string ConvertToNative(string name, ITypeSymbol type)
+ static string ConvertToNative(string name, ITypeSymbol type, RefKind refKind)
{
- if (NeedsPin(type))
+ if (NeedsPin(type, refKind))
return "__p_" + name;
if (IsBool(type))
return $"{name} ? 1 : 0";
@@ -304,10 +305,12 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
static bool IsBool(ITypeSymbol type) => type.GetFullyQualifiedName() == "global::System.Boolean" ||
type.GetFullyQualifiedName() == "bool";
- static string MapToNative(ITypeSymbol type)
+ static string MapToNative(ITypeSymbol type, RefKind refKind)
{
if (type.TypeKind == TypeKind.Array)
return ((IArrayTypeSymbol)type).ElementType.GetFullyQualifiedName() + "*";
+ else if (refKind != RefKind.None)
+ return MapToNative(type, RefKind.None) + "*";
if (IsBool(type))
return "int";
return type.GetFullyQualifiedName();
@@ -322,7 +325,7 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
StringBuilder fakeDelegate = new(
" [global::System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(global::System.Runtime.InteropServices.CallingConvention.Cdecl)]\n internal delegate ");
fakeDelegate
- .Append(MapToNative(method.ReturnType))
+ .Append(MapToNative(method.ReturnType, RefKind.None))
.Append(" __wasmDummy")
.Append(method.Name)
.Append("(");
@@ -330,20 +333,19 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
int arg = 0;
- void AppendArgCore(StringBuilder builder, string a, RefKind kind, bool isFirstArg)
+ void AppendArgCore(StringBuilder builder, string a, bool isFirstArg)
{
if (!isFirstArg)
builder.Append(",");
- AppendRefKind(builder, kind);
builder.Append(a);
}
- void AppendArg(string a, RefKind kind, bool returnArg = false)
+ void AppendArg(string a, bool returnArg = false)
{
- AppendArgCore(functionPointer, a, kind, arg == 0);
+ AppendArgCore(functionPointer, a, arg == 0);
if (!returnArg)
{
- AppendArgCore(fakeDelegate, a, kind, arg == 0);
+ AppendArgCore(fakeDelegate, a, arg == 0);
fakeDelegate.Append($" a{arg}");
}
@@ -352,10 +354,10 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
foreach (var p in method.Parameters)
{
- AppendArg(MapToNative(p.Type), p.RefKind);
+ AppendArg(MapToNative(p.Type, p.RefKind));
}
- AppendArg(MapToNative(method.ReturnType), RefKind.None, true);
+ AppendArg(MapToNative(method.ReturnType, RefKind.None), true);
functionPointer.Append(">");
fakeDelegate.Append(");");