Skip to content

Commit cc43a21

Browse files
committed
Add TransformEnums RewriteMemberValues option
1 parent 0ad163f commit cc43a21

File tree

172 files changed

+1353
-1294
lines changed

Some content is hidden

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

172 files changed

+1353
-1294
lines changed

generator.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@
342342
"MemberValue": "0x7FFFFFFF"
343343
}
344344
],
345-
"CoerceBackingTypes": "PreferSigned"
345+
"CoerceBackingTypes": "PreferSigned",
346+
"RewriteMemberValues": true
346347
},
347348
"AddVTables": {
348349
"VTables": [

sources/SilkTouch/SilkTouch/Mods/TransformEnums.cs

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ public record Configuration
5757
/// Defaults to not modify the backing types at all.
5858
/// </summary>
5959
public EnumBackingTypePreference CoerceBackingTypes { get; init; } = EnumBackingTypePreference.None;
60+
61+
/// <summary>
62+
/// Whether to rewrite enum member values or not.
63+
/// Hexadecimal is used for [Flags] enums while decimal is used for normal enums.
64+
/// For example: <c>unchecked((ulong)0x00000001UL)</c> would be replaced with <c>0x1</c> in [Flags] enums.
65+
/// </summary>
66+
/// <remarks>
67+
/// This likely is required if <see cref="CoerceBackingTypes"/> is enabled.
68+
/// </remarks>
69+
public bool RewriteMemberValues { get; init; } = false;
6070
}
6171

6272
/// <summary>
@@ -158,7 +168,8 @@ public async Task ExecuteAsync(IModContext ctx, CancellationToken ct = default)
158168
return;
159169
}
160170

161-
var rewriter = new Rewriter(config, removeMemberFilters, compilation);
171+
var referenceDetector = new MemberReferenceDetector();
172+
var rewriter = new Rewriter(config, removeMemberFilters, compilation, referenceDetector);
162173
foreach (var docId in proj.DocumentIds)
163174
{
164175
var doc = proj.GetDocument(docId) ?? throw new InvalidOperationException("Document missing");
@@ -171,7 +182,7 @@ public async Task ExecuteAsync(IModContext ctx, CancellationToken ct = default)
171182
ctx.SourceProject = proj;
172183
}
173184

174-
private class Rewriter(Configuration config, List<EnumMemberFilter> removeMemberFilters, Compilation compilation) : CSharpSyntaxRewriter
185+
private class Rewriter(Configuration config, List<EnumMemberFilter> removeMemberFilters, Compilation compilation, MemberReferenceDetector referenceDetector) : CSharpSyntaxRewriter
175186
{
176187
public override SyntaxNode? VisitEnumDeclaration(EnumDeclarationSyntax node)
177188
{
@@ -229,17 +240,41 @@ private class Rewriter(Configuration config, List<EnumMemberFilter> removeMember
229240

230241
if (!hasNoneMember)
231242
{
232-
var noneMember = EnumMemberDeclaration("None")
233-
.WithEqualsValue(
234-
EqualsValueClause(
235-
LiteralExpression(SyntaxKind.NumericLiteralExpression, Literal(0))
236-
)
237-
);
238-
243+
var noneMember = EnumMemberDeclaration("None").WithEqualsValue(CreateEqualsValueClause(0, isFlagsEnum));
239244
members.Insert(0, noneMember);
240245
}
241246
}
242247

248+
if (config.RewriteMemberValues)
249+
{
250+
members = members
251+
.Select(m =>
252+
{
253+
if (m.Parent == null)
254+
{
255+
return m;
256+
}
257+
258+
// Enum member contains a reference
259+
// We want to preserve these
260+
referenceDetector.Visit(m.EqualsValue);
261+
if (referenceDetector.ContainsReference)
262+
{
263+
return m;
264+
}
265+
266+
var fieldSymbol = semanticModel.GetDeclaredSymbol(m);
267+
if (fieldSymbol == null)
268+
{
269+
return m;
270+
}
271+
272+
var value = Convert.ToInt64(fieldSymbol.ConstantValue);
273+
return m.WithEqualsValue(CreateEqualsValueClause(value, isFlagsEnum));
274+
})
275+
.ToList();
276+
}
277+
243278
switch (config.CoerceBackingTypes)
244279
{
245280
case EnumBackingTypePreference.PreferSigned:
@@ -288,5 +323,30 @@ private class Rewriter(Configuration config, List<EnumMemberFilter> removeMember
288323

289324
return base.VisitEnumDeclaration(node);
290325
}
326+
327+
private EqualsValueClauseSyntax CreateEqualsValueClause(long value, bool useHex)
328+
{
329+
var stringValue = useHex ? $"0x{value:X}" : $"{value}";
330+
return EqualsValueClause(
331+
LiteralExpression(SyntaxKind.NumericLiteralExpression,
332+
Literal([], stringValue, value, [])));
333+
}
334+
}
335+
336+
private class MemberReferenceDetector : CSharpSyntaxWalker
337+
{
338+
public bool ContainsReference { get; private set; }
339+
340+
public override void VisitEqualsValueClause(EqualsValueClauseSyntax node)
341+
{
342+
ContainsReference = false;
343+
base.VisitEqualsValueClause(node);
344+
}
345+
346+
public override void VisitIdentifierName(IdentifierNameSyntax node)
347+
{
348+
base.VisitIdentifierName(node);
349+
ContainsReference = true;
350+
}
291351
}
292352
}

sources/Vulkan/Vulkan/Enums/AccessFlags2.gen.cs

Lines changed: 75 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -12,79 +12,79 @@ namespace Silk.NET.Vulkan;
1212
[Flags]
1313
public enum AccessFlags2 : long
1414
{
15-
None = unchecked((ulong)0UL),
16-
IndirectCommandReadBit = unchecked((ulong)0x00000001UL),
17-
IndexReadBit = unchecked((ulong)0x00000002UL),
18-
VertexAttributeReadBit = unchecked((ulong)0x00000004UL),
19-
UniformReadBit = unchecked((ulong)0x00000008UL),
20-
InputAttachmentReadBit = unchecked((ulong)0x00000010UL),
21-
ShaderReadBit = unchecked((ulong)0x00000020UL),
22-
ShaderWriteBit = unchecked((ulong)0x00000040UL),
23-
ColorAttachmentReadBit = unchecked((ulong)0x00000080UL),
24-
ColorAttachmentWriteBit = unchecked((ulong)0x00000100UL),
25-
DepthStencilAttachmentReadBit = unchecked((ulong)0x00000200UL),
26-
DepthStencilAttachmentWriteBit = unchecked((ulong)0x00000400UL),
27-
TransferReadBit = unchecked((ulong)0x00000800UL),
28-
TransferWriteBit = unchecked((ulong)0x00001000UL),
29-
HostReadBit = unchecked((ulong)0x00002000UL),
30-
HostWriteBit = unchecked((ulong)0x00004000UL),
31-
MemoryReadBit = unchecked((ulong)0x00008000UL),
32-
MemoryWriteBit = unchecked((ulong)0x00010000UL),
33-
ShaderSampledReadBit = unchecked((ulong)0x100000000UL),
34-
ShaderStorageReadBit = unchecked((ulong)0x200000000UL),
35-
ShaderStorageWriteBit = unchecked((ulong)0x400000000UL),
36-
VideoDecodeReadBitKHR = unchecked((ulong)0x800000000UL),
37-
VideoDecodeWriteBitKHR = unchecked((ulong)0x1000000000UL),
38-
VideoEncodeReadBitKHR = unchecked((ulong)0x2000000000UL),
39-
VideoEncodeWriteBitKHR = unchecked((ulong)0x4000000000UL),
40-
ShaderTileAttachmentReadBitQCOM = unchecked((ulong)0x8000000000000UL),
41-
ShaderTileAttachmentWriteBitQCOM = unchecked((ulong)0x10000000000000UL),
42-
NoneKHR = unchecked((ulong)0UL),
43-
IndirectCommandReadBitKHR = unchecked((ulong)0x00000001UL),
44-
IndexReadBitKHR = unchecked((ulong)0x00000002UL),
45-
VertexAttributeReadBitKHR = unchecked((ulong)0x00000004UL),
46-
UniformReadBitKHR = unchecked((ulong)0x00000008UL),
47-
InputAttachmentReadBitKHR = unchecked((ulong)0x00000010UL),
48-
ShaderReadBitKHR = unchecked((ulong)0x00000020UL),
49-
ShaderWriteBitKHR = unchecked((ulong)0x00000040UL),
50-
ColorAttachmentReadBitKHR = unchecked((ulong)0x00000080UL),
51-
ColorAttachmentWriteBitKHR = unchecked((ulong)0x00000100UL),
52-
DepthStencilAttachmentReadBitKHR = unchecked((ulong)0x00000200UL),
53-
DepthStencilAttachmentWriteBitKHR = unchecked((ulong)0x00000400UL),
54-
TransferReadBitKHR = unchecked((ulong)0x00000800UL),
55-
TransferWriteBitKHR = unchecked((ulong)0x00001000UL),
56-
HostReadBitKHR = unchecked((ulong)0x00002000UL),
57-
HostWriteBitKHR = unchecked((ulong)0x00004000UL),
58-
MemoryReadBitKHR = unchecked((ulong)0x00008000UL),
59-
MemoryWriteBitKHR = unchecked((ulong)0x00010000UL),
60-
ShaderSampledReadBitKHR = unchecked((ulong)0x100000000UL),
61-
ShaderStorageReadBitKHR = unchecked((ulong)0x200000000UL),
62-
ShaderStorageWriteBitKHR = unchecked((ulong)0x400000000UL),
63-
TransformFeedbackWriteBitEXT = unchecked((ulong)0x02000000UL),
64-
TransformFeedbackCounterReadBitEXT = unchecked((ulong)0x04000000UL),
65-
TransformFeedbackCounterWriteBitEXT = unchecked((ulong)0x08000000UL),
66-
ConditionalRenderingReadBitEXT = unchecked((ulong)0x00100000UL),
67-
CommandPreprocessReadBitNV = unchecked((ulong)0x00020000UL),
68-
CommandPreprocessWriteBitNV = unchecked((ulong)0x00040000UL),
69-
CommandPreprocessReadBitEXT = unchecked((ulong)0x00020000UL),
70-
CommandPreprocessWriteBitEXT = unchecked((ulong)0x00040000UL),
71-
FragmentShadingRateAttachmentReadBitKHR = unchecked((ulong)0x00800000UL),
72-
ShadingRateImageReadBitNV = unchecked((ulong)0x00800000UL),
73-
AccelerationStructureReadBitKHR = unchecked((ulong)0x00200000UL),
74-
AccelerationStructureWriteBitKHR = unchecked((ulong)0x00400000UL),
75-
AccelerationStructureReadBitNV = unchecked((ulong)0x00200000UL),
76-
AccelerationStructureWriteBitNV = unchecked((ulong)0x00400000UL),
77-
FragmentDensityMapReadBitEXT = unchecked((ulong)0x01000000UL),
78-
ColorAttachmentReadNoncoherentBitEXT = unchecked((ulong)0x00080000UL),
79-
DescriptorBufferReadBitEXT = unchecked((ulong)0x20000000000UL),
80-
InvocationMaskReadBitHuawei = unchecked((ulong)0x8000000000UL),
81-
ShaderBindingTableReadBitKHR = unchecked((ulong)0x10000000000UL),
82-
MicromapReadBitEXT = unchecked((ulong)0x100000000000UL),
83-
MicromapWriteBitEXT = unchecked((ulong)0x200000000000UL),
84-
OpticalFlowReadBitNV = unchecked((ulong)0x40000000000UL),
85-
OpticalFlowWriteBitNV = unchecked((ulong)0x80000000000UL),
86-
DataGraphReadBitARM = unchecked((ulong)0x800000000000UL),
87-
DataGraphWriteBitARM = unchecked((ulong)0x1000000000000UL),
88-
MemoryDecompressionReadBitEXT = unchecked((ulong)0x80000000000000UL),
89-
MemoryDecompressionWriteBitEXT = unchecked((ulong)0x100000000000000UL),
15+
None = 0x0,
16+
IndirectCommandReadBit = 0x1,
17+
IndexReadBit = 0x2,
18+
VertexAttributeReadBit = 0x4,
19+
UniformReadBit = 0x8,
20+
InputAttachmentReadBit = 0x10,
21+
ShaderReadBit = 0x20,
22+
ShaderWriteBit = 0x40,
23+
ColorAttachmentReadBit = 0x80,
24+
ColorAttachmentWriteBit = 0x100,
25+
DepthStencilAttachmentReadBit = 0x200,
26+
DepthStencilAttachmentWriteBit = 0x400,
27+
TransferReadBit = 0x800,
28+
TransferWriteBit = 0x1000,
29+
HostReadBit = 0x2000,
30+
HostWriteBit = 0x4000,
31+
MemoryReadBit = 0x8000,
32+
MemoryWriteBit = 0x10000,
33+
ShaderSampledReadBit = 0x100000000,
34+
ShaderStorageReadBit = 0x200000000,
35+
ShaderStorageWriteBit = 0x400000000,
36+
VideoDecodeReadBitKHR = 0x800000000,
37+
VideoDecodeWriteBitKHR = 0x1000000000,
38+
VideoEncodeReadBitKHR = 0x2000000000,
39+
VideoEncodeWriteBitKHR = 0x4000000000,
40+
ShaderTileAttachmentReadBitQCOM = 0x8000000000000,
41+
ShaderTileAttachmentWriteBitQCOM = 0x10000000000000,
42+
NoneKHR = 0x0,
43+
IndirectCommandReadBitKHR = 0x1,
44+
IndexReadBitKHR = 0x2,
45+
VertexAttributeReadBitKHR = 0x4,
46+
UniformReadBitKHR = 0x8,
47+
InputAttachmentReadBitKHR = 0x10,
48+
ShaderReadBitKHR = 0x20,
49+
ShaderWriteBitKHR = 0x40,
50+
ColorAttachmentReadBitKHR = 0x80,
51+
ColorAttachmentWriteBitKHR = 0x100,
52+
DepthStencilAttachmentReadBitKHR = 0x200,
53+
DepthStencilAttachmentWriteBitKHR = 0x400,
54+
TransferReadBitKHR = 0x800,
55+
TransferWriteBitKHR = 0x1000,
56+
HostReadBitKHR = 0x2000,
57+
HostWriteBitKHR = 0x4000,
58+
MemoryReadBitKHR = 0x8000,
59+
MemoryWriteBitKHR = 0x10000,
60+
ShaderSampledReadBitKHR = 0x100000000,
61+
ShaderStorageReadBitKHR = 0x200000000,
62+
ShaderStorageWriteBitKHR = 0x400000000,
63+
TransformFeedbackWriteBitEXT = 0x2000000,
64+
TransformFeedbackCounterReadBitEXT = 0x4000000,
65+
TransformFeedbackCounterWriteBitEXT = 0x8000000,
66+
ConditionalRenderingReadBitEXT = 0x100000,
67+
CommandPreprocessReadBitNV = 0x20000,
68+
CommandPreprocessWriteBitNV = 0x40000,
69+
CommandPreprocessReadBitEXT = 0x20000,
70+
CommandPreprocessWriteBitEXT = 0x40000,
71+
FragmentShadingRateAttachmentReadBitKHR = 0x800000,
72+
ShadingRateImageReadBitNV = 0x800000,
73+
AccelerationStructureReadBitKHR = 0x200000,
74+
AccelerationStructureWriteBitKHR = 0x400000,
75+
AccelerationStructureReadBitNV = 0x200000,
76+
AccelerationStructureWriteBitNV = 0x400000,
77+
FragmentDensityMapReadBitEXT = 0x1000000,
78+
ColorAttachmentReadNoncoherentBitEXT = 0x80000,
79+
DescriptorBufferReadBitEXT = 0x20000000000,
80+
InvocationMaskReadBitHuawei = 0x8000000000,
81+
ShaderBindingTableReadBitKHR = 0x10000000000,
82+
MicromapReadBitEXT = 0x100000000000,
83+
MicromapWriteBitEXT = 0x200000000000,
84+
OpticalFlowReadBitNV = 0x40000000000,
85+
OpticalFlowWriteBitNV = 0x80000000000,
86+
DataGraphReadBitARM = 0x800000000000,
87+
DataGraphWriteBitARM = 0x1000000000000,
88+
MemoryDecompressionReadBitEXT = 0x80000000000000,
89+
MemoryDecompressionWriteBitEXT = 0x100000000000000,
9090
}

sources/Vulkan/Vulkan/Enums/AccessFlags3KHR.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ namespace Silk.NET.Vulkan;
1212
[Flags]
1313
public enum AccessFlags3KHR : long
1414
{
15-
Access3NoneKHR = unchecked((ulong)0UL),
15+
Access3NoneKHR = 0x0,
1616
}

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

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -12,45 +12,45 @@ namespace Silk.NET.Vulkan;
1212
[Flags]
1313
public enum BufferUsageFlags2 : long
1414
{
15-
None = 0,
16-
TransferSrcBit = unchecked((ulong)0x00000001UL),
17-
TransferDstBit = unchecked((ulong)0x00000002UL),
18-
UniformTexelBufferBit = unchecked((ulong)0x00000004UL),
19-
StorageTexelBufferBit = unchecked((ulong)0x00000008UL),
20-
UniformBufferBit = unchecked((ulong)0x00000010UL),
21-
StorageBufferBit = unchecked((ulong)0x00000020UL),
22-
IndexBufferBit = unchecked((ulong)0x00000040UL),
23-
VertexBufferBit = unchecked((ulong)0x00000080UL),
24-
IndirectBufferBit = unchecked((ulong)0x00000100UL),
25-
ShaderDeviceAddressBit = unchecked((ulong)0x00020000UL),
26-
TransferSrcBitKHR = unchecked((ulong)0x00000001UL),
27-
TransferDstBitKHR = unchecked((ulong)0x00000002UL),
28-
UniformTexelBufferBitKHR = unchecked((ulong)0x00000004UL),
29-
StorageTexelBufferBitKHR = unchecked((ulong)0x00000008UL),
30-
UniformBufferBitKHR = unchecked((ulong)0x00000010UL),
31-
StorageBufferBitKHR = unchecked((ulong)0x00000020UL),
32-
IndexBufferBitKHR = unchecked((ulong)0x00000040UL),
33-
VertexBufferBitKHR = unchecked((ulong)0x00000080UL),
34-
IndirectBufferBitKHR = unchecked((ulong)0x00000100UL),
35-
ConditionalRenderingBitEXT = unchecked((ulong)0x00000200UL),
36-
ShaderBindingTableBitKHR = unchecked((ulong)0x00000400UL),
37-
RayTracingBitNV = unchecked((ulong)0x00000400UL),
38-
TransformFeedbackBufferBitEXT = unchecked((ulong)0x00000800UL),
39-
TransformFeedbackCounterBufferBitEXT = unchecked((ulong)0x00001000UL),
40-
VideoDecodeSrcBitKHR = unchecked((ulong)0x00002000UL),
41-
VideoDecodeDstBitKHR = unchecked((ulong)0x00004000UL),
42-
VideoEncodeDstBitKHR = unchecked((ulong)0x00008000UL),
43-
VideoEncodeSrcBitKHR = unchecked((ulong)0x00010000UL),
44-
ShaderDeviceAddressBitKHR = unchecked((ulong)0x00020000UL),
45-
AccelerationStructureBuildInputReadOnlyBitKHR = unchecked((ulong)0x00080000UL),
46-
AccelerationStructureStorageBitKHR = unchecked((ulong)0x00100000UL),
47-
SamplerDescriptorBufferBitEXT = unchecked((ulong)0x00200000UL),
48-
ResourceDescriptorBufferBitEXT = unchecked((ulong)0x00400000UL),
49-
PushDescriptorsDescriptorBufferBitEXT = unchecked((ulong)0x04000000UL),
50-
MicromapBuildInputReadOnlyBitEXT = unchecked((ulong)0x00800000UL),
51-
MicromapStorageBitEXT = unchecked((ulong)0x01000000UL),
52-
DataGraphForeignDescriptorBitARM = unchecked((ulong)0x20000000UL),
53-
TileMemoryBitQCOM = unchecked((ulong)0x08000000UL),
54-
MemoryDecompressionBitEXT = unchecked((ulong)0x100000000UL),
55-
PreprocessBufferBitEXT = unchecked((ulong)0x80000000UL),
15+
None = 0x0,
16+
TransferSrcBit = 0x1,
17+
TransferDstBit = 0x2,
18+
UniformTexelBufferBit = 0x4,
19+
StorageTexelBufferBit = 0x8,
20+
UniformBufferBit = 0x10,
21+
StorageBufferBit = 0x20,
22+
IndexBufferBit = 0x40,
23+
VertexBufferBit = 0x80,
24+
IndirectBufferBit = 0x100,
25+
ShaderDeviceAddressBit = 0x20000,
26+
TransferSrcBitKHR = 0x1,
27+
TransferDstBitKHR = 0x2,
28+
UniformTexelBufferBitKHR = 0x4,
29+
StorageTexelBufferBitKHR = 0x8,
30+
UniformBufferBitKHR = 0x10,
31+
StorageBufferBitKHR = 0x20,
32+
IndexBufferBitKHR = 0x40,
33+
VertexBufferBitKHR = 0x80,
34+
IndirectBufferBitKHR = 0x100,
35+
ConditionalRenderingBitEXT = 0x200,
36+
ShaderBindingTableBitKHR = 0x400,
37+
RayTracingBitNV = 0x400,
38+
TransformFeedbackBufferBitEXT = 0x800,
39+
TransformFeedbackCounterBufferBitEXT = 0x1000,
40+
VideoDecodeSrcBitKHR = 0x2000,
41+
VideoDecodeDstBitKHR = 0x4000,
42+
VideoEncodeDstBitKHR = 0x8000,
43+
VideoEncodeSrcBitKHR = 0x10000,
44+
ShaderDeviceAddressBitKHR = 0x20000,
45+
AccelerationStructureBuildInputReadOnlyBitKHR = 0x80000,
46+
AccelerationStructureStorageBitKHR = 0x100000,
47+
SamplerDescriptorBufferBitEXT = 0x200000,
48+
ResourceDescriptorBufferBitEXT = 0x400000,
49+
PushDescriptorsDescriptorBufferBitEXT = 0x4000000,
50+
MicromapBuildInputReadOnlyBitEXT = 0x800000,
51+
MicromapStorageBitEXT = 0x1000000,
52+
DataGraphForeignDescriptorBitARM = 0x20000000,
53+
TileMemoryBitQCOM = 0x8000000,
54+
MemoryDecompressionBitEXT = 0x100000000,
55+
PreprocessBufferBitEXT = 0x80000000,
5656
}

sources/Vulkan/Vulkan/Enums/DataGraphPipelineDispatchFlagsARM.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ namespace Silk.NET.Vulkan;
1212
[Flags]
1313
public enum DataGraphPipelineDispatchFlagsARM : long
1414
{
15-
None = 0,
15+
None = 0x0,
1616
}

sources/Vulkan/Vulkan/Enums/DataGraphPipelineSessionCreateFlagsARM.gen.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ namespace Silk.NET.Vulkan;
1212
[Flags]
1313
public enum DataGraphPipelineSessionCreateFlagsARM : long
1414
{
15-
None = 0,
16-
ProtectedBitARM = unchecked((ulong)0x00000001UL),
15+
None = 0x0,
16+
ProtectedBitARM = 0x1,
1717
}

sources/Vulkan/Vulkan/Enums/ExportMetalObjectTypeFlagsEXT.gen.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ namespace Silk.NET.Vulkan;
1212
[Flags]
1313
public enum ExportMetalObjectTypeFlagsEXT
1414
{
15-
None = 0,
15+
None = 0x0,
1616
}

0 commit comments

Comments
 (0)