From 67e3a1d8ebe4e44ba9e0c41802f2af68c0c4c825 Mon Sep 17 00:00:00 2001 From: Samuliak Date: Tue, 2 Jul 2024 15:27:50 +0200 Subject: [PATCH] create a buffer when there are too many vertices --- src/core/renderer_mtl/renderer_mtl.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/renderer_mtl/renderer_mtl.cpp b/src/core/renderer_mtl/renderer_mtl.cpp index 2ca06d6a..93b821c1 100644 --- a/src/core/renderer_mtl/renderer_mtl.cpp +++ b/src/core/renderer_mtl/renderer_mtl.cpp @@ -206,7 +206,14 @@ void RendererMTL::drawVertices(PICA::PrimType primType, std::spanrenderCommandEncoder(renderPassDescriptor); renderCommandEncoder->setRenderPipelineState(drawPipeline); - renderCommandEncoder->setVertexBytes(vertices.data(), vertices.size_bytes(), VERTEX_BUFFER_BINDING_INDEX); + // If size is < 4KB, use inline vertex data, otherwise use a buffer + if (vertices.size_bytes() < 4 * 1024) { + renderCommandEncoder->setVertexBytes(vertices.data(), vertices.size_bytes(), VERTEX_BUFFER_BINDING_INDEX); + } else { + // TODO: cache this buffer + MTL::Buffer* vertexBuffer = device->newBuffer(vertices.data(), vertices.size_bytes(), MTL::ResourceStorageModeShared); + renderCommandEncoder->setVertexBuffer(vertexBuffer, 0, VERTEX_BUFFER_BINDING_INDEX); + } // Bind resources setupTextureEnvState(renderCommandEncoder);