blob: 47e2cfe44410353820be7a09aa56c4ddbd383ee5 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "impeller/renderer/backend/vulkan/descriptor_pool_vk.h"
#include "fml/logging.h"
#include "impeller/base/validation.h"
#include "vulkan/vulkan_enums.hpp"
namespace impeller {
DescriptorPoolVK::DescriptorPoolVK(vk::Device device) {
constexpr size_t kPoolSize = 1024;
std::vector<vk::DescriptorPoolSize> pool_sizes = {
{vk::DescriptorType::eSampler, kPoolSize},
{vk::DescriptorType::eCombinedImageSampler, kPoolSize},
{vk::DescriptorType::eSampledImage, kPoolSize},
{vk::DescriptorType::eStorageImage, kPoolSize},
{vk::DescriptorType::eUniformTexelBuffer, kPoolSize},
{vk::DescriptorType::eStorageTexelBuffer, kPoolSize},
{vk::DescriptorType::eUniformBuffer, kPoolSize},
{vk::DescriptorType::eStorageBuffer, kPoolSize},
{vk::DescriptorType::eUniformBufferDynamic, kPoolSize},
{vk::DescriptorType::eStorageBufferDynamic, kPoolSize},
{vk::DescriptorType::eInputAttachment, kPoolSize},
};
vk::DescriptorPoolCreateInfo pool_info = {
vk::DescriptorPoolCreateFlagBits::eFreeDescriptorSet, // flags
static_cast<uint32_t>(pool_sizes.size() * kPoolSize), // max sets
static_cast<uint32_t>(pool_sizes.size()), // pool sizes count
pool_sizes.data() // pool sizes
};
auto res = device.createDescriptorPool(pool_info);
if (res.result != vk::Result::eSuccess) {
VALIDATION_LOG << "Unable to create a descriptor pool";
return;
}
pool_ = res.value;
is_valid_ = true;
}
vk::DescriptorPool DescriptorPoolVK::GetPool() {
return pool_;
}
DescriptorPoolVK::~DescriptorPoolVK() = default;
} // namespace impeller