From 8716e1fe13958e130da270ace9895ef1c4107dc8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Jun 2023 16:04:24 +0900 Subject: [PATCH 1/3] Expose less `Update` methods from `VeldridVertexBuffer` --- .../Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs b/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs index dd0deb6117..844600655f 100644 --- a/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs +++ b/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs @@ -71,7 +71,7 @@ protected virtual void Initialise() memoryLease = NativeMemoryTracker.AddMemory(this, gpuBuffer.SizeInBytes); // Ensure the device buffer is initialised to 0. - Update(); + UpdateRange(0, Size); } ~VeldridVertexBuffer() @@ -134,12 +134,7 @@ public void DrawRange(int startIndex, int endIndex) Unbind(); } - public void Update() - { - UpdateRange(0, Size); - } - - public void UpdateRange(int startIndex, int endIndex) + internal void UpdateRange(int startIndex, int endIndex) { if (gpuBuffer == null) Initialise(); From be55b53989046e899cdc8b2c7e3d17c3b633fa2b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Jun 2023 16:09:57 +0900 Subject: [PATCH 2/3] Remove unused `Draw()` method --- .../Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs b/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs index 844600655f..ccdc94eef3 100644 --- a/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs +++ b/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs @@ -119,11 +119,6 @@ public virtual void Unbind() protected abstract PrimitiveTopology Type { get; } - public void Draw() - { - DrawRange(0, Size); - } - public void DrawRange(int startIndex, int endIndex) { Bind(); From a818d611a0fe3c25b518da2f0b6e48b5b308b08c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Jun 2023 16:16:20 +0900 Subject: [PATCH 3/3] Avoid initialising `VeldridVertexBuffer` immediately Reduces the uploaded vertices when creating a new vertex buffer --- .../Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs b/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs index ccdc94eef3..44fa38c22b 100644 --- a/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs +++ b/osu.Framework/Graphics/Veldrid/Buffers/VeldridVertexBuffer.cs @@ -27,6 +27,8 @@ internal abstract class VeldridVertexBuffer : IVertexBuffer private IStagingBuffer>? stagingBuffer; private DeviceBuffer? gpuBuffer; + private int lastWrittenVertexIndex = -1; + protected VeldridVertexBuffer(VeldridRenderer renderer, int amountVertices) { this.renderer = renderer; @@ -44,11 +46,15 @@ public bool SetVertex(int vertexIndex, T vertex) { ref var currentVertex = ref getMemory()[vertexIndex]; - bool isNewVertex = !currentVertex.Vertex.Equals(vertex) || currentVertex.BackbufferDrawDepth != renderer.BackbufferDrawDepth; + bool isNewVertex = vertexIndex > lastWrittenVertexIndex + || !currentVertex.Vertex.Equals(vertex) + || currentVertex.BackbufferDrawDepth != renderer.BackbufferDrawDepth; currentVertex.Vertex = vertex; currentVertex.BackbufferDrawDepth = renderer.BackbufferDrawDepth; + lastWrittenVertexIndex = Math.Max(lastWrittenVertexIndex, vertexIndex); + return isNewVertex; } @@ -69,9 +75,6 @@ protected virtual void Initialise() gpuBuffer = renderer.Factory.CreateBuffer(new BufferDescription((uint)(Size * STRIDE), BufferUsage.VertexBuffer | stagingBuffer.CopyTargetUsageFlags)); memoryLease = NativeMemoryTracker.AddMemory(this, gpuBuffer.SizeInBytes); - - // Ensure the device buffer is initialised to 0. - UpdateRange(0, Size); } ~VeldridVertexBuffer()