vulkan_implementation_win32.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // Copyright (c) 2018 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/win32/vulkan_implementation_win32.h"
  5. #include <Windows.h>
  6. #include "base/check.h"
  7. #include "base/files/file_path.h"
  8. #include "base/notreached.h"
  9. #include "gpu/vulkan/vulkan_function_pointers.h"
  10. #include "gpu/vulkan/vulkan_image.h"
  11. #include "gpu/vulkan/vulkan_instance.h"
  12. #include "gpu/vulkan/vulkan_util.h"
  13. #include "gpu/vulkan/win32/vulkan_surface_win32.h"
  14. #include "ui/gfx/gpu_fence.h"
  15. #include "ui/gfx/gpu_memory_buffer.h"
  16. namespace gpu {
  17. VulkanImplementationWin32::VulkanImplementationWin32(bool use_swiftshader)
  18. : VulkanImplementation(use_swiftshader) {}
  19. VulkanImplementationWin32::~VulkanImplementationWin32() = default;
  20. bool VulkanImplementationWin32::InitializeVulkanInstance(bool using_surface) {
  21. DCHECK(using_surface);
  22. base::FilePath loader_path(use_swiftshader() ? L"vk_swiftshader.dll"
  23. : L"vulkan-1.dll");
  24. std::vector<const char*> required_extensions = {
  25. VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME,
  26. VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME,
  27. VK_KHR_SURFACE_EXTENSION_NAME,
  28. VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
  29. };
  30. return vulkan_instance_.Initialize(loader_path, required_extensions, {});
  31. }
  32. VulkanInstance* VulkanImplementationWin32::GetVulkanInstance() {
  33. return &vulkan_instance_;
  34. }
  35. std::unique_ptr<VulkanSurface> VulkanImplementationWin32::CreateViewSurface(
  36. gfx::AcceleratedWidget window) {
  37. return VulkanSurfaceWin32::Create(vulkan_instance_.vk_instance(), window);
  38. }
  39. bool VulkanImplementationWin32::GetPhysicalDevicePresentationSupport(
  40. VkPhysicalDevice device,
  41. const std::vector<VkQueueFamilyProperties>& queue_family_properties,
  42. uint32_t queue_family_index) {
  43. return vkGetPhysicalDeviceWin32PresentationSupportKHR(device,
  44. queue_family_index);
  45. }
  46. std::vector<const char*>
  47. VulkanImplementationWin32::GetRequiredDeviceExtensions() {
  48. return {
  49. VK_KHR_SWAPCHAIN_EXTENSION_NAME,
  50. };
  51. }
  52. std::vector<const char*>
  53. VulkanImplementationWin32::GetOptionalDeviceExtensions() {
  54. return {
  55. VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME,
  56. VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME,
  57. VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME,
  58. VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME,
  59. };
  60. }
  61. VkFence VulkanImplementationWin32::CreateVkFenceForGpuFence(
  62. VkDevice vk_device) {
  63. NOTREACHED();
  64. return VK_NULL_HANDLE;
  65. }
  66. std::unique_ptr<gfx::GpuFence>
  67. VulkanImplementationWin32::ExportVkFenceToGpuFence(VkDevice vk_device,
  68. VkFence vk_fence) {
  69. NOTREACHED();
  70. return nullptr;
  71. }
  72. VkSemaphore VulkanImplementationWin32::CreateExternalSemaphore(
  73. VkDevice vk_device) {
  74. return CreateExternalVkSemaphore(
  75. vk_device, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT);
  76. }
  77. VkSemaphore VulkanImplementationWin32::ImportSemaphoreHandle(
  78. VkDevice vk_device,
  79. SemaphoreHandle handle) {
  80. return ImportVkSemaphoreHandle(vk_device, std::move(handle));
  81. }
  82. SemaphoreHandle VulkanImplementationWin32::GetSemaphoreHandle(
  83. VkDevice vk_device,
  84. VkSemaphore vk_semaphore) {
  85. return GetVkSemaphoreHandle(
  86. vk_device, vk_semaphore,
  87. VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT);
  88. }
  89. VkExternalMemoryHandleTypeFlagBits
  90. VulkanImplementationWin32::GetExternalImageHandleType() {
  91. return VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT;
  92. }
  93. bool VulkanImplementationWin32::CanImportGpuMemoryBuffer(
  94. VulkanDeviceQueue* device_queue,
  95. gfx::GpuMemoryBufferType memory_buffer_type) {
  96. return false;
  97. }
  98. std::unique_ptr<VulkanImage>
  99. VulkanImplementationWin32::CreateImageFromGpuMemoryHandle(
  100. VulkanDeviceQueue* device_queue,
  101. gfx::GpuMemoryBufferHandle gmb_handle,
  102. gfx::Size size,
  103. VkFormat vk_format) {
  104. NOTIMPLEMENTED();
  105. return nullptr;
  106. }
  107. } // namespace gpu