aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtem Kharytoniuk <artem@lunarg.com>2023-01-16 19:18:44 +0100
committerartem-lunarg <121836235+artem-lunarg@users.noreply.github.com>2023-01-17 12:02:46 +0100
commitd7ac028353705add5a6ee03d51e251ddd563fd4c (patch)
tree41a42e0cdb0dbf75c62890b7c932903d7990c96c
parent587e811e9cb31a4d8a8362f9d92ac5512d5cac16 (diff)
downloadvulkan-validation-layers-d7ac028353705add5a6ee03d51e251ddd563fd4c.tar.gz
tests: Move best practices positive tests to best_practices.cpp
-rw-r--r--tests/CMakeLists.txt1
-rw-r--r--tests/positive/best_practices.cpp115
-rw-r--r--tests/vklayertests_best_practices.cpp88
3 files changed, 116 insertions, 88 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 66701fce5..dc051b8f6 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -35,6 +35,7 @@ target_sources(vk_layer_validation_tests PRIVATE
${VVL_SOURCE_DIR}/layers/generated/vk_format_utils.cpp
${VVL_SOURCE_DIR}/layers/generated/vk_safe_struct.cpp
positive/android_hardware_buffer.cpp
+ positive/best_practices.cpp
positive/command.cpp
positive/descriptors.cpp
positive/dynamic_rendering.cpp
diff --git a/tests/positive/best_practices.cpp b/tests/positive/best_practices.cpp
new file mode 100644
index 000000000..e0c8499da
--- /dev/null
+++ b/tests/positive/best_practices.cpp
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2015-2023 The Khronos Group Inc.
+ * Copyright (c) 2015-2023 Valve Corporation
+ * Copyright (c) 2015-2023 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
+ *
+ * Author: Chia-I Wu <olvaffe@gmail.com>
+ * Author: Chris Forbes <chrisf@ijw.co.nz>
+ * Author: Courtney Goeltzenleuchter <courtney@LunarG.com>
+ * Author: Mark Lobodzinski <mark@lunarg.com>
+ * Author: Mike Stroyan <mike@LunarG.com>
+ * Author: Tobin Ehlis <tobine@google.com>
+ * Author: Tony Barbour <tony@LunarG.com>
+ * Author: Cody Northrop <cnorthrop@google.com>
+ * Author: Dave Houlton <daveh@lunarg.com>
+ * Author: Jeremy Kniager <jeremyk@lunarg.com>
+ * Author: Shannon McPherson <shannon@lunarg.com>
+ * Author: John Zulauf <jzulauf@lunarg.com>
+ */
+
+#include "../layer_validation_tests.h"
+
+class VkPositiveBestPracticesLayerTest : public VkBestPracticesLayerTest {};
+
+TEST_F(VkPositiveBestPracticesLayerTest, TestDestroyFreeNullHandles) {
+ VkResult err;
+
+ TEST_DESCRIPTION("Call all applicable destroy and free routines with NULL handles, expecting no validation errors");
+
+ ASSERT_NO_FATAL_FAILURE(InitBestPracticesFramework());
+ ASSERT_NO_FATAL_FAILURE(InitState());
+ ASSERT_NO_FATAL_FAILURE(InitViewport());
+ ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
+
+ vk::DestroyBuffer(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyBufferView(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyCommandPool(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyDescriptorPool(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyDescriptorSetLayout(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyDevice(VK_NULL_HANDLE, NULL);
+ vk::DestroyEvent(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyFence(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyFramebuffer(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyImage(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyImageView(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyInstance(VK_NULL_HANDLE, NULL);
+ vk::DestroyPipeline(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyPipelineCache(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyPipelineLayout(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyQueryPool(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyRenderPass(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroySampler(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroySemaphore(m_device->device(), VK_NULL_HANDLE, NULL);
+ vk::DestroyShaderModule(m_device->device(), VK_NULL_HANDLE, NULL);
+
+ VkCommandPool command_pool;
+ VkCommandPoolCreateInfo pool_create_info{};
+ pool_create_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
+ pool_create_info.queueFamilyIndex = m_device->graphics_queue_node_index_;
+ pool_create_info.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
+ vk::CreateCommandPool(m_device->device(), &pool_create_info, nullptr, &command_pool);
+ VkCommandBuffer command_buffers[3] = {};
+ VkCommandBufferAllocateInfo command_buffer_allocate_info{};
+ command_buffer_allocate_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
+ command_buffer_allocate_info.commandPool = command_pool;
+ command_buffer_allocate_info.commandBufferCount = 1;
+ command_buffer_allocate_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
+ vk::AllocateCommandBuffers(m_device->device(), &command_buffer_allocate_info, &command_buffers[1]);
+ vk::FreeCommandBuffers(m_device->device(), command_pool, 3, command_buffers);
+ vk::DestroyCommandPool(m_device->device(), command_pool, NULL);
+
+ VkDescriptorPoolSize ds_type_count = {};
+ ds_type_count.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
+ ds_type_count.descriptorCount = 1;
+
+ VkDescriptorPoolCreateInfo ds_pool_ci = {};
+ ds_pool_ci.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
+ ds_pool_ci.pNext = NULL;
+ ds_pool_ci.maxSets = 1;
+ ds_pool_ci.poolSizeCount = 1;
+ ds_pool_ci.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
+ ds_pool_ci.pPoolSizes = &ds_type_count;
+
+ VkDescriptorPool ds_pool;
+ err = vk::CreateDescriptorPool(m_device->device(), &ds_pool_ci, NULL, &ds_pool);
+ ASSERT_VK_SUCCESS(err);
+
+ VkDescriptorSetLayoutBinding dsl_binding = {};
+ dsl_binding.binding = 2;
+ dsl_binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
+ dsl_binding.descriptorCount = 1;
+ dsl_binding.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
+ dsl_binding.pImmutableSamplers = NULL;
+
+ const VkDescriptorSetLayoutObj ds_layout(m_device, {dsl_binding});
+
+ VkDescriptorSet descriptor_sets[3] = {};
+ VkDescriptorSetAllocateInfo alloc_info = {};
+ alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
+ alloc_info.descriptorSetCount = 1;
+ alloc_info.descriptorPool = ds_pool;
+ alloc_info.pSetLayouts = &ds_layout.handle();
+ err = vk::AllocateDescriptorSets(m_device->device(), &alloc_info, &descriptor_sets[1]);
+ ASSERT_VK_SUCCESS(err);
+ vk::FreeDescriptorSets(m_device->device(), ds_pool, 3, descriptor_sets);
+ vk::DestroyDescriptorPool(m_device->device(), ds_pool, NULL);
+
+ vk::FreeMemory(m_device->device(), VK_NULL_HANDLE, NULL);
+}
diff --git a/tests/vklayertests_best_practices.cpp b/tests/vklayertests_best_practices.cpp
index a574699cf..7c5c8affe 100644
--- a/tests/vklayertests_best_practices.cpp
+++ b/tests/vklayertests_best_practices.cpp
@@ -465,94 +465,6 @@ TEST_F(VkBestPracticesLayerTest, VtxBufferBadIndex) {
m_commandBuffer->end();
}
-// This is a positive test. No failures are expected.
-TEST_F(VkBestPracticesLayerTest, TestDestroyFreeNullHandles) {
- VkResult err;
-
- TEST_DESCRIPTION("Call all applicable destroy and free routines with NULL handles, expecting no validation errors");
-
- InitBestPracticesFramework();
- InitState();
-
- ASSERT_NO_FATAL_FAILURE(InitViewport());
- ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-
- vk::DestroyBuffer(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyBufferView(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyCommandPool(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyDescriptorPool(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyDescriptorSetLayout(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyDevice(VK_NULL_HANDLE, NULL);
- vk::DestroyEvent(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyFence(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyFramebuffer(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyImage(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyImageView(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyInstance(VK_NULL_HANDLE, NULL);
- vk::DestroyPipeline(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyPipelineCache(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyPipelineLayout(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyQueryPool(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyRenderPass(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroySampler(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroySemaphore(m_device->device(), VK_NULL_HANDLE, NULL);
- vk::DestroyShaderModule(m_device->device(), VK_NULL_HANDLE, NULL);
-
- VkCommandPool command_pool;
- VkCommandPoolCreateInfo pool_create_info{};
- pool_create_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
- pool_create_info.queueFamilyIndex = m_device->graphics_queue_node_index_;
- pool_create_info.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
- vk::CreateCommandPool(m_device->device(), &pool_create_info, nullptr, &command_pool);
- VkCommandBuffer command_buffers[3] = {};
- VkCommandBufferAllocateInfo command_buffer_allocate_info{};
- command_buffer_allocate_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
- command_buffer_allocate_info.commandPool = command_pool;
- command_buffer_allocate_info.commandBufferCount = 1;
- command_buffer_allocate_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
- vk::AllocateCommandBuffers(m_device->device(), &command_buffer_allocate_info, &command_buffers[1]);
- vk::FreeCommandBuffers(m_device->device(), command_pool, 3, command_buffers);
- vk::DestroyCommandPool(m_device->device(), command_pool, NULL);
-
- VkDescriptorPoolSize ds_type_count = {};
- ds_type_count.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
- ds_type_count.descriptorCount = 1;
-
- VkDescriptorPoolCreateInfo ds_pool_ci = {};
- ds_pool_ci.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
- ds_pool_ci.pNext = NULL;
- ds_pool_ci.maxSets = 1;
- ds_pool_ci.poolSizeCount = 1;
- ds_pool_ci.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
- ds_pool_ci.pPoolSizes = &ds_type_count;
-
- VkDescriptorPool ds_pool;
- err = vk::CreateDescriptorPool(m_device->device(), &ds_pool_ci, NULL, &ds_pool);
- ASSERT_VK_SUCCESS(err);
-
- VkDescriptorSetLayoutBinding dsl_binding = {};
- dsl_binding.binding = 2;
- dsl_binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;
- dsl_binding.descriptorCount = 1;
- dsl_binding.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
- dsl_binding.pImmutableSamplers = NULL;
-
- const VkDescriptorSetLayoutObj ds_layout(m_device, {dsl_binding});
-
- VkDescriptorSet descriptor_sets[3] = {};
- VkDescriptorSetAllocateInfo alloc_info = {};
- alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
- alloc_info.descriptorSetCount = 1;
- alloc_info.descriptorPool = ds_pool;
- alloc_info.pSetLayouts = &ds_layout.handle();
- err = vk::AllocateDescriptorSets(m_device->device(), &alloc_info, &descriptor_sets[1]);
- ASSERT_VK_SUCCESS(err);
- vk::FreeDescriptorSets(m_device->device(), ds_pool, 3, descriptor_sets);
- vk::DestroyDescriptorPool(m_device->device(), ds_pool, NULL);
-
- vk::FreeMemory(m_device->device(), VK_NULL_HANDLE, NULL);
-}
-
TEST_F(VkBestPracticesLayerTest, CommandBufferReset) {
TEST_DESCRIPTION("Test for validating usage of vkCreateCommandPool with COMMAND_BUFFER_RESET_BIT");