tests: Additional dynamic rendering pipeline tests
diff --git a/tests/positive/pipeline.cpp b/tests/positive/pipeline.cpp
index eab2b9a..bdfa4ca 100644
--- a/tests/positive/pipeline.cpp
+++ b/tests/positive/pipeline.cpp
@@ -6398,3 +6398,110 @@
cb.end();
m_errorMonitor->VerifyNotFound();
}
+
+TEST_F(VkPositiveLayerTest, CreateGraphicsPipelineDynamicRendering) {
+ TEST_DESCRIPTION("Test for a creating a pipeline with VK_KHR_dynamic_rendering enabled");
+ SetTargetApiVersion(VK_API_VERSION_1_1);
+ ASSERT_NO_FATAL_FAILURE(InitFramework());
+ if (DeviceExtensionSupported(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME)) {
+ m_device_extension_names.push_back(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
+ } else {
+ printf("%s Extension %s is not supported.\n", kSkipPrefix, VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
+ return;
+ }
+ m_errorMonitor->ExpectSuccess();
+
+ auto dynamic_rendering_features = LvlInitStruct<VkPhysicalDeviceDynamicRenderingFeaturesKHR>();
+ auto features2 = LvlInitStruct<VkPhysicalDeviceFeatures2>(&dynamic_rendering_features);
+ vk::GetPhysicalDeviceFeatures2(gpu(), &features2);
+ if (!dynamic_rendering_features.dynamicRendering) {
+ printf("%s Test requires (unsupported) dynamicRendering , skipping\n", kSkipPrefix);
+ return;
+ }
+
+ ASSERT_NO_FATAL_FAILURE(InitState(nullptr, &features2));
+
+ char const *fsSource = R"glsl(
+ #version 450
+ layout(input_attachment_index=0, set=0, binding=0) uniform subpassInput x;
+ layout(location=0) out vec4 color;
+ void main() {
+ color = subpassLoad(x);
+ }
+ )glsl";
+
+ VkShaderObj vs(m_device, bindStateVertShaderText, VK_SHADER_STAGE_VERTEX_BIT, this);
+ VkShaderObj fs(m_device, fsSource, VK_SHADER_STAGE_FRAGMENT_BIT, this);
+
+ VkPipelineObj pipe(m_device);
+ pipe.AddShader(&vs);
+ pipe.AddShader(&fs);
+ pipe.AddDefaultColorAttachment();
+
+ VkDescriptorSetLayoutBinding dslb = {0, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1, VK_SHADER_STAGE_FRAGMENT_BIT, nullptr};
+ const VkDescriptorSetLayoutObj dsl(m_device, {dslb});
+ const VkPipelineLayoutObj pl(m_device, {&dsl});
+
+ VkFormat color_formats[2] = {VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM};
+ auto rendering_info = LvlInitStruct<VkPipelineRenderingCreateInfoKHR>();
+ rendering_info.colorAttachmentCount = 2;
+ rendering_info.pColorAttachmentFormats = color_formats;
+
+ auto create_info = LvlInitStruct<VkGraphicsPipelineCreateInfo>();
+ pipe.InitGraphicsPipelineCreateInfo(&create_info);
+ create_info.pNext = &rendering_info;
+
+
+ pipe.CreateVKPipeline(pl.handle(), VK_NULL_HANDLE, &create_info);
+ m_errorMonitor->VerifyNotFound();
+}
+
+TEST_F(VkPositiveLayerTest, CreateGraphicsPipelineDynamicRenderingNoInfo) {
+ TEST_DESCRIPTION("Test for a creating a pipeline with VK_KHR_dynamic_rendering enabled but no rendering info struct.");
+ SetTargetApiVersion(VK_API_VERSION_1_1);
+ ASSERT_NO_FATAL_FAILURE(InitFramework());
+ if (DeviceExtensionSupported(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME)) {
+ m_device_extension_names.push_back(VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
+ } else {
+ printf("%s Extension %s is not supported.\n", kSkipPrefix, VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
+ return;
+ }
+ m_errorMonitor->ExpectSuccess();
+
+ auto dynamic_rendering_features = LvlInitStruct<VkPhysicalDeviceDynamicRenderingFeaturesKHR>();
+ auto features2 = LvlInitStruct<VkPhysicalDeviceFeatures2>(&dynamic_rendering_features);
+ vk::GetPhysicalDeviceFeatures2(gpu(), &features2);
+ if (!dynamic_rendering_features.dynamicRendering) {
+ printf("%s Test requires (unsupported) dynamicRendering , skipping\n", kSkipPrefix);
+ return;
+ }
+
+ ASSERT_NO_FATAL_FAILURE(InitState(nullptr, &features2));
+
+ char const *fsSource = R"glsl(
+ #version 450
+ layout(input_attachment_index=0, set=0, binding=0) uniform subpassInput x;
+ layout(location=0) out vec4 color;
+ void main() {
+ color = subpassLoad(x);
+ }
+ )glsl";
+
+ VkShaderObj vs(m_device, bindStateVertShaderText, VK_SHADER_STAGE_VERTEX_BIT, this);
+ VkShaderObj fs(m_device, fsSource, VK_SHADER_STAGE_FRAGMENT_BIT, this);
+
+ VkPipelineObj pipe(m_device);
+ pipe.AddShader(&vs);
+ pipe.AddShader(&fs);
+ pipe.AddDefaultColorAttachment();
+
+ VkDescriptorSetLayoutBinding dslb = {0, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1, VK_SHADER_STAGE_FRAGMENT_BIT, nullptr};
+ const VkDescriptorSetLayoutObj dsl(m_device, {dslb});
+ const VkPipelineLayoutObj pl(m_device, {&dsl});
+
+ auto create_info = LvlInitStruct<VkGraphicsPipelineCreateInfo>();
+ pipe.InitGraphicsPipelineCreateInfo(&create_info);
+ // if there isn't a VkPipelineRenderingCreateInfoKHR, the driver is supposed to use safe default values
+ pipe.CreateVKPipeline(pl.handle(), VK_NULL_HANDLE, &create_info);
+ m_errorMonitor->VerifyNotFound();
+}
diff --git a/tests/vklayertests_pipeline_shader.cpp b/tests/vklayertests_pipeline_shader.cpp
index e5bcf2c..9353827 100644
--- a/tests/vklayertests_pipeline_shader.cpp
+++ b/tests/vklayertests_pipeline_shader.cpp
@@ -14760,20 +14760,13 @@
pipe.AddShader(&vs);
pipe.AddShader(&fs);
pipe.AddDefaultColorAttachment();
- ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
VkDescriptorSetLayoutBinding dslb = {0, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1, VK_SHADER_STAGE_FRAGMENT_BIT, nullptr};
const VkDescriptorSetLayoutObj dsl(m_device, {dslb});
const VkPipelineLayoutObj pl(m_device, {&dsl});
- VkFormat color_formats[2] = {VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM};
- auto rendering_info = LvlInitStruct<VkPipelineRenderingCreateInfoKHR>();
- rendering_info.colorAttachmentCount = 2;
- rendering_info.pColorAttachmentFormats = color_formats;
-
auto create_info = LvlInitStruct<VkGraphicsPipelineCreateInfo>();
pipe.InitGraphicsPipelineCreateInfo(&create_info);
- create_info.pNext = &rendering_info;
m_errorMonitor->VerifyNotFound();
@@ -14781,3 +14774,4 @@
pipe.CreateVKPipeline(pl.handle(), VK_NULL_HANDLE, &create_info);
m_errorMonitor->VerifyFound();
}
+