tests: Test using null descriptor with acceleration structure
diff --git a/tests/positive/shaderval.cpp b/tests/positive/shaderval.cpp
index a158896..ca98821 100644
--- a/tests/positive/shaderval.cpp
+++ b/tests/positive/shaderval.cpp
@@ -2103,3 +2103,50 @@
pipe.CreateGraphicsPipeline();
m_errorMonitor->VerifyNotFound();
}
+
+TEST_F(VkPositiveLayerTest, WriteDescriptorSetAccelerationStructureNVNullDescriptor) {
+ TEST_DESCRIPTION("Validate using NV acceleration structure descriptor writing with null descriptor.");
+
+ AddRequiredExtensions(VK_NV_RAY_TRACING_EXTENSION_NAME);
+ AddRequiredExtensions(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME);
+ ASSERT_NO_FATAL_FAILURE(InitFramework(m_errorMonitor));
+
+ PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR =
+ (PFN_vkGetPhysicalDeviceFeatures2KHR)vk::GetInstanceProcAddr(instance(), "vkGetPhysicalDeviceFeatures2KHR");
+ ASSERT_TRUE(vkGetPhysicalDeviceFeatures2KHR != nullptr);
+
+ auto robustness2_features = LvlInitStruct<VkPhysicalDeviceRobustness2FeaturesEXT>();
+ auto features2 = LvlInitStruct<VkPhysicalDeviceFeatures2KHR>(&robustness2_features);
+ vkGetPhysicalDeviceFeatures2KHR(gpu(), &features2);
+
+ if (robustness2_features.nullDescriptor != VK_TRUE) {
+ printf("%s nullDescriptor feature not supported, skipping test.\n", kSkipPrefix);
+ return;
+ }
+ ASSERT_NO_FATAL_FAILURE(InitState(nullptr, &features2));
+
+ m_errorMonitor->ExpectSuccess();
+
+ OneOffDescriptorSet ds(m_device, {
+ {0, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV, 1, VK_SHADER_STAGE_MISS_BIT_NV, nullptr},
+ });
+
+ VkAccelerationStructureNV top_level_as = VK_NULL_HANDLE;
+
+ VkWriteDescriptorSetAccelerationStructureNV acc = {};
+ acc.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV;
+ acc.accelerationStructureCount = 1;
+ acc.pAccelerationStructures = &top_level_as;
+
+ VkWriteDescriptorSet descriptor_write = {};
+ descriptor_write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ descriptor_write.pNext = &acc;
+ descriptor_write.dstSet = ds.set_;
+ descriptor_write.dstBinding = 0;
+ descriptor_write.descriptorCount = 1;
+ descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV;
+
+ vk::UpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, nullptr);
+
+ m_errorMonitor->VerifyNotFound();
+}