Skip to content

Commit 04fa063

Browse files
[Rendering] Added frame memory allocator;
1 parent 7b680bb commit 04fa063

File tree

5 files changed

+176
-92
lines changed

5 files changed

+176
-92
lines changed

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

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

66
internal class SDLGPURenderCommand(RenderState state, nint pipeline, SDL.GPUTextureSamplerBinding[] vertexSamplers,
7-
SDL.GPUTextureSamplerBinding[] fragmentSamplers, SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData,
8-
SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData, SDLGPUShaderProgram program) : IRenderCommand
7+
SDL.GPUTextureSamplerBinding[] fragmentSamplers, List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData,
8+
List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData, SDLGPUShaderProgram program) : IRenderCommand
99
{
1010
public RenderState state = state;
1111
public nint pipeline = pipeline;
1212
public SDL.GPUTextureSamplerBinding[] vertexSamplers = vertexSamplers;
1313
public SDL.GPUTextureSamplerBinding[] fragmentSamplers = fragmentSamplers;
14-
public SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData = vertexUniformData;
15-
public SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData = fragmentUniformData;
14+
public List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData = vertexUniformData;
15+
public List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData = fragmentUniformData;
1616
public SDLGPUShaderProgram program = program;
1717

1818
public void Update(IRendererBackend rendererBackend)
@@ -108,28 +108,32 @@ buffer.Item2 is not SDLGPUVertexBuffer v ||
108108
}
109109
}
110110

111-
for (var i = 0; i < vertexUniformData.Length; i++)
111+
for (var i = 0; i < vertexUniformData.Count; i++)
112112
{
113113
var uniform = vertexUniformData[i];
114+
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
114115

115-
if(program.ShouldPushVertexUniform(uniform.binding, uniform.data) == false)
116+
unsafe
116117
{
117-
continue;
118+
fixed (void* ptr = span)
119+
{
120+
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
121+
}
118122
}
119-
120-
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, uniform.data, (uint)uniform.data.Length);
121123
}
122124

123-
for (var i = 0; i < fragmentUniformData.Length; i++)
125+
for (var i = 0; i < fragmentUniformData.Count; i++)
124126
{
125127
var uniform = fragmentUniformData[i];
128+
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
126129

127-
if (program.ShouldPushFragmentUniform(uniform.binding, uniform.data) == false)
130+
unsafe
128131
{
129-
continue;
132+
fixed (void* ptr = span)
133+
{
134+
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
135+
}
130136
}
131-
132-
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, uniform.data, (uint)uniform.data.Length);
133137
}
134138

135139
SDL.DrawGPUIndexedPrimitives(renderPass, (uint)state.indexCount, 1, (uint)state.startIndex, state.startVertex, 0);

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

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ namespace Staple.Internal;
66

77
internal class SDLGPURenderTransientCommand(RenderState state, nint pipeline,
88
SDL.GPUTextureSamplerBinding[] vertexSamplers, SDL.GPUTextureSamplerBinding[] fragmentSamplers,
9-
SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData, SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData,
9+
List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData, List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData,
1010
SDLGPUShaderProgram program, SDLGPURendererBackend.TransientEntry entry) : IRenderCommand
1111
{
1212
public RenderState state = state;
1313
public nint pipeline = pipeline;
1414
public SDL.GPUTextureSamplerBinding[] vertexSamplers = vertexSamplers;
1515
public SDL.GPUTextureSamplerBinding[] fragmentSamplers = fragmentSamplers;
1616
public SDLGPURendererBackend.TransientEntry entry = entry;
17-
public SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData = vertexUniformData;
18-
public SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData = fragmentUniformData;
17+
public List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData = vertexUniformData;
18+
public List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData = fragmentUniformData;
1919
public SDLGPUShaderProgram program = program;
2020

2121
public void Update(IRendererBackend rendererBackend)
@@ -116,28 +116,32 @@ buffer.Item2 is not SDLGPUVertexBuffer v ||
116116
}
117117
}
118118

119-
for (var i = 0; i < vertexUniformData.Length; i++)
119+
for (var i = 0; i < vertexUniformData.Count; i++)
120120
{
121121
var uniform = vertexUniformData[i];
122+
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
122123

123-
if (program.ShouldPushVertexUniform(uniform.binding, uniform.data) == false)
124+
unsafe
124125
{
125-
continue;
126+
fixed (void* ptr = span)
127+
{
128+
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
129+
}
126130
}
127-
128-
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, uniform.data, (uint)uniform.data.Length);
129131
}
130132

131-
for (var i = 0; i < fragmentUniformData.Length; i++)
133+
for (var i = 0; i < fragmentUniformData.Count; i++)
132134
{
133135
var uniform = fragmentUniformData[i];
136+
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
134137

135-
if (program.ShouldPushFragmentUniform(uniform.binding, uniform.data) == false)
138+
unsafe
136139
{
137-
continue;
140+
fixed (void* ptr = span)
141+
{
142+
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
143+
}
138144
}
139-
140-
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, uniform.data, (uint)uniform.data.Length);
141145
}
142146

143147
SDL.DrawGPUIndexedPrimitives(renderPass, (uint)state.indexCount, 1, (uint)state.startIndex, state.startVertex, 0);

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

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

66
internal class SDLGPURenderTransientUIntCommand(RenderState state, nint pipeline,
77
SDL.GPUTextureSamplerBinding[] vertexSamplers, SDL.GPUTextureSamplerBinding[] fragmentSamplers,
8-
SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData, SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData,
8+
List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData, List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData,
99
SDLGPUShaderProgram program, SDLGPURendererBackend.TransientEntry entry) : IRenderCommand
1010
{
1111
public RenderState state = state;
1212
public nint pipeline = pipeline;
1313
public SDL.GPUTextureSamplerBinding[] vertexSamplers = vertexSamplers;
1414
public SDL.GPUTextureSamplerBinding[] fragmentSamplers = fragmentSamplers;
1515
public SDLGPURendererBackend.TransientEntry entry = entry;
16-
public SDLGPURendererBackend.StapleShaderUniform[] vertexUniformData = vertexUniformData;
17-
public SDLGPURendererBackend.StapleShaderUniform[] fragmentUniformData = fragmentUniformData;
16+
public List<SDLGPURendererBackend.StapleShaderUniform> vertexUniformData = vertexUniformData;
17+
public List<SDLGPURendererBackend.StapleShaderUniform> fragmentUniformData = fragmentUniformData;
1818
public SDLGPUShaderProgram program = program;
1919

2020
public void Update(IRendererBackend rendererBackend)
@@ -115,28 +115,32 @@ buffer.Item2 is not SDLGPUVertexBuffer v ||
115115
}
116116
}
117117

118-
for (var i = 0; i < vertexUniformData.Length; i++)
118+
for (var i = 0; i < vertexUniformData.Count; i++)
119119
{
120120
var uniform = vertexUniformData[i];
121+
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
121122

122-
if (program.ShouldPushVertexUniform(uniform.binding, uniform.data) == false)
123+
unsafe
123124
{
124-
continue;
125+
fixed(void *ptr = span)
126+
{
127+
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
128+
}
125129
}
126-
127-
SDL.PushGPUVertexUniformData(backend.commandBuffer, uniform.binding, uniform.data, (uint)uniform.data.Length);
128130
}
129131

130-
for (var i = 0; i < fragmentUniformData.Length; i++)
132+
for (var i = 0; i < fragmentUniformData.Count; i++)
131133
{
132134
var uniform = fragmentUniformData[i];
135+
var span = backend.frameAllocator.Get(uniform.position, uniform.size);
133136

134-
if (program.ShouldPushFragmentUniform(uniform.binding, uniform.data) == false)
137+
unsafe
135138
{
136-
continue;
139+
fixed (void* ptr = span)
140+
{
141+
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, (nint)ptr, (uint)uniform.size);
142+
}
137143
}
138-
139-
SDL.PushGPUFragmentUniformData(backend.commandBuffer, uniform.binding, uniform.data, (uint)uniform.data.Length);
140144
}
141145

142146
SDL.DrawGPUIndexedPrimitives(renderPass, (uint)state.indexCount, 1, (uint)state.startIndex, state.startVertex, 0);

0 commit comments

Comments
 (0)