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

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

Issue 1845493002: Added Vulkan Validation to Instance/Device objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@vulkan_context_provider
Patch Set: Revert Patch #6, wrong CL again :( 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 | « no previous file | gpu/vulkan/vulkan_implementation.cc » ('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_device_queue.h" 5 #include "gpu/vulkan/vulkan_device_queue.h"
6 6
7 #include <unordered_set>
7 #include <vector> 8 #include <vector>
8 9
9 #include "gpu/vulkan/vulkan_command_pool.h" 10 #include "gpu/vulkan/vulkan_command_pool.h"
10 #include "gpu/vulkan/vulkan_implementation.h" 11 #include "gpu/vulkan/vulkan_implementation.h"
11 #include "gpu/vulkan/vulkan_platform.h" 12 #include "gpu/vulkan/vulkan_platform.h"
12 13
13 #if defined(VK_USE_PLATFORM_XLIB_KHR) 14 #if defined(VK_USE_PLATFORM_XLIB_KHR)
14 #include "ui/gfx/x/x11_types.h" 15 #include "ui/gfx/x/x11_types.h"
15 #endif // defined(VK_USE_PLATFORM_XLIB_KHR) 16 #endif // defined(VK_USE_PLATFORM_XLIB_KHR)
16 17
17 namespace gpu { 18 namespace gpu {
18 19
19 VulkanDeviceQueue::VulkanDeviceQueue() {} 20 VulkanDeviceQueue::VulkanDeviceQueue() {}
20 21
21 VulkanDeviceQueue::~VulkanDeviceQueue() { 22 VulkanDeviceQueue::~VulkanDeviceQueue() {
22 DCHECK_EQ(static_cast<VkPhysicalDevice>(VK_NULL_HANDLE), vk_physical_device_); 23 DCHECK_EQ(static_cast<VkPhysicalDevice>(VK_NULL_HANDLE), vk_physical_device_);
23 DCHECK_EQ(static_cast<VkDevice>(VK_NULL_HANDLE), vk_device_); 24 DCHECK_EQ(static_cast<VkDevice>(VK_NULL_HANDLE), vk_device_);
24 DCHECK_EQ(static_cast<VkQueue>(VK_NULL_HANDLE), vk_queue_); 25 DCHECK_EQ(static_cast<VkQueue>(VK_NULL_HANDLE), vk_queue_);
25 } 26 }
26 27
27 bool VulkanDeviceQueue::Initialize(uint32_t options) { 28 bool VulkanDeviceQueue::Initialize(uint32_t options) {
28 VkInstance vk_instance = gpu::GetVulkanInstance(); 29 VkInstance vk_instance = gpu::GetVulkanInstance();
29 if (VK_NULL_HANDLE == vk_instance) 30 if (VK_NULL_HANDLE == vk_instance)
30 return false; 31 return false;
31 32
32 VkResult status = VK_SUCCESS; 33 VkResult result = VK_SUCCESS;
33 34
34 uint32_t device_count = 0; 35 uint32_t device_count = 0;
35 status = vkEnumeratePhysicalDevices(vk_instance, &device_count, nullptr); 36 result = vkEnumeratePhysicalDevices(vk_instance, &device_count, nullptr);
36 if (VK_SUCCESS != status || device_count == 0) 37 if (VK_SUCCESS != result || device_count == 0)
37 return false; 38 return false;
38 39
39 std::vector<VkPhysicalDevice> devices(device_count); 40 std::vector<VkPhysicalDevice> devices(device_count);
40 status = 41 result =
41 vkEnumeratePhysicalDevices(vk_instance, &device_count, devices.data()); 42 vkEnumeratePhysicalDevices(vk_instance, &device_count, devices.data());
42 if (VK_SUCCESS != status) { 43 if (VK_SUCCESS != result) {
43 DLOG(ERROR) << "vkEnumeratePhysicalDevices() failed: " << status; 44 DLOG(ERROR) << "vkEnumeratePhysicalDevices() failed: " << result;
44 return false; 45 return false;
45 } 46 }
46 47
47 #if defined(VK_USE_PLATFORM_XLIB_KHR) 48 #if defined(VK_USE_PLATFORM_XLIB_KHR)
48 Display* xdisplay = gfx::GetXDisplay(); 49 Display* xdisplay = gfx::GetXDisplay();
49 VisualID visual_id = 50 VisualID visual_id =
50 XVisualIDFromVisual(DefaultVisual(xdisplay, DefaultScreen(xdisplay))); 51 XVisualIDFromVisual(DefaultVisual(xdisplay, DefaultScreen(xdisplay)));
51 #endif // defined(VK_USE_PLATFORM_XLIB_KHR) 52 #endif // defined(VK_USE_PLATFORM_XLIB_KHR)
52 53
53 VkQueueFlags queue_flags = 0; 54 VkQueueFlags queue_flags = 0;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 98
98 float queue_priority = 0.0f; 99 float queue_priority = 0.0f;
99 VkDeviceQueueCreateInfo queue_create_info = {}; 100 VkDeviceQueueCreateInfo queue_create_info = {};
100 queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; 101 queue_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
101 queue_create_info.queueFamilyIndex = queue_index; 102 queue_create_info.queueFamilyIndex = queue_index;
102 queue_create_info.queueCount = 1; 103 queue_create_info.queueCount = 1;
103 queue_create_info.pQueuePriorities = &queue_priority; 104 queue_create_info.pQueuePriorities = &queue_priority;
104 105
105 const char* device_extensions[] = {VK_KHR_SWAPCHAIN_EXTENSION_NAME}; 106 const char* device_extensions[] = {VK_KHR_SWAPCHAIN_EXTENSION_NAME};
106 107
108 std::vector<const char*> enabled_layer_names;
109 #if DCHECK_IS_ON()
110 uint32_t num_device_layers = 0;
111 result = vkEnumerateDeviceLayerProperties(vk_physical_device_,
112 &num_device_layers, nullptr);
113 if (VK_SUCCESS != result) {
114 DLOG(ERROR) << "vkEnumerateDeviceLayerProperties(NULL) failed: "
115 << result;
116 return false;
117 }
118
119 std::vector<VkLayerProperties> device_layers(num_device_layers);
120 result = vkEnumerateDeviceLayerProperties(vk_physical_device_,
121 &num_device_layers,
122 device_layers.data());
123 if (VK_SUCCESS != result) {
124 DLOG(ERROR) << "vkEnumerateDeviceLayerProperties() failed: " << result;
125 return false;
126 }
127
128 std::unordered_set<std::string> desired_layers({
129 "VK_LAYER_LUNARG_standard_validation",
130 });
131
132 for (const VkLayerProperties& layer_property : device_layers) {
133 if (desired_layers.find(layer_property.layerName) != desired_layers.end())
134 enabled_layer_names.push_back(layer_property.layerName);
135 }
136 #endif
137
107 VkDeviceCreateInfo device_create_info = {}; 138 VkDeviceCreateInfo device_create_info = {};
108 device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; 139 device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
109 device_create_info.queueCreateInfoCount = 1; 140 device_create_info.queueCreateInfoCount = 1;
110 device_create_info.pQueueCreateInfos = &queue_create_info; 141 device_create_info.pQueueCreateInfos = &queue_create_info;
142 device_create_info.enabledLayerCount = enabled_layer_names.size();
143 device_create_info.ppEnabledLayerNames = enabled_layer_names.data();
111 device_create_info.enabledExtensionCount = arraysize(device_extensions); 144 device_create_info.enabledExtensionCount = arraysize(device_extensions);
112 device_create_info.ppEnabledExtensionNames = device_extensions; 145 device_create_info.ppEnabledExtensionNames = device_extensions;
113 146
114 status = vkCreateDevice(vk_physical_device_, &device_create_info, nullptr, 147 result = vkCreateDevice(vk_physical_device_, &device_create_info, nullptr,
115 &vk_device_); 148 &vk_device_);
116 if (VK_SUCCESS != status) 149 if (VK_SUCCESS != result)
117 return false; 150 return false;
118 151
119 vkGetDeviceQueue(vk_device_, queue_index, 0, &vk_queue_); 152 vkGetDeviceQueue(vk_device_, queue_index, 0, &vk_queue_);
120 153
121 return true; 154 return true;
122 } 155 }
123 156
124 void VulkanDeviceQueue::Destroy() { 157 void VulkanDeviceQueue::Destroy() {
125 if (VK_NULL_HANDLE != vk_device_) { 158 if (VK_NULL_HANDLE != vk_device_) {
126 vkDestroyDevice(vk_device_, nullptr); 159 vkDestroyDevice(vk_device_, nullptr);
127 vk_device_ = VK_NULL_HANDLE; 160 vk_device_ = VK_NULL_HANDLE;
128 } 161 }
129 162
130 vk_queue_ = VK_NULL_HANDLE; 163 vk_queue_ = VK_NULL_HANDLE;
131 vk_queue_index_ = 0; 164 vk_queue_index_ = 0;
132 165
133 vk_physical_device_ = VK_NULL_HANDLE; 166 vk_physical_device_ = VK_NULL_HANDLE;
134 } 167 }
135 168
136 scoped_ptr<VulkanCommandPool> VulkanDeviceQueue::CreateCommandPool() { 169 scoped_ptr<VulkanCommandPool> VulkanDeviceQueue::CreateCommandPool() {
137 scoped_ptr<VulkanCommandPool> command_pool(new VulkanCommandPool(this)); 170 scoped_ptr<VulkanCommandPool> command_pool(new VulkanCommandPool(this));
138 if (!command_pool->Initialize()) 171 if (!command_pool->Initialize())
139 return nullptr; 172 return nullptr;
140 173
141 return command_pool; 174 return command_pool;
142 } 175 }
143 176
144 } // namespace gpu 177 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | gpu/vulkan/vulkan_implementation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698