1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/*
* Copyright (c) 2015-2023 The Khronos Group Inc.
* Copyright (c) 2015-2024 Valve Corporation
* Copyright (c) 2015-2024 LunarG, Inc.
* Copyright (c) 2015-2023 Google, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
#include "../framework/layer_validation_tests.h"
class PositiveInstance : public VkLayerTest {};
TEST_F(PositiveInstance, TwoInstances) {
TEST_DESCRIPTION("Create two instances before destroy");
RETURN_IF_SKIP(InitFramework());
if (IsPlatformMockICD()) {
GTEST_SKIP() << "Test not supported by MockICD";
}
VkInstance i1, i2, i3;
VkInstanceCreateInfo ici = vku::InitStructHelper();
ici.enabledLayerCount = instance_layers_.size();
ici.ppEnabledLayerNames = instance_layers_.data();
ASSERT_EQ(VK_SUCCESS, vk::CreateInstance(&ici, nullptr, &i1));
ASSERT_EQ(VK_SUCCESS, vk::CreateInstance(&ici, nullptr, &i2));
ASSERT_NO_FATAL_FAILURE(vk::DestroyInstance(i2, nullptr));
ASSERT_EQ(VK_SUCCESS, vk::CreateInstance(&ici, nullptr, &i3));
ASSERT_NO_FATAL_FAILURE(vk::DestroyInstance(i3, nullptr));
ASSERT_NO_FATAL_FAILURE(vk::DestroyInstance(i1, nullptr));
}
TEST_F(PositiveInstance, ValidationInstanceExtensions) {
std::string layer_name = "VK_LAYER_KHRONOS_validation";
std::vector<std::string> extensions = {VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
VK_EXT_LAYER_SETTINGS_EXTENSION_NAME, VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME};
uint32_t property_count;
vk::EnumerateInstanceExtensionProperties(layer_name.c_str(), &property_count, NULL);
std::vector<VkExtensionProperties> properties(property_count);
vk::EnumerateInstanceExtensionProperties(layer_name.c_str(), &property_count, properties.data());
for (size_t i = 0; i < extensions.size(); i++) {
bool found = false;
for (auto props : properties) {
if (!strcmp(props.extensionName, extensions[i].c_str())) {
found = true;
break;
}
}
if (!found) {
FAIL() << "Validation layer is missing extension " << extensions[i].c_str();
}
}
}
TEST_F(PositiveInstance, ValidEnumBeforeLogicalDevice) {
TEST_DESCRIPTION("Call a VkPhysicalDevice query API that uses an enum that is only valid with a promoted extension");
SetTargetApiVersion(VK_API_VERSION_1_3);
RETURN_IF_SKIP(InitFramework());
VkImageCreateInfo ci = vku::InitStructHelper();
ci.flags = 0;
ci.imageType = VK_IMAGE_TYPE_2D;
ci.format = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM;
ci.extent = {256, 256, 1};
ci.tiling = VK_IMAGE_TILING_OPTIMAL;
ci.usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
ci.mipLevels = 1;
ci.arrayLayers = 1;
ci.samples = VK_SAMPLE_COUNT_1_BIT;
// Verify formats
VkFormatFeatureFlags features = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
ImageFormatIsSupported(instance(), Gpu(), ci, features);
}
TEST_F(PositiveInstance, EmptyVkLayerSettingEXT) {
TEST_DESCRIPTION("https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/8541");
auto ici = GetInstanceCreateInfo();
ici.pNext = nullptr;
VkInstance dummy_instance;
ASSERT_EQ(VK_SUCCESS, vk::CreateInstance(&ici, nullptr, &dummy_instance));
ASSERT_NO_FATAL_FAILURE(vk::DestroyInstance(dummy_instance, nullptr));
}
|