aboutsummaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2020-05-07 21:16:33 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2020-05-07 21:16:33 +0200
commit1ac28a8505a42d5deeaacc1dfb1f7fd6fa96bb05 (patch)
tree974831b004fa1299a03ae3fbe522503c456c049b
parent4d70e057b1ad5df3969936c5b00eb8b610aa4739 (diff)
remove local usage in rewriter for reftype, set Sequential layout for struct, add ctor with pNext
-rw-r--r--VK/Structs.cs11
-rw-r--r--VK/vulkan.csproj5
-rw-r--r--vk.generator/Program.cs21
-rw-r--r--vk.rewrite/Program.cs36
-rw-r--r--vk.rewrite/vk.rewrite.csproj2
5 files changed, 43 insertions, 32 deletions
diff --git a/VK/Structs.cs b/VK/Structs.cs
index 71dd5b4..c725de0 100644
--- a/VK/Structs.cs
+++ b/VK/Structs.cs
@@ -191,5 +191,16 @@ namespace Vulkan {
this._layout = (int)layout;
}
}
+ /// <summary>
+ /// 3X4 ROW Major affine transformation matrix
+ /// </summary>
+ [StructLayout (LayoutKind.Sequential)]
+ public struct VkTransformMatrixKHR {
+ [MarshalAs (UnmanagedType.ByValArray, SizeConst = 48)] float[] values;
+ public float this[int row, int col] {
+ get => values[row * 3 + col];
+ set => values[row * 3 + col] = value;
+ }
+ }
}
diff --git a/VK/vulkan.csproj b/VK/vulkan.csproj
index 7573b6a..f7d0e83 100644
--- a/VK/vulkan.csproj
+++ b/VK/vulkan.csproj
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
- <AssemblyVersion>0.2.2.1</AssemblyVersion>
+ <AssemblyVersion>0.2.20</AssemblyVersion>
<AssemblyName>VK</AssemblyName>
<Description>Low level vulkan bindings for .net</Description>
<Product>VK</Product>
@@ -17,6 +17,9 @@
<Icon>vk.net-64.png</Icon>
<PackageIcon>vk.net-64.png</PackageIcon>
<SynchReleaseVersion>false</SynchReleaseVersion>
+ <PackageReleaseNotes>
+
+ </PackageReleaseNotes>
</PropertyGroup>
<ItemGroup>
diff --git a/vk.generator/Program.cs b/vk.generator/Program.cs
index 43fa2a0..e69b2ca 100644
--- a/vk.generator/Program.cs
+++ b/vk.generator/Program.cs
@@ -153,6 +153,7 @@ namespace vk.generator {
};
static string[] skipEnums = { "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT", "VK_PIPELINE_CREATE_DISPATCH_BASE" };
+ static string[] skipStruct = { "VkTransformMatrixKHR" };
static Dictionary<string, string[]> paramTypeAliases = new Dictionary<string, string[]> {
{ "void*", new string[] {"IntPtr"} },
@@ -390,11 +391,22 @@ namespace vk.generator {
tw.WriteLine (@"};");
tw.Indent--;
tw.WriteLine (@"}");
+
+ tw.WriteLine ($"public {sd.Name} (IntPtr pNext) : this () {{");
+ tw.Indent++;
+
+ tw.WriteLine ($"sType = {sType.CSName}.{EnumerantValue.GetCSName (md.defaultValue, sType.CSName)};");
+ tw.WriteLine ($"this.pNext = pNext;");
+
+ tw.Indent--;
+ tw.WriteLine (@"}");
}
static string[] valueTypes = { "byte", "int", "uint", "float", "ushort", "ulong" };
static void gen_struct (IndentedTextWriter tw, StructDef sd) {
if (sd.category == TypeCategories.union)
tw.WriteLine($"[StructLayout(LayoutKind.Explicit)]");
+ else
+ tw.WriteLine ($"[StructLayout(LayoutKind.Sequential)]");
tw.WriteLine ($"public unsafe partial struct {sd.Name} {{");
tw.Indent++;
foreach (MemberDef mb in sd.members) {
@@ -473,8 +485,11 @@ namespace vk.generator {
writePreamble (tw, "System.Runtime.InteropServices");
tw.Indent++;
- foreach (StructDef sd in types.OfType<StructDef> ())//.Where(t=>t.definedBy.Count == 0))
+ foreach (StructDef sd in types.OfType<StructDef> ()) {
+ if (skipStruct.Contains (sd.Name))
+ continue;
gen_struct (tw, sd);
+ }
tw.Indent--;
tw.WriteLine (@"}");
@@ -855,7 +870,7 @@ namespace vk.generator {
types.Add (new TypeDef {
category = category,
Name = nType["name"].InnerText,
- baseType = nType["type"].InnerText
+ baseType = nType["type"]?.InnerText
});
break;
case TypeCategories.bitmask:
@@ -973,7 +988,7 @@ namespace vk.generator {
EnumerantValue ev = new EnumerantValue ();
foreach (XmlNode p in nEnum.ChildNodes) {
- if (p.Name == "comment") {
+ if (p.Name == "comment" || p.NodeType == XmlNodeType.Comment) {
ev.comment = p.InnerXml;
continue;
}
diff --git a/vk.rewrite/Program.cs b/vk.rewrite/Program.cs
index db41bab..93101b9 100644
--- a/vk.rewrite/Program.cs
+++ b/vk.rewrite/Program.cs
@@ -88,13 +88,9 @@ namespace Vk.Rewrite
List<VariableDefinition> stringParams = new List<VariableDefinition>();
for (int i = 0; i < method.Parameters.Count; i++)
{
- EmitLoadArgument (il, i, method.Parameters);
- TypeReference parameterType = method.Parameters[i].ParameterType;
- if (parameterType.IsGenericInstance) {
- if (parameterType.Name == "Nullable`1")
- System.Diagnostics.Debugger.Break ();
- }
+ EmitLoadArgument (il, i, method.Parameters);
+ TypeReference parameterType = method.Parameters[i].ParameterType;
if (parameterType.FullName == "System.String")
{
@@ -104,15 +100,7 @@ namespace Vk.Rewrite
il.Emit(OpCodes.Stloc, variableDef);
il.Emit(OpCodes.Ldloc, variableDef);
stringParams.Add(variableDef);
- }
- else if (parameterType.IsByReference)
- {
- VariableDefinition byRefVariable = new VariableDefinition(new PinnedType(parameterType));
- method.Body.Variables.Add(byRefVariable);
- il.Emit(OpCodes.Stloc, byRefVariable);
- il.Emit(OpCodes.Ldloc, byRefVariable);
- il.Emit(OpCodes.Conv_I);
- }
+ }
}
FieldDefinition field = method.DeclaringType.Fields.SingleOrDefault(fd => fd.Name == method.Name + "_ptr");
@@ -123,22 +111,16 @@ namespace Vk.Rewrite
il.Emit(OpCodes.Ldsfld, field);
CallSite callSite = new CallSite(method.ReturnType) {CallingConvention = MethodCallingConvention.StdCall};
-
+
foreach (ParameterDefinition pd in method.Parameters)
{
- TypeReference parameterType;
- if (pd.ParameterType.IsByReference)
- parameterType = new PointerType(pd.ParameterType.GetElementType());
- else if (pd.ParameterType.FullName == "System.String")
- parameterType = s_stringHandleRef;
- else
- parameterType = pd.ParameterType;
-
- ParameterDefinition calliPD = new ParameterDefinition(pd.Name, pd.Attributes, parameterType);
-
- callSite.Parameters.Add(calliPD);
+ if (pd.ParameterType.FullName == "System.String")
+ callSite.Parameters.Add (new ParameterDefinition (pd.Name, pd.Attributes, s_stringHandleRef));
+ else
+ callSite.Parameters.Add (pd);
}
+
il.Emit(OpCodes.Calli, callSite);
foreach (VariableDefinition stringVar in stringParams)
diff --git a/vk.rewrite/vk.rewrite.csproj b/vk.rewrite/vk.rewrite.csproj
index d87b4dd..9e7e586 100644
--- a/vk.rewrite/vk.rewrite.csproj
+++ b/vk.rewrite/vk.rewrite.csproj
@@ -6,7 +6,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Mono.Cecil" Version="0.11.1" />
+ <PackageReference Include="Mono.Cecil" Version="0.11.2" />
</ItemGroup>
</Project> \ No newline at end of file