Skip to content

Commit 80b6f55

Browse files
committed
Update generator to emit 'EffectFactory' property
1 parent 53f447a commit 80b6f55

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using ComputeSharp.D2D1.SourceGenerators.Models;
2+
using ComputeSharp.SourceGeneration.Extensions;
3+
using ComputeSharp.SourceGeneration.Helpers;
4+
5+
namespace ComputeSharp.D2D1.SourceGenerators;
6+
7+
/// <inheritdoc/>
8+
partial class D2DPixelShaderDescriptorGenerator
9+
{
10+
/// <summary>
11+
/// A helper with all logic to generate the <c>EffectFactory</c> property.
12+
/// </summary>
13+
private static class EffectFactory
14+
{
15+
/// <summary>
16+
/// Writes the <c>EffectFactory</c> property.
17+
/// </summary>
18+
/// <param name="info">The input <see cref="D2D1ShaderInfo"/> instance with gathered shader info.</param>
19+
/// <param name="writer">The <see cref="IndentedTextWriter"/> instance to write into.</param>
20+
public static void WriteSyntax(D2D1ShaderInfo info, IndentedTextWriter writer)
21+
{
22+
writer.WriteLine("/// <inheritdoc/>");
23+
writer.WriteGeneratedAttributes(GeneratorName);
24+
writer.WriteLine($"static unsafe nint global::ComputeSharp.D2D1.Descriptors.ID2D1PixelShaderDescriptor<{info.Hierarchy.Hierarchy[0].QualifiedName}>.EffectFactory");
25+
26+
using (writer.WriteBlock())
27+
{
28+
writer.WriteLine("[global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]");
29+
writer.WriteLine("get");
30+
31+
using (writer.WriteBlock())
32+
{
33+
writer.WriteLine($$"""
34+
[global::System.Runtime.InteropServices.UnmanagedCallersOnly(CallConvs = [typeof(global::System.Runtime.CompilerServices.CallConvStdcall)])]
35+
static int EffectFactory(void** effectImpl)
36+
{
37+
return global::ComputeSharp.D2D1.Interop.D2D1PixelShaderEffect.CreateEffectUnsafe<{{info.Hierarchy.Hierarchy[0].QualifiedName}}>(effectImpl);
38+
}
39+
40+
return (nint)(delegate* unmanaged[Stdcall]<void**, int>)&EffectFactory;
41+
""", isMultiline: true);
42+
}
43+
}
44+
}
45+
}
46+
}

src/ComputeSharp.D2D1.SourceGenerators/D2DPixelShaderDescriptorGenerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
225225
declaredMembers.Add(EffectMetadata.WriteEffectDescriptionSyntax);
226226
declaredMembers.Add(EffectMetadata.WriteEffectCategorySyntax);
227227
declaredMembers.Add(EffectMetadata.WriteEffectAuthorSyntax);
228+
declaredMembers.Add(EffectFactory.WriteSyntax);
228229
declaredMembers.Add(NumericProperties.WriteConstantBufferSizeSyntax);
229230
declaredMembers.Add(NumericProperties.WriteInputCountSyntax);
230231
declaredMembers.Add(NumericProperties.WriteResourceTextureCountSyntax);

0 commit comments

Comments
 (0)