blob: e8b07f31fc773b00f084f314433f2acef2d002b2 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 "icd_load.h"
#include <cstdint>
#include <cstdio>
#include <vector>
#include <gtest/gtest.h>
#include <vulkan/vulkan.h>
#include "src/lib/fxl/test/test_settings.h"
void IcdLoadTest::LoadIcd() {
// vkEnumerateInstanceExtensionProperties is the chosen entrypoint because
// it doesn't require an instance parameter.
uint32_t num_extensions = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &num_extensions, nullptr);
std::vector<VkExtensionProperties> extensions(num_extensions);
vkEnumerateInstanceExtensionProperties(nullptr, &num_extensions, extensions.data());
// The VCD must be loaded for VK_KHR_get_physical_device_properties2
// to be available.
const char* kRequiredExtension = "VK_KHR_get_physical_device_properties2";
bool found_extension = false;
for (const auto& extension : extensions) {
if (!strcmp(extension.extensionName, kRequiredExtension)) {
found_extension = true;
break;
}
}
EXPECT_TRUE(found_extension);
}
TEST(Vulkan, IcdLoad) {
IcdLoadTest test;
test.LoadIcd();
}
TEST(Vulkan, CreateInstance) {
VkInstanceCreateInfo info{.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO};
VkInstance instance;
ASSERT_EQ(VK_SUCCESS, vkCreateInstance(&info, nullptr, &instance));
VkPhysicalDevice device;
uint32_t physicalDeviceCount = 1;
VkResult result = vkEnumeratePhysicalDevices(instance, &physicalDeviceCount, &device);
EXPECT_TRUE(result == VK_SUCCESS || result == VK_INCOMPLETE) << result;
EXPECT_EQ(1u, physicalDeviceCount);
vkDestroyInstance(instance, nullptr);
}
int main(int argc, char** argv) {
if (!fxl::SetTestSettings(argc, argv)) {
return EXIT_FAILURE;
}
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}