Commit 51937ab3 by Jamie Madill Committed by Angle LUCI CQ

Re-land "Add SearchType to OpenSharedLibraryWithExtension."

This fixes a bug in SystemInfo_vulkan where we were using the System search path for the Vulkan loader when we prefer using the custom ANGLE loader. Re-land fixes a bug where we would try to load the custom libVulkan on Android and other platforms where we should be using the system version. Bug: chromium:1219969 Change-Id: I34b592fb87cbddfd02c837a17942cac54c85d9d1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3007265Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent cfaaf2ab
...@@ -120,8 +120,8 @@ SampleApplication::SampleApplication(std::string name, ...@@ -120,8 +120,8 @@ SampleApplication::SampleApplication(std::string name,
mDriverType = angle::GLESDriverType::SystemWGL; mDriverType = angle::GLESDriverType::SystemWGL;
#else #else
mGLWindow = EGLWindow::New(glesMajorVersion, glesMinorVersion); mGLWindow = EGLWindow::New(glesMajorVersion, glesMinorVersion);
mEntryPointsLib.reset( mEntryPointsLib.reset(angle::OpenSharedLibraryWithExtension(
angle::OpenSharedLibraryWithExtension(angle::GetNativeEGLLibraryNameWithExtension())); angle::GetNativeEGLLibraryNameWithExtension(), angle::SearchType::SystemDir));
mDriverType = angle::GLESDriverType::SystemEGL; mDriverType = angle::GLESDriverType::SystemEGL;
#endif // defined(ANGLE_PLATFORM_WINDOWS) #endif // defined(ANGLE_PLATFORM_WINDOWS)
} }
......
...@@ -79,7 +79,7 @@ enum class SearchType ...@@ -79,7 +79,7 @@ enum class SearchType
}; };
Library *OpenSharedLibrary(const char *libraryName, SearchType searchType); Library *OpenSharedLibrary(const char *libraryName, SearchType searchType);
Library *OpenSharedLibraryWithExtension(const char *libraryName); Library *OpenSharedLibraryWithExtension(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();
......
...@@ -108,6 +108,12 @@ class PosixLibrary : public Library ...@@ -108,6 +108,12 @@ class PosixLibrary : public Library
Library *OpenSharedLibrary(const char *libraryName, SearchType searchType) Library *OpenSharedLibrary(const char *libraryName, SearchType searchType)
{ {
std::string nameWithExt = std::string(libraryName) + "." + GetSharedLibraryExtension();
return OpenSharedLibraryWithExtension(nameWithExt.c_str(), searchType);
}
Library *OpenSharedLibraryWithExtension(const char *libraryName, SearchType searchType)
{
std::string directory; std::string directory;
if (searchType == SearchType::ApplicationDir) if (searchType == SearchType::ApplicationDir)
{ {
...@@ -125,7 +131,7 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType) ...@@ -125,7 +131,7 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType)
extraFlags = RTLD_NOLOAD; extraFlags = RTLD_NOLOAD;
} }
std::string fullPath = directory + libraryName + "." + GetSharedLibraryExtension(); std::string fullPath = directory + libraryName;
#if ANGLE_PLATFORM_IOS #if ANGLE_PLATFORM_IOS
// On iOS, dlopen needs a suffix on the framework name to work. // On iOS, dlopen needs a suffix on the framework name to work.
fullPath = fullPath + "/" + libraryName; fullPath = fullPath + "/" + libraryName;
...@@ -133,11 +139,6 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType) ...@@ -133,11 +139,6 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType)
return new PosixLibrary(fullPath, extraFlags); return new PosixLibrary(fullPath, extraFlags);
} }
Library *OpenSharedLibraryWithExtension(const char *libraryName)
{
return new PosixLibrary(libraryName, 0);
}
bool IsDirectory(const char *filename) bool IsDirectory(const char *filename)
{ {
struct stat st; struct stat st;
......
...@@ -96,8 +96,8 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType) ...@@ -96,8 +96,8 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType)
} }
} }
Library *OpenSharedLibraryWithExtension(const char *libraryName) Library *OpenSharedLibraryWithExtension(const char *libraryName, SearchType searchType)
{ {
return new Win32Library(libraryName, SearchType::SystemDir); return new Win32Library(libraryName, searchType);
} }
} // namespace angle } // namespace angle
...@@ -7,6 +7,29 @@ import("../../../gni/angle.gni") ...@@ -7,6 +7,29 @@ import("../../../gni/angle.gni")
assert(angle_enable_vulkan) assert(angle_enable_vulkan)
declare_args() {
angle_use_custom_libvulkan = !is_android && !is_fuchsia && !is_ggp
}
config("angle_libvulkan_config") {
if (angle_use_custom_libvulkan) {
defines = [ "ANGLE_USE_CUSTOM_LIBVULKAN" ]
}
}
group("angle_libvulkan") {
public_configs = [ ":angle_libvulkan_config" ]
data_deps = []
if (angle_use_custom_libvulkan) {
if (angle_shared_libvulkan) {
data_deps += [ "$angle_vulkan_loader_dir:libvulkan" ]
} else {
public_deps = [ "$angle_vulkan_loader_dir:libvulkan" ]
}
data_deps += [ "$angle_vulkan_tools_dir:VkICD_mock_icd" ]
}
}
config("angle_vulkan_headers_config") { config("angle_vulkan_headers_config") {
if (angle_shared_libvulkan) { if (angle_shared_libvulkan) {
defines = [ "ANGLE_SHARED_LIBVULKAN=1" ] defines = [ "ANGLE_SHARED_LIBVULKAN=1" ]
...@@ -50,6 +73,7 @@ angle_source_set("vulkan") { ...@@ -50,6 +73,7 @@ angle_source_set("vulkan") {
] ]
public_deps = [ public_deps = [
":angle_libvulkan",
":angle_vulkan_entry_points", ":angle_vulkan_entry_points",
"$angle_root:angle_common", "$angle_root:angle_common",
] ]
...@@ -64,15 +88,6 @@ angle_source_set("vulkan") { ...@@ -64,15 +88,6 @@ angle_source_set("vulkan") {
deps = [] deps = []
data_deps = [] data_deps = []
if (!is_android && !is_fuchsia && !is_ggp) {
if (angle_shared_libvulkan) {
data_deps += [ "$angle_vulkan_loader_dir:libvulkan" ]
} else {
deps += [ "$angle_vulkan_loader_dir:libvulkan" ]
}
data_deps += [ "$angle_vulkan_tools_dir:VkICD_mock_icd" ]
}
if (angle_enable_swiftshader) { if (angle_enable_swiftshader) {
import("$swiftshader_dir/src/Vulkan/vulkan.gni") import("$swiftshader_dir/src/Vulkan/vulkan.gni")
_sws_icd = "./$swiftshader_icd_file_name" _sws_icd = "./$swiftshader_icd_file_name"
......
...@@ -20,11 +20,18 @@ ...@@ -20,11 +20,18 @@
#if defined(ANGLE_PLATFORM_WINDOWS) #if defined(ANGLE_PLATFORM_WINDOWS)
const char *kLibVulkanNames[] = {"vulkan-1.dll"}; const char *kLibVulkanNames[] = {"vulkan-1.dll"};
#else #else
const char *kLibVulkanNames[] = {"libvulkan.so", "libvulkan.so.1"}; const char *kLibVulkanNames[] = {"libvulkan.so", "libvulkan.so.1"};
#endif #endif
namespace angle namespace angle
{ {
// On Android, Fuchsia and GGP we use the system libvulkan.
#if defined(ANGLE_USE_CUSTOM_LIBVULKAN)
constexpr SearchType kLibVulkanSearchType = SearchType::ApplicationDir;
#else
constexpr SearchType kLibVulkanSearchType = SearchType::SystemDir;
#endif // defined(ANGLE_USE_CUSTOM_LIBVULKAN)
class VulkanLibrary final : NonCopyable class VulkanLibrary final : NonCopyable
{ {
public: public:
...@@ -47,7 +54,7 @@ class VulkanLibrary final : NonCopyable ...@@ -47,7 +54,7 @@ class VulkanLibrary final : NonCopyable
{ {
for (const char *libraryName : kLibVulkanNames) for (const char *libraryName : kLibVulkanNames)
{ {
mLibVulkan = OpenSharedLibraryWithExtension(libraryName); mLibVulkan = OpenSharedLibraryWithExtension(libraryName, kLibVulkanSearchType);
if (mLibVulkan) if (mLibVulkan)
{ {
if (mLibVulkan->getNative()) if (mLibVulkan->getNative())
......
...@@ -605,8 +605,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name, ...@@ -605,8 +605,8 @@ ANGLERenderTest::ANGLERenderTest(const std::string &name,
case angle::GLESDriverType::SystemEGL: case angle::GLESDriverType::SystemEGL:
#if defined(ANGLE_USE_UTIL_LOADER) && !defined(ANGLE_PLATFORM_WINDOWS) #if defined(ANGLE_USE_UTIL_LOADER) && !defined(ANGLE_PLATFORM_WINDOWS)
mGLWindow = EGLWindow::New(testParams.majorVersion, testParams.minorVersion); mGLWindow = EGLWindow::New(testParams.majorVersion, testParams.minorVersion);
mEntryPointsLib.reset( mEntryPointsLib.reset(angle::OpenSharedLibraryWithExtension(
angle::OpenSharedLibraryWithExtension(GetNativeEGLLibraryNameWithExtension())); GetNativeEGLLibraryNameWithExtension(), SearchType::SystemDir));
#else #else
std::cerr << "Not implemented." << std::endl; std::cerr << "Not implemented." << std::endl;
mSkipTest = true; mSkipTest = true;
......
...@@ -1487,8 +1487,8 @@ Library *ANGLETestEnvironment::GetSystemEGLLibrary() ...@@ -1487,8 +1487,8 @@ Library *ANGLETestEnvironment::GetSystemEGLLibrary()
#if defined(ANGLE_USE_UTIL_LOADER) #if defined(ANGLE_USE_UTIL_LOADER)
if (!gSystemEGLLibrary) if (!gSystemEGLLibrary)
{ {
gSystemEGLLibrary.reset( gSystemEGLLibrary.reset(OpenSharedLibraryWithExtension(
OpenSharedLibraryWithExtension(GetNativeEGLLibraryNameWithExtension())); GetNativeEGLLibraryNameWithExtension(), SearchType::SystemDir));
} }
#endif // defined(ANGLE_USE_UTIL_LOADER) #endif // defined(ANGLE_USE_UTIL_LOADER)
return gSystemEGLLibrary.get(); return gSystemEGLLibrary.get();
......
...@@ -81,7 +81,8 @@ bool IsSystemEGLConfigSupported(const PlatformParameters &param, OSWindow *osWin ...@@ -81,7 +81,8 @@ bool IsSystemEGLConfigSupported(const PlatformParameters &param, OSWindow *osWin
#if defined(ANGLE_USE_UTIL_LOADER) #if defined(ANGLE_USE_UTIL_LOADER)
std::unique_ptr<angle::Library> eglLibrary; std::unique_ptr<angle::Library> eglLibrary;
eglLibrary.reset(OpenSharedLibraryWithExtension(GetNativeEGLLibraryNameWithExtension())); eglLibrary.reset(OpenSharedLibraryWithExtension(GetNativeEGLLibraryNameWithExtension(),
SearchType::SystemDir));
EGLWindow *eglWindow = EGLWindow::New(param.majorVersion, param.minorVersion); EGLWindow *eglWindow = EGLWindow::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