Link interface blocks in ProgramImpl::link.
This allows the back-end to have access to the interface block info
in the link operation, and also allows the interface block info to
have direct access to the post-link Impl information.
BUG=angleproject:2208
Change-Id: Ib2bfb3c9155eee715bd3d29de1c3fdd67b16eed4
Reviewed-on: https://chromium-review.googlesource.com/753521
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/gl/ProgramGL.cpp b/src/libANGLE/renderer/gl/ProgramGL.cpp
index b1a0c3f..466f1fa 100644
--- a/src/libANGLE/renderer/gl/ProgramGL.cpp
+++ b/src/libANGLE/renderer/gl/ProgramGL.cpp
@@ -14,6 +14,7 @@
#include "common/string_utils.h"
#include "common/utilities.h"
#include "libANGLE/Context.h"
+#include "libANGLE/ProgramLinkedResources.h"
#include "libANGLE/Uniform.h"
#include "libANGLE/renderer/gl/ContextGL.h"
#include "libANGLE/renderer/gl/FunctionsGL.h"
@@ -212,6 +213,7 @@
mStateManager->forceUseProgram(mProgramID);
}
+ linkResources(resources);
postLink();
return true;
@@ -805,4 +807,35 @@
}
}
+void ProgramGL::linkResources(const gl::ProgramLinkedResources &resources)
+{
+ // Gather interface block info.
+ auto getUniformBlockSize = [this](const std::string &name, const std::string &mappedName,
+ size_t *sizeOut) {
+ return this->getUniformBlockSize(name, mappedName, sizeOut);
+ };
+
+ auto getUniformBlockMemberInfo = [this](const std::string &name, const std::string &mappedName,
+ sh::BlockMemberInfo *infoOut) {
+ return this->getUniformBlockMemberInfo(name, mappedName, infoOut);
+ };
+
+ resources.uniformBlockLinker.linkBlocks(getUniformBlockSize, getUniformBlockMemberInfo);
+
+ // TODO(jiajia.qin@intel.com): Determine correct shader storage block info.
+ auto getShaderStorageBlockSize = [](const std::string &name, const std::string &mappedName,
+ size_t *sizeOut) {
+ *sizeOut = 0;
+ return true;
+ };
+
+ auto getShaderStorageBlockMemberInfo =
+ [](const std::string &name, const std::string &mappedName, sh::BlockMemberInfo *infoOut) {
+ *infoOut = sh::BlockMemberInfo::getDefaultBlockInfo();
+ return true;
+ };
+ resources.shaderStorageBlockLinker.linkBlocks(getShaderStorageBlockSize,
+ getShaderStorageBlockMemberInfo);
+}
+
} // namespace rx