Commit 2a43f43a by Jamie Madill Committed by Commit Bot

Revert "Save/Load missing members"

This reverts commit b2e76cf5. Reason for revert: Causing MSan failures on Linux. See bug. Bug: chromium:1191344 Original change's description: > Save/Load missing members > > There are several class/struct members that are missing when a program > is serialized/deserialized. This leads to errors when attempting to link > programs that have been deserialized. For example, when drawing with a > PPO that contains programs which were created with glProgramBinary(). > > This CL adds saving/loading the missing members. > > Bug: b/182409935 > Change-Id: I637c6cd8c174acd6da8d51433893323a32e5d7c0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2770683 > Commit-Queue: Tim Van Patten <timvp@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Cody Northrop <cnorthrop@google.com> Bug: b/182409935 Change-Id: I1209257ed6bb55ba2d01d92bd3305d5e3ad6ee28 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2780015Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 572fd801
...@@ -935,66 +935,49 @@ void WriteShaderVar(BinaryOutputStream *stream, const sh::ShaderVariable &var) ...@@ -935,66 +935,49 @@ void WriteShaderVar(BinaryOutputStream *stream, const sh::ShaderVariable &var)
stream->writeIntVector(var.arraySizes); stream->writeIntVector(var.arraySizes);
stream->writeBool(var.staticUse); stream->writeBool(var.staticUse);
stream->writeBool(var.active); stream->writeBool(var.active);
stream->writeInt<size_t>(var.fields.size()); stream->writeInt(var.binding);
for (const sh::ShaderVariable &shaderVariable : var.fields)
{
WriteShaderVar(stream, shaderVariable);
}
stream->writeString(var.structOrBlockName); stream->writeString(var.structOrBlockName);
stream->writeString(var.mappedStructOrBlockName); stream->writeString(var.mappedStructOrBlockName);
stream->writeBool(var.isRowMajorLayout); stream->writeInt(var.hasParentArrayIndex() ? var.parentArrayIndex() : -1);
stream->writeInt(var.location);
stream->writeBool(var.hasImplicitLocation);
stream->writeInt(var.binding);
stream->writeInt(var.imageUnitFormat); stream->writeInt(var.imageUnitFormat);
stream->writeInt(var.offset); stream->writeInt(var.offset);
stream->writeBool(var.readonly); stream->writeBool(var.readonly);
stream->writeBool(var.writeonly); stream->writeBool(var.writeonly);
stream->writeBool(var.isFragmentInOut); stream->writeBool(var.isFragmentInOut);
stream->writeInt(var.index); if (var.isFragmentInOut)
stream->writeBool(var.yuv); {
stream->writeEnum(var.interpolation); stream->writeInt(var.location);
stream->writeBool(var.isInvariant); }
stream->writeBool(var.isShaderIOBlock);
stream->writeBool(var.isPatch);
stream->writeBool(var.texelFetchStaticUse); stream->writeBool(var.texelFetchStaticUse);
stream->writeInt(var.getFlattenedOffsetInParentArrays());
ASSERT(var.fields.empty());
} }
void LoadShaderVar(gl::BinaryInputStream *stream, sh::ShaderVariable *var) void LoadShaderVar(BinaryInputStream *stream, sh::ShaderVariable *var)
{ {
var->type = stream->readInt<GLenum>(); var->type = stream->readInt<GLenum>();
var->precision = stream->readInt<GLenum>(); var->precision = stream->readInt<GLenum>();
stream->readString(&var->name); var->name = stream->readString();
stream->readString(&var->mappedName); var->mappedName = stream->readString();
stream->readIntVector<unsigned int>(&var->arraySizes); stream->readIntVector<unsigned int>(&var->arraySizes);
var->staticUse = stream->readBool(); var->staticUse = stream->readBool();
var->active = stream->readBool(); var->active = stream->readBool();
size_t elementCount = stream->readInt<size_t>(); var->binding = stream->readInt<int>();
var->fields.resize(elementCount); var->structOrBlockName = stream->readString();
for (sh::ShaderVariable &variable : var->fields) var->mappedStructOrBlockName = stream->readString();
{
LoadShaderVar(stream, &variable);
}
stream->readString(&var->structOrBlockName);
stream->readString(&var->mappedStructOrBlockName);
var->isRowMajorLayout = stream->readBool();
var->location = stream->readInt<int>();
var->hasImplicitLocation = stream->readBool();
var->binding = stream->readInt<int>();
var->imageUnitFormat = stream->readInt<GLenum>();
var->offset = stream->readInt<int>();
var->readonly = stream->readBool();
var->writeonly = stream->readBool();
var->isFragmentInOut = stream->readBool();
var->index = stream->readInt<int>();
var->yuv = stream->readBool();
var->interpolation = stream->readEnum<sh::InterpolationType>();
var->isInvariant = stream->readBool();
var->isShaderIOBlock = stream->readBool();
var->isPatch = stream->readBool();
var->texelFetchStaticUse = stream->readBool();
var->setParentArrayIndex(stream->readInt<int>()); var->setParentArrayIndex(stream->readInt<int>());
var->imageUnitFormat = stream->readInt<GLenum>();
var->offset = stream->readInt<int>();
var->readonly = stream->readBool();
var->writeonly = stream->readBool();
var->isFragmentInOut = stream->readBool();
if (var->isFragmentInOut)
{
var->location = stream->readInt<int>();
}
var->texelFetchStaticUse = stream->readBool();
} }
// VariableLocation implementation. // VariableLocation implementation.
...@@ -4690,8 +4673,6 @@ angle::Result Program::serialize(const Context *context, angle::MemoryBuffer *bi ...@@ -4690,8 +4673,6 @@ angle::Result Program::serialize(const Context *context, angle::MemoryBuffer *bi
stream.writeInt(mState.getAtomicCounterUniformRange().low()); stream.writeInt(mState.getAtomicCounterUniformRange().low());
stream.writeInt(mState.getAtomicCounterUniformRange().high()); stream.writeInt(mState.getAtomicCounterUniformRange().high());
stream.writeBool(mState.mSeparable);
mProgram->save(context, &stream); mProgram->save(context, &stream);
ASSERT(binaryOut); ASSERT(binaryOut);
...@@ -4777,8 +4758,6 @@ angle::Result Program::deserialize(const Context *context, ...@@ -4777,8 +4758,6 @@ angle::Result Program::deserialize(const Context *context,
unsigned int atomicCounterRangeHigh = stream.readInt<unsigned int>(); unsigned int atomicCounterRangeHigh = stream.readInt<unsigned int>();
mState.mAtomicCounterUniformRange = RangeUI(atomicCounterRangeLow, atomicCounterRangeHigh); mState.mAtomicCounterUniformRange = RangeUI(atomicCounterRangeLow, atomicCounterRangeHigh);
mState.mSeparable = stream.readBool();
static_assert(static_cast<unsigned long>(ShaderType::EnumCount) <= sizeof(unsigned long) * 8, static_assert(static_cast<unsigned long>(ShaderType::EnumCount) <= sizeof(unsigned long) * 8,
"Too many shader types"); "Too many shader types");
......
...@@ -414,35 +414,6 @@ void ProgramExecutable::load(gl::BinaryInputStream *stream) ...@@ -414,35 +414,6 @@ void ProgramExecutable::load(gl::BinaryInputStream *stream)
mGraphicsImageBindings.emplace_back(imageBinding); mGraphicsImageBindings.emplace_back(imageBinding);
} }
} }
for (ShaderType shaderType : mLinkedGraphicsShaderStages)
{
mLinkedOutputVaryings[shaderType].resize(stream->readInt<size_t>());
for (sh::ShaderVariable &variable : mLinkedOutputVaryings[shaderType])
{
LoadShaderVar(stream, &variable);
}
mLinkedInputVaryings[shaderType].resize(stream->readInt<size_t>());
for (sh::ShaderVariable &variable : mLinkedInputVaryings[shaderType])
{
LoadShaderVar(stream, &variable);
}
mLinkedShaderVersions[shaderType] = stream->readInt<int>();
}
for (ShaderType shaderType : mLinkedComputeShaderStages)
{
mLinkedOutputVaryings[shaderType].resize(stream->readInt<size_t>());
for (sh::ShaderVariable &variable : mLinkedOutputVaryings[shaderType])
{
LoadShaderVar(stream, &variable);
}
mLinkedInputVaryings[shaderType].resize(stream->readInt<size_t>());
for (sh::ShaderVariable &variable : mLinkedInputVaryings[shaderType])
{
LoadShaderVar(stream, &variable);
}
mLinkedShaderVersions[shaderType] = stream->readInt<int>();
}
} }
void ProgramExecutable::save(gl::BinaryOutputStream *stream) const void ProgramExecutable::save(gl::BinaryOutputStream *stream) const
...@@ -496,6 +467,8 @@ void ProgramExecutable::save(gl::BinaryOutputStream *stream) const ...@@ -496,6 +467,8 @@ void ProgramExecutable::save(gl::BinaryOutputStream *stream) const
{ {
WriteShaderVar(stream, uniform); WriteShaderVar(stream, uniform);
// FIXME: referenced
stream->writeInt(uniform.bufferIndex); stream->writeInt(uniform.bufferIndex);
WriteBlockMemberInfo(stream, uniform.blockInfo); WriteBlockMemberInfo(stream, uniform.blockInfo);
...@@ -590,35 +563,6 @@ void ProgramExecutable::save(gl::BinaryOutputStream *stream) const ...@@ -590,35 +563,6 @@ void ProgramExecutable::save(gl::BinaryOutputStream *stream) const
stream->writeInt(imageBinding.boundImageUnits[i]); stream->writeInt(imageBinding.boundImageUnits[i]);
} }
} }
for (ShaderType shaderType : mLinkedGraphicsShaderStages)
{
stream->writeInt(mLinkedOutputVaryings[shaderType].size());
for (const sh::ShaderVariable &shaderVariable : mLinkedOutputVaryings[shaderType])
{
WriteShaderVar(stream, shaderVariable);
}
stream->writeInt(mLinkedInputVaryings[shaderType].size());
for (const sh::ShaderVariable &shaderVariable : mLinkedInputVaryings[shaderType])
{
WriteShaderVar(stream, shaderVariable);
}
stream->writeInt(mLinkedShaderVersions[shaderType]);
}
for (ShaderType shaderType : mLinkedComputeShaderStages)
{
stream->writeInt(mLinkedOutputVaryings[shaderType].size());
for (const sh::ShaderVariable &shaderVariable : mLinkedOutputVaryings[shaderType])
{
WriteShaderVar(stream, shaderVariable);
}
stream->writeInt(mLinkedInputVaryings[shaderType].size());
for (const sh::ShaderVariable &shaderVariable : mLinkedInputVaryings[shaderType])
{
WriteShaderVar(stream, shaderVariable);
}
stream->writeInt(mLinkedShaderVersions[shaderType]);
}
} }
int ProgramExecutable::getInfoLogLength() const int ProgramExecutable::getInfoLogLength() const
......
...@@ -282,7 +282,6 @@ std::unique_ptr<rx::LinkEvent> ProgramExecutableVk::load(gl::BinaryInputStream * ...@@ -282,7 +282,6 @@ std::unique_ptr<rx::LinkEvent> ProgramExecutableVk::load(gl::BinaryInputStream *
info.binding = stream->readInt<uint32_t>(); info.binding = stream->readInt<uint32_t>();
info.location = stream->readInt<uint32_t>(); info.location = stream->readInt<uint32_t>();
info.component = stream->readInt<uint32_t>(); info.component = stream->readInt<uint32_t>();
info.index = stream->readInt<uint32_t>();
// PackedEnumBitSet uses uint8_t // PackedEnumBitSet uses uint8_t
info.activeStages = gl::ShaderBitSet(stream->readInt<uint8_t>()); info.activeStages = gl::ShaderBitSet(stream->readInt<uint8_t>());
LoadShaderInterfaceVariableXfbInfo(stream, &info.xfb); LoadShaderInterfaceVariableXfbInfo(stream, &info.xfb);
...@@ -317,7 +316,6 @@ void ProgramExecutableVk::save(gl::BinaryOutputStream *stream) ...@@ -317,7 +316,6 @@ void ProgramExecutableVk::save(gl::BinaryOutputStream *stream)
stream->writeInt(info.binding); stream->writeInt(info.binding);
stream->writeInt(info.location); stream->writeInt(info.location);
stream->writeInt(info.component); stream->writeInt(info.component);
stream->writeInt(info.index);
// PackedEnumBitSet uses uint8_t // PackedEnumBitSet uses uint8_t
stream->writeInt(info.activeStages.bits()); stream->writeInt(info.activeStages.bits());
SaveShaderInterfaceVariableXfbInfo(info.xfb, stream); SaveShaderInterfaceVariableXfbInfo(info.xfb, stream);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment