diff options
author | Jason Macnak <natsu@google.com> | 2024-04-24 15:11:15 -0700 |
---|---|---|
committer | Jason Macnak <natsu@google.com> | 2024-04-24 15:23:23 -0700 |
commit | b2f3118ad4417222c3937273f33ed2681df4890b (patch) | |
tree | 07ee68f07932c6ad7207d58c5ed870212c1ea664 | |
parent | a4d121b666eae2fb84ff6f83725266e7b21f88d3 (diff) | |
download | gfxstream-b2f3118ad4417222c3937273f33ed2681df4890b.tar.gz |
Add test for vkUpdateDescriptorSetWithTemplate() with wrapping
Bug: b/336869324
Test: GfxstreamEnd2EndTests
Change-Id: Idba8e3f47dd2fcb488640c65dcc76d6dec467b2a
-rw-r--r-- | common/end2end/GfxstreamEnd2EndVkTests.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/common/end2end/GfxstreamEnd2EndVkTests.cpp b/common/end2end/GfxstreamEnd2EndVkTests.cpp index d77acbf0..3ce254b9 100644 --- a/common/end2end/GfxstreamEnd2EndVkTests.cpp +++ b/common/end2end/GfxstreamEnd2EndVkTests.cpp @@ -746,6 +746,129 @@ TEST_P(GfxstreamEnd2EndVkTest, DeviceMemoryReport) { ASSERT_THAT(memory, IsValidHandle()); } +TEST_P(GfxstreamEnd2EndVkTest, DISABLED_DescriptorUpdateTemplateWithWrapping) { + auto [instance, physicalDevice, device, queue, queueFamilyIndex] = + VK_ASSERT(SetUpTypicalVkTestEnvironment()); + + const vkhpp::BufferCreateInfo bufferCreateInfo = { + .size = 1024, + .usage = vkhpp::BufferUsageFlagBits::eUniformBuffer, + }; + auto buffer = VK_ASSERT_RV(device->createBufferUnique(bufferCreateInfo)); + + const std::vector<VkDescriptorBufferInfo> descriptorInfo = { + VkDescriptorBufferInfo{ + .buffer = *buffer, + .offset = 0, + .range = 1024, + }, + VkDescriptorBufferInfo{ + .buffer = *buffer, + .offset = 0, + .range = 1024, + }, + VkDescriptorBufferInfo{ + .buffer = *buffer, + .offset = 0, + .range = 1024, + }, + VkDescriptorBufferInfo{ + .buffer = *buffer, + .offset = 0, + .range = 1024, + }, + }; + + const std::vector<vkhpp::DescriptorPoolSize> descriptorPoolSizes = { + { + .type = vkhpp::DescriptorType::eUniformBuffer, + .descriptorCount = 4, + }, + }; + const vkhpp::DescriptorPoolCreateInfo descriptorPoolCreateInfo = { + .flags = vkhpp::DescriptorPoolCreateFlagBits::eFreeDescriptorSet, + .maxSets = 1, + .poolSizeCount = static_cast<uint32_t>(descriptorPoolSizes.size()), + .pPoolSizes = descriptorPoolSizes.data(), + }; + auto descriptorPool = + VK_ASSERT_RV(device->createDescriptorPoolUnique(descriptorPoolCreateInfo)); + + const std::vector<vkhpp::DescriptorSetLayoutBinding> descriptorSetBindings = { + { + .binding = 0, + .descriptorType = vkhpp::DescriptorType::eUniformBuffer, + .descriptorCount = 1, + .stageFlags = vkhpp::ShaderStageFlagBits::eVertex, + }, + { + .binding = 1, + .descriptorType = vkhpp::DescriptorType::eUniformBuffer, + .descriptorCount = 1, + .stageFlags = vkhpp::ShaderStageFlagBits::eVertex, + }, + { + .binding = 2, + .descriptorType = vkhpp::DescriptorType::eUniformBuffer, + .descriptorCount = 1, + .stageFlags = vkhpp::ShaderStageFlagBits::eVertex, + }, + { + .binding = 3, + .descriptorType = vkhpp::DescriptorType::eUniformBuffer, + .descriptorCount = 1, + .stageFlags = vkhpp::ShaderStageFlagBits::eVertex, + }, + }; + const vkhpp::DescriptorSetLayoutCreateInfo descriptorSetLayoutInfo = { + .bindingCount = static_cast<uint32_t>(descriptorSetBindings.size()), + .pBindings = descriptorSetBindings.data(), + }; + auto descriptorSetLayout = + VK_ASSERT_RV(device->createDescriptorSetLayoutUnique(descriptorSetLayoutInfo)); + + const std::vector<vkhpp::DescriptorSetLayout> descriptorSetLayouts = {*descriptorSetLayout}; + const vkhpp::DescriptorSetAllocateInfo descriptorSetAllocateInfo = { + .descriptorPool = *descriptorPool, + .descriptorSetCount = static_cast<uint32_t>(descriptorSetLayouts.size()), + .pSetLayouts = descriptorSetLayouts.data(), + }; + auto descriptorSets = + VK_ASSERT_RV(device->allocateDescriptorSetsUnique(descriptorSetAllocateInfo)); + auto descriptorSet = std::move(descriptorSets[0]); + + const vkhpp::PipelineLayoutCreateInfo pipelineLayoutCreateInfo = { + .setLayoutCount = static_cast<uint32_t>(descriptorSetLayouts.size()), + .pSetLayouts = descriptorSetLayouts.data(), + }; + auto pipelineLayout = + VK_ASSERT_RV(device->createPipelineLayoutUnique(pipelineLayoutCreateInfo)); + + const std::vector<vkhpp::DescriptorUpdateTemplateEntry> descriptorUpdateEntries = { + { + .dstBinding = 0, + .dstArrayElement = 0, + .descriptorCount = 4, + .descriptorType = vkhpp::DescriptorType::eUniformBuffer, + .offset = 0, + .stride = sizeof(VkDescriptorBufferInfo), + }, + }; + const vkhpp::DescriptorUpdateTemplateCreateInfo descriptorUpdateTemplateCreateInfo = { + .descriptorUpdateEntryCount = static_cast<uint32_t>(descriptorUpdateEntries.size()), + .pDescriptorUpdateEntries = descriptorUpdateEntries.data(), + .descriptorSetLayout = *descriptorSetLayout, + .pipelineBindPoint = vkhpp::PipelineBindPoint::eGraphics, + .pipelineLayout = *pipelineLayout, + .set = 0, + }; + auto descriptorUpdateTemplate = VK_ASSERT_RV( + device->createDescriptorUpdateTemplateUnique(descriptorUpdateTemplateCreateInfo)); + + device->updateDescriptorSetWithTemplate(*descriptorSet, *descriptorUpdateTemplate, + descriptorInfo.data()); +} + std::vector<TestParams> GenerateTestCases() { std::vector<TestParams> cases = {TestParams{ .with_gl = false, |