// 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. #ifndef GPU_VULKAN_VULKAN_DEVICE_QUEUE_H_ #define GPU_VULKAN_VULKAN_DEVICE_QUEUE_H_ #include #include #include "base/logging.h" #include "base/macros.h" #include "gpu/vulkan/vulkan_export.h" namespace gpu { class VulkanCommandPool; class VULKAN_EXPORT VulkanDeviceQueue { public: enum DeviceQueueOption { GRAPHICS_QUEUE_FLAG = 0x01, PRESENTATION_SUPPORT_QUEUE_FLAG = 0x02, }; VulkanDeviceQueue(); ~VulkanDeviceQueue(); bool Initialize(uint32_t option); void Destroy(); VkPhysicalDevice GetVulkanPhysicalDevice() const { DCHECK_NE(static_cast(VK_NULL_HANDLE), vk_physical_device_); return vk_physical_device_; } VkDevice GetVulkanDevice() const { DCHECK_NE(static_cast(VK_NULL_HANDLE), vk_device_); return vk_device_; } VkQueue GetVulkanQueue() const { DCHECK_NE(static_cast(VK_NULL_HANDLE), vk_queue_); return vk_queue_; } uint32_t GetVulkanQueueIndex() const { return vk_queue_index_; } std::unique_ptr CreateCommandPool(); private: VkPhysicalDevice vk_physical_device_ = VK_NULL_HANDLE; VkDevice vk_device_ = VK_NULL_HANDLE; VkQueue vk_queue_ = VK_NULL_HANDLE; uint32_t vk_queue_index_ = 0; DISALLOW_COPY_AND_ASSIGN(VulkanDeviceQueue); }; } // namespace gpu #endif // GPU_VULKAN_VULKAN_DEVICE_QUEUE_H_