@@ -2244,4 +2244,44 @@ TEST_F(PositiveDescriptorBuffer, ImmutableSamplerIdenticallyDefinedMaintenance4)
22442244 vk::CmdBindDescriptorBufferEmbeddedSamplersEXT (m_command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, binding_layout, 1 );
22452245 vk::CmdDispatch (m_command_buffer, 1 , 1 , 1 );
22462246 m_command_buffer.End ();
2247- }
2247+ }
2248+
2249+ TEST_F (PositiveDescriptorBuffer, SetPushConstsWithDifferentLayout) {
2250+ RETURN_IF_SKIP (InitBasicDescriptorBuffer ());
2251+ InitRenderTarget ();
2252+
2253+ vkt::Buffer buffer (*m_device, 4096 , VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT, vkt::device_address);
2254+
2255+ VkDescriptorBufferBindingInfoEXT buffer_binding_info = vku::InitStructHelper ();
2256+ buffer_binding_info.address = buffer.Address ();
2257+ buffer_binding_info.usage = VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT;
2258+
2259+ const VkDescriptorSetLayoutBinding binding = {0 , VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1 , VK_SHADER_STAGE_VERTEX_BIT, nullptr };
2260+ const vkt::DescriptorSetLayout set_layout (*m_device, {binding}, VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT);
2261+ const vkt::PipelineLayout pipeline_layout1 (*m_device, {&set_layout});
2262+
2263+ VkPushConstantRange push_const_range;
2264+ push_const_range.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
2265+ push_const_range.offset = 0u ;
2266+ push_const_range.size = sizeof (uint32_t );
2267+ const vkt::PipelineLayout pipeline_layout2 (*m_device, {}, {push_const_range});
2268+
2269+ CreatePipelineHelper pipe (*this );
2270+ pipe.gp_ci_ .flags |= VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT;
2271+ pipe.gp_ci_ .layout = pipeline_layout1;
2272+ pipe.CreateGraphicsPipeline ();
2273+
2274+ const uint32_t index = 0 ;
2275+ const VkDeviceSize offset = 0 ;
2276+
2277+ m_command_buffer.Begin ();
2278+ m_command_buffer.BeginRenderPass (m_renderPassBeginInfo);
2279+ vk::CmdBindPipeline (m_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipe);
2280+ vk::CmdBindDescriptorBuffersEXT (m_command_buffer, 1 , &buffer_binding_info);
2281+ vk::CmdPushConstants (m_command_buffer, pipeline_layout2, VK_SHADER_STAGE_VERTEX_BIT, 0 , sizeof (uint32_t ), &index);
2282+ vk::CmdSetDescriptorBufferOffsetsEXT (m_command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout1, 0 , 1 , &index,
2283+ &offset);
2284+ vk::CmdDraw (m_command_buffer, 3 , 1 , 0 , 0 );
2285+ m_command_buffer.EndRenderPass ();
2286+ m_command_buffer.End ();
2287+ }
0 commit comments