Commit 6d86a0fe by Shahbaz Youssefi Committed by Commit Bot

Fix mActiveImageShaderBits not updated in PPO's executable

Allows the backend to rely on this bitset always being valid, instead of working around the bug. Bug: angleproject:5587 Change-Id: I25e1304c0e5e34b5fc1677a819315574603ed034 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2658885 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
parent d5ca645e
......@@ -5005,6 +5005,7 @@ angle::Result Program::deserialize(const Context *context,
void Program::postResolveLink(const gl::Context *context)
{
mState.updateActiveSamplers();
mState.mExecutable->mActiveImageShaderBits.fill({});
mState.mExecutable->updateActiveImages(getExecutable());
setUniformValuesFromBindingQualifiers();
......
......@@ -433,7 +433,7 @@ void ProgramExecutable::updateActiveImages(const ProgramExecutable &executable)
}
else
{
mActiveImageShaderBits[imageUnit] = shaderBits;
mActiveImageShaderBits[imageUnit] |= shaderBits;
}
}
}
......
......@@ -293,6 +293,7 @@ void ProgramPipeline::updateImageBindings()
{
mState.mExecutable->mComputeImageBindings.clear();
mState.mExecutable->mGraphicsImageBindings.clear();
mState.mExecutable->mActiveImageShaderBits.fill({});
// Only copy the storage blocks from each Program in the PPO once, since each Program could
// contain multiple shader stages.
......@@ -310,6 +311,8 @@ void ProgramPipeline::updateImageBindings()
{
mState.mExecutable->mGraphicsImageBindings.emplace_back(imageBinding);
}
mState.mExecutable->updateActiveImages(shaderProgram->getExecutable());
}
}
......@@ -320,6 +323,10 @@ void ProgramPipeline::updateImageBindings()
{
mState.mExecutable->mComputeImageBindings.emplace_back(imageBinding);
}
mState.mExecutable->setIsCompute(true);
mState.mExecutable->updateActiveImages(computeProgram->getExecutable());
mState.mExecutable->setIsCompute(false);
}
}
......
......@@ -4254,23 +4254,7 @@ angle::Result ContextVk::updateActiveImages(const gl::Context *context,
// lingering staged updates in its staging buffer for unused texture mip levels or
// layers. Therefore we can't verify it has no staged updates right here.
gl::ShaderBitSet shaderStages = activeImageShaderBits[imageUnitIndex];
// TODO: PPOs don't initialize mActiveImageShaderBits. http://anglebug.com/5358
// Once that is fixed, the following if should be replaced with an assertion:
//
// ASSERT(shaderStages.any());
if (shaderStages.none())
{
if (executable->isCompute())
{
shaderStages.set(gl::ShaderType::Compute);
}
else
{
shaderStages.set();
shaderStages.reset(gl::ShaderType::Compute);
}
}
ASSERT(shaderStages.any());
// Special handling of texture buffers. They have a buffer attached instead of an image.
if (texture->getType() == gl::TextureType::Buffer)
......
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