Commit a71a8c66 by Clemen Deng Committed by Commit Bot

ANGLE tests loading wrong opengl32.dll

ANGLE tests try to load opengl32.dll from ANGLE directory instead of system Bug: angleproject:3645 Change-Id: I3a8cea37252d13e915ff54ae6bbac920db16e4c4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1688544 Commit-Queue: Clemen Deng <clemendeng@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent c5898044
...@@ -64,7 +64,8 @@ SampleApplication::SampleApplication(std::string name, ...@@ -64,7 +64,8 @@ SampleApplication::SampleApplication(std::string name,
} }
// Load EGL library so we can initialize the display. // Load EGL library so we can initialize the display.
mEntryPointsLib.reset(angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME)); mEntryPointsLib.reset(
angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ApplicationDir));
mEGLWindow = EGLWindow::New(glesMajorVersion, glesMinorVersion); mEGLWindow = EGLWindow::New(glesMajorVersion, glesMinorVersion);
mTimer.reset(CreateTimer()); mTimer.reset(CreateTimer());
......
...@@ -51,7 +51,15 @@ class Library : angle::NonCopyable ...@@ -51,7 +51,15 @@ class Library : angle::NonCopyable
} }
}; };
Library *OpenSharedLibrary(const char *libraryName); // Use SYSTEM_DIR to bypass loading ANGLE libraries with the same name as system DLLS
// (e.g. opengl32.dll)
enum class SearchType
{
ApplicationDir,
SystemDir
};
Library *OpenSharedLibrary(const char *libraryName, SearchType searchType);
// Returns true if the process is currently being debugged. // Returns true if the process is currently being debugged.
bool IsDebuggerAttached(); bool IsDebuggerAttached();
......
...@@ -248,7 +248,7 @@ class PosixLibrary : public Library ...@@ -248,7 +248,7 @@ class PosixLibrary : public Library
void *mModule = nullptr; void *mModule = nullptr;
}; };
Library *OpenSharedLibrary(const char *libraryName) Library *OpenSharedLibrary(const char *libraryName, SearchType searchType)
{ {
return new PosixLibrary(libraryName); return new PosixLibrary(libraryName);
} }
......
...@@ -245,13 +245,21 @@ bool RunApp(const std::vector<const char *> &args, ...@@ -245,13 +245,21 @@ bool RunApp(const std::vector<const char *> &args,
class Win32Library : public Library class Win32Library : public Library
{ {
public: public:
Win32Library(const char *libraryName) Win32Library(const char *libraryName, SearchType searchType)
{ {
char buffer[MAX_PATH]; char buffer[MAX_PATH];
int ret = snprintf(buffer, MAX_PATH, "%s.%s", libraryName, GetSharedLibraryExtension()); int ret = snprintf(buffer, MAX_PATH, "%s.%s", libraryName, GetSharedLibraryExtension());
if (ret > 0 && ret < MAX_PATH) if (ret > 0 && ret < MAX_PATH)
{ {
mModule = LoadLibraryA(buffer); switch (searchType)
{
case SearchType::ApplicationDir:
mModule = LoadLibraryA(buffer);
break;
case SearchType::SystemDir:
mModule = LoadLibraryExA(buffer, nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
break;
}
} }
} }
...@@ -279,9 +287,9 @@ class Win32Library : public Library ...@@ -279,9 +287,9 @@ class Win32Library : public Library
HMODULE mModule = nullptr; HMODULE mModule = nullptr;
}; };
Library *OpenSharedLibrary(const char *libraryName) Library *OpenSharedLibrary(const char *libraryName, SearchType searchType)
{ {
return new Win32Library(libraryName); return new Win32Library(libraryName, searchType);
} }
bool IsDirectory(const char *filename) bool IsDirectory(const char *filename)
......
...@@ -33,7 +33,8 @@ void EnsureEGLLoaded() ...@@ -33,7 +33,8 @@ void EnsureEGLLoaded()
if (gLoaded) if (gLoaded)
return; return;
gEntryPointsLib.reset(angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME)); gEntryPointsLib.reset(
angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ApplicationDir));
angle::LoadEGL_EGL(GlobalLoad); angle::LoadEGL_EGL(GlobalLoad);
if (!EGL_GetPlatformDisplay) if (!EGL_GetPlatformDisplay)
{ {
......
...@@ -731,7 +731,8 @@ class ProgramBinariesAcrossPlatforms : public testing::TestWithParam<PlatformsWi ...@@ -731,7 +731,8 @@ class ProgramBinariesAcrossPlatforms : public testing::TestWithParam<PlatformsWi
FAIL() << "Failed to create OS window"; FAIL() << "Failed to create OS window";
} }
mEntryPointsLib.reset(angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME)); mEntryPointsLib.reset(
angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ApplicationDir));
} }
EGLWindow *createAndInitEGLWindow(angle::PlatformParameters &param) EGLWindow *createAndInitEGLWindow(angle::PlatformParameters &param)
......
...@@ -364,7 +364,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams ...@@ -364,7 +364,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams
{ {
case angle::GLESDriverType::AngleEGL: case angle::GLESDriverType::AngleEGL:
mGLWindow = EGLWindow::New(testParams.majorVersion, testParams.minorVersion); mGLWindow = EGLWindow::New(testParams.majorVersion, testParams.minorVersion);
mEntryPointsLib.reset(angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME)); mEntryPointsLib.reset(angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME,
angle::SearchType::ApplicationDir));
break; break;
case angle::GLESDriverType::SystemEGL: case angle::GLESDriverType::SystemEGL:
std::cerr << "Not implemented." << std::endl; std::cerr << "Not implemented." << std::endl;
...@@ -373,7 +374,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams ...@@ -373,7 +374,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams
case angle::GLESDriverType::SystemWGL: case angle::GLESDriverType::SystemWGL:
#if defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS) #if defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS)
mGLWindow = WGLWindow::New(testParams.majorVersion, testParams.minorVersion); mGLWindow = WGLWindow::New(testParams.majorVersion, testParams.minorVersion);
mEntryPointsLib.reset(angle::OpenSharedLibrary("opengl32")); mEntryPointsLib.reset(
angle::OpenSharedLibrary("opengl32", angle::SearchType::ApplicationDir));
#else #else
std::cout << "WGL driver not available. Skipping test." << std::endl; std::cout << "WGL driver not available. Skipping test." << std::endl;
mSkipTest = true; mSkipTest = true;
......
...@@ -63,7 +63,8 @@ EGLMakeCurrentPerfTest::EGLMakeCurrentPerfTest() ...@@ -63,7 +63,8 @@ EGLMakeCurrentPerfTest::EGLMakeCurrentPerfTest()
mOSWindow = OSWindow::New(); mOSWindow = OSWindow::New();
mOSWindow->initialize("EGLMakeCurrent Test", 64, 64); mOSWindow->initialize("EGLMakeCurrent Test", 64, 64);
mEGLLibrary.reset(angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME)); mEGLLibrary.reset(
angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ApplicationDir));
angle::LoadProc getProc = angle::LoadProc getProc =
reinterpret_cast<angle::LoadProc>(mEGLLibrary->getSymbol("eglGetProcAddress")); reinterpret_cast<angle::LoadProc>(mEGLLibrary->getSymbol("eglGetProcAddress"));
......
...@@ -1340,7 +1340,7 @@ Library *ANGLETestEnvironment::GetEGLLibrary() ...@@ -1340,7 +1340,7 @@ Library *ANGLETestEnvironment::GetEGLLibrary()
#if defined(ANGLE_USE_UTIL_LOADER) #if defined(ANGLE_USE_UTIL_LOADER)
if (!gEGLLibrary) if (!gEGLLibrary)
{ {
gEGLLibrary.reset(OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME)); gEGLLibrary.reset(OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, SearchType::ApplicationDir));
} }
#endif // defined(ANGLE_USE_UTIL_LOADER) #endif // defined(ANGLE_USE_UTIL_LOADER)
return gEGLLibrary.get(); return gEGLLibrary.get();
...@@ -1351,7 +1351,7 @@ Library *ANGLETestEnvironment::GetWGLLibrary() ...@@ -1351,7 +1351,7 @@ Library *ANGLETestEnvironment::GetWGLLibrary()
#if defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS) #if defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS)
if (!gWGLLibrary) if (!gWGLLibrary)
{ {
gWGLLibrary.reset(OpenSharedLibrary("opengl32")); gWGLLibrary.reset(OpenSharedLibrary("opengl32", SearchType::SystemDir));
} }
#endif // defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS) #endif // defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS)
return gWGLLibrary.get(); return gWGLLibrary.get();
......
...@@ -33,7 +33,8 @@ bool IsANGLEConfigSupported(const PlatformParameters &param, OSWindow *osWindow) ...@@ -33,7 +33,8 @@ bool IsANGLEConfigSupported(const PlatformParameters &param, OSWindow *osWindow)
std::unique_ptr<angle::Library> eglLibrary; std::unique_ptr<angle::Library> eglLibrary;
#if defined(ANGLE_USE_UTIL_LOADER) #if defined(ANGLE_USE_UTIL_LOADER)
eglLibrary.reset(angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME)); eglLibrary.reset(
angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ApplicationDir));
#endif #endif
EGLWindow *eglWindow = EGLWindow::New(param.majorVersion, param.minorVersion); EGLWindow *eglWindow = EGLWindow::New(param.majorVersion, param.minorVersion);
...@@ -48,7 +49,8 @@ bool IsANGLEConfigSupported(const PlatformParameters &param, OSWindow *osWindow) ...@@ -48,7 +49,8 @@ bool IsANGLEConfigSupported(const PlatformParameters &param, OSWindow *osWindow)
bool IsWGLConfigSupported(const PlatformParameters &param, OSWindow *osWindow) bool IsWGLConfigSupported(const PlatformParameters &param, OSWindow *osWindow)
{ {
#if defined(ANGLE_PLATFORM_WINDOWS) && defined(ANGLE_USE_UTIL_LOADER) #if defined(ANGLE_PLATFORM_WINDOWS) && defined(ANGLE_USE_UTIL_LOADER)
std::unique_ptr<angle::Library> openglLibrary(angle::OpenSharedLibrary("opengl32")); std::unique_ptr<angle::Library> openglLibrary(
angle::OpenSharedLibrary("opengl32", angle::SearchType::SystemDir));
WGLWindow *wglWindow = WGLWindow::New(param.majorVersion, param.minorVersion); WGLWindow *wglWindow = WGLWindow::New(param.majorVersion, param.minorVersion);
ConfigParameters configParams; ConfigParameters configParams;
......
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