gl_image_egl_angle_vulkan.cc 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright 2021 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 "ui/gl/gl_image_egl_angle_vulkan.h"
  5. #include <memory>
  6. #include "base/logging.h"
  7. #include "ui/gl/gl_bindings.h"
  8. #include "ui/gl/gl_context_egl.h"
  9. #include "ui/gl/gl_surface_egl.h"
  10. #define EGL_TEXTURE_INTERNAL_FORMAT_ANGLE 0x345D
  11. #define EGL_VULKAN_IMAGE_ANGLE 0x34D3
  12. #define EGL_VULKAN_IMAGE_CREATE_INFO_HI_ANGLE 0x34D4
  13. #define EGL_VULKAN_IMAGE_CREATE_INFO_LO_ANGLE 0x34D5
  14. namespace gl {
  15. GLImageEGLAngleVulkan::GLImageEGLAngleVulkan(const gfx::Size& size)
  16. : GLImageEGL(size) {}
  17. GLImageEGLAngleVulkan::~GLImageEGLAngleVulkan() = default;
  18. bool GLImageEGLAngleVulkan::Initialize(VkImage image,
  19. const VkImageCreateInfo* create_info,
  20. unsigned int internal_format) {
  21. DCHECK(image != VK_NULL_HANDLE);
  22. DCHECK(create_info);
  23. uint64_t info = reinterpret_cast<uint64_t>(create_info);
  24. EGLint attribs[] = {
  25. EGL_VULKAN_IMAGE_CREATE_INFO_HI_ANGLE,
  26. static_cast<EGLint>((info >> 32) & 0xffffffff),
  27. EGL_VULKAN_IMAGE_CREATE_INFO_LO_ANGLE,
  28. static_cast<EGLint>(info & 0xffffffff),
  29. EGL_TEXTURE_INTERNAL_FORMAT_ANGLE,
  30. static_cast<EGLint>(internal_format),
  31. EGL_NONE,
  32. };
  33. bool result = GLImageEGL::Initialize(
  34. EGL_NO_CONTEXT, EGL_VULKAN_IMAGE_ANGLE,
  35. reinterpret_cast<EGLClientBuffer>(&image), attribs);
  36. if (!result) {
  37. LOG(ERROR) << "Create EGLImage from VkImage failed";
  38. return false;
  39. }
  40. return true;
  41. }
  42. } // namespace gl