tests: Add test for descriptor type mismatch
This error should be produced by vkCreate*Pipelines().
Signed-off-by: Chris Forbes <chrisforbes@google.com>
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index 19a248a..1f7aaaf 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -13569,6 +13569,69 @@
}
}
+TEST_F(VkLayerTest, CreateComputePipelineDescriptorTypeMismatch) {
+ m_errorMonitor->SetDesiredFailureMsg(
+ VK_DEBUG_REPORT_ERROR_BIT_EXT,
+ "but descriptor of type VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER");
+
+ ASSERT_NO_FATAL_FAILURE(InitState());
+
+ VkDescriptorSetLayoutBinding binding = {
+ 0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+ 1, VK_SHADER_STAGE_COMPUTE_BIT, nullptr
+ };
+ VkDescriptorSetLayoutCreateInfo dslci = {
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr,
+ 0, 1, &binding
+ };
+ VkDescriptorSetLayout dsl;
+ VkResult err = vkCreateDescriptorSetLayout(m_device->device(), &dslci,
+ nullptr, &dsl);
+ ASSERT_VK_SUCCESS(err);
+
+ VkPipelineLayoutCreateInfo plci = {
+ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, nullptr,
+ 0, 1, &dsl, 0, nullptr
+ };
+ VkPipelineLayout pl;
+ err = vkCreatePipelineLayout(m_device->device(), &plci,
+ nullptr, &pl);
+ ASSERT_VK_SUCCESS(err);
+
+ char const *csSource =
+ "#version 450\n"
+ "\n"
+ "layout(local_size_x=1) in;\n"
+ "layout(set=0, binding=0) buffer block { vec4 x; };\n"
+ "void main() {\n"
+ " x.x = 1.0f;\n"
+ "}\n";
+ VkShaderObj cs(m_device, csSource, VK_SHADER_STAGE_COMPUTE_BIT, this);
+
+ VkComputePipelineCreateInfo cpci = {
+ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, nullptr,
+ 0, {
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+ nullptr, 0, VK_SHADER_STAGE_COMPUTE_BIT,
+ cs.handle(), "main", nullptr
+ },
+ pl, VK_NULL_HANDLE, -1
+ };
+
+ VkPipeline pipe;
+ err = vkCreateComputePipelines(
+ m_device->device(), VK_NULL_HANDLE, 1, &cpci, nullptr, &pipe);
+
+ m_errorMonitor->VerifyFound();
+
+ if (err == VK_SUCCESS) {
+ vkDestroyPipeline(m_device->device(), pipe, nullptr);
+ }
+
+ vkDestroyPipelineLayout(m_device->device(), pl, nullptr);
+ vkDestroyDescriptorSetLayout(m_device->device(), dsl, nullptr);
+}
+
#endif // SHADER_CHECKER_TESTS
#if DEVICE_LIMITS_TESTS