Skip to content

Commit f0559bc

Browse files
[Rendering] Reduce MeshRenderSystem preprocessing processing;
[Rendering] Improvements to frame allocator usage;
1 parent 99a0be8 commit f0559bc

File tree

5 files changed

+152
-160
lines changed

5 files changed

+152
-160
lines changed

Engine/Staple.Core/Rendering/Mesh/MeshRenderSystem.cs

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -121,26 +121,7 @@ public void Preprocess(Span<RenderEntry> renderQueue, Camera activeCamera, Trans
121121
{
122122
var renderer = (MeshRenderer)entry.component;
123123

124-
if (renderer.mesh == null ||
125-
renderer.materials == null ||
126-
renderer.materials.Count == 0)
127-
{
128-
continue;
129-
}
130-
131-
var skip = false;
132-
133-
for (var i = 0; i < renderer.materials.Count; i++)
134-
{
135-
if ((renderer.materials[i]?.IsValid ?? false) == false)
136-
{
137-
skip = true;
138-
139-
break;
140-
}
141-
}
142-
143-
if(skip)
124+
if (renderer.mesh == null)
144125
{
145126
continue;
146127
}

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPURenderCommand.cs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
namespace Staple.Internal;
55

66
internal class SDLGPURenderCommand(RenderState state, nint pipeline, Texture[] vertexTextures, Texture[] fragmentTextures,
7-
List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData, List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData, SDLGPUShaderProgram program) : IRenderCommand
7+
SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData, SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData,
8+
SDLGPUShaderProgram program) : IRenderCommand
89
{
910
public RenderState state = state.Clone();
1011
public nint pipeline = pipeline;
1112
public Texture[] vertexTextures = (Texture[])vertexTextures?.Clone();
1213
public Texture[] fragmentTextures = (Texture[])fragmentTextures?.Clone();
13-
public List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData = vertexUniformData;
14-
public List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData = fragmentUniformData;
14+
public SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData = vertexUniformData;
15+
public SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData = fragmentUniformData;
1516
public SDLGPUShaderProgram program = program;
1617

1718
public void Update(IRendererBackend rendererBackend)
@@ -142,32 +143,22 @@ pair.Value is not SDLGPUVertexBuffer v ||
142143
}
143144
}
144145

145-
for (var i = 0; i < vertexUniformData.Count; i++)
146+
for (var i = 0; i < vertexUniformData.Length; i++)
146147
{
147148
var uniform = vertexUniformData[i];
148-
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
149149

150-
unsafe
151-
{
152-
fixed (void* ptr = span)
153-
{
154-
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
155-
}
156-
}
150+
var target = backend.frameAllocator.Get(uniform.position);
151+
152+
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, target, (uint)uniform.size);
157153
}
158154

159-
for (var i = 0; i < fragmentUniformData.Count; i++)
155+
for (var i = 0; i < fragmentUniformData.Length; i++)
160156
{
161157
var uniform = fragmentUniformData[i];
162-
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
163158

164-
unsafe
165-
{
166-
fixed (void* ptr = span)
167-
{
168-
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
169-
}
170-
}
159+
var target = backend.frameAllocator.Get(uniform.position);
160+
161+
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, target, (uint)uniform.size);
171162
}
172163

173164
SDL.DrawGPUIndexedPrimitives(renderPass, (uint)state.indexCount, (uint)(state.instanceCount > 1 ? state.instanceCount : 1),

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPURenderTransientCommand.cs

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
namespace Staple.Internal;
66

77
internal class SDLGPURenderTransientCommand(RenderState state, nint pipeline, Texture[] vertexTextures, Texture[] fragmentTextures,
8-
List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData, List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData,
8+
SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData, SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData,
99
SDLGPUShaderProgram program, SDLGPURendererBackend.TransientEntry entry) : IRenderCommand
1010
{
1111
public RenderState state = state.Clone();
1212
public nint pipeline = pipeline;
1313
public SDLGPURendererBackend.TransientEntry entry = entry;
1414
public Texture[] vertexTextures = (Texture[])vertexTextures?.Clone();
1515
public Texture[] fragmentTextures = (Texture[])fragmentTextures?.Clone();
16-
public List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData = vertexUniformData;
17-
public List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData = fragmentUniformData;
16+
public SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData = vertexUniformData;
17+
public SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData = fragmentUniformData;
1818
public SDLGPUShaderProgram program = program;
1919

2020
public void Update(IRendererBackend rendererBackend)
@@ -150,32 +150,22 @@ pair.Value is not SDLGPUVertexBuffer v ||
150150
}
151151
}
152152

153-
for (var i = 0; i < vertexUniformData.Count; i++)
153+
for (var i = 0; i < vertexUniformData.Length; i++)
154154
{
155155
var uniform = vertexUniformData[i];
156-
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
157156

158-
unsafe
159-
{
160-
fixed (void* ptr = span)
161-
{
162-
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
163-
}
164-
}
157+
var target = backend.frameAllocator.Get(uniform.position);
158+
159+
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, target, (uint)uniform.size);
165160
}
166161

167-
for (var i = 0; i < fragmentUniformData.Count; i++)
162+
for (var i = 0; i < fragmentUniformData.Length; i++)
168163
{
169164
var uniform = fragmentUniformData[i];
170-
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
171165

172-
unsafe
173-
{
174-
fixed (void* ptr = span)
175-
{
176-
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
177-
}
178-
}
166+
var target = backend.frameAllocator.Get(uniform.position);
167+
168+
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, target, (uint)uniform.size);
179169
}
180170

181171
SDL.DrawGPUIndexedPrimitives(renderPass, (uint)state.indexCount, (uint)(state.instanceCount > 1 ? state.instanceCount : 1),

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/Commands/SDLGPURenderTransientUIntCommand.cs

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
namespace Staple.Internal;
55

66
internal class SDLGPURenderTransientUIntCommand(RenderState state, nint pipeline, Texture[] vertexTextures, Texture[] fragmentTextures,
7-
List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData, List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData,
7+
SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData, SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData,
88
SDLGPUShaderProgram program, SDLGPURendererBackend.TransientEntry entry) : IRenderCommand
99
{
1010
public RenderState state = state.Clone();
1111
public nint pipeline = pipeline;
1212
public SDLGPURendererBackend.TransientEntry entry = entry;
1313
public Texture[] vertexTextures = (Texture[])vertexTextures?.Clone();
1414
public Texture[] fragmentTextures = (Texture[])fragmentTextures?.Clone();
15-
public List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData = vertexUniformData;
16-
public List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData = fragmentUniformData;
15+
public SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData = vertexUniformData;
16+
public SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData = fragmentUniformData;
1717
public SDLGPUShaderProgram program = program;
1818

1919
public void Update(IRendererBackend rendererBackend)
@@ -149,32 +149,22 @@ pair.Value is not SDLGPUVertexBuffer v ||
149149
}
150150
}
151151

152-
for (var i = 0; i < vertexUniformData.Count; i++)
152+
for (var i = 0; i < vertexUniformData.Length; i++)
153153
{
154154
var uniform = vertexUniformData[i];
155-
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
156155

157-
unsafe
158-
{
159-
fixed(void *ptr = span)
160-
{
161-
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
162-
}
163-
}
156+
var target = backend.frameAllocator.Get(uniform.position);
157+
158+
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, target, (uint)uniform.size);
164159
}
165160

166-
for (var i = 0; i < fragmentUniformData.Count; i++)
161+
for (var i = 0; i < fragmentUniformData.Length; i++)
167162
{
168163
var uniform = fragmentUniformData[i];
169-
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
170164

171-
unsafe
172-
{
173-
fixed (void* ptr = span)
174-
{
175-
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
176-
}
177-
}
165+
var target = backend.frameAllocator.Get(uniform.position);
166+
167+
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, target, (uint)uniform.size);
178168
}
179169

180170
SDL.DrawGPUIndexedPrimitives(renderPass, (uint)state.indexCount, (uint)(state.instanceCount > 1 ? state.instanceCount : 1),

0 commit comments

Comments
 (0)