Skip to content

Commit bffeafb

Browse files
committed
Squashed commit of the following:
commit c9d23c9 Author: William Chen <exanite78012@gmail.com> Date: Fri Jun 5 19:30:33 2026 -0400 Generate on Linux commit c2c40d6 Merge: b01d322 823485b Author: William Chen <exanite78012@gmail.com> Date: Fri Jun 5 19:27:12 2026 -0400 Merge branch 'develop/3.0' into feature/vk-structure-types commit b01d322 Author: William Chen <exanite78012@gmail.com> Date: Fri May 1 18:04:43 2026 -0400 Enable VK_ENABLE_BETA_EXTENSIONS by default TerraFX also does the same: https://github.com/terrafx/terrafx.interop.vulkan/blob/86629a4d0afc1de12d10111b4d1e8bbd4be4363b/generation/settings.rsp#L36 commit fac1d52 Author: William Chen <exanite78012@gmail.com> Date: Fri May 1 17:47:39 2026 -0400 Add explicit constructor since we are using struct field initializers commit 0efa063 Author: William Chen <exanite78012@gmail.com> Date: Fri May 1 17:40:01 2026 -0400 Use VisitStructDeclaration instead of VisitFieldDeclaration since we need to modify the struct as well commit 4b9346d Author: William Chen <exanite78012@gmail.com> Date: Fri May 1 17:35:06 2026 -0400 Add RewriterPhase4 for adding default field values for structure type members commit 965f793 Author: William Chen <exanite78012@gmail.com> Date: Fri May 1 17:16:15 2026 -0400 Remove unnecessary condition (NativeName is no longer nullable) commit e722325 Author: William Chen <exanite78012@gmail.com> Date: Fri May 1 17:13:52 2026 -0400 Gather information about structure type members
1 parent 22c27ea commit bffeafb

1,034 files changed

Lines changed: 12621 additions & 1028 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.silktouch/vulkan-clangsharp.stout‎

13 KB
Binary file not shown.

‎eng/silktouch/vulkan/settings.rsp‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
@../../common.rsp
22
--define-macro
3+
VK_ENABLE_BETA_EXTENSIONS
34
TODO_DEFINE_MACROS=HERE
45
--headerFile
56
../header.txt

‎generator.json‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,9 @@
434434
"MixKhronosData": {
435435
"SpecPath": "eng/submodules/vulkan/xml/vk.xml",
436436
"Namespace": "Silk.NET.Vulkan",
437+
"StructureTypes": [
438+
"VkStructureType"
439+
],
437440
"FlagsTypes": [
438441
"VkFlags",
439442
"VkFlags64"

‎sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs‎

Lines changed: 164 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ public Dictionary<
120120
/// This was added for Vulkan Flags/FlagBits remappings.
121121
/// </remarks>
122122
public Dictionary<string, string> AdditionalTypeRemappings = [];
123+
124+
/// <summary>
125+
/// A mapping from struct type to information about the structure type member.
126+
/// </summary>
127+
public Dictionary<string, StructureTypeMember> StructureTypeMembers = [];
123128
}
124129

125130
/// <summary>
@@ -146,6 +151,12 @@ public record Configuration
146151
/// </summary>
147152
public Dictionary<string, string>? TypeMap { get; init; }
148153

154+
/// <summary>
155+
/// The structure type enums used by the API.
156+
/// Eg: VkStructureType for Vulkan
157+
/// </summary>
158+
public HashSet<string> StructureTypes { get; init; } = [];
159+
149160
/// <summary>
150161
/// The base type used for flags/bitmask enums.
151162
/// For example, VkFlags and VkFlags64 for Vulkan.
@@ -342,6 +353,58 @@ .. currentConfig.NonStandardExtensionNomenclature
342353

343354
job.AdditionalTypeRemappings[mapFrom] = mapTo;
344355
}
356+
357+
// Gather information about struct structure type enums
358+
if (currentConfig.StructureTypes.Count != 0)
359+
{
360+
foreach (
361+
var typeElement in xml.Elements("registry")
362+
.Elements("types")
363+
.Elements("type")
364+
.Where(x => x.Attribute("category")?.Value == "struct")
365+
)
366+
{
367+
var structName = typeElement.Attribute("name")?.Value;
368+
if (structName == null)
369+
{
370+
continue;
371+
}
372+
373+
foreach (var memberElement in typeElement.Elements("member"))
374+
{
375+
var memberType = memberElement.Element("type")?.Value;
376+
if (memberType == null)
377+
{
378+
continue;
379+
}
380+
381+
if (currentConfig.StructureTypes.Contains(memberType))
382+
{
383+
var memberName = memberElement.Element("name")?.Value;
384+
if (memberName == null)
385+
{
386+
continue;
387+
}
388+
389+
var memberValue = memberElement.Attribute("values")?.Value;
390+
if (memberValue == null)
391+
{
392+
continue;
393+
}
394+
395+
job.StructureTypeMembers.Add(
396+
structName,
397+
new StructureTypeMember()
398+
{
399+
Name = memberName,
400+
Type = memberType,
401+
Value = memberValue,
402+
}
403+
);
404+
}
405+
}
406+
}
407+
}
345408
}
346409

347410
/// <inheritdoc />
@@ -402,6 +465,18 @@ public async Task ExecuteAsync(IModContext ctx, CancellationToken ct = default)
402465
).Project;
403466
}
404467

468+
// Rewrite phase 4
469+
var rewriter4 = new RewriterPhase4(jobData);
470+
foreach (var docId in proj.DocumentIds)
471+
{
472+
var doc =
473+
proj.GetDocument(docId) ?? throw new InvalidOperationException("Document missing");
474+
proj = doc.WithSyntaxRoot(
475+
rewriter4.Visit(await doc.GetSyntaxRootAsync(ct))
476+
?? throw new InvalidOperationException("Visit returned null.")
477+
).Project;
478+
}
479+
405480
// Rename documents to account for FlagBits/Flags differences
406481
foreach (var docId in proj.DocumentIds)
407482
{
@@ -441,6 +516,13 @@ rsp with
441516
return Task.FromResult(rsps);
442517
}
443518

519+
internal record struct StructureTypeMember
520+
{
521+
public string Name;
522+
public string Type;
523+
public string Value;
524+
}
525+
444526
/// <summary>
445527
/// Contains information about a group of enums.
446528
/// </summary>
@@ -1620,11 +1702,7 @@ private class RewriterPhase1(JobData job, ILogger logger) : CSharpSyntaxRewriter
16201702
var attributes = SingletonList(
16211703
AttributeList([Attribute(IdentifierName("Transformed"))])
16221704
);
1623-
1624-
if (groupInfo.NativeName != null)
1625-
{
1626-
attributes = attributes.WithNativeName(groupInfo.NativeName);
1627-
}
1705+
attributes = attributes.WithNativeName(groupInfo.NativeName);
16281706

16291707
var baseTypeSyntax = ParseTypeName(baseType);
16301708

@@ -1903,9 +1981,6 @@ private bool TryGetManagedEnumType(
19031981
/// <summary>
19041982
/// This rewriter identifies and extracts vendor extension suffixes into [NameSuffix] attributes.
19051983
/// </summary>
1906-
/// <remarks>
1907-
/// Yes, this is a 3rd rewriter.
1908-
/// </remarks>
19091984
private class RewriterPhase3(JobData job, Configuration config) : CSharpSyntaxRewriter
19101985
{
19111986
private SyntaxList<AttributeListSyntax> ProcessAndGetNewAttributes(
@@ -2189,6 +2264,87 @@ public override SyntaxNode VisitMethodDeclaration(MethodDeclarationSyntax node)
21892264
);
21902265
}
21912266

2267+
/// <summary>
2268+
/// This rewriter adds default field values for structure type members.
2269+
/// </summary>
2270+
private class RewriterPhase4(JobData job) : CSharpSyntaxRewriter
2271+
{
2272+
public override SyntaxNode VisitStructDeclaration(StructDeclarationSyntax node)
2273+
{
2274+
var structNativeName = node.AttributeLists.GetNativeNameOrDefault(node.Identifier);
2275+
if (
2276+
!job.StructureTypeMembers.TryGetValue(structNativeName, out var structureTypeMember)
2277+
)
2278+
{
2279+
return node;
2280+
}
2281+
2282+
// Structs need to have a constructor if we use field initializers
2283+
var hasConstructor = false;
2284+
var initializerAdded = false;
2285+
var members = new List<MemberDeclarationSyntax>();
2286+
foreach (var memberNode in node.Members)
2287+
{
2288+
hasConstructor |= memberNode is ConstructorDeclarationSyntax;
2289+
if (memberNode is not FieldDeclarationSyntax memberFieldNode)
2290+
{
2291+
members.Add(memberNode);
2292+
continue;
2293+
}
2294+
2295+
var memberNativeName = memberFieldNode.AttributeLists.GetNativeNameOrDefault(
2296+
memberFieldNode.Declaration.Variables.First().Identifier
2297+
);
2298+
2299+
if (memberNativeName != structureTypeMember.Name)
2300+
{
2301+
members.Add(memberNode);
2302+
continue;
2303+
}
2304+
2305+
// Don't replace the default value if one is already provided
2306+
if (memberFieldNode.Declaration.Variables.First().Initializer != null)
2307+
{
2308+
return node;
2309+
}
2310+
2311+
var initializer = EqualsValueClause(
2312+
MemberAccessExpression(
2313+
SyntaxKind.SimpleMemberAccessExpression,
2314+
IdentifierName(structureTypeMember.Type),
2315+
IdentifierName(structureTypeMember.Value)
2316+
)
2317+
);
2318+
2319+
initializerAdded = true;
2320+
members.Add(
2321+
memberFieldNode.WithDeclaration(
2322+
memberFieldNode.Declaration.WithVariables(
2323+
[
2324+
.. memberFieldNode.Declaration.Variables.Select(variable =>
2325+
variable.WithInitializer(initializer)
2326+
),
2327+
]
2328+
)
2329+
)
2330+
);
2331+
}
2332+
2333+
if (initializerAdded && !hasConstructor)
2334+
{
2335+
members.Add(
2336+
ConstructorDeclaration(node.Identifier)
2337+
.WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword)))
2338+
.WithBody(Block())
2339+
);
2340+
}
2341+
2342+
node = node.WithMembers([.. members]);
2343+
2344+
return node;
2345+
}
2346+
}
2347+
21922348
[SuppressMessage("ReSharper", "MoveLocalFunctionAfterJumpStatement")]
21932349
internal void ReadGroups(XDocument doc, JobData data, HashSet<string> vendors)
21942350
{

‎sources/Vulkan/Vulkan/Enums/BufferUsageFlags2.gen.cs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public enum BufferUsageFlags2 : ulong
4444
[NativeName("VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT")]
4545
ShaderDeviceAddressBit = 0x20000,
4646

47+
[NativeName("VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX")]
48+
ExecutionGraphScratchBitAMDX = 0x2000000,
49+
4750
[NativeName("VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR")]
4851
TransferSrcBitKHR = 0x1,
4952

@@ -122,6 +125,9 @@ public enum BufferUsageFlags2 : ulong
122125
[NativeName("VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT")]
123126
MicromapStorageBitEXT = 0x1000000,
124127

128+
[NativeName("VK_BUFFER_USAGE_2_COMPRESSED_DATA_DGF1_BIT_AMDX")]
129+
CompressedDataDgf1BitAMDX = 0x200000000,
130+
125131
[NativeName("VK_BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM")]
126132
DataGraphForeignDescriptorBitARM = 0x20000000,
127133

‎sources/Vulkan/Vulkan/Enums/PipelineCreateFlags2.gen.cs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public enum PipelineCreateFlags2 : ulong
4141
[NativeName("VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT")]
4242
ProtectedAccessOnlyBit = 0x40000000,
4343

44+
[NativeName("VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX")]
45+
ExecutionGraphBitAMDX = 0x100000000,
46+
4447
[NativeName("VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR")]
4548
RayTracingSkipBuiltInPrimitivesBitKHR = 0x1000,
4649

‎sources/Vulkan/Vulkan/Vulkan/AccelerationStructureBuildGeometryInfoKHR.gen.cs‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public unsafe partial struct AccelerationStructureBuildGeometryInfoKHR
2121
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
2222
]
2323
)]
24-
public StructureType SType;
24+
public StructureType SType = StructureType.AccelerationStructureBuildGeometryInfoKHR;
2525

2626
[NativeName("pNext")]
2727
[SupportedApiProfile(
@@ -132,4 +132,14 @@ public unsafe partial struct AccelerationStructureBuildGeometryInfoKHR
132132
]
133133
)]
134134
public DeviceOrHostAddressKHR ScratchData;
135+
136+
[SupportedApiProfile(
137+
"vulkan",
138+
["VK_KHR_acceleration_structure"],
139+
ImpliesSets = [
140+
"VK_KHR_deferred_host_operations+VK_VERSION_1_1+VK_EXT_descriptor_indexing+VK_KHR_buffer_device_address",
141+
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
142+
]
143+
)]
144+
public AccelerationStructureBuildGeometryInfoKHR() { }
135145
}

‎sources/Vulkan/Vulkan/Vulkan/AccelerationStructureBuildSizesInfoKHR.gen.cs‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public unsafe partial struct AccelerationStructureBuildSizesInfoKHR
2121
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
2222
]
2323
)]
24-
public StructureType SType;
24+
public StructureType SType = StructureType.AccelerationStructureBuildSizesInfoKHR;
2525

2626
[NativeName("pNext")]
2727
[SupportedApiProfile(
@@ -66,4 +66,14 @@ public unsafe partial struct AccelerationStructureBuildSizesInfoKHR
6666
]
6767
)]
6868
public ulong BuildScratchSize;
69+
70+
[SupportedApiProfile(
71+
"vulkan",
72+
["VK_KHR_acceleration_structure"],
73+
ImpliesSets = [
74+
"VK_KHR_deferred_host_operations+VK_VERSION_1_1+VK_EXT_descriptor_indexing+VK_KHR_buffer_device_address",
75+
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
76+
]
77+
)]
78+
public AccelerationStructureBuildSizesInfoKHR() { }
6979
}

‎sources/Vulkan/Vulkan/Vulkan/AccelerationStructureCaptureDescriptorDataInfoEXT.gen.cs‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public unsafe partial struct AccelerationStructureCaptureDescriptorDataInfoEXT
2626
"VK_VERSION_1_3",
2727
]
2828
)]
29-
public StructureType SType;
29+
public StructureType SType = StructureType.AccelerationStructureCaptureDescriptorDataInfoEXT;
3030

3131
[NativeName("pNext")]
3232
[SupportedApiProfile(
@@ -70,4 +70,19 @@ public unsafe partial struct AccelerationStructureCaptureDescriptorDataInfoEXT
7070
]
7171
)]
7272
public AccelerationStructureHandleNV AccelerationStructureNV;
73+
74+
[SupportedApiProfile(
75+
"vulkan",
76+
[
77+
"VK_EXT_descriptor_buffer+VK_KHR_acceleration_structure",
78+
"VK_EXT_descriptor_buffer+VK_NV_ray_tracing",
79+
],
80+
ImpliesSets = [
81+
"VK_KHR_synchronization2+VK_KHR_buffer_device_address+VK_EXT_descriptor_indexing+VK_KHR_get_physical_device_properties2",
82+
"VK_KHR_synchronization2+VK_KHR_buffer_device_address+VK_EXT_descriptor_indexing+VK_VERSION_1_1",
83+
"VK_KHR_synchronization2+VK_VERSION_1_2",
84+
"VK_VERSION_1_3",
85+
]
86+
)]
87+
public AccelerationStructureCaptureDescriptorDataInfoEXT() { }
7388
}

‎sources/Vulkan/Vulkan/Vulkan/AccelerationStructureCreateInfoKHR.gen.cs‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public unsafe partial struct AccelerationStructureCreateInfoKHR
2121
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
2222
]
2323
)]
24-
public StructureType SType;
24+
public StructureType SType = StructureType.AccelerationStructureCreateInfoKHR;
2525

2626
[NativeName("pNext")]
2727
[SupportedApiProfile(
@@ -99,4 +99,14 @@ public unsafe partial struct AccelerationStructureCreateInfoKHR
9999
]
100100
)]
101101
public ulong DeviceAddress;
102+
103+
[SupportedApiProfile(
104+
"vulkan",
105+
["VK_KHR_acceleration_structure"],
106+
ImpliesSets = [
107+
"VK_KHR_deferred_host_operations+VK_VERSION_1_1+VK_EXT_descriptor_indexing+VK_KHR_buffer_device_address",
108+
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
109+
]
110+
)]
111+
public AccelerationStructureCreateInfoKHR() { }
102112
}

0 commit comments

Comments
 (0)