aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Macnak <natsu@google.com>2024-04-24 15:11:15 -0700
committerJason Macnak <natsu@google.com>2024-04-24 15:23:23 -0700
commitb2f3118ad4417222c3937273f33ed2681df4890b (patch)
tree07ee68f07932c6ad7207d58c5ed870212c1ea664
parenta4d121b666eae2fb84ff6f83725266e7b21f88d3 (diff)
downloadgfxstream-b2f3118ad4417222c3937273f33ed2681df4890b.tar.gz
Add test for vkUpdateDescriptorSetWithTemplate() with wrapping
Bug: b/336869324 Test: GfxstreamEnd2EndTests Change-Id: Idba8e3f47dd2fcb488640c65dcc76d6dec467b2a
-rw-r--r--common/end2end/GfxstreamEnd2EndVkTests.cpp123
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,