Skip to content

Commit 71bb6c1

Browse files
committed
Use stack-backed scatter series pipeline layouts
1 parent f4c243d commit 71bb6c1

3 files changed

Lines changed: 16 additions & 11 deletions

File tree

src/ProGPU.Scene/Compositor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1234,7 +1234,7 @@ private void InitializePipelinesAndBindGroups()
12341234
Span<VertexBufferLayout> scatterVertexLayouts = stackalloc VertexBufferLayout[1];
12351235
scatterVertexLayouts[0] = new VertexBufferLayout
12361236
{
1237-
ArrayStride = 12,
1237+
ArrayStride = (uint)Unsafe.SizeOf<Vector3>(),
12381238
StepMode = VertexStepMode.Instance,
12391239
AttributeCount = 2,
12401240
Attributes = scatterAttribsPtr

src/ProGPU.Scene/Extensions/GpuScatterSeriesExtensionPipeline.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Buffers;
33
using System.Numerics;
4+
using System.Runtime.CompilerServices;
45
using System.Runtime.InteropServices;
56
using Silk.NET.WebGPU;
67
using Silk.NET.Core.Native;
@@ -300,29 +301,28 @@ public unsafe void Render(
300301
{
301302
var shaderModule = compositor.PipelineCache.GetOrCreateShader("ChartScatterShader", ChartScatterShaderCode, "ChartScatter WGSL Shader");
302303

303-
var scatterAttribs = new VertexAttribute[]
304+
Span<VertexAttribute> attrs = stackalloc VertexAttribute[2];
305+
attrs[0] = new VertexAttribute { Format = VertexFormat.Float32x2, Offset = 0, ShaderLocation = 0 }; // center
306+
attrs[1] = new VertexAttribute { Format = VertexFormat.Float32, Offset = 8, ShaderLocation = 1 }; // radiusPx
307+
fixed (VertexAttribute* attrsPtr = attrs)
304308
{
305-
new() { Format = VertexFormat.Float32x2, Offset = 0, ShaderLocation = 0 }, // center
306-
new() { Format = VertexFormat.Float32, Offset = 8, ShaderLocation = 1 } // radiusPx
307-
};
308-
fixed (VertexAttribute* scatterAttribsPtr = scatterAttribs)
309-
{
310-
var scatterLayoutDesc = new VertexBufferLayout
309+
Span<VertexBufferLayout> layouts = stackalloc VertexBufferLayout[1];
310+
layouts[0] = new VertexBufferLayout
311311
{
312-
ArrayStride = 12,
312+
ArrayStride = (uint)Unsafe.SizeOf<Vector3>(),
313313
StepMode = VertexStepMode.Instance,
314314
AttributeCount = 2,
315-
Attributes = scatterAttribsPtr
315+
Attributes = attrsPtr
316316
};
317317

318318
var pipeline = compositor.PipelineCache.GetOrCreateRenderPipeline(
319319
isOffscreen ? "ChartScatter_Offscreen" : "ChartScatter",
320320
shaderModule,
321+
layouts,
321322
"vs_main",
322323
"fs_main",
323324
compositor.RenderFormat,
324325
PrimitiveTopology.TriangleList,
325-
new[] { scatterLayoutDesc },
326326
enableBlend: true,
327327
sampleCount: isOffscreen ? 1u : 4u
328328
);

src/ProGPU.Tests/DiagnosticsLoggingSourceTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,7 @@ public void EffectPipelineLayoutsUseStackBackedDescriptors()
793793
string acisSolid = ReadSource("src", "ProGPU.Scene", "Extensions", "AcisSolidExtensionPipeline.cs");
794794
string hatch = ReadSource("src", "ProGPU.Scene", "Extensions", "HatchExtensionPipeline.cs");
795795
string mesh3D = ReadSource("src", "ProGPU.Scene", "Extensions", "Mesh3DExtensionPipeline.cs");
796+
string scatterSeries = ReadSource("src", "ProGPU.Scene", "Extensions", "GpuScatterSeriesExtensionPipeline.cs");
796797
string pipelineCache = ReadSource("src", "ProGPU.Backend", "RenderPipelineCache.cs");
797798

798799
Assert.Contains("Span<VertexAttribute> vectorAttrs = stackalloc VertexAttribute[8];", compositor, StringComparison.Ordinal);
@@ -804,6 +805,7 @@ public void EffectPipelineLayoutsUseStackBackedDescriptors()
804805
Assert.Contains("Span<VertexBufferLayout> vertexLayouts = stackalloc VertexBufferLayout[1];", compositor, StringComparison.Ordinal);
805806
Assert.Contains("ArrayStride = (uint)Unsafe.SizeOf<VectorVertex>()", compositor, StringComparison.Ordinal);
806807
Assert.Contains("ArrayStride = (uint)Unsafe.SizeOf<GlyphInstance>()", compositor, StringComparison.Ordinal);
808+
Assert.Contains("ArrayStride = (uint)Unsafe.SizeOf<Vector3>()", compositor, StringComparison.Ordinal);
807809
Assert.DoesNotContain("var vertexAttribs = new VertexAttribute[]", compositor, StringComparison.Ordinal);
808810
Assert.DoesNotContain("var textVertexAttribs = new VertexAttribute[]", compositor, StringComparison.Ordinal);
809811
Assert.DoesNotContain("var scatterAttribs = new VertexAttribute[]", compositor, StringComparison.Ordinal);
@@ -823,6 +825,7 @@ public void EffectPipelineLayoutsUseStackBackedDescriptors()
823825
AssertStackBackedLayout(acisSolid, 8, "VectorVertex");
824826
AssertStackBackedLayout(hatch, 8, "VectorVertex");
825827
AssertStackBackedLayout(mesh3D, 2, "GpuVertex3D");
828+
AssertStackBackedLayout(scatterSeries, 2, "Vector3");
826829

827830
Assert.Contains("ReadOnlySpan<VertexBufferLayout> vertexBufferLayouts", pipelineCache, StringComparison.Ordinal);
828831
Assert.Contains("fixed (VertexBufferLayout* pLayouts = vertexBufferLayouts)", pipelineCache, StringComparison.Ordinal);
@@ -841,7 +844,9 @@ static void AssertStackBackedLayout(string source, int attributeCount, string ve
841844
Assert.Contains($"Span<VertexAttribute> attrs = stackalloc VertexAttribute[{attributeCount}];", source, StringComparison.Ordinal);
842845
Assert.Contains("Span<VertexBufferLayout> layouts = stackalloc VertexBufferLayout[1];", source, StringComparison.Ordinal);
843846
Assert.Contains($"ArrayStride = (uint)Unsafe.SizeOf<{vertexType}>()", source, StringComparison.Ordinal);
847+
Assert.DoesNotContain("new VertexAttribute[]", source, StringComparison.Ordinal);
844848
Assert.DoesNotContain("new VertexBufferLayout[]", source, StringComparison.Ordinal);
849+
Assert.DoesNotContain("new[] {", source, StringComparison.Ordinal);
845850
Assert.DoesNotContain("Marshal.AllocHGlobal(Marshal.SizeOf<VertexAttribute>()", source, StringComparison.Ordinal);
846851
Assert.DoesNotContain("Marshal.FreeHGlobal((IntPtr)layouts[0].Attributes)", source, StringComparison.Ordinal);
847852
}

0 commit comments

Comments
 (0)