tests: Add negative viewport ht maintenance1 test
Change-Id: If46de720b0abd6c48beb90a588dc91ff5b2f7211
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 34f076f..b7918ea 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -355,6 +355,7 @@
protected:
ErrorMonitor *m_errorMonitor;
bool m_enableWSI;
+ bool m_enable_maintenance1_ext;
virtual void SetUp() {
std::vector<const char *> instance_layer_names;
@@ -399,6 +400,9 @@
instance_extension_names.push_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
#endif // VK_USE_PLATFORM_XLIB_KHR
}
+ if (m_enable_maintenance1_ext) {
+ device_extension_names.push_back(VK_KHR_MAINTENANCE1_EXTENSION_NAME);
+ }
this->app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
this->app_info.pNext = NULL;
@@ -582,6 +586,12 @@
commandBuffer->BindDescriptorSet(descriptorSet);
}
+class VkMaintenance1LayerTest : public VkLayerTest {
+ public:
+ protected:
+ VkMaintenance1LayerTest(){ m_enable_maintenance1_ext = true; }
+};
+
class VkPositiveLayerTest : public VkLayerTest {
public:
protected:
@@ -22341,6 +22351,59 @@
vkDestroyDescriptorSetLayout(m_device->device(), dsl, nullptr);
}
+// This test class enables the Maintenance1 extension for related validation tests
+TEST_F(VkMaintenance1LayerTest, Maintenance1Tests) {
+ TEST_DESCRIPTION("Validate various special cases for the Maintenance1_KHR extension");
+
+ // Ensure that extension is available and enabled.
+ uint32_t extension_count = 0;
+ bool supports_maintenance1_extension = false;
+ VkResult err = vkEnumerateDeviceExtensionProperties(gpu(), nullptr, &extension_count, nullptr);
+ ASSERT_VK_SUCCESS(err);
+ if (extension_count > 0) {
+ std::vector<VkExtensionProperties> available_extensions(extension_count);
+
+ err = vkEnumerateDeviceExtensionProperties(gpu(), nullptr, &extension_count, &available_extensions[0]);
+ ASSERT_VK_SUCCESS(err);
+ for (const auto &extension_props : available_extensions) {
+ if (strcmp(extension_props.extensionName, VK_KHR_MAINTENANCE1_EXTENSION_NAME) == 0) {
+ supports_maintenance1_extension = true;
+ }
+ }
+ }
+
+ // Proceed if extension is supported by hardware
+ if (!supports_maintenance1_extension) {
+ printf(" Maintenance1 Extension not supported, skipping tests\n");
+ return;
+ }
+ ASSERT_NO_FATAL_FAILURE(InitState());
+
+ m_errorMonitor->ExpectSuccess();
+
+ VkCommandBuffer cmd_buf;
+ VkCommandBufferAllocateInfo alloc_info;
+ alloc_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
+ alloc_info.pNext = NULL;
+ alloc_info.commandBufferCount = 1;
+ alloc_info.commandPool = m_commandPool;
+ alloc_info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
+ vkAllocateCommandBuffers(m_device->device(), &alloc_info, &cmd_buf);
+
+ VkCommandBufferBeginInfo cb_binfo;
+ cb_binfo.pNext = NULL;
+ cb_binfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
+ cb_binfo.pInheritanceInfo = VK_NULL_HANDLE;
+ cb_binfo.flags = 0;
+ vkBeginCommandBuffer(cmd_buf, &cb_binfo);
+ // Set Negative height, should give error if Maintenance 1 is not enabled
+ VkViewport viewport = {0, 0, 16, -16, 0, 1};
+ vkCmdSetViewport(cmd_buf, 0, 1, &viewport);
+ vkEndCommandBuffer(cmd_buf);
+
+ m_errorMonitor->VerifyNotFound();
+}
+
TEST_F(VkPositiveLayerTest, ValidStructPNext) {
TEST_DESCRIPTION("Verify that a valid pNext value is handled correctly");