ES31: Add support for bindImageTexture on GL backend
This patch refers to https://chromium-review.googlesource.com/c/380636/
BUG=angleproject:1987
Change-Id: If621eed6ecaa7298214843a2a133801ca1487b03
Reviewed-on: https://chromium-review.googlesource.com/462088
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/MemoryProgramCache.cpp b/src/libANGLE/MemoryProgramCache.cpp
index 7853a00..a7c6dc1 100644
--- a/src/libANGLE/MemoryProgramCache.cpp
+++ b/src/libANGLE/MemoryProgramCache.cpp
@@ -198,10 +198,9 @@
"All bits of DrawBufferMask can be contained in an uint32_t");
state->mActiveOutputVariables = stream.readInt<uint32_t>();
- unsigned int low = stream.readInt<unsigned int>();
- unsigned int high = stream.readInt<unsigned int>();
- state->mSamplerUniformRange = RangeUI(low, high);
-
+ unsigned int samplerRangeLow = stream.readInt<unsigned int>();
+ unsigned int samplerRangeHigh = stream.readInt<unsigned int>();
+ state->mSamplerUniformRange = RangeUI(samplerRangeLow, samplerRangeHigh);
unsigned int samplerCount = stream.readInt<unsigned int>();
for (unsigned int samplerIndex = 0; samplerIndex < samplerCount; ++samplerIndex)
{
@@ -210,6 +209,17 @@
state->mSamplerBindings.emplace_back(SamplerBinding(textureType, bindingCount));
}
+ unsigned int imageRangeLow = stream.readInt<unsigned int>();
+ unsigned int imageRangeHigh = stream.readInt<unsigned int>();
+ state->mImageUniformRange = RangeUI(imageRangeLow, imageRangeHigh);
+ unsigned int imageCount = stream.readInt<unsigned int>();
+ for (unsigned int imageIndex = 0; imageIndex < imageCount; ++imageIndex)
+ {
+ GLuint boundImageUnit = stream.readInt<unsigned int>();
+ size_t elementCount = stream.readInt<size_t>();
+ state->mImageBindings.emplace_back(ImageBinding(boundImageUnit, elementCount));
+ }
+
return program->getImplementation()->load(context, infoLog, &stream);
}
@@ -343,6 +353,16 @@
stream.writeInt(samplerBinding.boundTextureUnits.size());
}
+ stream.writeInt(state.getImageUniformRange().low());
+ stream.writeInt(state.getImageUniformRange().high());
+
+ stream.writeInt(state.getImageBindings().size());
+ for (const auto &imageBinding : state.getImageBindings())
+ {
+ stream.writeInt(imageBinding.boundImageUnit);
+ stream.writeInt(imageBinding.elementCount);
+ }
+
program->getImplementation()->save(&stream);
ASSERT(binaryOut);