Skip to content

Commit ce2edc7

Browse files
ziga-lunargspencer-lunarg
authored andcommitted
tests: Descriptor buffer and push consts
1 parent 70f6033 commit ce2edc7

1 file changed

Lines changed: 41 additions & 1 deletion

File tree

tests/unit/descriptor_buffer_positive.cpp

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)