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,
}
// 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);
mTimer.reset(CreateTimer());
......
......@@ -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.
bool IsDebuggerAttached();
......
......@@ -248,7 +248,7 @@ class PosixLibrary : public Library
void *mModule = nullptr;
};
Library *OpenSharedLibrary(const char *libraryName)
Library *OpenSharedLibrary(const char *libraryName, SearchType searchType)
{
return new PosixLibrary(libraryName);
}
......
......@@ -245,13 +245,21 @@ bool RunApp(const std::vector<const char *> &args,
class Win32Library : public Library
{
public:
Win32Library(const char *libraryName)
Win32Library(const char *libraryName, SearchType searchType)
{
char buffer[MAX_PATH];
int ret = snprintf(buffer, MAX_PATH, "%s.%s", libraryName, GetSharedLibraryExtension());
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
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)
......
......@@ -33,7 +33,8 @@ void EnsureEGLLoaded()
if (gLoaded)
return;
gEntryPointsLib.reset(angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME));
gEntryPointsLib.reset(
angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ApplicationDir));
angle::LoadEGL_EGL(GlobalLoad);
if (!EGL_GetPlatformDisplay)
{
......
......@@ -731,7 +731,8 @@ class ProgramBinariesAcrossPlatforms : public testing::TestWithParam<PlatformsWi
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)
......
......@@ -364,7 +364,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams
{
case angle::GLESDriverType::AngleEGL:
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;
case angle::GLESDriverType::SystemEGL:
std::cerr << "Not implemented." << std::endl;
......@@ -373,7 +374,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name, const RenderTestParams
case angle::GLESDriverType::SystemWGL:
#if defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS)
mGLWindow = WGLWindow::New(testParams.majorVersion, testParams.minorVersion);
mEntryPointsLib.reset(angle::OpenSharedLibrary("opengl32"));
mEntryPointsLib.reset(
angle::OpenSharedLibrary("opengl32", angle::SearchType::ApplicationDir));
#else
std::cout << "WGL driver not available. Skipping test." << std::endl;
mSkipTest = true;
......
......@@ -63,7 +63,8 @@ EGLMakeCurrentPerfTest::EGLMakeCurrentPerfTest()
mOSWindow = OSWindow::New();
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 =
reinterpret_cast<angle::LoadProc>(mEGLLibrary->getSymbol("eglGetProcAddress"));
......
......@@ -1340,7 +1340,7 @@ Library *ANGLETestEnvironment::GetEGLLibrary()
#if defined(ANGLE_USE_UTIL_LOADER)
if (!gEGLLibrary)
{
gEGLLibrary.reset(OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME));
gEGLLibrary.reset(OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, SearchType::ApplicationDir));
}
#endif // defined(ANGLE_USE_UTIL_LOADER)
return gEGLLibrary.get();
......@@ -1351,7 +1351,7 @@ Library *ANGLETestEnvironment::GetWGLLibrary()
#if defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS)
if (!gWGLLibrary)
{
gWGLLibrary.reset(OpenSharedLibrary("opengl32"));
gWGLLibrary.reset(OpenSharedLibrary("opengl32", SearchType::SystemDir));
}
#endif // defined(ANGLE_USE_UTIL_LOADER) && defined(ANGLE_PLATFORM_WINDOWS)
return gWGLLibrary.get();
......
......@@ -33,7 +33,8 @@ bool IsANGLEConfigSupported(const PlatformParameters &param, OSWindow *osWindow)
std::unique_ptr<angle::Library> eglLibrary;
#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
EGLWindow *eglWindow = EGLWindow::New(param.majorVersion, param.minorVersion);
......@@ -48,7 +49,8 @@ bool IsANGLEConfigSupported(const PlatformParameters &param, OSWindow *osWindow)
bool IsWGLConfigSupported(const PlatformParameters &param, OSWindow *osWindow)
{
#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);
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