Skip to content

Commit 5c499a4

Browse files
committed
Fix Flags types being typed as uint/ulong instead of the proper enum type
1 parent b5dc97c commit 5c499a4

File tree

239 files changed

+912
-765
lines changed

Some content is hidden

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

239 files changed

+912
-765
lines changed

.silktouch/ce8a69a66cd3bd3f.stout

0 Bytes
Binary file not shown.

sources/SilkTouch/SilkTouch/Mods/MixKhronosData.cs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1906,9 +1906,12 @@ private class EnumRewriterPhase1(JobData job, ILogger logger) : CSharpSyntaxRewr
19061906
/// <summary>
19071907
/// Finishes renaming FlagBits enums to Flags.
19081908
/// Marks bitmask enums with the [Flags] attribute.
1909+
/// Replaces uint/ulong with the actual enum type for FlagBits/Flags types.
19091910
/// </summary>
19101911
private class EnumRewriterPhase2(JobData job) : CSharpSyntaxRewriter(true)
19111912
{
1913+
public override SyntaxNode? VisitIdentifierName(IdentifierNameSyntax node) => IdentifierName(node.Identifier.ToString().Replace("FlagBits", "Flags"));
1914+
19121915
public override SyntaxNode? VisitEnumDeclaration(EnumDeclarationSyntax node)
19131916
{
19141917
var identifier = node.Identifier.ToString();
@@ -1925,7 +1928,53 @@ private class EnumRewriterPhase2(JobData job) : CSharpSyntaxRewriter(true)
19251928
return base.VisitEnumDeclaration(node);
19261929
}
19271930

1928-
public override SyntaxNode? VisitIdentifierName(IdentifierNameSyntax node) => IdentifierName(node.Identifier.ToString().Replace("FlagBits", "Flags"));
1931+
public override SyntaxNode? VisitFieldDeclaration(FieldDeclarationSyntax node)
1932+
{
1933+
if (!TryGetManagedEnumType(node.AttributeLists, out var managedName))
1934+
{
1935+
return base.VisitFieldDeclaration(node);
1936+
}
1937+
1938+
return base.VisitFieldDeclaration(node.WithDeclaration(node.Declaration.WithType(ParseTypeName(managedName))));
1939+
}
1940+
1941+
public override SyntaxNode? VisitParameter(ParameterSyntax node)
1942+
{
1943+
if (!TryGetManagedEnumType(node.AttributeLists, out var managedName))
1944+
{
1945+
return base.VisitParameter(node);
1946+
}
1947+
1948+
return base.VisitParameter(node.WithType(ParseTypeName(managedName)));
1949+
}
1950+
1951+
/// <summary>
1952+
/// Parses the attribute list and uses the [NativeTypeName] attribute to determine the correct enum type.
1953+
/// </summary>
1954+
/// <remarks>
1955+
/// This method is intentionally implemented in a naive manner to keep things simple.
1956+
/// </remarks>
1957+
private bool TryGetManagedEnumType(SyntaxList<AttributeListSyntax> attributes, [NotNullWhen(true)] out string? managedName)
1958+
{
1959+
managedName = null;
1960+
1961+
// ClangSharp does not know how to handle FlagBits and Flags types
1962+
// Because of this ClangSharp outputs Flags types as uints or ulongs
1963+
// We have to look at the NativeTypeName in order to determine the correct type
1964+
var nativeName = attributes.GetNativeTypeName()?.Replace("FlagBits", "Flags");
1965+
if (nativeName == null || !nativeName.Contains("Flags"))
1966+
{
1967+
return false;
1968+
}
1969+
1970+
var nativeNameParts = nativeName.Split(' ');
1971+
var typeName = nativeName.StartsWith("const ") ? nativeNameParts[1] : nativeNameParts[0];
1972+
var pointerDimension = nativeName.Count(c => c == '*');
1973+
1974+
managedName = typeName + new string('*', pointerDimension);
1975+
1976+
return true;
1977+
}
19291978
}
19301979

19311980
[SuppressMessage("ReSharper", "MoveLocalFunctionAfterJumpStatement")]

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public unsafe partial struct AccelerationStructureBuildGeometryInfoKHR
5252
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
5353
]
5454
)]
55-
public uint Flags;
55+
public BuildAccelerationStructureFlagsKHR Flags;
5656

5757
[SupportedApiProfile(
5858
"vulkan",

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public unsafe partial struct AccelerationStructureCreateInfoKHR
4242
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
4343
]
4444
)]
45-
public uint CreateFlags;
45+
public AccelerationStructureCreateFlagsKHR CreateFlags;
4646

4747
[NativeTypeName("VkBuffer")]
4848
[SupportedApiProfile(

sources/Vulkan/Vulkan/Vulkan/AccelerationStructureGeometryKHR.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,5 @@ public unsafe partial struct AccelerationStructureGeometryKHR
6262
"VK_KHR_deferred_host_operations+VK_VERSION_1_2",
6363
]
6464
)]
65-
public uint Flags;
65+
public GeometryFlagsKHR Flags;
6666
}

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 uint Flags;
56+
public VkBuildAccelerationStructureFlagsNV 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 uint Flags;
44+
public VkAccelerationStructureMotionInfoFlagsNV 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 uint Flags;
28+
public VkAccelerationStructureMotionInstanceFlagsNV Flags;
2929

3030
[SupportedApiProfile(
3131
"vulkan",

sources/Vulkan/Vulkan/Vulkan/AcquireProfilingLockInfoKHR.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public unsafe partial struct AcquireProfilingLockInfoKHR
4242
"VK_KHR_performance_query+VK_VERSION_1_1",
4343
]
4444
)]
45-
public uint Flags;
45+
public AcquireProfilingLockFlagsKHR Flags;
4646

4747
[NativeTypeName("uint64_t")]
4848
[SupportedApiProfile(

sources/Vulkan/Vulkan/Vulkan/AttachmentDescription.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public partial struct AttachmentDescription
1818
["VK_VERSION_1_0", "VK_VERSION_1_1", "VK_VERSION_1_2", "VK_VERSION_1_3", "VK_VERSION_1_4"],
1919
MinVersion = "1.0"
2020
)]
21-
public uint Flags;
21+
public AttachmentDescriptionFlags Flags;
2222

2323
[SupportedApiProfile(
2424
"vulkan",

0 commit comments

Comments
 (0)