Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Side by Side Diff: gpu/vulkan/vulkan_implementation.cc

Issue 1776453003: Added initial implementation of Vulkan Render Passes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gn_vulkan
Patch Set: Adding logging/macros headers Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gpu/vulkan/vulkan_implementation.h ('k') | gpu/vulkan/vulkan_platform.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/vulkan/vulkan_implementation.h" 5 #include "gpu/vulkan/vulkan_implementation.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 #include <vulkan/vulkan.h> 9 #include <vulkan/vulkan.h>
10 10
11 #include "base/logging.h"
11 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "gpu/vulkan/vulkan_command_pool.h"
12 14
13 #if defined(VK_USE_PLATFORM_XLIB_KHR) 15 #if defined(VK_USE_PLATFORM_XLIB_KHR)
14 #include "ui/gfx/x/x11_types.h" 16 #include "ui/gfx/x/x11_types.h"
15 #endif // defined(VK_USE_PLATFORM_XLIB_KHR) 17 #endif // defined(VK_USE_PLATFORM_XLIB_KHR)
16 18
17 namespace gpu { 19 namespace gpu {
18 20
19 struct VulkanInstance { 21 struct VulkanInstance {
20 VulkanInstance() : valid(false) {} 22 VulkanInstance() {}
21 23
22 void Initialize() { 24 void Initialize() {
23 valid = InitializeVulkanInstance() && InitializeVulkanDevice(); 25 valid = InitializeVulkanInstance() && InitializeVulkanDevice();
24 } 26 }
25 27
26 bool InitializeVulkanInstance() { 28 bool InitializeVulkanInstance() {
27 VkResult status = VK_SUCCESS; 29 VkResult status = VK_SUCCESS;
28 30
29 VkApplicationInfo app_info = {}; 31 VkApplicationInfo app_info = {};
30 app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; 32 app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
(...skipping 27 matching lines...) Expand all
58 60
59 uint32_t device_count = 0; 61 uint32_t device_count = 0;
60 status = vkEnumeratePhysicalDevices(vk_instance, &device_count, nullptr); 62 status = vkEnumeratePhysicalDevices(vk_instance, &device_count, nullptr);
61 if (VK_SUCCESS != status || device_count == 0) 63 if (VK_SUCCESS != status || device_count == 0)
62 return false; 64 return false;
63 65
64 std::vector<VkPhysicalDevice> devices(device_count); 66 std::vector<VkPhysicalDevice> devices(device_count);
65 status = 67 status =
66 vkEnumeratePhysicalDevices(vk_instance, &device_count, devices.data()); 68 vkEnumeratePhysicalDevices(vk_instance, &device_count, devices.data());
67 if (VK_SUCCESS != status) { 69 if (VK_SUCCESS != status) {
68 LOG(ERROR) << "vkEnumeratePhysicalDevices() failed: " << status; 70 DLOG(ERROR) << "vkEnumeratePhysicalDevices() failed: " << status;
69 return false; 71 return false;
70 } 72 }
71 73
72 // TODO(dyen): Enable this once vkGetPhysicalDeviceXlibPresentationSupportKHR() 74 // TODO(dyen): Enable this once vkGetPhysicalDeviceXlibPresentationSupportKHR()
73 // is properly supported in the driver. 75 // is properly supported in the driver.
74 #if 0 && defined(VK_USE_PLATFORM_XLIB_KHR) 76 #if 0 && defined(VK_USE_PLATFORM_XLIB_KHR)
75 Display* xdisplay = gfx::GetXDisplay(); 77 Display* xdisplay = gfx::GetXDisplay();
76 VisualID visual_id = 78 VisualID visual_id =
77 XVisualIDFromVisual(DefaultVisual(xdisplay, DefaultScreen(xdisplay))); 79 XVisualIDFromVisual(DefaultVisual(xdisplay, DefaultScreen(xdisplay)));
78 #endif // defined(VK_USE_PLATFORM_XLIB_KHR) 80 #endif // defined(VK_USE_PLATFORM_XLIB_KHR)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 if (-1 != queue_index) { 112 if (-1 != queue_index) {
111 device_index = static_cast<int>(i); 113 device_index = static_cast<int>(i);
112 break; 114 break;
113 } 115 }
114 } 116 }
115 } 117 }
116 118
117 if (queue_index == -1) 119 if (queue_index == -1)
118 return false; 120 return false;
119 121
122 vk_physical_device = devices[device_index];
123 vk_queue_index = queue_index;
124
120 float queue_priority = 0.0f; 125 float queue_priority = 0.0f;
121 VkDeviceQueueCreateInfo queue_create_info = {}; 126 VkDeviceQueueCreateInfo queue_create_info = {};
122 queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; 127 queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
123 queue_create_info.queueFamilyIndex = queue_index; 128 queue_create_info.queueFamilyIndex = queue_index;
124 queue_create_info.queueCount = 1; 129 queue_create_info.queueCount = 1;
125 queue_create_info.pQueuePriorities = &queue_priority; 130 queue_create_info.pQueuePriorities = &queue_priority;
126 131
127 const char* device_extensions[] = {VK_KHR_SWAPCHAIN_EXTENSION_NAME}; 132 const char* device_extensions[] = {VK_KHR_SWAPCHAIN_EXTENSION_NAME};
128 133
129 VkDeviceCreateInfo device_create_info = {}; 134 VkDeviceCreateInfo device_create_info = {};
130 device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; 135 device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
131 device_create_info.queueCreateInfoCount = 1; 136 device_create_info.queueCreateInfoCount = 1;
132 device_create_info.pQueueCreateInfos = &queue_create_info; 137 device_create_info.pQueueCreateInfos = &queue_create_info;
133 device_create_info.enabledExtensionCount = arraysize(device_extensions); 138 device_create_info.enabledExtensionCount = arraysize(device_extensions);
134 device_create_info.ppEnabledExtensionNames = device_extensions; 139 device_create_info.ppEnabledExtensionNames = device_extensions;
135 140
136 status = vkCreateDevice(devices[device_index], &device_create_info, nullptr, 141 status = vkCreateDevice(vk_physical_device, &device_create_info, nullptr,
137 &vk_device); 142 &vk_device);
138 if (VK_SUCCESS != status) 143 if (VK_SUCCESS != status)
139 return false; 144 return false;
140 145
141 vkGetDeviceQueue(vk_device, queue_index, 0, &vk_queue); 146 vkGetDeviceQueue(vk_device, queue_index, 0, &vk_queue);
142 147
143 return true; 148 return true;
144 } 149 }
145 150
146 bool valid; 151 bool valid = false;
147 VkInstance vk_instance; 152 VkInstance vk_instance;
153 VkPhysicalDevice vk_physical_device;
148 VkDevice vk_device; 154 VkDevice vk_device;
149 VkQueue vk_queue; 155 VkQueue vk_queue;
156 uint32_t vk_queue_index = 0;
150 }; 157 };
151 158
152 static VulkanInstance* vulkan_instance = nullptr; 159 static VulkanInstance* vulkan_instance = nullptr;
153 160
154 bool InitializeVulkan() { 161 bool InitializeVulkan() {
155 DCHECK(!vulkan_instance); 162 DCHECK(!vulkan_instance);
156 vulkan_instance = new VulkanInstance; 163 vulkan_instance = new VulkanInstance;
157 vulkan_instance->Initialize(); 164 vulkan_instance->Initialize();
158 return vulkan_instance->valid; 165 return vulkan_instance->valid;
159 } 166 }
160 167
161 VkInstance GetVulkanInstance() { 168 VkInstance GetVulkanInstance() {
162 DCHECK(vulkan_instance); 169 DCHECK(vulkan_instance);
163 DCHECK(vulkan_instance->valid); 170 DCHECK(vulkan_instance->valid);
164 return vulkan_instance->vk_instance; 171 return vulkan_instance->vk_instance;
165 } 172 }
166 173
174 VkPhysicalDevice GetVulkanPhysicalDevice() {
175 DCHECK(vulkan_instance);
176 DCHECK(vulkan_instance->valid);
177 return vulkan_instance->vk_physical_device;
178 }
179
167 VkDevice GetVulkanDevice() { 180 VkDevice GetVulkanDevice() {
168 DCHECK(vulkan_instance); 181 DCHECK(vulkan_instance);
169 DCHECK(vulkan_instance->valid); 182 DCHECK(vulkan_instance->valid);
170 return vulkan_instance->vk_device; 183 return vulkan_instance->vk_device;
171 } 184 }
172 185
173 VkQueue GetVulkanQueue() { 186 VkQueue GetVulkanQueue() {
174 DCHECK(vulkan_instance); 187 DCHECK(vulkan_instance);
175 DCHECK(vulkan_instance->valid); 188 DCHECK(vulkan_instance->valid);
176 return vulkan_instance->vk_queue; 189 return vulkan_instance->vk_queue;
177 } 190 }
178 191
192 scoped_ptr<VulkanCommandPool> CreateCommandPool() {
193 DCHECK(vulkan_instance);
194 DCHECK(vulkan_instance->valid);
195
196 scoped_ptr<VulkanCommandPool> command_pool(new VulkanCommandPool(
197 vulkan_instance->vk_device, vulkan_instance->vk_queue_index));
198 if (!command_pool->Initialize())
199 return nullptr;
200
201 return command_pool;
202 }
203
179 } // namespace gpu 204 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/vulkan/vulkan_implementation.h ('k') | gpu/vulkan/vulkan_platform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698