Skip to content

Commit 744d86d

Browse files
committed
Fix Flags uint/ulong type replacement being too eager and replacing uint/ulongs with types that don't exist in the project
1 parent 5c499a4 commit 744d86d

File tree

42 files changed

+79
-65
lines changed

Some content is hidden

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

42 files changed

+79
-65
lines changed

.silktouch/ce8a69a66cd3bd3f.stout

0 Bytes
Binary file not shown.

sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ public async Task ExecuteAsync(IModContext ctx, CancellationToken ct = default)
326326
}
327327

328328
// Rewrite phase 2
329-
var rewriter2 = new EnumRewriterPhase2(jobData);
329+
var rewriter2 = new EnumRewriterPhase2(jobData, rewriter1);
330330
foreach (var docId in proj?.DocumentIds ?? [])
331331
{
332332
var doc = proj!.GetDocument(docId) ?? throw new InvalidOperationException("Document missing");
@@ -1696,8 +1696,17 @@ jobKey is null
16961696
/// </remarks>
16971697
private class EnumRewriterPhase1(JobData job, ILogger logger) : CSharpSyntaxRewriter
16981698
{
1699+
/// <summary>
1700+
/// Tracks enum groups that already exist in the project, prior to the generation of missing enums.
1701+
/// </summary>
16991702
public HashSet<string> AlreadyPresentGroups { get; } = [];
17001703

1704+
/// <summary>
1705+
/// Tracks enums that exist in the project.
1706+
/// Note that this includes any enum, including enums not present in <see cref="JobData.Groups"/>.
1707+
/// </summary>
1708+
public HashSet<string> AllKnownEnums { get; } = [];
1709+
17011710
public IEnumerable<(string FilePath, SyntaxNode Node)> GetMissingEnums()
17021711
{
17031712
var results = new List<(string FilePath, SyntaxNode Node)>();
@@ -1744,6 +1753,8 @@ private class EnumRewriterPhase1(JobData job, ILogger logger) : CSharpSyntaxRewr
17441753
continue;
17451754
}
17461755

1756+
AllKnownEnums.Add(groupName);
1757+
17471758
results.Add((
17481759
$"Enums/{groupName}.gen.cs",
17491760
CompilationUnit()
@@ -1823,6 +1834,8 @@ private class EnumRewriterPhase1(JobData job, ILogger logger) : CSharpSyntaxRewr
18231834
var identifier = node.Identifier.ToString();
18241835
identifier = identifier.Replace("FlagBits", "Flags");
18251836

1837+
AllKnownEnums.Add(identifier);
1838+
18261839
if (job.Groups.TryGetValue(identifier, out var group)
18271840
&& !node.Ancestors().OfType<BaseTypeDeclarationSyntax>().Any())
18281841
{
@@ -1908,7 +1921,7 @@ private class EnumRewriterPhase1(JobData job, ILogger logger) : CSharpSyntaxRewr
19081921
/// Marks bitmask enums with the [Flags] attribute.
19091922
/// Replaces uint/ulong with the actual enum type for FlagBits/Flags types.
19101923
/// </summary>
1911-
private class EnumRewriterPhase2(JobData job) : CSharpSyntaxRewriter(true)
1924+
private class EnumRewriterPhase2(JobData job, EnumRewriterPhase1 phase1) : CSharpSyntaxRewriter(true)
19121925
{
19131926
public override SyntaxNode? VisitIdentifierName(IdentifierNameSyntax node) => IdentifierName(node.Identifier.ToString().Replace("FlagBits", "Flags"));
19141927

@@ -1971,6 +1984,11 @@ private bool TryGetManagedEnumType(SyntaxList<AttributeListSyntax> attributes, [
19711984
var typeName = nativeName.StartsWith("const ") ? nativeNameParts[1] : nativeNameParts[0];
19721985
var pointerDimension = nativeName.Count(c => c == '*');
19731986

1987+
if (!phase1.AllKnownEnums.Contains(typeName))
1988+
{
1989+
return false;
1990+
}
1991+
19741992
managedName = typeName + new string('*', pointerDimension);
19751993

19761994
return true;

sources/Vulkan/Vulkan/Vulkan/AccelerationStructureInfoNV.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public unsafe partial struct AccelerationStructureInfoNV
5353
"VK_VERSION_1_1",
5454
]
5555
)]
56-
public VkBuildAccelerationStructureFlagsNV Flags;
56+
public uint Flags;
5757

5858
[NativeTypeName("uint32_t")]
5959
[SupportedApiProfile(

sources/Vulkan/Vulkan/Vulkan/AccelerationStructureMotionInfoNV.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,5 @@ public unsafe partial struct AccelerationStructureMotionInfoNV
4141
["VK_NV_ray_tracing_motion_blur"],
4242
ImpliesSets = ["VK_KHR_ray_tracing_pipeline"]
4343
)]
44-
public VkAccelerationStructureMotionInfoFlagsNV Flags;
44+
public uint Flags;
4545
}

sources/Vulkan/Vulkan/Vulkan/AccelerationStructureMotionInstanceNV.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public partial struct AccelerationStructureMotionInstanceNV
2525
["VK_NV_ray_tracing_motion_blur"],
2626
ImpliesSets = ["VK_KHR_ray_tracing_pipeline"]
2727
)]
28-
public VkAccelerationStructureMotionInstanceFlagsNV Flags;
28+
public uint Flags;
2929

3030
[SupportedApiProfile(
3131
"vulkan",

sources/Vulkan/Vulkan/Vulkan/BufferViewCreateInfo.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public unsafe partial struct BufferViewCreateInfo
3131
["VK_VERSION_1_0", "VK_VERSION_1_1", "VK_VERSION_1_2", "VK_VERSION_1_3", "VK_VERSION_1_4"],
3232
MinVersion = "1.0"
3333
)]
34-
public VkBufferViewCreateFlags Flags;
34+
public uint Flags;
3535

3636
[NativeTypeName("VkBuffer")]
3737
[SupportedApiProfile(

sources/Vulkan/Vulkan/Vulkan/DebugUtilsMessengerCallbackDataEXT.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public unsafe partial struct DebugUtilsMessengerCallbackDataEXT
2121

2222
[NativeTypeName("VkDebugUtilsMessengerCallbackDataFlagsEXT")]
2323
[SupportedApiProfile("vulkan", ["VK_EXT_debug_utils"])]
24-
public VkDebugUtilsMessengerCallbackDataFlagsEXT Flags;
24+
public uint Flags;
2525

2626
[NativeTypeName("const char *")]
2727
[SupportedApiProfile("vulkan", ["VK_EXT_debug_utils"])]

sources/Vulkan/Vulkan/Vulkan/DebugUtilsMessengerCreateInfoEXT.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public unsafe partial struct DebugUtilsMessengerCreateInfoEXT
2121

2222
[NativeTypeName("VkDebugUtilsMessengerCreateFlagsEXT")]
2323
[SupportedApiProfile("vulkan", ["VK_EXT_debug_utils"])]
24-
public VkDebugUtilsMessengerCreateFlagsEXT Flags;
24+
public uint Flags;
2525

2626
[NativeTypeName("VkDebugUtilsMessageSeverityFlagsEXT")]
2727
[SupportedApiProfile("vulkan", ["VK_EXT_debug_utils"])]

sources/Vulkan/Vulkan/Vulkan/DescriptorUpdateTemplateCreateInfo.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public unsafe partial struct DescriptorUpdateTemplateCreateInfo
3333
["VK_VERSION_1_1", "VK_VERSION_1_2", "VK_VERSION_1_3", "VK_VERSION_1_4"],
3434
MinVersion = "1.1"
3535
)]
36-
public VkDescriptorUpdateTemplateCreateFlags Flags;
36+
public uint Flags;
3737

3838
[NativeTypeName("uint32_t")]
3939
[SupportedApiProfile(

sources/Vulkan/Vulkan/Vulkan/DeviceCreateInfo.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public unsafe partial struct DeviceCreateInfo
3333
["VK_VERSION_1_0", "VK_VERSION_1_1", "VK_VERSION_1_2", "VK_VERSION_1_3", "VK_VERSION_1_4"],
3434
MinVersion = "1.0"
3535
)]
36-
public VkDeviceCreateFlags Flags;
36+
public uint Flags;
3737

3838
[NativeTypeName("uint32_t")]
3939
[SupportedApiProfile(

0 commit comments

Comments
 (0)