vulkan_implementation.cc 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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
  3. // found in the LICENSE file.
  4. #include "gpu/vulkan/vulkan_implementation.h"
  5. #include "base/bind.h"
  6. #include "gpu/vulkan/vulkan_device_queue.h"
  7. #include "gpu/vulkan/vulkan_function_pointers.h"
  8. #include "gpu/vulkan/vulkan_instance.h"
  9. namespace gpu {
  10. VulkanImplementation::VulkanImplementation(bool use_swiftshader,
  11. bool allow_protected_memory)
  12. : use_swiftshader_(use_swiftshader),
  13. allow_protected_memory_(allow_protected_memory) {}
  14. VulkanImplementation::~VulkanImplementation() {}
  15. std::unique_ptr<VulkanDeviceQueue> CreateVulkanDeviceQueue(
  16. VulkanImplementation* vulkan_implementation,
  17. uint32_t option,
  18. const GPUInfo* gpu_info,
  19. uint32_t heap_memory_limit) {
  20. auto* instance = vulkan_implementation->GetVulkanInstance();
  21. auto device_queue = std::make_unique<VulkanDeviceQueue>(instance);
  22. auto callback = base::BindRepeating(
  23. &VulkanImplementation::GetPhysicalDevicePresentationSupport,
  24. base::Unretained(vulkan_implementation));
  25. std::vector<const char*> required_extensions =
  26. vulkan_implementation->GetRequiredDeviceExtensions();
  27. std::vector<const char*> optional_extensions =
  28. vulkan_implementation->GetOptionalDeviceExtensions();
  29. if (instance->is_from_angle()) {
  30. if (!device_queue->InitializeFromANGLE()) {
  31. device_queue->Destroy();
  32. return nullptr;
  33. }
  34. } else {
  35. if (!device_queue->Initialize(
  36. option, gpu_info, std::move(required_extensions),
  37. std::move(optional_extensions),
  38. vulkan_implementation->allow_protected_memory(), callback,
  39. heap_memory_limit)) {
  40. device_queue->Destroy();
  41. return nullptr;
  42. }
  43. }
  44. return device_queue;
  45. }
  46. } // namespace gpu