blob: b8973ff6b1b9294fa5828f3ab5f87b84ae3de58a [file] [log] [blame]
dyen2ce3e052016-03-09 21:03:491// Copyright (c) 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "gpu/vulkan/vulkan_implementation.h"
6
Michael Spang7509e6d2018-05-16 17:08:287#include "base/bind.h"
8#include "gpu/vulkan/vulkan_device_queue.h"
Vikas Sonicd499af2019-01-29 19:00:119#include "gpu/vulkan/vulkan_function_pointers.h"
Sergey Ulanovaf257db2019-01-28 20:13:5210#include "gpu/vulkan/vulkan_instance.h"
dyen5bd6d4f2016-03-31 15:25:4511
dyen2ce3e052016-03-09 21:03:4912namespace gpu {
13
Michael Spang7509e6d2018-05-16 17:08:2814VulkanImplementation::VulkanImplementation() {}
dyen2ce3e052016-03-09 21:03:4915
Michael Spang7509e6d2018-05-16 17:08:2816VulkanImplementation::~VulkanImplementation() {}
dyen2ce3e052016-03-09 21:03:4917
Michael Spang7509e6d2018-05-16 17:08:2818std::unique_ptr<VulkanDeviceQueue> CreateVulkanDeviceQueue(
19 VulkanImplementation* vulkan_implementation,
20 uint32_t option) {
21 auto device_queue = std::make_unique<VulkanDeviceQueue>(
Sergey Ulanovaf257db2019-01-28 20:13:5222 vulkan_implementation->GetVulkanInstance()->vk_instance());
Michael Spang7509e6d2018-05-16 17:08:2823 auto callback = base::BindRepeating(
24 &VulkanImplementation::GetPhysicalDevicePresentationSupport,
25 base::Unretained(vulkan_implementation));
Michael Spang4e46bc22018-06-21 23:07:5126 std::vector<const char*> required_extensions =
27 vulkan_implementation->GetRequiredDeviceExtensions();
28 if (!device_queue->Initialize(option, std::move(required_extensions),
29 callback)) {
Michael Spang7509e6d2018-05-16 17:08:2830 device_queue->Destroy();
31 return nullptr;
dyen2ce3e052016-03-09 21:03:4932 }
33
Michael Spang7509e6d2018-05-16 17:08:2834 return device_queue;
dyen2ce3e052016-03-09 21:03:4935}
36
Vikas Sonicd499af2019-01-29 19:00:1137bool VulkanImplementation::SubmitSignalSemaphore(VkQueue vk_queue,
38 VkSemaphore vk_semaphore,
39 VkFence vk_fence) {
40 // Structure specifying a queue submit operation.
41 VkSubmitInfo submit_info = {VK_STRUCTURE_TYPE_SUBMIT_INFO};
42 submit_info.signalSemaphoreCount = 1;
43 submit_info.pSignalSemaphores = &vk_semaphore;
44 const unsigned int submit_count = 1;
45 if (vkQueueSubmit(vk_queue, submit_count, &submit_info, vk_fence) !=
46 VK_SUCCESS) {
47 return false;
48 }
49 return true;
50}
51
52bool VulkanImplementation::SubmitWaitSemaphore(VkQueue vk_queue,
53 VkSemaphore vk_semaphore,
54 VkFence vk_fence) {
55 // Structure specifying a queue submit operation.
56 VkSubmitInfo submit_info = {VK_STRUCTURE_TYPE_SUBMIT_INFO};
57 submit_info.waitSemaphoreCount = 1;
58 submit_info.pWaitSemaphores = &vk_semaphore;
59 const unsigned int submit_count = 1;
60 if (vkQueueSubmit(vk_queue, submit_count, &submit_info, vk_fence) !=
61 VK_SUCCESS) {
62 return false;
63 }
64 return true;
65}
66
dyen2ce3e052016-03-09 21:03:4967} // namespace gpu