Load texture storage extension entry points in RendererGL.
BUG=angleproject:884
Change-Id: Iaef596337f9c4d781fb93f517c8f605d119136fb
Reviewed-on: https://chromium-review.googlesource.com/266599
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/272746
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/FunctionsGL.cpp b/src/libANGLE/renderer/gl/FunctionsGL.cpp
index 536572e..a06274d 100644
--- a/src/libANGLE/renderer/gl/FunctionsGL.cpp
+++ b/src/libANGLE/renderer/gl/FunctionsGL.cpp
@@ -65,12 +65,21 @@
}
template <typename T>
-static void AssignGLExtensionEntryPoint(const std::vector<std::string> &extensions, const std::string &extension, void *function, T *outFunction)
+static void AssignGLExtensionEntryPoint(const std::vector<std::string> &extensions, const char *requiredExtensionString,
+ void *function, T *outFunction)
{
- if (std::find(extensions.begin(), extensions.end(), extension) != extensions.end())
+ std::vector<std::string> requiredExtensions;
+ angle::SplitStringAlongWhitespace(requiredExtensionString, &requiredExtensions);
+ for (const std::string& requiredExtension : requiredExtensions)
{
- *outFunction = reinterpret_cast<T>(function);
+ if (std::find(extensions.begin(), extensions.end(), requiredExtension) == extensions.end())
+ {
+ *outFunction = nullptr;
+ return;
+ }
}
+
+ *outFunction = reinterpret_cast<T>(function);
}
FunctionsGL::FunctionsGL()
@@ -887,6 +896,13 @@
AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glGetFenceivNV"), &getFenceivNV);
AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glFinishFenceNV"), &finishFenceNV);
AssignGLExtensionEntryPoint(extensions, "GL_NV_fence", loadProcAddress("glSetFenceNV"), &setFenceNV);
+
+ AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage", loadProcAddress("glTexStorage1DEXT"), &texStorage1D);
+ AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage", loadProcAddress("glTexStorage2DEXT"), &texStorage2D);
+ AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_texture3D", loadProcAddress("glTexStorage3DEXT"), &texStorage3D);
+ AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_direct_state_access", loadProcAddress("glTextureStorage1DEXT"), &textureStorage1D);
+ AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_direct_state_access", loadProcAddress("glTextureStorage2DEXT"), &textureStorage2D);
+ AssignGLExtensionEntryPoint(extensions, "GL_EXT_texture_storage GL_EXT_direct_state_access GL_EXT_texture3D", loadProcAddress("glTextureStorage3DEXT"), &textureStorage3D);
}
// 1.3