From cc4a3f27673407010d066facf370986ad0afb984 Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 13 Jan 2026 18:40:54 -0500 Subject: [PATCH 1/5] Use GLenum/ALenum/ALCenum has the base type and specify C# type in typemap --- generator.json | 5 +++++ sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/generator.json b/generator.json index 83293d8003..8bbae05cda 100644 --- a/generator.json +++ b/generator.json @@ -147,6 +147,7 @@ "SpecPath": "eng/submodules/opengl/xml/gl.xml", "Namespace": "Silk.NET.OpenGL", "TypeMap": { + "GLenum": "uint", "TraceMaskMESA": "uint", "PathRenderingTokenNV": "byte", "PathCoordType": "byte" @@ -252,6 +253,10 @@ "MixKhronosData": { "SpecPath": "eng/submodules/openal-soft/registry/xml/al.xml", "Namespace": "Silk.NET.OpenAL", + "TypeMap": { + "ALenum": "uint", + "ALCenum": "uint" + }, "NonStandardExtensionNomenclature": true, "Vendors": [ "SOFT", diff --git a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs index 85dc14d268..85476baf97 100644 --- a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs +++ b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs @@ -2180,15 +2180,14 @@ internal void ReadGroups(XDocument doc, JobData data, HashSet vendors) ? enumNamespace : null; var nativeName = groupName; - - // OpenGL-style enums have an uint base type - var baseType = anyGLStyleGroups ? "uint" : null; + string? baseType = null; // Create an ungrouped group as well i.e. GLEnum, WGLEnum, etc if (enumNamespace is not null) { groupName ??= $"{enumNamespace}Enum"; nativeName ??= $"{enumNamespace}enum"; + baseType ??= $"{enumNamespace}enum"; } // OpenCL enum name From af853991c45cae9d608095213b0a8f1abf1f7570 Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 13 Jan 2026 21:32:47 -0500 Subject: [PATCH 2/5] Improve handling of OpenGL-style bitmask enums --- .silktouch/openal-clangsharp.stout | Bin 40930 -> 40930 bytes .silktouch/opengl-clangsharp.stout | Bin 232226 -> 232226 bytes .silktouch/vulkan-clangsharp.stout | Bin 1974639 -> 1974639 bytes .../Enums/FragmentShaderDestMask.gen.cs | 9 +- .../Enums/FragmentShaderDestModMask.gen.cs | 17 +- .../OpenGL/OpenGL/Enums/PathFontStyle.gen.cs | 7 +- .../SilkTouch/Mods/MixKhronosData.cs | 145 ++++++++++++------ .../SilkTouch/Khronos/MixKhronosDataTests.cs | 1 + 8 files changed, 114 insertions(+), 65 deletions(-) diff --git a/.silktouch/openal-clangsharp.stout b/.silktouch/openal-clangsharp.stout index cd15a37e8ec3cb457899e7ec26fb0ac7a883ee95..994e242e2efd57c2406b742af54a623bbb358c0a 100644 GIT binary patch delta 83 zcmaE~pXt$lCf)#VW)=|!CJqh;tChMNd3|G;tyk)9j*XeX1ZI4Qn*m{TCyLuL1C>l( XI?o;?Gx_5>nBBl47rK~(0ELAg>i_@% delta 92 zcmZ29jc?I3KHdOtW)=|!CJqjUKpmZpybmpzf%N8&mI^Du43Woj7ny@}blOd~Fm5;9 g!nFS?NO=19PG(my!@dj3XzyZn11X$-p^G^P00cZ7y#N3J diff --git a/.silktouch/vulkan-clangsharp.stout b/.silktouch/vulkan-clangsharp.stout index b6dc0b1f4adec190d77a8e609e7dece932a83e49..d905b7ace2b508db95effb716e49e8612ea059d5 100644 GIT binary patch delta 88911 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 PY*&|vg;7Zw694}JjDvZu delta 88865 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 ZBX&nEKp}v+I(D-|T_P4nC22?k{|6fdX+r=2 diff --git a/sources/OpenGL/OpenGL/Enums/FragmentShaderDestMask.gen.cs b/sources/OpenGL/OpenGL/Enums/FragmentShaderDestMask.gen.cs index de8a534448..5a3ac06402 100644 --- a/sources/OpenGL/OpenGL/Enums/FragmentShaderDestMask.gen.cs +++ b/sources/OpenGL/OpenGL/Enums/FragmentShaderDestMask.gen.cs @@ -8,17 +8,18 @@ namespace Silk.NET.OpenGL; [NativeName("FragmentShaderDestMaskATI")] +[Flags] public enum FragmentShaderDestMask : uint { [NativeName("GL_NONE")] - None = 0, + None = 0x0, [NativeName("GL_RED_BIT_ATI")] - RedBitATI = 1, + RedBitATI = 0x1, [NativeName("GL_GREEN_BIT_ATI")] - GreenBitATI = 2, + GreenBitATI = 0x2, [NativeName("GL_BLUE_BIT_ATI")] - BlueBitATI = 4, + BlueBitATI = 0x4, } diff --git a/sources/OpenGL/OpenGL/Enums/FragmentShaderDestModMask.gen.cs b/sources/OpenGL/OpenGL/Enums/FragmentShaderDestModMask.gen.cs index 59bc20c93d..cf98b9ca92 100644 --- a/sources/OpenGL/OpenGL/Enums/FragmentShaderDestModMask.gen.cs +++ b/sources/OpenGL/OpenGL/Enums/FragmentShaderDestModMask.gen.cs @@ -8,29 +8,30 @@ namespace Silk.NET.OpenGL; [NativeName("FragmentShaderDestModMaskATI")] +[Flags] public enum FragmentShaderDestModMask : uint { [NativeName("GL_NONE")] - None = 0, + None = 0x0, [NativeName("GL_2X_BIT_ATI")] - X2XBitATI = 1, + X2XBitATI = 0x1, [NativeName("GL_4X_BIT_ATI")] - X4XBitATI = 2, + X4XBitATI = 0x2, [NativeName("GL_8X_BIT_ATI")] - X8XBitATI = 4, + X8XBitATI = 0x4, [NativeName("GL_HALF_BIT_ATI")] - HalfBitATI = 8, + HalfBitATI = 0x8, [NativeName("GL_QUARTER_BIT_ATI")] - QuarterBitATI = 16, + QuarterBitATI = 0x10, [NativeName("GL_EIGHTH_BIT_ATI")] - EighthBitATI = 32, + EighthBitATI = 0x20, [NativeName("GL_SATURATE_BIT_ATI")] - SaturateBitATI = 64, + SaturateBitATI = 0x40, } diff --git a/sources/OpenGL/OpenGL/Enums/PathFontStyle.gen.cs b/sources/OpenGL/OpenGL/Enums/PathFontStyle.gen.cs index 0243f93931..63ade9981e 100644 --- a/sources/OpenGL/OpenGL/Enums/PathFontStyle.gen.cs +++ b/sources/OpenGL/OpenGL/Enums/PathFontStyle.gen.cs @@ -8,14 +8,15 @@ namespace Silk.NET.OpenGL; [NativeName("PathFontStyle")] +[Flags] public enum PathFontStyle : uint { [NativeName("GL_NONE")] - None = 0, + None = 0x0, [NativeName("GL_BOLD_BIT_NV")] - BoldBitNV = 1, + BoldBitNV = 0x1, [NativeName("GL_ITALIC_BIT_NV")] - ItalicBitNV = 2, + ItalicBitNV = 0x2, } diff --git a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs index 85476baf97..6cbfc93f0b 100644 --- a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs +++ b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs @@ -440,19 +440,28 @@ rsp with return Task.FromResult(rsps); } + /// + /// Contains information about a group of enums. + /// + /// + /// There are two bitmask properties to better handle OpenGL-style enums. + /// Some enums are explicitly stated to be bitmasks while some have to be inferred. + /// /// The name of the group. This is the name used for the C# enum. /// The native name of the group, if available. This is the name used for the [NativeName] attribute. - /// - /// - /// - /// - /// + /// The base type of the group. + /// Members of this group extracted from other parts of the generated bindings. + /// Whether the group is explicitly known to be a bitmask, i.e., it is stated in the XML spec. + /// Whether the group is likely a bitmask based on heuristics. + /// The identified exclusive vendor for the group. Eg: NV. + /// The namespace for the group. Eg: GL. internal record EnumGroup( string Name, string? NativeName, string? Type, List Enums, - bool KnownBitmask, + bool IsDefinitelyBitmask, + bool IsMaybeBitmask, string? ExclusiveVendor, string? Namespace ); @@ -1759,7 +1768,10 @@ .. node.Members.Where(m => ); } - if (job.Groups.TryGetValue(identifier, out var group) && group.KnownBitmask) + if ( + job.Groups.TryGetValue(identifier, out var group) + && (group.IsDefinitelyBitmask || group.IsMaybeBitmask) + ) { // Add [Flags] attribute var flagsAttribute = AttributeList( @@ -2175,22 +2187,32 @@ internal void ReadGroups(XDocument doc, JobData data, HashSet vendors) // OpenGL/EGL/WGL/GLX namespace var enumNamespace = block.Attribute("namespace")?.Value; - var groupName = - enumNamespace is not null && !enumNamespace.All(char.IsUpper) - ? enumNamespace - : null; + var namespaceGroupName = enumNamespace != null ? $"{enumNamespace}Enum" : null; + var groupName = block.Attribute("group")?.Value; var nativeName = groupName; - string? baseType = null; + var baseType = enumNamespace != null ? $"{enumNamespace}enum" : null; - // Create an ungrouped group as well i.e. GLEnum, WGLEnum, etc - if (enumNamespace is not null) + // Create a group for the namespace as well i.e. GLEnum, WGLEnum, etc + if ( + namespaceGroupName is not null + && !data.Groups.TryGetValue(namespaceGroupName, out var namespaceGroup) + ) { - groupName ??= $"{enumNamespace}Enum"; - nativeName ??= $"{enumNamespace}enum"; - baseType ??= $"{enumNamespace}enum"; + namespaceGroup = new EnumGroup( + namespaceGroupName, + $"{enumNamespace}enum", + baseType, + [], + false, + false, + null, + enumNamespace + ); + + data.Groups[namespaceGroupName] = namespaceGroup; } - // OpenCL enum name + // Vulkan/OpenXR/OpenCL enum name if (!anyNamespaced) { groupName ??= block.Attribute("name")?.Value; @@ -2212,7 +2234,9 @@ internal void ReadGroups(XDocument doc, JobData data, HashSet vendors) // skip over the block. We continue on in the top-level case to permanently prevent any group operations // from occurring on the top-level intentional exclusions because they're special numbers/constants. var topLevelIntentionalExclusion = - groupName is not null && IsIntentionalExclusion(groupName); + groupName != null + && namespaceGroupName == null + && IsIntentionalExclusion(groupName); static bool IsIntentionalExclusion(string groupName) => groupName.StartsWith("Constants") // these are constants || groupName is "MiscNumbers" or "SpecialNumbers"; @@ -2229,24 +2253,27 @@ static bool IsUngroupable(string groupName) => } // Initialize the group before enum members are parsed below - // This ensures two things: + // This ensures 3 things: // 1. The native name is correct - // 2. Empty groups are recorded properly - if ( - groupName != null - && !IsUngroupable(groupName) - && !data.Groups.ContainsKey(groupName) - ) + // 2. Whether the enum is a bitmask is correct + // 3. Empty groups are recorded properly + if (groupName != null && !IsUngroupable(groupName)) { - data.Groups[groupName] = new EnumGroup( - groupName, - nativeName, - baseType, - [], - isBitmask, - VendorFromString(groupName, vendors), - enumNamespace - ); + data.Groups[groupName] = data.Groups.TryGetValue(groupName, out var group) + ? group with + { + IsDefinitelyBitmask = isBitmask, + } + : new EnumGroup( + groupName, + nativeName, + baseType, + [], + isBitmask, + false, + VendorFromString(groupName, vendors), + enumNamespace + ); } // Parse enum members @@ -2268,7 +2295,7 @@ static bool IsUngroupable(string groupName) => } // Parse OpenGL-style groups - var glGroups = @enum + var additionalGroups = @enum .Attribute("group") ?.Value.Split( _listSeparators, @@ -2279,43 +2306,59 @@ static bool IsUngroupable(string groupName) => var thisVendor = VendorFromString(enumName, vendors); // Add the enum member to the namespace enum, the main enum group, and its additional OpenGL-style groups - var memberGroups = (groupName is null ? Enumerable.Empty() : [groupName]) - .Concat(block.Attribute("group")?.Value is { Length: > 0 } g ? [g] : []) - .Concat(glGroups ?? []) - .Distinct(); - foreach (var group in memberGroups) + var memberGroupNames = new HashSet(); + if (namespaceGroupName != null) + { + memberGroupNames.Add(namespaceGroupName); + } + + if (groupName != null) + { + memberGroupNames.Add(groupName); + } + + if (additionalGroups != null) { - if (IsUngroupable(group)) + memberGroupNames.UnionWith(additionalGroups); + } + + foreach (var memberGroupName in memberGroupNames) + { + if (IsUngroupable(memberGroupName)) { continue; } // Update the group info. - data.Groups[group] = data.Groups.TryGetValue(group, out var groupInfo) - ? groupInfo with + data.Groups[memberGroupName] = data.Groups.TryGetValue( + memberGroupName, + out var memberGroup + ) + ? memberGroup with { - KnownBitmask = isBitmask && groupInfo.KnownBitmask, + IsMaybeBitmask = isBitmask && memberGroup.IsMaybeBitmask, ExclusiveVendor = - thisVendor is not null && groupInfo.ExclusiveVendor == thisVendor + thisVendor is not null && memberGroup.ExclusiveVendor == thisVendor ? thisVendor : null, Namespace = - enumNamespace is not null && groupInfo.Namespace == enumNamespace + enumNamespace is not null && memberGroup.Namespace == enumNamespace ? enumNamespace : null, } : new EnumGroup( - group, - group, + memberGroupName, + memberGroupName, baseType, [], + false, isBitmask, thisVendor, enumNamespace ); // Mark this enum. - enumToGroups.Add(group); + enumToGroups.Add(memberGroupName); } } } @@ -2466,6 +2509,7 @@ var @enum in doc.Elements("registry") "ulong", [], @enum.Parent?.Element("type")?.Value == "cl_bitfield", + false, VendorFromString(@enum.Value, vendors), null ); @@ -2632,6 +2676,7 @@ is var splitList [], (typeStr is not null && typeStr.Contains("bitfield")) || group.Contains("flags"), + false, thisVendor, null ); diff --git a/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs b/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs index b9a7cf62ef..1a67761f2a 100644 --- a/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs +++ b/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs @@ -453,6 +453,7 @@ public enum GLEnum { } "Glenum", [], false, + false, null, "GL" ) From 6705ef2d828e08e987ff9eb3f6504d2ff18f2f13 Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 13 Jan 2026 21:54:41 -0500 Subject: [PATCH 3/5] Replace primary constructor of EnumGroup with explicit properties --- .../SilkTouch/Mods/MixKhronosData.cs | 180 ++++++++++-------- .../SilkTouch/Khronos/MixKhronosDataTests.cs | 17 +- 2 files changed, 105 insertions(+), 92 deletions(-) diff --git a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs index 6cbfc93f0b..75ccc233e6 100644 --- a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs +++ b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs @@ -447,24 +447,48 @@ rsp with /// There are two bitmask properties to better handle OpenGL-style enums. /// Some enums are explicitly stated to be bitmasks while some have to be inferred. /// - /// The name of the group. This is the name used for the C# enum. - /// The native name of the group, if available. This is the name used for the [NativeName] attribute. - /// The base type of the group. - /// Members of this group extracted from other parts of the generated bindings. - /// Whether the group is explicitly known to be a bitmask, i.e., it is stated in the XML spec. - /// Whether the group is likely a bitmask based on heuristics. - /// The identified exclusive vendor for the group. Eg: NV. - /// The namespace for the group. Eg: GL. - internal record EnumGroup( - string Name, - string? NativeName, - string? Type, - List Enums, - bool IsDefinitelyBitmask, - bool IsMaybeBitmask, - string? ExclusiveVendor, - string? Namespace - ); + internal record EnumGroup + { + /// + /// The name of the group. This is the name used for the C# enum. + /// + public required string Name { get; init; } + + /// + /// The native name of the group. This is the name used for the [NativeName] attribute. + /// + public required string NativeName { get; init; } + + /// + /// The base type of the group. + /// + public string? BaseType { get; init; } + + /// + /// Members of this group extracted from other parts of the generated bindings. + /// + public List Enums { get; init; } = []; + + /// + /// Whether the group is explicitly known to be a bitmask, i.e., it is stated in the XML spec. + /// + public bool IsDefinitelyBitmask { get; init; } + + /// + /// Whether the group is likely a bitmask based on heuristics. + /// + public bool IsMaybeBitmask { get; init; } + + /// + /// The identified exclusive vendor for the group. Eg: NV. + /// + public string? ExclusiveVendor { get; init; } + + /// + /// The namespace for the group. Eg: GL. + /// + public string? Namespace { get; init; } + } private record ProfileEvaluation( Version? StartVersion, @@ -1553,7 +1577,7 @@ private class RewriterPhase1(JobData job, ILogger logger) : CSharpSyntaxRewriter { if (!AlreadyPresentGroups.Contains(groupName)) { - var baseType = groupInfo.Type ?? groupName; + var baseType = groupInfo.BaseType ?? groupName; while (job.TypeMap.TryGetValue(baseType, out var ty)) { baseType = ty; @@ -2173,9 +2197,6 @@ internal void ReadGroups(XDocument doc, JobData data, HashSet vendors) // this information will mostly be used to enhance the enums scraped from the headers (eg: native name and bitmask information). var anyNamespaced = doc.Element("registry")?.Elements("enums").Attributes("namespace").Any() ?? false; - var anyGLStyleGroups = - doc.Element("registry")?.Elements("enums").Elements("enum").Attributes("group").Any() - ?? false; var likelyOpenCL = false; // OpenCL specific var topLevelIntentionalExclusions = new HashSet(); // OpenCL specific @@ -2198,16 +2219,13 @@ namespaceGroupName is not null && !data.Groups.TryGetValue(namespaceGroupName, out var namespaceGroup) ) { - namespaceGroup = new EnumGroup( - namespaceGroupName, - $"{enumNamespace}enum", - baseType, - [], - false, - false, - null, - enumNamespace - ); + namespaceGroup = new EnumGroup() + { + Name = namespaceGroupName, + NativeName = $"{enumNamespace}enum", + BaseType = baseType, + Namespace = enumNamespace, + }; data.Groups[namespaceGroupName] = namespaceGroup; } @@ -2264,38 +2282,38 @@ static bool IsUngroupable(string groupName) => { IsDefinitelyBitmask = isBitmask, } - : new EnumGroup( - groupName, - nativeName, - baseType, - [], - isBitmask, - false, - VendorFromString(groupName, vendors), - enumNamespace - ); + : new EnumGroup() + { + Name = groupName, + NativeName = nativeName ?? groupName, + BaseType = baseType, + + IsDefinitelyBitmask = isBitmask, + ExclusiveVendor = VendorFromString(groupName, vendors), + Namespace = enumNamespace, + }; } // Parse enum members - foreach (var @enum in block.Elements("enum")) + foreach (var member in block.Elements("enum")) { - var enumName = - @enum.Attribute("name")?.Value + var memberName = + member.Attribute("name")?.Value ?? throw new InvalidDataException("Expected \"name\" attribute on ."); if (topLevelIntentionalExclusion) { - topLevelIntentionalExclusions.Add(enumName); + topLevelIntentionalExclusions.Add(memberName); continue; } // Get the group hash set for this enum. - if (!data.EnumsToGroups.TryGetValue(enumName, out var enumToGroups)) + if (!data.EnumsToGroups.TryGetValue(memberName, out var enumToGroups)) { - data.EnumsToGroups[enumName] = enumToGroups = []; + data.EnumsToGroups[memberName] = enumToGroups = []; } // Parse OpenGL-style groups - var additionalGroups = @enum + var additionalGroups = member .Attribute("group") ?.Value.Split( _listSeparators, @@ -2303,7 +2321,7 @@ static bool IsUngroupable(string groupName) => ); // Get the vendor (if the enum name ends with a vendor that is). - var thisVendor = VendorFromString(enumName, vendors); + var memberVendor = VendorFromString(memberName, vendors); // Add the enum member to the namespace enum, the main enum group, and its additional OpenGL-style groups var memberGroupNames = new HashSet(); @@ -2338,24 +2356,24 @@ out var memberGroup { IsMaybeBitmask = isBitmask && memberGroup.IsMaybeBitmask, ExclusiveVendor = - thisVendor is not null && memberGroup.ExclusiveVendor == thisVendor - ? thisVendor + memberVendor is not null + && memberGroup.ExclusiveVendor == memberVendor + ? memberVendor : null, Namespace = enumNamespace is not null && memberGroup.Namespace == enumNamespace ? enumNamespace : null, } - : new EnumGroup( - memberGroupName, - memberGroupName, - baseType, - [], - false, - isBitmask, - thisVendor, - enumNamespace - ); + : new EnumGroup() + { + Name = memberGroupName, + NativeName = memberGroupName, + BaseType = baseType, + IsMaybeBitmask = isBitmask, + ExclusiveVendor = memberVendor, + Namespace = enumNamespace, + }; // Mark this enum. enumToGroups.Add(memberGroupName); @@ -2502,17 +2520,16 @@ var @enum in doc.Elements("registry") // it's actually correct for once. if (!data.Groups.ContainsKey(@enum.Value)) { - data.Groups[@enum.Value] = new EnumGroup( - @enum.Value, - @enum.Value, + data.Groups[@enum.Value] = new EnumGroup() + { + Name = @enum.Value, + NativeName = @enum.Value, // cl_properties and cl_bitfield are both cl_ulong which is ulong - "ulong", - [], - @enum.Parent?.Element("type")?.Value == "cl_bitfield", - false, - VendorFromString(@enum.Value, vendors), - null - ); + BaseType = "ulong", + + IsDefinitelyBitmask = @enum.Parent?.Element("type")?.Value == "cl_bitfield", + ExclusiveVendor = VendorFromString(@enum.Value, vendors), + }; } } @@ -2669,17 +2686,16 @@ is var splitList } else { - data.Groups[groupStr] = new EnumGroup( - groupStr, - groupStr, - null, - [], - (typeStr is not null && typeStr.Contains("bitfield")) + data.Groups[groupStr] = new EnumGroup() + { + Name = groupStr, + NativeName = groupStr, + + IsDefinitelyBitmask = + (typeStr is not null && typeStr.Contains("bitfield")) || group.Contains("flags"), - false, - thisVendor, - null - ); + ExclusiveVendor = thisVendor, + }; } // Get the group hash set for this enum. diff --git a/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs b/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs index 1a67761f2a..e3be2fda66 100644 --- a/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs +++ b/tests/SilkTouch/SilkTouch/Khronos/MixKhronosDataTests.cs @@ -447,16 +447,13 @@ public enum GLEnum { } { { "GLEnum", - new MixKhronosData.EnumGroup( - "GLEnum", - "GLenum", - "Glenum", - [], - false, - false, - null, - "GL" - ) + new MixKhronosData.EnumGroup() + { + Name = "GLEnum", + NativeName = "GLenum", + BaseType = "GLenum", + Namespace = "GL", + } }, }, }, From bbd03bd4e4dcb0889978813c55180dd0e83ed487 Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 13 Jan 2026 23:19:48 -0500 Subject: [PATCH 4/5] Fix my incorrect handling of WGL/GLX namespaces --- .../SilkTouch/Mods/MixKhronosData.cs | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs index 75ccc233e6..687f83c9d6 100644 --- a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs +++ b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs @@ -2207,27 +2207,43 @@ internal void ReadGroups(XDocument doc, JobData data, HashSet vendors) var isBitmask = block.Attribute("type")?.Value == "bitmask"; // OpenGL/EGL/WGL/GLX namespace - var enumNamespace = block.Attribute("namespace")?.Value; - var namespaceGroupName = enumNamespace != null ? $"{enumNamespace}Enum" : null; var groupName = block.Attribute("group")?.Value; var nativeName = groupName; + var enumNamespace = block.Attribute("namespace")?.Value; var baseType = enumNamespace != null ? $"{enumNamespace}enum" : null; + string? namespaceGroupName = null; + if (enumNamespace != null) + { + if (!enumNamespace.All(char.IsUpper)) + { + // Use the namespace name directly if it is not all uppercase + // Eg: WGLLayerPlaneMask + namespaceGroupName = enumNamespace; + } + else + { + // Otherwise, suffix the name with -Enum + // Eg: GLEnum, ALEnum, WGLEnum + namespaceGroupName = $"{enumNamespace}Enum"; + } + } + // Create a group for the namespace as well i.e. GLEnum, WGLEnum, etc - if ( - namespaceGroupName is not null - && !data.Groups.TryGetValue(namespaceGroupName, out var namespaceGroup) - ) + if (namespaceGroupName is not null) { - namespaceGroup = new EnumGroup() + if (!data.Groups.TryGetValue(namespaceGroupName, out var namespaceGroup)) { - Name = namespaceGroupName, - NativeName = $"{enumNamespace}enum", - BaseType = baseType, - Namespace = enumNamespace, - }; + namespaceGroup = new EnumGroup() + { + Name = namespaceGroupName, + NativeName = $"{enumNamespace}enum", + BaseType = baseType, + Namespace = enumNamespace, + }; - data.Groups[namespaceGroupName] = namespaceGroup; + data.Groups[namespaceGroupName] = namespaceGroup; + } } // Vulkan/OpenXR/OpenCL enum name From 387712e74584f92616d36755acc14c4db35cdd81 Mon Sep 17 00:00:00 2001 From: William Chen Date: Wed, 14 Jan 2026 06:10:08 -0500 Subject: [PATCH 5/5] Use cl_bitfield for backing type of OpenCL enums --- sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs index 687f83c9d6..0c26dd5429 100644 --- a/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs +++ b/sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs @@ -2541,7 +2541,9 @@ var @enum in doc.Elements("registry") Name = @enum.Value, NativeName = @enum.Value, // cl_properties and cl_bitfield are both cl_ulong which is ulong - BaseType = "ulong", + // We currently use cl_bitfield to represent the backing type of OpenCL enums + // Decision was made here: https://github.com/dotnet/Silk.NET/pull/2534#discussion_r2686840153 + BaseType = "cl_bitfield", IsDefinitelyBitmask = @enum.Parent?.Element("type")?.Value == "cl_bitfield", ExclusiveVendor = VendorFromString(@enum.Value, vendors),