diff --git a/BUILD.gn b/BUILD.gn index d526c62da..aef8e4143 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -456,7 +456,10 @@ angle_static_library("angle_gpu_info_util") { if (!is_chromeos && angle_has_build) { sources += libangle_gpu_info_util_vulkan_sources - deps += [ "$angle_vulkan_headers_dir:vulkan_headers" ] + deps += [ + "$angle_root/src/common/vulkan:angle_libvulkan_loader", + "$angle_vulkan_headers_dir:vulkan_headers", + ] defines += [ "ANGLE_HAS_VULKAN_SYSTEM_INFO" ] } diff --git a/samples/sample_util/SampleApplication.cpp b/samples/sample_util/SampleApplication.cpp index c409ee551..4fe441d67 100644 --- a/samples/sample_util/SampleApplication.cpp +++ b/samples/sample_util/SampleApplication.cpp @@ -129,7 +129,7 @@ SampleApplication::SampleApplication(std::string name, { mGLWindow = mEGLWindow = EGLWindow::New(glesMajorVersion, glesMinorVersion); mEntryPointsLib.reset( - angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ApplicationDir)); + angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ModuleDir)); } } diff --git a/scripts/code_generation_hashes/GL_EGL_entry_points.json b/scripts/code_generation_hashes/GL_EGL_entry_points.json index 6d812f0ee..700485c65 100644 --- a/scripts/code_generation_hashes/GL_EGL_entry_points.json +++ b/scripts/code_generation_hashes/GL_EGL_entry_points.json @@ -10,7 +10,7 @@ "scripts/entry_point_packed_gl_enums.json": "4f7b43863a5e61991bba4010db463679", "scripts/generate_entry_points.py": - "30efaf41a84593db7fc6f46d138be8b5", + "4e8e47a9d3435f8e34d790384612d4f7", "scripts/gl.xml": "4fcbd11300c8edcb3ed50826780cd57e", "scripts/gl_angle_ext.xml": @@ -98,7 +98,7 @@ "src/libANGLE/validationGL4_autogen.h": "db77968c46394c58896f085265182ffa", "src/libEGL/libEGL_autogen.cpp": - "01cc619c8493952c24f77ac4fa5d7d8a", + "7a1e13d8394f75591947f5ec23a17b66", "src/libEGL/libEGL_autogen.def": "3f504d6280dc1d847bc2dedc51fa2640", "src/libGL/entry_points_gl_1_autogen.cpp": diff --git a/scripts/generate_entry_points.py b/scripts/generate_entry_points.py index b56d2d929..e20375008 100755 --- a/scripts/generate_entry_points.py +++ b/scripts/generate_entry_points.py @@ -965,7 +965,7 @@ void EnsureEGLLoaded() } EntryPointsLib().reset( - angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ApplicationDir)); + angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ModuleDir)); angle::LoadEGL_EGL(GlobalLoad); if (!EGL_GetPlatformDisplay) { diff --git a/src/common/system_utils.h b/src/common/system_utils.h index 7b16af1c0..cbf9d35ba 100644 --- a/src/common/system_utils.h +++ b/src/common/system_utils.h @@ -59,6 +59,7 @@ class Library : angle::NonCopyable virtual ~Library() {} virtual void *getSymbol(const char *symbolName) = 0; virtual void *getNative() const = 0; + virtual std::string getPath() const = 0; template void getAs(const char *symbolName, FuncT *funcOut) @@ -71,8 +72,8 @@ class Library : angle::NonCopyable // (e.g. opengl32.dll) enum class SearchType { - // Try to find the library in the application directory - ApplicationDir, + // Try to find the library in the same directory as the current module + ModuleDir, // Load the library from the system directories SystemDir, // Get a reference to an already loaded shared library. diff --git a/src/common/system_utils_posix.cpp b/src/common/system_utils_posix.cpp index 2c30ab1ee..745cf399f 100644 --- a/src/common/system_utils_posix.cpp +++ b/src/common/system_utils_posix.cpp @@ -19,6 +19,21 @@ namespace angle { + +namespace +{ +std::string GetModulePath(void *moduleOrSymbol) +{ + Dl_info dlInfo; + if (dladdr(moduleOrSymbol, &dlInfo) == 0) + { + return ""; + } + + return dlInfo.dli_fname; +} +} // namespace + Optional GetCWD() { std::array pathBuf; @@ -60,12 +75,12 @@ std::string GetModuleDirectory() { std::string directory; static int placeholderSymbol = 0; - Dl_info dlInfo; - if (dladdr(&placeholderSymbol, &dlInfo) != 0) + std::string moduleName = GetModulePath(&placeholderSymbol); + if (!moduleName.empty()) { - std::string moduleName = dlInfo.dli_fname; - directory = moduleName.substr(0, moduleName.find_last_of('/') + 1); + directory = moduleName.substr(0, moduleName.find_last_of('/') + 1); } + // Ensure we return the full path to the module, not the relative path Optional cwd = GetCWD(); if (cwd.valid() && !IsFullPath(directory)) @@ -102,20 +117,30 @@ class PosixLibrary : public Library void *getNative() const override { return mModule; } + std::string getPath() const override + { + if (!mModule) + { + return ""; + } + + return GetModulePath(mModule); + } + private: void *mModule = nullptr; }; Library *OpenSharedLibrary(const char *libraryName, SearchType searchType) { - std::string nameWithExt = std::string(libraryName) + "." + GetSharedLibraryExtension(); - return OpenSharedLibraryWithExtension(nameWithExt.c_str(), searchType); + std::string libraryWithExtension = std::string(libraryName) + "." + GetSharedLibraryExtension(); + return OpenSharedLibraryWithExtension(libraryWithExtension.c_str(), searchType); } Library *OpenSharedLibraryWithExtension(const char *libraryName, SearchType searchType) { std::string directory; - if (searchType == SearchType::ApplicationDir) + if (searchType == SearchType::ModuleDir) { #if ANGLE_PLATFORM_IOS // On iOS, shared libraries must be loaded from within the app bundle. diff --git a/src/common/system_utils_win32.cpp b/src/common/system_utils_win32.cpp index d17435a95..555e7f1a7 100644 --- a/src/common/system_utils_win32.cpp +++ b/src/common/system_utils_win32.cpp @@ -44,9 +44,13 @@ class Win32Library : public Library { switch (searchType) { - case SearchType::ApplicationDir: - mModule = LoadLibraryA(libraryName); + case SearchType::ModuleDir: + { + std::string moduleRelativePath = ConcatenatePath(GetModuleDirectory(), libraryName); + mModule = LoadLibraryA(moduleRelativePath.c_str()); break; + } + case SearchType::SystemDir: mModule = LoadLibraryExA(libraryName, nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); break; @@ -77,6 +81,22 @@ class Win32Library : public Library void *getNative() const override { return reinterpret_cast(mModule); } + std::string getPath() const override + { + if (!mModule) + { + return ""; + } + + std::array buffer; + if (GetModuleFileNameA(mModule, buffer.data(), buffer.size()) == 0) + { + return ""; + } + + return std::string(buffer.data()); + } + private: HMODULE mModule = nullptr; }; diff --git a/src/common/system_utils_winuwp.cpp b/src/common/system_utils_winuwp.cpp index 4436587ac..229937967 100644 --- a/src/common/system_utils_winuwp.cpp +++ b/src/common/system_utils_winuwp.cpp @@ -40,7 +40,7 @@ class UwpLibrary : public Library switch (searchType) { - case SearchType::ApplicationDir: + case SearchType::ModuleDir: mModule = LoadPackagedLibrary(wideBuffer.c_str(), 0); break; case SearchType::SystemDir: @@ -70,6 +70,22 @@ class UwpLibrary : public Library void *getNative() const override { return reinterpret_cast(mModule); } + std::string getPath() const override + { + if (!mModule) + { + return ""; + } + + std::array buffer; + if (GetModuleFileNameA(mModule, buffer.data(), buffer.size()) == 0) + { + return ""; + } + + return std::string(buffer.data()); + } + private: HMODULE mModule = nullptr; }; @@ -81,7 +97,7 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType) if (ret > 0 && ret < MAX_PATH) { - return new UwpLibrary(buffer, searchType); + return OpenSharedLibraryWithExtension(buffer, searchType); } else { @@ -90,10 +106,8 @@ Library *OpenSharedLibrary(const char *libraryName, SearchType searchType) } } -Library *OpenSharedLibraryWithExtension(const char *libraryName) +Library *OpenSharedLibraryWithExtension(const char *libraryName, SearchType searchType) { - // SystemDir is not implemented in UWP. - fprintf(stderr, "Error loading shared library with extension.\n"); - return nullptr; + return new UwpLibrary(libraryName, searchType); } } // namespace angle diff --git a/src/common/vulkan/BUILD.gn b/src/common/vulkan/BUILD.gn index 4d119d2f2..03aa2fd11 100644 --- a/src/common/vulkan/BUILD.gn +++ b/src/common/vulkan/BUILD.gn @@ -5,8 +5,6 @@ import("//build_overrides/swiftshader.gni") import("../../../gni/angle.gni") -assert(angle_enable_vulkan) - declare_args() { angle_use_custom_libvulkan = !is_android && !is_fuchsia && !is_ggp } @@ -17,106 +15,117 @@ config("angle_libvulkan_config") { } } -group("angle_libvulkan") { +angle_source_set("angle_libvulkan_loader") { 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") { - if (angle_shared_libvulkan) { - defines = [ "ANGLE_SHARED_LIBVULKAN=1" ] - } -} - -angle_source_set("angle_vulkan_headers") { sources = [ - "vk_google_filtering_precision.h", - "vk_headers.h", + "libvulkan_loader.cpp", + "libvulkan_loader.h", ] - if (angle_shared_libvulkan) { - public_deps = [ "$angle_root/src/third_party/volk:volk" ] - } else { - public_deps = [ "$angle_vulkan_headers_dir:vulkan_headers" ] - } - public_configs = [ ":angle_vulkan_headers_config" ] + deps = [ "$angle_root:angle_common" ] } -group("angle_vulkan_entry_points") { - public_deps = [ ":angle_vulkan_headers" ] - if (is_fuchsia) { - public_deps += [ - "$angle_root/src/common/fuchsia_egl", - "//third_party/fuchsia-sdk/sdk/pkg/vulkan", - ] - if (!angle_use_vulkan_null_display) { - public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/vulkan_layers:VkLayer_image_pipe_swapchain" ] - } - } else if (!is_android && !is_ggp) { - if (angle_shared_libvulkan) { - data_deps = [ "$angle_vulkan_loader_dir:libvulkan" ] - } else { - deps = [ "$angle_vulkan_loader_dir:libvulkan" ] - } - } -} - -angle_source_set("vulkan") { - sources = [ - "vulkan_icd.cpp", - "vulkan_icd.h", - ] - - public_deps = [ - ":angle_libvulkan", - ":angle_vulkan_entry_points", - "$angle_root:angle_common", - ] - - configs += [ "$angle_root:angle_no_cfi_icall" ] - - defines = [ - "ANGLE_VK_LAYERS_DIR=\"$angle_data_dir\"", - "ANGLE_VK_MOCK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"", - ] - - deps = [] - data_deps = [] - - if (angle_enable_swiftshader) { - import("$swiftshader_dir/src/Vulkan/vulkan.gni") - _sws_icd = "./$swiftshader_icd_file_name" - if (is_win) { - _sws_icd = ".\\\\$swiftshader_icd_file_name" - } - - defines += [ "ANGLE_VK_SWIFTSHADER_ICD_JSON=\"${_sws_icd}\"" ] - - data_deps += [ - "$swiftshader_dir/src/Vulkan:icd_file", - "$swiftshader_dir/src/Vulkan:swiftshader_libvulkan", - ] - } -} - -if (angle_enable_vulkan_validation_layers) { - group("vulkan_validation_layers") { +if (angle_enable_vulkan) { + group("angle_libvulkan") { + public_configs = [ ":angle_libvulkan_config" ] data_deps = [] - if (is_fuchsia) { - data_deps += [ "//third_party/fuchsia-sdk:vulkan_validation" ] + 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") { + if (angle_shared_libvulkan) { + defines = [ "ANGLE_SHARED_LIBVULKAN=1" ] + } + } + + angle_source_set("angle_vulkan_headers") { + sources = [ + "vk_google_filtering_precision.h", + "vk_headers.h", + ] + if (angle_shared_libvulkan) { + public_deps = [ "$angle_root/src/third_party/volk:volk" ] } else { - data_deps += - [ "$angle_vulkan_validation_layers_dir:vulkan_validation_layers" ] - if (!is_android) { + public_deps = [ "$angle_vulkan_headers_dir:vulkan_headers" ] + } + public_configs = [ ":angle_vulkan_headers_config" ] + } + + group("angle_vulkan_entry_points") { + public_deps = [ ":angle_vulkan_headers" ] + if (is_fuchsia) { + public_deps += [ + "$angle_root/src/common/fuchsia_egl", + "//third_party/fuchsia-sdk/sdk/pkg/vulkan", + ] + if (!angle_use_vulkan_null_display) { + public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/vulkan_layers:VkLayer_image_pipe_swapchain" ] + } + } else if (!is_android && !is_ggp) { + if (angle_shared_libvulkan) { + data_deps = [ "$angle_vulkan_loader_dir:libvulkan" ] + } else { + deps = [ "$angle_vulkan_loader_dir:libvulkan" ] + } + } + } + + angle_source_set("vulkan") { + sources = [ + "vulkan_icd.cpp", + "vulkan_icd.h", + ] + + public_deps = [ + ":angle_libvulkan", + ":angle_vulkan_entry_points", + "$angle_root:angle_common", + ] + + configs += [ "$angle_root:angle_no_cfi_icall" ] + + defines = [ + "ANGLE_VK_LAYERS_DIR=\"$angle_data_dir\"", + "ANGLE_VK_MOCK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"", + ] + + deps = [] + data_deps = [] + + if (angle_enable_swiftshader) { + import("$swiftshader_dir/src/Vulkan/vulkan.gni") + _sws_icd = "./$swiftshader_icd_file_name" + if (is_win) { + _sws_icd = ".\\\\$swiftshader_icd_file_name" + } + + defines += [ "ANGLE_VK_SWIFTSHADER_ICD_JSON=\"${_sws_icd}\"" ] + + data_deps += [ + "$swiftshader_dir/src/Vulkan:icd_file", + "$swiftshader_dir/src/Vulkan:swiftshader_libvulkan", + ] + } + } + + if (angle_enable_vulkan_validation_layers) { + group("vulkan_validation_layers") { + data_deps = [] + if (is_fuchsia) { + data_deps += [ "//third_party/fuchsia-sdk:vulkan_validation" ] + } else { data_deps += - [ "$angle_vulkan_validation_layers_dir:vulkan_gen_json_files" ] + [ "$angle_vulkan_validation_layers_dir:vulkan_validation_layers" ] + if (!is_android) { + data_deps += + [ "$angle_vulkan_validation_layers_dir:vulkan_gen_json_files" ] + } } } } diff --git a/src/common/vulkan/libvulkan_loader.cpp b/src/common/vulkan/libvulkan_loader.cpp new file mode 100644 index 000000000..00b9bb79d --- /dev/null +++ b/src/common/vulkan/libvulkan_loader.cpp @@ -0,0 +1,58 @@ +// +// Copyright 2021 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// libvulkan_loader.cpp: +// Helper functions for the loading Vulkan libraries. +// + +#include "common/vulkan/libvulkan_loader.h" + +#include "common/system_utils.h" + +namespace angle +{ +namespace vk +{ +std::unique_ptr OpenLibVulkan() +{ + constexpr const char *kLibVulkanNames[] = { +#if defined(ANGLE_PLATFORM_WINDOWS) + "vulkan-1.dll", +#elif defined(ANGLE_PLATFORM_APPLE) + "libvulkan.dylib", + "libvulkan.1.dylib", + "libMoltenVK.dylib" +#else + "libvulkan.so", + "libvulkan.so.1", +#endif + }; + + constexpr SearchType kSearchTypes[] = { +// On Android, Fuchsia and GGP we use the system libvulkan. +#if defined(ANGLE_USE_CUSTOM_LIBVULKAN) + SearchType::ModuleDir, +#else + SearchType::SystemDir, +#endif // defined(ANGLE_USE_CUSTOM_LIBVULKAN) + }; + + for (angle::SearchType searchType : kSearchTypes) + { + for (const char *libraryName : kLibVulkanNames) + { + std::unique_ptr library( + OpenSharedLibraryWithExtension(libraryName, searchType)); + if (library && library->getNative()) + { + return library; + } + } + } + + return nullptr; +} +} // namespace vk +} // namespace angle diff --git a/src/common/vulkan/libvulkan_loader.h b/src/common/vulkan/libvulkan_loader.h new file mode 100644 index 000000000..dd8857abf --- /dev/null +++ b/src/common/vulkan/libvulkan_loader.h @@ -0,0 +1,25 @@ +// +// Copyright 2021 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// libvulkan_loader.h: +// Helper functions for the loading Vulkan libraries. +// + +#include + +#ifndef LIBANGLE_COMMON_VULKAN_LIBVULKAN_LOADER_H_ +# define LIBANGLE_COMMON_VULKAN_LIBVULKAN_LOADER_H_ + +namespace angle +{ +class Library; + +namespace vk +{ +std::unique_ptr OpenLibVulkan(); +} +} // namespace angle + +#endif // LIBANGLE_COMMON_VULKAN_LIBVULKAN_LOADER_H_ diff --git a/src/gpu_info_util/SystemInfo_vulkan.cpp b/src/gpu_info_util/SystemInfo_vulkan.cpp index 0f3d178ca..1b87606e6 100644 --- a/src/gpu_info_util/SystemInfo_vulkan.cpp +++ b/src/gpu_info_util/SystemInfo_vulkan.cpp @@ -16,22 +16,10 @@ #include "common/angleutils.h" #include "common/debug.h" #include "common/system_utils.h" - -#if defined(ANGLE_PLATFORM_WINDOWS) -const char *kLibVulkanNames[] = {"vulkan-1.dll"}; -#else -const char *kLibVulkanNames[] = {"libvulkan.so", "libvulkan.so.1"}; -#endif +#include "common/vulkan/libvulkan_loader.h" 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 { public: @@ -47,27 +35,11 @@ class VulkanLibrary final : NonCopyable pfnDestroyInstance(mInstance, nullptr); } } - SafeDelete(mLibVulkan); } VkInstance getVulkanInstance() { - for (const char *libraryName : kLibVulkanNames) - { - mLibVulkan = OpenSharedLibraryWithExtension(libraryName, kLibVulkanSearchType); - if (mLibVulkan) - { - if (mLibVulkan->getNative()) - { - break; - } - else - { - SafeDelete(mLibVulkan); - } - } - } - + mLibVulkan = vk::OpenLibVulkan(); if (!mLibVulkan) { // If Vulkan doesn't exist, bail-out early: @@ -123,8 +95,8 @@ class VulkanLibrary final : NonCopyable } private: - Library *mLibVulkan = nullptr; - VkInstance mInstance = VK_NULL_HANDLE; + std::unique_ptr mLibVulkan = nullptr; + VkInstance mInstance = VK_NULL_HANDLE; }; ANGLE_FORMAT_PRINTF(1, 2) diff --git a/src/libANGLE/renderer/vulkan/BUILD.gn b/src/libANGLE/renderer/vulkan/BUILD.gn index d60dd376a..b83f437e7 100644 --- a/src/libANGLE/renderer/vulkan/BUILD.gn +++ b/src/libANGLE/renderer/vulkan/BUILD.gn @@ -262,6 +262,7 @@ angle_source_set("angle_vulkan_backend") { "$angle_root:angle_glslang_wrapper", "$angle_root:libANGLE_headers", "$angle_root/src/common/vulkan", + "$angle_root/src/common/vulkan:angle_libvulkan_loader", "$angle_root/src/common/vulkan:angle_vulkan_entry_points", "$angle_root/src/common/vulkan:angle_vulkan_headers", ] diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp index c2aa7ccc2..5c1e9acf2 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.cpp +++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp @@ -17,6 +17,7 @@ #include "common/debug.h" #include "common/platform.h" #include "common/system_utils.h" +#include "common/vulkan/libvulkan_loader.h" #include "common/vulkan/vk_google_filtering_precision.h" #include "common/vulkan/vulkan_icd.h" #include "gpu_info_util/SystemInfo.h" @@ -843,6 +844,13 @@ angle::Result RendererVk::initialize(DisplayVk *displayVk, { bool canLoadDebugUtils = true; #if defined(ANGLE_SHARED_LIBVULKAN) + mLibVulkanLibrary = angle::vk::OpenLibVulkan(); + ANGLE_VK_CHECK(displayVk, mLibVulkanLibrary, VK_ERROR_INITIALIZATION_FAILED); + INFO() << "Using Vulkan loader: " << mLibVulkanLibrary->getPath(); + + PFN_vkGetInstanceProcAddr vulkanLoaderGetInstanceProcAddr = nullptr; + mLibVulkanLibrary->getAs("vkGetInstanceProcAddr", &vulkanLoaderGetInstanceProcAddr); + // Set all vk* function ptrs ANGLE_VK_TRY(displayVk, volkInitialize()); diff --git a/src/libANGLE/renderer/vulkan/RendererVk.h b/src/libANGLE/renderer/vulkan/RendererVk.h index 183ecdbfa..2dfc8c8ed 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.h +++ b/src/libANGLE/renderer/vulkan/RendererVk.h @@ -35,6 +35,11 @@ #include "libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h" #include "libANGLE/renderer/vulkan/vk_mem_alloc_wrapper.h" +namespace angle +{ +class Library; +} // namespace angle + namespace egl { class Display; @@ -414,6 +419,8 @@ class RendererVk : angle::NonCopyable egl::Display *mDisplay; + std::unique_ptr mLibVulkanLibrary; + mutable bool mCapsInitialized; mutable gl::Caps mNativeCaps; mutable gl::TextureCapsMap mNativeTextureCaps; diff --git a/src/libEGL/libEGL_autogen.cpp b/src/libEGL/libEGL_autogen.cpp index 85b3ab9db..6f8ec74ab 100644 --- a/src/libEGL/libEGL_autogen.cpp +++ b/src/libEGL/libEGL_autogen.cpp @@ -43,7 +43,7 @@ void EnsureEGLLoaded() } EntryPointsLib().reset( - angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ApplicationDir)); + angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ModuleDir)); angle::LoadEGL_EGL(GlobalLoad); if (!EGL_GetPlatformDisplay) { diff --git a/src/libOpenCL/dispatch.cpp b/src/libOpenCL/dispatch.cpp index d7586f0a1..d513ce353 100644 --- a/src/libOpenCL/dispatch.cpp +++ b/src/libOpenCL/dispatch.cpp @@ -37,7 +37,7 @@ IcdDispatch CreateDispatch() // Try to find ANGLE's GLESv2 library in the consistent way, which might fail // if the current library or a link to it is not in ANGLE's binary directory EntryPointsLib().reset( - angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ApplicationDir)); + angle::OpenSharedLibrary(ANGLE_GLESV2_LIBRARY_NAME, angle::SearchType::ModuleDir)); if (EntryPointsLib() && EntryPointsLib()->getNative() != nullptr) { EntryPointsLib()->getAs("gCLIcdDispatchTable", &clIcdDispatch); diff --git a/src/tests/angle_system_info_tests_main.cpp b/src/tests/angle_system_info_tests_main.cpp index 909a3e55e..ea1eb2935 100644 --- a/src/tests/angle_system_info_tests_main.cpp +++ b/src/tests/angle_system_info_tests_main.cpp @@ -42,6 +42,8 @@ namespace js = rapidjson; +bool gFailedToFindGPU; + int main(int argc, char **argv) { angle::SystemInfo info; @@ -81,6 +83,11 @@ int main(int argc, char **argv) angle::GetSystemInfo(&info); } + if (info.gpus.empty()) + { + gFailedToFindGPU = true; + } + js::Document doc; doc.SetObject(); @@ -145,4 +152,10 @@ int main(int argc, char **argv) return RUN_ALL_TESTS(); } -TEST(ANGLE, SystemInfo) {} \ No newline at end of file +TEST(ANGLE, SystemInfo) +{ + if (gFailedToFindGPU) + { + FAIL() << "Failed to find GPU info."; + } +} \ No newline at end of file diff --git a/src/tests/gl_tests/ProgramBinaryTest.cpp b/src/tests/gl_tests/ProgramBinaryTest.cpp index 0d3813544..4e8c71ff8 100644 --- a/src/tests/gl_tests/ProgramBinaryTest.cpp +++ b/src/tests/gl_tests/ProgramBinaryTest.cpp @@ -1174,7 +1174,7 @@ class ProgramBinariesAcrossPlatforms : public testing::TestWithParaminitialize("EGLMakeCurrent Test", 64, 64); mEGLLibrary.reset( - angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ApplicationDir)); + angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ModuleDir)); angle::LoadProc getProc = reinterpret_cast(mEGLLibrary->getSymbol("eglGetProcAddress")); diff --git a/src/tests/restricted_traces/restricted_trace_gold_tests.py b/src/tests/restricted_traces/restricted_trace_gold_tests.py index fcfaec0e0..54202dd1e 100755 --- a/src/tests/restricted_traces/restricted_trace_gold_tests.py +++ b/src/tests/restricted_traces/restricted_trace_gold_tests.py @@ -81,7 +81,7 @@ def temporary_dir(prefix=''): try: yield path finally: - logging.info("Removing temporary directory: %s" + path) + logging.info("Removing temporary directory: %s" % path) shutil.rmtree(path) diff --git a/src/tests/test_utils/ANGLETest.cpp b/src/tests/test_utils/ANGLETest.cpp index 5dabadeff..c92813690 100644 --- a/src/tests/test_utils/ANGLETest.cpp +++ b/src/tests/test_utils/ANGLETest.cpp @@ -1485,8 +1485,7 @@ Library *ANGLETestEnvironment::GetAngleEGLLibrary() #if defined(ANGLE_USE_UTIL_LOADER) if (!gAngleEGLLibrary) { - gAngleEGLLibrary.reset( - OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, SearchType::ApplicationDir)); + gAngleEGLLibrary.reset(OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, SearchType::ModuleDir)); } #endif // defined(ANGLE_USE_UTIL_LOADER) return gAngleEGLLibrary.get(); diff --git a/src/tests/test_utils/angle_test_instantiate.cpp b/src/tests/test_utils/angle_test_instantiate.cpp index f1703eba4..c65776b0f 100644 --- a/src/tests/test_utils/angle_test_instantiate.cpp +++ b/src/tests/test_utils/angle_test_instantiate.cpp @@ -44,7 +44,7 @@ bool IsAngleEGLConfigSupported(const PlatformParameters ¶m, OSWindow *osWind #if defined(ANGLE_USE_UTIL_LOADER) eglLibrary.reset( - angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ApplicationDir)); + angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ModuleDir)); #endif EGLWindow *eglWindow = EGLWindow::New(param.majorVersion, param.minorVersion); diff --git a/util/frame_capture_test_utils.h b/util/frame_capture_test_utils.h index 231fbbbdb..cc08adb39 100644 --- a/util/frame_capture_test_utils.h +++ b/util/frame_capture_test_utils.h @@ -76,7 +76,7 @@ class TraceLibrary traceNameStr << ".cr"; #endif // defined(ANGLE_PLATFORM_ANDROID) && defined(COMPONENT_BUILD) std::string traceName = traceNameStr.str(); - mTraceLibrary.reset(OpenSharedLibrary(traceName.c_str(), SearchType::ApplicationDir)); + mTraceLibrary.reset(OpenSharedLibrary(traceName.c_str(), SearchType::ModuleDir)); } bool valid() const { return mTraceLibrary != nullptr; }