123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright (c) 2016 The Chromium 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 "gpu/vulkan/vulkan_command_pool.h"
- #include "base/logging.h"
- #include "gpu/vulkan/vulkan_command_buffer.h"
- #include "gpu/vulkan/vulkan_device_queue.h"
- #include "gpu/vulkan/vulkan_function_pointers.h"
- namespace gpu {
- VulkanCommandPool::VulkanCommandPool(VulkanDeviceQueue* device_queue)
- : device_queue_(device_queue) {}
- VulkanCommandPool::~VulkanCommandPool() {
- DCHECK_EQ(0u, command_buffer_count_);
- DCHECK_EQ(static_cast<VkCommandPool>(VK_NULL_HANDLE), handle_);
- }
- bool VulkanCommandPool::Initialize() {
- VkCommandPoolCreateInfo command_pool_create_info = {};
- command_pool_create_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
- command_pool_create_info.flags =
- VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
- command_pool_create_info.queueFamilyIndex =
- device_queue_->GetVulkanQueueIndex();
- VkResult result =
- vkCreateCommandPool(device_queue_->GetVulkanDevice(),
- &command_pool_create_info, nullptr, &handle_);
- if (VK_SUCCESS != result) {
- DLOG(ERROR) << "vkCreateCommandPool() failed: " << result;
- return false;
- }
- return true;
- }
- void VulkanCommandPool::Destroy() {
- DCHECK_EQ(0u, command_buffer_count_);
- if (VK_NULL_HANDLE != handle_) {
- vkDestroyCommandPool(device_queue_->GetVulkanDevice(), handle_, nullptr);
- handle_ = VK_NULL_HANDLE;
- }
- }
- std::unique_ptr<VulkanCommandBuffer>
- VulkanCommandPool::CreatePrimaryCommandBuffer() {
- std::unique_ptr<VulkanCommandBuffer> command_buffer(
- new VulkanCommandBuffer(device_queue_, this, true));
- if (!command_buffer->Initialize())
- return nullptr;
- return command_buffer;
- }
- std::unique_ptr<VulkanCommandBuffer>
- VulkanCommandPool::CreateSecondaryCommandBuffer() {
- auto command_buffer =
- std::make_unique<VulkanCommandBuffer>(device_queue_, this, false);
- if (!command_buffer->Initialize())
- return nullptr;
- return command_buffer;
- }
- void VulkanCommandPool::IncrementCommandBufferCount() {
- command_buffer_count_++;
- }
- void VulkanCommandPool::DecrementCommandBufferCount() {
- DCHECK_LT(0u, command_buffer_count_);
- command_buffer_count_--;
- }
- } // namespace gpu
|