diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2020-05-07 21:16:33 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2020-05-07 21:16:33 +0200 |
| commit | 1ac28a8505a42d5deeaacc1dfb1f7fd6fa96bb05 (patch) | |
| tree | 974831b004fa1299a03ae3fbe522503c456c049b | |
| parent | 4d70e057b1ad5df3969936c5b00eb8b610aa4739 (diff) | |
remove local usage in rewriter for reftype, set Sequential layout for struct, add ctor with pNext
| -rw-r--r-- | VK/Structs.cs | 11 | ||||
| -rw-r--r-- | VK/vulkan.csproj | 5 | ||||
| -rw-r--r-- | vk.generator/Program.cs | 21 | ||||
| -rw-r--r-- | vk.rewrite/Program.cs | 36 | ||||
| -rw-r--r-- | vk.rewrite/vk.rewrite.csproj | 2 |
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 |