VulkanWindowContext_android.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright 2016 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #include "include/gpu/vk/GrVkVulkan.h"
  8. #include "tools/sk_app/android/WindowContextFactory_android.h"
  9. #include "tools/sk_app/VulkanWindowContext.h"
  10. #include "tools/gpu/vk/VkTestUtils.h"
  11. namespace sk_app {
  12. namespace window_context_factory {
  13. WindowContext* NewVulkanForAndroid(ANativeWindow* window, const DisplayParams& params) {
  14. PFN_vkGetInstanceProcAddr instProc;
  15. PFN_vkGetDeviceProcAddr devProc;
  16. if (!sk_gpu_test::LoadVkLibraryAndGetProcAddrFuncs(&instProc, &devProc)) {
  17. return nullptr;
  18. }
  19. auto createVkSurface = [window, instProc] (VkInstance instance) -> VkSurfaceKHR {
  20. PFN_vkCreateAndroidSurfaceKHR createAndroidSurfaceKHR =
  21. (PFN_vkCreateAndroidSurfaceKHR) instProc(instance, "vkCreateAndroidSurfaceKHR");
  22. if (!window) {
  23. return VK_NULL_HANDLE;
  24. }
  25. VkSurfaceKHR surface;
  26. VkAndroidSurfaceCreateInfoKHR surfaceCreateInfo;
  27. memset(&surfaceCreateInfo, 0, sizeof(VkAndroidSurfaceCreateInfoKHR));
  28. surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
  29. surfaceCreateInfo.pNext = nullptr;
  30. surfaceCreateInfo.flags = 0;
  31. surfaceCreateInfo.window = window;
  32. VkResult res = createAndroidSurfaceKHR(instance, &surfaceCreateInfo,
  33. nullptr, &surface);
  34. return (VK_SUCCESS == res) ? surface : VK_NULL_HANDLE;
  35. };
  36. auto canPresent = [](VkInstance, VkPhysicalDevice, uint32_t) { return true; };
  37. WindowContext* ctx = new VulkanWindowContext(params, createVkSurface, canPresent,
  38. instProc, devProc);
  39. if (!ctx->isValid()) {
  40. delete ctx;
  41. return nullptr;
  42. }
  43. return ctx;
  44. }
  45. } // namespace window_context_factory
  46. } // namespace sk_app