mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
OpenGL: change StreamBuffer in a streaming way
This is a bit slower on map_and_* because of flushing and _very_ much slower on buffer(sub)?data because of a new memcpy. But this design allow us to decode directly into a gpu buffer, eg vertexloader will profit :)
This commit is contained in:
@ -39,7 +39,7 @@ namespace OGL
|
||||
{
|
||||
//This are the initially requested size for the buffers expressed in bytes
|
||||
const u32 MAX_IBUFFER_SIZE = 2*1024*1024;
|
||||
const u32 MAX_VBUFFER_SIZE = 16*1024*1024;
|
||||
const u32 MAX_VBUFFER_SIZE = 32*1024*1024;
|
||||
|
||||
static StreamBuffer *s_vertexBuffer;
|
||||
static StreamBuffer *s_indexBuffer;
|
||||
@ -85,12 +85,14 @@ void VertexManager::PrepareDrawBuffers(u32 stride)
|
||||
u32 vertex_data_size = IndexGenerator::GetNumVerts() * stride;
|
||||
u32 index_data_size = IndexGenerator::GetIndexLen() * sizeof(u16);
|
||||
|
||||
s_vertexBuffer->Alloc(vertex_data_size, stride);
|
||||
size_t offset = s_vertexBuffer->Upload(GetVertexBuffer(), vertex_data_size);
|
||||
u8* buffer = s_vertexBuffer->Map(vertex_data_size, stride);
|
||||
memcpy(buffer, GetVertexBuffer(), vertex_data_size);
|
||||
size_t offset = s_vertexBuffer->Unmap(vertex_data_size);
|
||||
s_baseVertex = offset / stride;
|
||||
|
||||
s_indexBuffer->Alloc(index_data_size);
|
||||
s_index_offset = s_indexBuffer->Upload((u8*)GetIndexBuffer(), index_data_size);
|
||||
buffer = s_indexBuffer->Map(index_data_size);
|
||||
memcpy(buffer, GetIndexBuffer(), index_data_size);
|
||||
s_index_offset = s_indexBuffer->Unmap(index_data_size);
|
||||
|
||||
ADDSTAT(stats.thisFrame.bytesVertexStreamed, vertex_data_size);
|
||||
ADDSTAT(stats.thisFrame.bytesIndexStreamed, index_data_size);
|
||||
@ -234,4 +236,5 @@ void VertexManager::vFlush()
|
||||
GL_REPORT_ERRORD();
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
|
Reference in New Issue
Block a user