From 5dabcd999707a5f59ee6ebaa75b5b165c182511d Mon Sep 17 00:00:00 2001 From: Dunfan Lu Date: Tue, 25 Jan 2022 00:50:24 +0000 Subject: [PATCH 1/2] Avoid all usage of glfw/vulkan/volk when TI_EMSCRIPTENED --- taichi/backends/vulkan/vulkan_device.cpp | 6 ++++-- taichi/backends/vulkan/vulkan_device.h | 4 ++-- taichi/backends/vulkan/vulkan_loader.cpp | 6 +++--- taichi/backends/vulkan/vulkan_program.cpp | 14 ++++++++------ taichi/gui/gui.h | 13 ++++++++++++- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/taichi/backends/vulkan/vulkan_device.cpp b/taichi/backends/vulkan/vulkan_device.cpp index 494e347103aff..f99e7b568e242 100644 --- a/taichi/backends/vulkan/vulkan_device.cpp +++ b/taichi/backends/vulkan/vulkan_device.cpp @@ -1919,6 +1919,7 @@ VkPresentModeKHR choose_swap_present_mode( VulkanSurface::VulkanSurface(VulkanDevice *device, const SurfaceConfig &config) : config_(config), device_(device) { +#if !defined(TI_EMSCRIPTENED) #ifdef ANDROID window_ = (ANativeWindow *)config.window_handle; #else @@ -1964,6 +1965,7 @@ VulkanSurface::VulkanSurface(VulkanDevice *device, const SurfaceConfig &config) swapchain_images_.push_back(device->create_image(params)); swapchain_images_.push_back(device->create_image(params)); } +#endif } void VulkanSurface::create_swap_chain() { @@ -2019,7 +2021,7 @@ void VulkanSurface::create_swap_chain() { #ifdef ANDROID width = ANativeWindow_getWidth(window_); height = ANativeWindow_getWidth(window_); -#else +#elif !defined(TI_EMSCRIPTENED) glfwGetFramebufferSize(window_, &width, &height); #endif @@ -2129,7 +2131,7 @@ std::pair VulkanSurface::get_size() { #ifdef ANDROID width = ANativeWindow_getWidth(window_); height = ANativeWindow_getWidth(window_); -#else +#elif !defined(TI_EMSCRIPTENED) glfwGetFramebufferSize(window_, &width, &height); #endif return std::make_pair(width, height); diff --git a/taichi/backends/vulkan/vulkan_device.h b/taichi/backends/vulkan/vulkan_device.h index 3ee56d3bc9444..944d75e6e01ab 100644 --- a/taichi/backends/vulkan/vulkan_device.h +++ b/taichi/backends/vulkan/vulkan_device.h @@ -6,7 +6,7 @@ #ifdef ANDROID #include -#else +#elif !defined(TI_EMSCRIPTENED) #include #endif @@ -387,7 +387,7 @@ class VulkanSurface : public Surface { VkSemaphore image_available_; #ifdef ANDROID ANativeWindow *window_; -#else +#elif !defined(TI_EMSCRIPTENED) GLFWwindow *window_; #endif BufferFormat image_format_; diff --git a/taichi/backends/vulkan/vulkan_loader.cpp b/taichi/backends/vulkan/vulkan_loader.cpp index 80e63c2262833..30cc1051a9c93 100644 --- a/taichi/backends/vulkan/vulkan_loader.cpp +++ b/taichi/backends/vulkan/vulkan_loader.cpp @@ -17,7 +17,7 @@ bool VulkanLoader::init() { if (initialized) { return; } -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(TI_EMSCRIPTENED) initialized = true; #else VkResult result = volkInitialize(); @@ -29,14 +29,14 @@ bool VulkanLoader::init() { void VulkanLoader::load_instance(VkInstance instance) { vulkan_instance_ = instance; -#ifdef __APPLE__ +#ifdef defined(__APPLE__) || defined(TI_EMSCRIPTENED) #else volkLoadInstance(instance); #endif } void VulkanLoader::load_device(VkDevice device) { vulkan_device_ = device; -#ifdef __APPLE__ +#ifdef defined(__APPLE__) || defined(TI_EMSCRIPTENED) #else volkLoadDevice(device); #endif diff --git a/taichi/backends/vulkan/vulkan_program.cpp b/taichi/backends/vulkan/vulkan_program.cpp index b40e2422cd26a..b197129495eb8 100644 --- a/taichi/backends/vulkan/vulkan_program.cpp +++ b/taichi/backends/vulkan/vulkan_program.cpp @@ -1,8 +1,7 @@ #include "taichi/backends/vulkan/vulkan_program.h" #include "taichi/backends/vulkan/aot_module_builder_impl.h" -#ifdef ANDROID -#else +#if !defined(ANDROID) && !defined(TI_EMSCRIPTENED) #include "GLFW/glfw3.h" #endif @@ -22,16 +21,17 @@ std::vector get_required_instance_extensions() { return extensions; #else + std::vector extensions; + +#ifndef TI_EMSCRIPTENED uint32_t glfw_ext_count = 0; const char **glfw_extensions; glfw_extensions = glfwGetRequiredInstanceExtensions(&glfw_ext_count); - std::vector extensions; - for (int i = 0; i < glfw_ext_count; ++i) { extensions.push_back(glfw_extensions[i]); } - +#endif // VulkanDeviceCreator will check that these are supported extensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); #if TI_WITH_CUDA @@ -85,6 +85,7 @@ void VulkanProgramImpl::materialize_runtime(MemoryPool *memory_pool, *result_buffer_ptr = (uint64 *)memory_pool->allocate( sizeof(uint64) * taichi_result_buffer_entries, 8); +#ifndef TI_EMSCRIPTENED // Android is meant to be embedded in other application only so the creation of // the device and other states is left to the caller/host. // The following code is only used when Taichi is running on its own. @@ -105,11 +106,12 @@ void VulkanProgramImpl::materialize_runtime(MemoryPool *memory_pool, TI_WARN("GLFW reports no Vulkan support"); } } +#endif #endif VulkanDeviceCreator::Params evd_params; evd_params.api_version = VulkanEnvSettings::kApiVersion(); -#ifndef ANDROID +#if !defined(ANDROID) && !defined(TI_EMSCRIPTENED) if (glfw_window) { // then we should be able to create a device with graphics abilities evd_params.additional_instance_extensions = diff --git a/taichi/gui/gui.h b/taichi/gui/gui.h index 9b051e93ec6e3..c4d599e6da8e8 100644 --- a/taichi/gui/gui.h +++ b/taichi/gui/gui.h @@ -13,7 +13,7 @@ (defined(TI_PLATFORM_UNIX) && !defined(TI_PLATFORM_OSX)) #if defined(TI_PLATFORM_ANDROID) #define TI_GUI_ANDROID -#else +#elif !defined(TI_EMSCRIPTENED) #define TI_GUI_X11 #endif #endif @@ -448,6 +448,17 @@ using GUIBase = GUIBaseAndroid; #endif +#if defined(TI_EMSCRIPTENED) + +class GUIBaseJavascript { + public: + // @TODO +}; + +using GUIBase = GUIBaseJavascript; + +#endif + #if defined(TI_GUI_X11) class CXImage; From 297656365ae9ff37e56a5eb3cf5979dcca61d73c Mon Sep 17 00:00:00 2001 From: Dunfan Lu Date: Tue, 25 Jan 2022 01:26:30 +0000 Subject: [PATCH 2/2] fix --- taichi/backends/vulkan/vulkan_loader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/taichi/backends/vulkan/vulkan_loader.cpp b/taichi/backends/vulkan/vulkan_loader.cpp index 30cc1051a9c93..90059f27e4bae 100644 --- a/taichi/backends/vulkan/vulkan_loader.cpp +++ b/taichi/backends/vulkan/vulkan_loader.cpp @@ -29,14 +29,14 @@ bool VulkanLoader::init() { void VulkanLoader::load_instance(VkInstance instance) { vulkan_instance_ = instance; -#ifdef defined(__APPLE__) || defined(TI_EMSCRIPTENED) +#if defined(__APPLE__) || defined(TI_EMSCRIPTENED) #else volkLoadInstance(instance); #endif } void VulkanLoader::load_device(VkDevice device) { vulkan_device_ = device; -#ifdef defined(__APPLE__) || defined(TI_EMSCRIPTENED) +#if defined(__APPLE__) || defined(TI_EMSCRIPTENED) #else volkLoadDevice(device); #endif