mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-03 14:09:33 +03:00
Load/Save ShaderVariableBuffer::memberIndexes in one memcpy
ShaderVariableBuffer::memberIndexes is std::vector<unsigned int>, and can be quite huge (164 on some programs in blade_and_soul_revolution). Right now it is calling readInt for individual index and then push_back. This causes vector to be copied as it grows size. This CL makes one memcpy for entire vector and increase size only once. Bug: b/275102061 Change-Id: I983ad289b126dbfd430cf94a3772c2bfd93cb1c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4775835 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
This commit is contained in:
committed by
Angle LUCI CQ
parent
745023ef84
commit
61a5707f86
@@ -451,9 +451,10 @@ void WriteShaderVariableBuffer(BinaryOutputStream *stream, const ShaderVariableB
|
||||
stream->writeInt(var.dataSize);
|
||||
|
||||
stream->writeInt(var.memberIndexes.size());
|
||||
for (unsigned int memberCounterIndex : var.memberIndexes)
|
||||
if (!var.memberIndexes.empty())
|
||||
{
|
||||
stream->writeInt(memberCounterIndex);
|
||||
stream->writeBytes(reinterpret_cast<const unsigned char *>(var.memberIndexes.data()),
|
||||
sizeof(*var.memberIndexes.data()) * var.memberIndexes.size());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -464,10 +465,13 @@ void LoadShaderVariableBuffer(BinaryInputStream *stream, ShaderVariableBuffer *v
|
||||
var->binding = stream->readInt<int>();
|
||||
var->dataSize = stream->readInt<unsigned int>();
|
||||
|
||||
ASSERT(var->memberIndexes.empty());
|
||||
size_t numMembers = stream->readInt<size_t>();
|
||||
for (size_t blockMemberIndex = 0; blockMemberIndex < numMembers; blockMemberIndex++)
|
||||
if (numMembers > 0)
|
||||
{
|
||||
var->memberIndexes.push_back(stream->readInt<unsigned int>());
|
||||
var->memberIndexes.resize(numMembers);
|
||||
stream->readBytes(reinterpret_cast<unsigned char *>(var->memberIndexes.data()),
|
||||
sizeof(unsigned int) * var->memberIndexes.size());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user