| // Copyright 2020 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| #include "base/command_line.h" |
| #include "base/files/file_path.h" |
| #include "base/native_library.h" |
| #include "base/path_service.h" |
| #include "build/build_config.h" |
| #include "gpu/vulkan/vulkan_cxx.h" |
| #include "gpu/vulkan/vulkan_function_pointers.h" |
| |
| namespace gpu { |
| |
| class VulkanCXXTest : public testing::Test { |
| public: |
| VulkanCXXTest() = default; |
| ~VulkanCXXTest() override = default; |
| |
| void SetUp() override { |
| use_swiftshader_ = |
| base::CommandLine::ForCurrentProcess()->HasSwitch("use-swiftshader"); |
| base::FilePath path; |
| #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) || \ |
| BUILDFLAG(IS_FUCHSIA) |
| if (use_swiftshader_) { |
| #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) |
| EXPECT_TRUE(base::PathService::Get(base::DIR_MODULE, &path)); |
| path = path.Append("libvk_swiftshader.so"); |
| #else |
| return; |
| #endif |
| } else { |
| path = base::FilePath("libvulkan.so.1"); |
| } |
| #elif BUILDFLAG(IS_WIN) |
| if (use_swiftshader_) { |
| EXPECT_TRUE(base::PathService::Get(base::DIR_MODULE, &path)); |
| path = path.Append(L"vk_swiftshader.dll"); |
| } else { |
| path = base::FilePath(L"vulkan-1.dll"); |
| } |
| #else |
| #error "Not supported platform" |
| #endif |
| |
| auto* vulkan_function_pointers = GetVulkanFunctionPointers(); |
| base::NativeLibraryLoadError native_library_load_error; |
| vulkan_function_pointers->vulkan_loader_library = |
| base::LoadNativeLibrary(path, &native_library_load_error); |
| EXPECT_TRUE(vulkan_function_pointers->vulkan_loader_library); |
| } |
| |
| void TearDown() override { |
| auto* vulkan_function_pointers = GetVulkanFunctionPointers(); |
| base::UnloadNativeLibrary(vulkan_function_pointers->vulkan_loader_library); |
| } |
| |
| private: |
| bool use_swiftshader_ = false; |
| }; |
| |
| TEST_F(VulkanCXXTest, CreateInstanceUnique) { |
| auto* vulkan_function_pointers = GetVulkanFunctionPointers(); |
| EXPECT_TRUE(vulkan_function_pointers->BindUnassociatedFunctionPointers()); |
| |
| auto [result, api_version] = vk::enumerateInstanceVersion(); |
| EXPECT_EQ(result, vk::Result::eSuccess); |
| EXPECT_GE(api_version, kVulkanRequiredApiVersion); |
| |
| vk::ApplicationInfo app_info("VulkanCXXTest", 0, nullptr, 0, |
| kVulkanRequiredApiVersion); |
| vk::InstanceCreateInfo instance_create_info({}, &app_info); |
| auto result_value = vk::createInstanceUnique(instance_create_info); |
| EXPECT_EQ(result_value.result, vk::Result::eSuccess); |
| |
| vk::UniqueInstance instance = std::move(result_value.value); |
| EXPECT_TRUE(instance); |
| |
| EXPECT_TRUE(vulkan_function_pointers->BindInstanceFunctionPointers( |
| instance.get(), kVulkanRequiredApiVersion, gfx::ExtensionSet())); |
| |
| instance.reset(); |
| } |
| |
| } // namespace gpu |