aboutsummaryrefslogtreecommitdiffstatsci
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-12-03 16:19:08 +0100
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-12-03 16:19:08 +0100
commite1dbbce20040ee0340125fc39dc0af987dabe5df (patch)
treea203aa58169f50736b54a775bf1e776344734a54
parentbaf18112ce9f7807a6364243399566f18a240b8f (diff)
VkTransformMatrix, log_gen, netstandard2.1
-rw-r--r--tests/Program.cs2
-rw-r--r--tests/tests.csproj2
-rw-r--r--vk.generator/Program.cs141
-rw-r--r--vulkan/Structs.cs287
-rw-r--r--vulkan/vulkan.csproj6
5 files changed, 220 insertions, 218 deletions
diff --git a/tests/Program.cs b/tests/Program.cs
index 6bd6dcf..b2050d2 100644
--- a/tests/Program.cs
+++ b/tests/Program.cs
@@ -40,7 +40,7 @@ namespace tests
VkClearColorValue clear = new VkClearColorValue(255,0,0);
- clear.float32.a = 210;
+ clear.floats[2] = 210;
using (PinnedObjects pi = new PinnedObjects()) {
ci.pApplicationInfo = ai.Pin(pi);
diff --git a/tests/tests.csproj b/tests/tests.csproj
index 84eb5ae..ed261c9 100644
--- a/tests/tests.csproj
+++ b/tests/tests.csproj
@@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
- <TargetFramework>net6</TargetFramework>
+ <TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
diff --git a/vk.generator/Program.cs b/vk.generator/Program.cs
index cccc762..7b8ca27 100644
--- a/vk.generator/Program.cs
+++ b/vk.generator/Program.cs
@@ -92,6 +92,12 @@ namespace vk.generator {
/// has been recreated from scratch to be more like a simple functional parser easyer to tweak.
/// </summary>
public class Generator {
+ [Conditional ("LOG_VK_NET_GEN")]
+ static void log_vk_net_gen (ConsoleColor c, string msg) {
+ Console.ForegroundColor = c;
+ Console.WriteLine ($"[GEN] {msg}");
+ Console.ResetColor();
+ }
const int extBase = 1000000000;
const int extBlockSize = 1000;
/// <summary> Main namespace for generated code. </summary>
@@ -162,9 +168,17 @@ namespace vk.generator {
};
static string[] reservedNames = { "event", "object" };
- static string[] skipEnums = { "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT", "VK_PIPELINE_CREATE_DISPATCH_BASE" };
+ static string[] skipEnums = {
+ "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT",
+ "VK_PIPELINE_CREATE_DISPATCH_BASE",
+ //cs names generate same output
+ "VK_SURFACE_COUNTER_VBLANK_EXT",
+ "VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR",
+ "VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR"
+ };
+
+ static string[] skipGenStruct = { "VkClearColorValue", "VkTransformMatrixKHR" };
- static string[] skipGenStruct = { "VkClearColorValue" };
static Dictionary<string, string[]> paramTypeAliases = new Dictionary<string, string[]> {
{ "void*", new string[] {"IntPtr"} },
@@ -186,12 +200,10 @@ namespace vk.generator {
if (to == "VkFlags")//dont alias to VkFlags
return;
if (aliases.ContainsKey (from))
- Console.WriteLine ($"aliases list constains already an alias for: {from}");
+ log_vk_net_gen (ConsoleColor.Red, $"aliases list constains already an alias for: {from}");
else
aliases.Add (from, to);
- Console.ForegroundColor = ConsoleColor.Green;
- Console.WriteLine ($"adding alias {from} -> {to}");
- Console.ForegroundColor = ConsoleColor.Gray;
+ log_vk_net_gen (ConsoleColor.DarkGreen, $"adding alias {from} -> {to}");
}
enum EnumTypes { bitmask, @enum };
@@ -408,9 +420,9 @@ namespace vk.generator {
rp.writeSummaryAndRemarks (tw);
if (sd.category == TypeCategories.union)
- tw.WriteLine($"[StructLayout(LayoutKind.Explicit, Pack = 1, CharSet = CharSet.Ansi)]");
+ tw.WriteLine($"[StructLayout(LayoutKind.Explicit)]");
else
- tw.WriteLine ($"[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]");
+ tw.WriteLine ($"[StructLayout(LayoutKind.Sequential)]");
tw.WriteLine ($"public unsafe partial struct {sd.Name} {{");
tw.Indent++;
foreach (MemberDef mb in sd.members) {
@@ -502,7 +514,7 @@ namespace vk.generator {
}
static void gen_structs (string englobingStaticClass) {
- using (StreamWriter sr = new StreamWriter (targetPath($"structs_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
+ using (StreamWriter sr = new StreamWriter (vkNetTargetPath($"structs_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
using (IndentedTextWriter tw = new IndentedTextWriter (sr)) {
writePreamble (tw, "System.Runtime.InteropServices");
tw.Indent++;
@@ -564,7 +576,7 @@ namespace vk.generator {
tw.WriteLine ($"{vName,-50} = {ev.value,10},");
}
static void gen_enums (string englobingStaticClass) {
- using (StreamWriter sr = new StreamWriter (targetPath($"enums_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
+ using (StreamWriter sr = new StreamWriter (vkNetTargetPath($"enums_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
using (IndentedTextWriter tw = new IndentedTextWriter (sr)) {
writePreamble (tw, "System.Diagnostics");
tw.Indent++;
@@ -622,7 +634,7 @@ namespace vk.generator {
}
}
static void gen_extensions () {
- using (StreamWriter sr = new StreamWriter (targetPath ("extensions"), false, System.Text.Encoding.UTF8)) {
+ using (StreamWriter sr = new StreamWriter (vkNetTargetPath ("extensions"), false, System.Text.Encoding.UTF8)) {
using (IndentedTextWriter tw = new IndentedTextWriter (sr)) {
writePreamble (tw);
tw.Indent++;
@@ -694,7 +706,7 @@ namespace vk.generator {
tw.WriteLine (@"}");
}
static void gen_handles (string englobingStaticClass) {
- using (StreamWriter sr = new StreamWriter (targetPath($"handles_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
+ using (StreamWriter sr = new StreamWriter (vkNetTargetPath($"handles_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
using (IndentedTextWriter tw = new IndentedTextWriter (sr)) {
writePreamble (tw, "System.Diagnostics");
tw.Indent++;
@@ -710,8 +722,7 @@ namespace vk.generator {
static void gen_constant_value (IndentedTextWriter tw, EnumerantValue cd) {
if (string.IsNullOrEmpty (cd.value)) {
- Console.ForegroundColor = ConsoleColor.DarkRed;
- Console.WriteLine ("no value for constant: " + cd);
+ log_vk_net_gen (ConsoleColor.DarkRed, "no value for constant: " + cd);
return;
}
string pTrims = cd.value.Replace ("(", "");
@@ -737,7 +748,7 @@ namespace vk.generator {
}
}
static void gen_constants (string englobingStaticClass) {
- using (StreamWriter sr = new StreamWriter (targetPath($"constants_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
+ using (StreamWriter sr = new StreamWriter (vkNetTargetPath($"constants_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
using (IndentedTextWriter tw = new IndentedTextWriter (sr)) {
writePreamble (tw);
tw.Indent++;
@@ -790,8 +801,7 @@ namespace vk.generator {
}
static void gen_command (IndentedTextWriter tw, CommandDef cd) {
if (!string.IsNullOrEmpty (cd.alias)) {
- Console.ForegroundColor = ConsoleColor.DarkGray;
- Console.WriteLine ("TODO:command generator: is alias: " + cd);
+ log_vk_net_gen (ConsoleColor.DarkGray, "TODO:command generator: is alias: " + cd);
return;
}
tw.WriteLine ($"internal static IntPtr {cd.CSName}_ptr;");
@@ -830,7 +840,7 @@ namespace vk.generator {
tw.WriteLine ();
}
static void gen_commands (string englobingStaticClass) {
- using (StreamWriter sr = new StreamWriter (targetPath ($"commands_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
+ using (StreamWriter sr = new StreamWriter (vkNetTargetPath ($"commands_{englobingStaticClass}"), false, System.Text.Encoding.UTF8)) {
using (IndentedTextWriter tw = new IndentedTextWriter (sr)) {
writePreamble (tw, vknamespace + ".Generator");
tw.Indent++;
@@ -850,7 +860,6 @@ namespace vk.generator {
foreach (string preloadCmd in preloadedCommands) {
tw.WriteLine ($"{preloadCmd}_ptr = Vk.s_nativeLib.LoadFunctionPointer(\"{preloadCmd}\");");
}
- //tw.WriteLine (@"Console.WriteLine (""preload function pointer ok."");");
tw.Indent--;
tw.WriteLine (@"}");
@@ -961,14 +970,11 @@ namespace vk.generator {
});
break;
case TypeCategories.define:
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.WriteLine (nType.InnerXml);
+ log_vk_net_gen (ConsoleColor.Cyan, nType.InnerXml);
break;
case TypeCategories.include:
case TypeCategories.group:
- Console.ForegroundColor = ConsoleColor.DarkMagenta;
- Console.WriteLine($"Unprocessed type category {category}: {nType.OuterXml}");
- Console.ForegroundColor = ConsoleColor.Gray;
+ log_vk_net_gen (ConsoleColor.DarkMagenta, $"Unprocessed type category {category}: {nType.OuterXml}");
break;
case TypeCategories.union:
case TypeCategories.@struct:
@@ -979,7 +985,7 @@ namespace vk.generator {
foreach (XmlNode m in nType.ChildNodes) {
if ((m.NodeType != XmlNodeType.Element)) {
- Console.WriteLine ($"expecting element, having {m.NodeType}: {m.OuterXml}");
+ log_vk_net_gen (ConsoleColor.Red, $"expecting element, having {m.NodeType}: {m.OuterXml}");
continue;
}
switch (m.Name) {
@@ -989,18 +995,14 @@ namespace vk.generator {
sd.members.Add (parseMember (m));
break;
default:
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine ($"unknown element in struct def : {m.OuterXml}");
- Console.ForegroundColor = ConsoleColor.Gray;
+ log_vk_net_gen (ConsoleColor.Red, $"unknown element in struct def : {m.OuterXml}");
break;
}
}
types.Add (sd);
break;
default:
- Console.ForegroundColor = ConsoleColor.DarkMagenta;
- Console.WriteLine ($"Unprocessed type: {nType.OuterXml}");
- Console.ForegroundColor = ConsoleColor.Gray;
+ log_vk_net_gen (ConsoleColor.Red, $"Unprocessed type: {nType.OuterXml}");
break;
}
}
@@ -1039,18 +1041,16 @@ namespace vk.generator {
ev.unusedComment = p.InnerXml;
continue;
}
- //cs names generate same output
- //TODO: removed suffix could be saved to be appened if alias csname is not unique
- if (p.Attributes["name"].Value == "VK_SURFACE_COUNTER_VBLANK_EXT" ||
- p.Attributes["name"].Value == "VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR" ||
- p.Attributes["name"].Value == "VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR") {
- Console.WriteLine ($"Discarded Enum Value:{ed.Name}->{p.Attributes["name"].Value}");
- continue;
- }
ev.Name = p.Attributes["name"].Value;
ev.comment = p.Attributes["comment"]?.Value;
+ if (skipEnums.Contains (ev.Name)) {
+ log_vk_net_gen (ConsoleColor.Yellow, $"skiped enum: {ev.Name}");
+ continue;
+ }
+
+
if (p.Attributes["alias"] != null) {
ev.isAlias = true;
ev.value = p.Attributes["alias"].Value;
@@ -1078,8 +1078,7 @@ namespace vk.generator {
ev.definedBy.Add (iface.Name);
break;
default:
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine ($"unhandle requirement tag in constants defs: {req.Attributes["name"].Value}");
+ log_vk_net_gen (ConsoleColor.Red, $"unhandle requirement tag in constants defs: {req.Attributes["name"].Value}");
break;
}
}
@@ -1096,12 +1095,10 @@ namespace vk.generator {
break;
default:
TypeDef tdef = types.Where (td => td.Name == req.Attributes["name"].Value).FirstOrDefault ();
- if (tdef != null) {
+ if (tdef != null)
tdef.definedBy.Add (iface.Name);
- }else{
- Console.ForegroundColor = ConsoleColor.DarkRed;
- Console.WriteLine ($"iface type not found: {req.Attributes["name"].Value}");
- }
+ else
+ log_vk_net_gen (ConsoleColor.DarkRed, $"iface type not found: {req.Attributes["name"].Value}");
break;
}
break;
@@ -1112,14 +1109,15 @@ namespace vk.generator {
CommandDef cd = commands.Where (e => e.Name == req.Attributes["name"].Value).First ();
cd.definedBy.Add (iface.Name);
} catch {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine ($"extension command not found: {req.Attributes["name"].Value}");
+ log_vk_net_gen (ConsoleColor.Red, $"extension command not found: {req.Attributes["name"].Value}");
}
break;
case "enum":
string eName = req.Attributes["name"].Value;
- if (skipEnums.Contains (eName))
+ if (skipEnums.Contains (eName)) {
+ log_vk_net_gen (ConsoleColor.Yellow, $"skiped enum: {eName}");
continue;
+ }
EnumerantValue ev = extends.Where (e => e.Name == eName).FirstOrDefault ();
if (ev != null) {
ev.definedBy.Add (iface.Name);
@@ -1175,8 +1173,7 @@ namespace vk.generator {
});
break;
default:
- Console.ForegroundColor = ConsoleColor.DarkRed;
- Console.WriteLine ($"unknown req: {req.OuterXml}");
+ log_vk_net_gen (ConsoleColor.DarkRed, $"unknown req: {req.OuterXml}");
break;
}
}
@@ -1195,13 +1192,12 @@ namespace vk.generator {
ext.type = (ExtensionType)Enum.Parse (typeof (ExtensionType), nExt.Attributes["type"].Value, true);
foreach (XmlNode n in nExt.ChildNodes) {
- if (n.Name == "require") {
+ if (n.Name == "require")
parseRequirements (ext, n);
- } else if (n.Name == "remove") {
- Console.ForegroundColor = ConsoleColor.Blue;
- Console.WriteLine ($"extension remove: {n.OuterXml}");
- } else
- Debugger.Break ();
+ else if (n.Name == "remove")
+ log_vk_net_gen (ConsoleColor.Blue, $"extension remove: {n.OuterXml}");
+ else
+ throw new NotImplementedException();
}
extensions.Add (ext);
@@ -1218,13 +1214,12 @@ namespace vk.generator {
fd.comment = nFeat.Attributes["comment"]?.Value;
foreach (XmlNode f in nFeat.ChildNodes) {
- if (f.Name == "require") {
+ if (f.Name == "require")
parseRequirements (fd, f);
- } else if (f.Name == "remove") {
- Console.ForegroundColor = ConsoleColor.DarkBlue;
- Console.WriteLine ($"feature remove: {f.OuterXml}");
- }// else
- //Debugger.Break ();
+ else if (f.Name == "remove")
+ log_vk_net_gen (ConsoleColor.DarkBlue, $"feature remove: {f.OuterXml}");
+ else
+ throw new NotImplementedException();
}
features.Add (fd);
@@ -1364,9 +1359,8 @@ namespace vk.generator {
continue;
}
if (l.StartsWith ("endif::")) {
- if (!conditionsStack.TryPop (out string condition)) {
- printError ($"empty condition stack: {l}");
- }
+ if (!conditionsStack.TryPop (out string condition))
+ log_vk_net_gen (ConsoleColor.Red, $"refpages: empty condition stack: {l}");
}
if (l.StartsWith ("== ") || l.StartsWith (".")) {
if (memberName != null) {
@@ -1480,9 +1474,10 @@ namespace vk.generator {
}
#endregion
const string vkrefsdir = "Vulkan-Docs/gen/refpage";
- const string targetDir = "build/generated";
- static string targetPath (string fileName) =>
- Path.Combine (targetDir, $"{fileName}_gen.cs");
+ const string vkNetTargetDir = "build/generated/vk_net";
+ const string vkeTargetDir = "build/generated/vke";
+ static string vkNetTargetPath (string fileName) =>
+ Path.Combine (vkNetTargetDir, $"{fileName}_gen.cs");
static void printError (string errString) {
Console.ForegroundColor = ConsoleColor.Red;
@@ -1492,7 +1487,7 @@ namespace vk.generator {
public static void Main (string[] args) {
if(args.Length < 1) {
- Console.WriteLine ("Usage: vk.generator path/to/vk.xml");
+ printError ("[GEN] Usage:\n\tvk.generator path/to/vk.xml");
return;
}
string vkxmlLocal = args[0];
@@ -1501,6 +1496,8 @@ namespace vk.generator {
printError ($"[GEN] {Path.Combine (Directory.GetCurrentDirectory(),vkxmlLocal)} not found.");
return;
}
+ if (!Directory.Exists (vkNetTargetDir))
+ Directory.CreateDirectory (vkNetTargetDir);
XmlDocument doc = new XmlDocument();
doc.Load(vkxmlLocal);
@@ -1519,14 +1516,14 @@ namespace vk.generator {
if (e.Name == "command")
readCommand(e);
else
- Console.WriteLine($"commands: {e.OuterXml}");
+ log_vk_net_gen (ConsoleColor.Red, $"expecting 'command', having '{e.Name}'\n{{e.OuterXml}}");
}
foreach (XmlNode e in doc.GetElementsByTagName("extensions").Item(0)) {
if (e.Name == "extension")
readExtension(e);
else
- Console.WriteLine($"extension: {e.OuterXml}");
+ log_vk_net_gen (ConsoleColor.Red, $"expecting 'extension', having '{e.Name}'\n{{e.OuterXml}}");
}
XmlNodeList featuresNL = doc.GetElementsByTagName("feature");
diff --git a/vulkan/Structs.cs b/vulkan/Structs.cs
index 660778f..022a679 100644
--- a/vulkan/Structs.cs
+++ b/vulkan/Structs.cs
@@ -5,131 +5,128 @@
using System;
using System.Runtime.InteropServices;
-namespace Vulkan {
+namespace Vulkan
+{
- public partial struct VkClearValue {
- public VkClearValue (float r, float g, float b) {
- depthStencil = default (VkClearDepthStencilValue);
- color = new VkClearColorValue (r, g, b);
+ public partial struct VkClearValue
+ {
+ public VkClearValue(float r, float g, float b)
+ {
+ depthStencil = default(VkClearDepthStencilValue);
+ color = new VkClearColorValue(r, g, b);
}
}
- [StructLayout(LayoutKind.Explicit, Pack = 1, CharSet = CharSet.Ansi, Size = 16)]
- public struct VkClearColorValue {
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- public struct _Float32 {
- public float r;
- public float g;
- public float b;
- public float a;
+ [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 16)]
+ public struct VkClearColorValue
+ {
+ public Span<float> floats
+ {
+ get
+ {
+ Span<VkClearColorValue> valSpan = MemoryMarshal.CreateSpan(ref this, 1);
+ return MemoryMarshal.Cast<VkClearColorValue, float>(valSpan);
+ }
}
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- public struct _Int32 {
- public int r;
- public int g;
- public int b;
- public int a;
+ public Span<int> ints
+ {
+ get
+ {
+ Span<VkClearColorValue> valSpan = MemoryMarshal.CreateSpan(ref this, 1);
+ return MemoryMarshal.Cast<VkClearColorValue, int>(valSpan);
+ }
}
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- public struct _UInt32 {
- public uint r;
- public uint g;
- public uint b;
- public uint a;
+ public Span<uint> uints
+ {
+ get
+ {
+ Span<VkClearColorValue> valSpan = MemoryMarshal.CreateSpan(ref this, 1);
+ return MemoryMarshal.Cast<VkClearColorValue, uint>(valSpan);
+ }
}
- [FieldOffset(0)]
- public _Float32 float32;
- [FieldOffset(0)]
- public _Int32 int32;
- [FieldOffset(0)]
- public _UInt32 uint32;
- public VkClearColorValue (float r, float g, float b, float a = 1.0f) : this () {
- float32.r = r;
- float32.g = g;
- float32.b = b;
- float32.a = a;
+ public VkClearColorValue(float r, float g, float b, float a = 1.0f) : this()
+ {
+ floats[0] = r;
+ floats[1] = g;
+ floats[2] = b;
+ floats[3] = a;
}
- public VkClearColorValue (int r, int g, int b, int a = 255) : this () {
- int32.r = r;
- int32.g = g;
- int32.b = b;
- int32.a = a;
+ public VkClearColorValue(int r, int g, int b, int a = 255) : this()
+ {
+ ints[0] = r;
+ ints[1] = g;
+ ints[2] = b;
+ ints[3] = a;
}
- public VkClearColorValue (uint r, uint g, uint b, uint a = 255) : this () {
- uint32.r = r;
- uint32.g = g;
- uint32.b = b;
- uint32.a = a;
+ public VkClearColorValue(uint r, uint g, uint b, uint a = 255) : this()
+ {
+ uints[0] = r;
+ uints[1] = g;
+ uints[2] = b;
+ uints[3] = a;
}
- }
-
- /*[StructLayout(LayoutKind.Explicit, Pack = 1)]
- public struct VkClearColorValue {
- [FieldOffset(0)]public float float32_r;
- [FieldOffset(1)]public float float32_g;
- [FieldOffset(2)]public float float32_b;
- [FieldOffset(3)]public float float32_a;
- [FieldOffset(0)]public int int32_r;
- [FieldOffset(1)]public int int32_g;
- [FieldOffset(2)]public int int32_b;
- [FieldOffset(3)]public int int32_a;
- [FieldOffset(0)]public uint uint32_r;
- [FieldOffset(1)]public uint uint32_g;
- [FieldOffset(2)]public uint uint32_b;
- [FieldOffset(3)]public uint uint32_a;
- public float[] ToFloats => new float[] {float32_r, float32_g, float32_b, float32_a};
- public float[] ToInts => new float[] {int32_r, int32_g, int32_b, int32_a};
- public float[] ToUInts => new float[] {uint32_r, uint32_g, uint32_b, uint32_a};
- public VkClearColorValue (float r, float g, float b, float a = 1.0f) : this () {
- float32_r = r;
- float32_g = g;
- float32_b = b;
- float32_a = a;
+ }
+ /// <summary>
+ /// Structure specifying a 3x4 row-major affine transformation matrix.
+ /// </summary>
+ [StructLayout(LayoutKind.Sequential, Size = 48)]
+ public struct VkTransformMatrixKHR
+ {
+ /// <summary>
+ /// Get row by index.
+ /// </summary>
+ /// <returns>The span of the row.</returns>
+ public Span<float> this[int i] => AsSpan.Slice(i * 4, 3);
+ /// <summary>
+ /// Get the whole matrix as a single span of floats.
+ /// </summary>
+ /// <value>The span of the matrix.</value>
+ public Span<float> AsSpan
+ {
+ get
+ {
+ Span<VkTransformMatrixKHR> valSpan = MemoryMarshal.CreateSpan(ref this, 1);
+ return MemoryMarshal.Cast<VkTransformMatrixKHR, float>(valSpan);
+ }
}
+ }
- public VkClearColorValue (int r, int g, int b, int a = 255) : this () {
- int32_r = r;
- int32_g = g;
- int32_b = b;
- int32_a = a;
- }
- public VkClearColorValue (uint r, uint g, uint b, uint a = 255) : this () {
- uint32_r = r;
- uint32_g = g;
- uint32_b = b;
- uint32_a = a;
+ public partial struct VkClearDepthStencilValue
+ {
+ public VkClearDepthStencilValue(float depth, uint stencil)
+ {
+ this.depth = depth;
+ this.stencil = stencil;
}
- }*/
- public partial struct VkClearDepthStencilValue
- {
- public VkClearDepthStencilValue(float depth, uint stencil)
- {
- this.depth = depth;
- this.stencil = stencil;
- }
- }
- public partial struct VkOffset3D {
- public VkOffset3D (int _x = 0, int _y = 0, int _z = 0) {
+ }
+ public partial struct VkOffset3D
+ {
+ public VkOffset3D(int _x = 0, int _y = 0, int _z = 0)
+ {
x = _x; y = _y; z = _z;
}
}
- public partial struct VkImageSubresourceLayers {
- public VkImageSubresourceLayers (VkImageAspectFlags _aspectMask = VkImageAspectFlags.Color,
- uint _layerCount = 1, uint _mipLevel = 0, uint _baseArrayLayer = 0) {
+ public partial struct VkImageSubresourceLayers
+ {
+ public VkImageSubresourceLayers(VkImageAspectFlags _aspectMask = VkImageAspectFlags.Color,
+ uint _layerCount = 1, uint _mipLevel = 0, uint _baseArrayLayer = 0)
+ {
aspectMask = _aspectMask;
layerCount = _layerCount;
mipLevel = _mipLevel;
baseArrayLayer = _baseArrayLayer;
}
}
- public partial struct VkImageSubresourceRange {
- public VkImageSubresourceRange (
+ public partial struct VkImageSubresourceRange
+ {
+ public VkImageSubresourceRange(
VkImageAspectFlags aspectMask,
uint baseMipLevel = 0, uint levelCount = 1,
- uint baseArrayLayer = 0, uint layerCount = 1) {
+ uint baseArrayLayer = 0, uint layerCount = 1)
+ {
this.aspectMask = aspectMask;
this.baseMipLevel = baseMipLevel;
this.levelCount = levelCount;
@@ -137,8 +134,10 @@ namespace Vulkan {
this.layerCount = layerCount;
}
}
- public partial struct VkDescriptorSetLayoutBinding {
- public VkDescriptorSetLayoutBinding (uint _binding, VkShaderStageFlags _stageFlags, VkDescriptorType _descriptorType, uint _descriptorCount = 1) {
+ public partial struct VkDescriptorSetLayoutBinding
+ {
+ public VkDescriptorSetLayoutBinding(uint _binding, VkShaderStageFlags _stageFlags, VkDescriptorType _descriptorType, uint _descriptorCount = 1)
+ {
binding = _binding;
this._descriptorType = (int)_descriptorType;
descriptorCount = _descriptorCount;
@@ -146,8 +145,10 @@ namespace Vulkan {
pImmutableSamplers = (IntPtr)0;
}
}
- public partial struct VkDescriptorSetLayoutCreateInfo {
- public VkDescriptorSetLayoutCreateInfo (VkDescriptorSetLayoutCreateFlags flags, uint bindingCount, IntPtr pBindings) {
+ public partial struct VkDescriptorSetLayoutCreateInfo
+ {
+ public VkDescriptorSetLayoutCreateInfo(VkDescriptorSetLayoutCreateFlags flags, uint bindingCount, IntPtr pBindings)
+ {
this._sType = (int)VkStructureType.DescriptorSetLayoutCreateInfo;
pNext = IntPtr.Zero;
this.flags = flags;
@@ -155,37 +156,44 @@ namespace Vulkan {
this.pBindings = pBindings;
}
}
- public partial struct VkVertexInputBindingDescription {
- public VkVertexInputBindingDescription (uint _binding, uint _stride, VkVertexInputRate _inputRate = VkVertexInputRate.Vertex) {
+ public partial struct VkVertexInputBindingDescription
+ {
+ public VkVertexInputBindingDescription(uint _binding, uint _stride, VkVertexInputRate _inputRate = VkVertexInputRate.Vertex)
+ {
binding = _binding;
stride = _stride;
this._inputRate = (int)_inputRate;
}
}
- public partial struct VkVertexInputAttributeDescription {
- public VkVertexInputAttributeDescription (uint _binding, uint _location, VkFormat _format, uint _offset = 0) {
+ public partial struct VkVertexInputAttributeDescription
+ {
+ public VkVertexInputAttributeDescription(uint _binding, uint _location, VkFormat _format, uint _offset = 0)
+ {
location = _location;
binding = _binding;
this._format = (int)_format;
offset = _offset;
}
- public VkVertexInputAttributeDescription (uint _location, VkFormat _format, uint _offset = 0) {
+ public VkVertexInputAttributeDescription(uint _location, VkFormat _format, uint _offset = 0)
+ {
location = _location;
binding = 0;
this._format = (int)_format;
offset = _offset;
}
}
- public partial struct VkPipelineColorBlendAttachmentState {
- public VkPipelineColorBlendAttachmentState (VkBool32 blendEnable,
+ public partial struct VkPipelineColorBlendAttachmentState
+ {
+ public VkPipelineColorBlendAttachmentState(VkBool32 blendEnable,
VkBlendFactor srcColorBlendFactor = VkBlendFactor.SrcAlpha,
VkBlendFactor dstColorBlendFactor = VkBlendFactor.OneMinusSrcAlpha,
VkBlendOp colorBlendOp = VkBlendOp.Add,
VkBlendFactor srcAlphaBlendFactor = VkBlendFactor.OneMinusSrcAlpha,
VkBlendFactor dstAlphaBlendFactor = VkBlendFactor.Zero,
VkBlendOp alphaBlendOp = VkBlendOp.Add,
- VkColorComponentFlags colorWriteMask = VkColorComponentFlags.R | VkColorComponentFlags.G | VkColorComponentFlags.B | VkColorComponentFlags.A) {
+ VkColorComponentFlags colorWriteMask = VkColorComponentFlags.R | VkColorComponentFlags.G | VkColorComponentFlags.B | VkColorComponentFlags.A)
+ {
this.blendEnable = blendEnable;
this._srcColorBlendFactor = (int)srcColorBlendFactor;
this._dstColorBlendFactor = (int)dstColorBlendFactor;
@@ -196,24 +204,30 @@ namespace Vulkan {
this.colorWriteMask = colorWriteMask;
}
}
- public partial struct VkPushConstantRange {
- public VkPushConstantRange (VkShaderStageFlags stageFlags, uint size, uint offset = 0) {
+ public partial struct VkPushConstantRange
+ {
+ public VkPushConstantRange(VkShaderStageFlags stageFlags, uint size, uint offset = 0)
+ {
this.stageFlags = stageFlags;
this.size = size;
this.offset = offset;
}
}
- public partial struct VkCommandBufferBeginInfo {
- public VkCommandBufferBeginInfo (VkCommandBufferUsageFlags usage = (VkCommandBufferUsageFlags)0) {
+ public partial struct VkCommandBufferBeginInfo
+ {
+ public VkCommandBufferBeginInfo(VkCommandBufferUsageFlags usage = (VkCommandBufferUsageFlags)0)
+ {
this._sType = (int)VkStructureType.CommandBufferBeginInfo;
pNext = pInheritanceInfo = IntPtr.Zero;
flags = usage;
}
}
- public partial struct VkQueryPoolCreateInfo {
- public static VkQueryPoolCreateInfo New (VkQueryType queryType,
- VkQueryPipelineStatisticFlags statisticFlags = (VkQueryPipelineStatisticFlags)0, uint count = 1) {
- VkQueryPoolCreateInfo ret = new VkQueryPoolCreateInfo ();
+ public partial struct VkQueryPoolCreateInfo
+ {
+ public static VkQueryPoolCreateInfo New(VkQueryType queryType,
+ VkQueryPipelineStatisticFlags statisticFlags = (VkQueryPipelineStatisticFlags)0, uint count = 1)
+ {
+ VkQueryPoolCreateInfo ret = new VkQueryPoolCreateInfo();
ret.sType = VkStructureType.QueryPoolCreateInfo;
ret.pipelineStatistics = statisticFlags;
ret.queryType = queryType;
@@ -221,8 +235,10 @@ namespace Vulkan {
return ret;
}
}
- public partial struct VkDebugMarkerObjectNameInfoEXT {
- public VkDebugMarkerObjectNameInfoEXT (VkDebugReportObjectTypeEXT objectType, ulong handle) {
+ public partial struct VkDebugMarkerObjectNameInfoEXT
+ {
+ public VkDebugMarkerObjectNameInfoEXT(VkDebugReportObjectTypeEXT objectType, ulong handle)
+ {
this._sType = (int)VkStructureType.DebugMarkerObjectNameInfoEXT;
pNext = IntPtr.Zero;
this._objectType = (int)objectType;
@@ -230,7 +246,8 @@ namespace Vulkan {
pObjectName = IntPtr.Zero;
}
}
- public partial struct VkDebugUtilsObjectNameInfoEXT {
+ public partial struct VkDebugUtilsObjectNameInfoEXT
+ {
public VkDebugUtilsObjectNameInfoEXT(VkObjectType objectType, ulong handle)
{
this._sType = (int)VkStructureType.DebugUtilsObjectNameInfoEXT;
@@ -240,33 +257,21 @@ namespace Vulkan {
pObjectName = IntPtr.Zero;
}
}
- public partial struct VkDescriptorPoolSize {
- public VkDescriptorPoolSize (VkDescriptorType descriptorType, uint count = 1) {
+ public partial struct VkDescriptorPoolSize
+ {
+ public VkDescriptorPoolSize(VkDescriptorType descriptorType, uint count = 1)
+ {
this._type = (int)descriptorType;
descriptorCount = count;
}
}
- public unsafe partial struct VkAttachmentReference {
- public VkAttachmentReference (uint attachment, VkImageLayout layout) {
+ public unsafe partial struct VkAttachmentReference
+ {
+ public VkAttachmentReference(uint attachment, VkImageLayout layout)
+ {
this.attachment = attachment;
this._layout = (int)layout;
}
- }
- /// <summary>
- /// 3x4 row-major affine transformation matrix.
- /// </summary>
- public unsafe partial struct VkTransformMatrixKHR
- {
- public float this [int row, int column] {
- get {
- fixed (float* tmp = _matrix)
- return tmp[row * 3 + column];
- }
- set {
- fixed (float* tmp = _matrix)
- tmp[row * 3 + column] = value;
- }
- }
}
}
diff --git a/vulkan/vulkan.csproj b/vulkan/vulkan.csproj
index 528c8c3..52e13f4 100644
--- a/vulkan/vulkan.csproj
+++ b/vulkan/vulkan.csproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFrameworks>netstandard2.0</TargetFrameworks>
+ <TargetFrameworks>netstandard2.1</TargetFrameworks>
<AssemblyVersion>0.3.0</AssemblyVersion>
<AssemblyName>Vulkan</AssemblyName>
@@ -24,7 +24,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
-
+ <NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
<ItemGroup>
@@ -46,7 +46,7 @@
WorkingDirectory="$(SolutionDir)">
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
</Exec>
- <CreateItem Include="$(SolutionDir)build/generated/*.cs">
+ <CreateItem Include="$(SolutionDir)build/generated/vk_net/*.cs">
<Output TaskParameter="Include" ItemName="Compile" />
</CreateItem>
</Target>