@@ -1583,4 +1583,43 @@ TEST_F(PositiveShaderObject, SetPointTopologyNoWrite) {
15831583 vk::CmdDraw (m_command_buffer.handle (), 4 , 1 , 0 , 0 );
15841584 m_command_buffer.EndRendering ();
15851585 m_command_buffer.End ();
1586- }
1586+ }
1587+
1588+ TEST_F (PositiveShaderObject, MultiCreateGraphicsCompute) {
1589+ AddRequiredExtensions (VK_EXT_SHADER_OBJECT_EXTENSION_NAME);
1590+ AddRequiredExtensions (VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME);
1591+ AddRequiredFeature (vkt::Feature::dynamicRendering);
1592+ AddRequiredFeature (vkt::Feature::shaderObject);
1593+ RETURN_IF_SKIP (Init ());
1594+ InitDynamicRenderTarget ();
1595+
1596+ const auto vert_spv = GLSLToSPV (VK_SHADER_STAGE_VERTEX_BIT, kMinimalShaderGlsl );
1597+ const auto frag_spv = GLSLToSPV (VK_SHADER_STAGE_FRAGMENT_BIT, kMinimalShaderGlsl );
1598+ const auto comp_spv = GLSLToSPV (VK_SHADER_STAGE_COMPUTE_BIT, kMinimalShaderGlsl );
1599+
1600+ VkShaderCreateInfoEXT shader_create_infos[3 ];
1601+ shader_create_infos[0 ] = ShaderCreateInfoLink (vert_spv, VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT);
1602+ shader_create_infos[1 ] = ShaderCreateInfoLink (frag_spv, VK_SHADER_STAGE_FRAGMENT_BIT);
1603+ shader_create_infos[2 ] = ShaderCreateInfo (comp_spv, VK_SHADER_STAGE_COMPUTE_BIT);
1604+
1605+ VkShaderEXT shaders[3 ];
1606+ vk::CreateShadersEXT (m_device->handle (), 3 , shader_create_infos, nullptr , shaders);
1607+
1608+ VkRenderingInfo rendering_info = vku::InitStructHelper ();
1609+ rendering_info.colorAttachmentCount = 0 ;
1610+ rendering_info.layerCount = 1 ;
1611+ rendering_info.renderArea = {{0 , 0 }, {1 , 1 }};
1612+
1613+ m_command_buffer.Begin ();
1614+ m_command_buffer.BeginRendering (rendering_info);
1615+ SetDefaultDynamicStatesExclude ({VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT});
1616+ const VkShaderStageFlagBits stages[] = {VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT};
1617+ vk::CmdBindShadersEXT (m_command_buffer, 2 , stages, shaders);
1618+ vk::CmdDraw (m_command_buffer, 3 , 1 , 0 , 0 );
1619+ m_command_buffer.EndRendering ();
1620+ m_command_buffer.End ();
1621+
1622+ for (uint32_t i = 0 ; i < 3 ; ++i) {
1623+ vk::DestroyShaderEXT (m_device->handle (), shaders[i], nullptr );
1624+ }
1625+ }
0 commit comments