@@ -923,6 +923,55 @@ TEST_F(NegativeDeviceGeneratedCommands, UpdateIESPipelineShaderStages) {
923
923
m_errorMonitor->VerifyFound ();
924
924
}
925
925
926
+ TEST_F (NegativeDeviceGeneratedCommands, UpdateIESPipelineCompatible) {
927
+ RETURN_IF_SKIP (InitBasicDeviceGeneratedCommands ());
928
+ InitRenderTarget ();
929
+
930
+ vkt::Buffer uniform_buffer (*m_device, 32 , VK_BUFFER_USAGE_STORAGE_BUFFER_BIT);
931
+ OneOffDescriptorSet descriptor_set_vert (m_device,
932
+ {{0 , VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1 , VK_SHADER_STAGE_VERTEX_BIT, nullptr }});
933
+ OneOffDescriptorSet descriptor_set_all (m_device, {{0 , VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1 , VK_SHADER_STAGE_ALL, nullptr }});
934
+ descriptor_set_vert.WriteDescriptorBufferInfo (0 , uniform_buffer.handle (), 0 , VK_WHOLE_SIZE, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
935
+ descriptor_set_vert.UpdateDescriptorSets ();
936
+ descriptor_set_all.WriteDescriptorBufferInfo (0 , uniform_buffer.handle (), 0 , VK_WHOLE_SIZE, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);
937
+ descriptor_set_all.UpdateDescriptorSets ();
938
+
939
+ const vkt::PipelineLayout pipeline_layout_vert (*m_device, {&descriptor_set_vert.layout_ });
940
+ const vkt::PipelineLayout pipeline_layout_all (*m_device, {&descriptor_set_all.layout_ });
941
+
942
+ char const *vs_source = R"glsl(
943
+ #version 450
944
+ layout(set = 0, binding = 0) buffer StorageBuffer {
945
+ uint a;
946
+ uint b;
947
+ };
948
+ void main() {
949
+ a = b;
950
+ }
951
+ )glsl" ;
952
+ VkShaderObj vs (this , vs_source, VK_SHADER_STAGE_VERTEX_BIT);
953
+
954
+ VkPipelineCreateFlags2CreateInfoKHR pipe_flags2 = vku::InitStructHelper ();
955
+ pipe_flags2.flags = VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT;
956
+ CreatePipelineHelper init_pipe (*this , &pipe_flags2);
957
+ init_pipe.gp_ci_ .layout = pipeline_layout_vert.handle ();
958
+ init_pipe.shader_stages_ = {vs.GetStageCreateInfo (), init_pipe.fs_ ->GetStageCreateInfo ()};
959
+ init_pipe.CreateGraphicsPipeline ();
960
+ vkt::IndirectExecutionSet exe_set (*m_device, init_pipe.Handle (), 1 );
961
+
962
+ CreatePipelineHelper pipe (*this , &pipe_flags2);
963
+ pipe.gp_ci_ .layout = pipeline_layout_all.handle ();
964
+ pipe.shader_stages_ = {vs.GetStageCreateInfo (), pipe.fs_ ->GetStageCreateInfo ()};
965
+ pipe.CreateGraphicsPipeline ();
966
+
967
+ VkWriteIndirectExecutionSetPipelineEXT write_exe_sets = vku::InitStructHelper ();
968
+ write_exe_sets.index = 0 ;
969
+ write_exe_sets.pipeline = pipe.Handle ();
970
+ m_errorMonitor->SetDesiredError (" VUID-vkUpdateIndirectExecutionSetPipelineEXT-None-11039" );
971
+ vk::UpdateIndirectExecutionSetPipelineEXT (device (), exe_set.handle (), 1 , &write_exe_sets);
972
+ m_errorMonitor->VerifyFound ();
973
+ }
974
+
926
975
TEST_F (NegativeDeviceGeneratedCommands, UpdateIESMixShaderObjectPipeline) {
927
976
AddRequiredExtensions (VK_EXT_SHADER_OBJECT_EXTENSION_NAME);
928
977
AddRequiredFeature (vkt::Feature::shaderObject);
0 commit comments