From a985c53048415441ccfa5f255d7e30d8df175cf4 Mon Sep 17 00:00:00 2001 From: andrew0229 Date: Thu, 27 Apr 2023 06:51:03 +0000 Subject: [PATCH] add native buffer ext Signed-off-by: andrew0229 Change-Id: Ia4fdb5b13685e6940aebea93133b2ed510d90b84 --- loader/generated/vk_dispatch_table_helper.h | 39 +++++- loader/generated/vk_layer_dispatch_table.h | 30 ++++- loader/generated/vk_loader_extensions.c | 140 ++++++++++++++++++++ openharmony/BUILD.gn | 13 +- 4 files changed, 209 insertions(+), 13 deletions(-) diff --git a/loader/generated/vk_dispatch_table_helper.h b/loader/generated/vk_dispatch_table_helper.h index 6641530f..018bace1 100644 --- a/loader/generated/vk_dispatch_table_helper.h +++ b/loader/generated/vk_dispatch_table_helper.h @@ -404,7 +404,21 @@ static VKAPI_ATTR void VKAPI_CALL StubCmdSetRayTracingPipelineStackSizeKHR(VkCom static VKAPI_ATTR void VKAPI_CALL StubCmdDrawMeshTasksEXT(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) { } static VKAPI_ATTR void VKAPI_CALL StubCmdDrawMeshTasksIndirectEXT(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) { } static VKAPI_ATTR void VKAPI_CALL StubCmdDrawMeshTasksIndirectCountEXT(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) { } - +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +static VKAPI_ATTR VkResult VKAPI_CALL StubGetSwapchainGrallocUsageOpenHarmony(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, uint64_t* grallocUsage) { return VK_SUCCESS; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +static VKAPI_ATTR VkResult VKAPI_CALL StubSetNativeFenceFdOpenHarmony(VkDevice device, int32_t nativeFenceFd, VkSemaphore semaphore, VkFence fence) { return VK_SUCCESS; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +static VKAPI_ATTR VkResult VKAPI_CALL StubGetNativeFenceFdOpenHarmony( VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int32_t* pNativeFenceFd) { return VK_SUCCESS; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +static VKAPI_ATTR VkResult VKAPI_CALL StubGetOHOSNativeBufferPropertiesOpenHarmony( VkDevice device, const struct OH_NativeBuffer* buffer, VkOHOSNativeBufferPropertiesOpenHarmony* pProperties) { return VK_SUCCESS; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryOHOSNativeBufferOpenHarmony( VkDevice device, const VkMemoryGetOHOSNativeBufferInfoOpenHarmony* pInfo, struct OH_NativeBuffer** pBuffer) { return VK_SUCCESS; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY static inline void layer_init_device_dispatch_table(VkDevice device, VkLayerDispatchTable *table, PFN_vkGetDeviceProcAddr gpa) { @@ -1288,6 +1302,26 @@ static inline void layer_init_device_dispatch_table(VkDevice device, VkLayerDisp if (table->CmdDrawMeshTasksIndirectEXT == nullptr) { table->CmdDrawMeshTasksIndirectEXT = (PFN_vkCmdDrawMeshTasksIndirectEXT)StubCmdDrawMeshTasksIndirectEXT; } table->CmdDrawMeshTasksIndirectCountEXT = (PFN_vkCmdDrawMeshTasksIndirectCountEXT) gpa(device, "vkCmdDrawMeshTasksIndirectCountEXT"); if (table->CmdDrawMeshTasksIndirectCountEXT == nullptr) { table->CmdDrawMeshTasksIndirectCountEXT = (PFN_vkCmdDrawMeshTasksIndirectCountEXT)StubCmdDrawMeshTasksIndirectCountEXT; } +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetSwapchainGrallocUsageOpenHarmony = (PFN_vkGetSwapchainGrallocUsageOpenHarmony) gpa(device, "vkGetSwapchainGrallocUsageOpenHarmony"); + if (table->GetSwapchainGrallocUsageOpenHarmony == nullptr) { table->GetSwapchainGrallocUsageOpenHarmony = (PFN_vkGetSwapchainGrallocUsageOpenHarmony)StubGetSwapchainGrallocUsageOpenHarmony; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->SetNativeFenceFdOpenHarmony = (PFN_vkSetNativeFenceFdOpenHarmony) gpa(device, "vkSetNativeFenceFdOpenHarmony"); + if (table->SetNativeFenceFdOpenHarmony == nullptr) { table->SetNativeFenceFdOpenHarmony = (PFN_vkSetNativeFenceFdOpenHarmony)StubSetNativeFenceFdOpenHarmony; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetNativeFenceFdOpenHarmony = (PFN_vkGetNativeFenceFdOpenHarmony) gpa(device, "vkGetNativeFenceFdOpenHarmony"); + if (table->GetNativeFenceFdOpenHarmony == nullptr) { table->GetNativeFenceFdOpenHarmony = (PFN_vkGetNativeFenceFdOpenHarmony)StubGetNativeFenceFdOpenHarmony; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetOHOSNativeBufferPropertiesOpenHarmony = (PFN_vkGetOHOSNativeBufferPropertiesOpenHarmony) gpa(device, "vkGetOHOSNativeBufferPropertiesOpenHarmony"); + if (table->GetOHOSNativeBufferPropertiesOpenHarmony == nullptr) { table->GetOHOSNativeBufferPropertiesOpenHarmony = (PFN_vkGetOHOSNativeBufferPropertiesOpenHarmony)StubGetOHOSNativeBufferPropertiesOpenHarmony; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetMemoryOHOSNativeBufferOpenHarmony = (PFN_vkGetMemoryOHOSNativeBufferOpenHarmony) gpa(device, "vkGetMemoryOHOSNativeBufferOpenHarmony"); + if (table->GetMemoryOHOSNativeBufferOpenHarmony == nullptr) { table->GetMemoryOHOSNativeBufferOpenHarmony = (PFN_vkGetMemoryOHOSNativeBufferOpenHarmony)StubGetMemoryOHOSNativeBufferOpenHarmony; } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY } @@ -1448,4 +1482,7 @@ static inline void layer_init_instance_dispatch_table(VkInstance instance, VkLay table->GetPhysicalDeviceScreenPresentationSupportQNX = (PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX) gpa(instance, "vkGetPhysicalDeviceScreenPresentationSupportQNX"); #endif // VK_USE_PLATFORM_SCREEN_QNX table->GetPhysicalDeviceOpticalFlowImageFormatsNV = (PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV) gpa(instance, "vkGetPhysicalDeviceOpticalFlowImageFormatsNV"); +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->CreateOHOSSurfaceOpenHarmony = (PFN_vkCreateOHOSSurfaceOpenHarmony) gpa(instance, "vkCreateOHOSSurfaceOpenHarmony"); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY } diff --git a/loader/generated/vk_layer_dispatch_table.h b/loader/generated/vk_layer_dispatch_table.h index 4367b1ce..d6a88830 100644 --- a/loader/generated/vk_layer_dispatch_table.h +++ b/loader/generated/vk_layer_dispatch_table.h @@ -113,12 +113,6 @@ typedef struct VkLayerInstanceDispatchTable_ { #ifdef VK_USE_PLATFORM_ANDROID_KHR PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR; #endif // VK_USE_PLATFORM_ANDROID_KHR - - // ---- VK_OpenHarmony_OHOS_surface extension commands -#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY - PFN_vkCreateOHOSSurfaceOpenHarmony CreateOHOSSurfaceOpenHarmony; -#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY - // ---- VK_KHR_win32_surface extension commands #ifdef VK_USE_PLATFORM_WIN32_KHR PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR; @@ -283,6 +277,10 @@ typedef struct VkLayerInstanceDispatchTable_ { // ---- VK_NV_optical_flow extension commands PFN_vkGetPhysicalDeviceOpticalFlowImageFormatsNV GetPhysicalDeviceOpticalFlowImageFormatsNV; + // ---- VK_OpenHarmony_OHOS_surface extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + PFN_vkCreateOHOSSurfaceOpenHarmony CreateOHOSSurfaceOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY } VkLayerInstanceDispatchTable; // Device function pointer dispatch table @@ -1054,6 +1052,26 @@ typedef struct VkLayerDispatchTable_ { PFN_vkCmdDrawMeshTasksEXT CmdDrawMeshTasksEXT; PFN_vkCmdDrawMeshTasksIndirectEXT CmdDrawMeshTasksIndirectEXT; PFN_vkCmdDrawMeshTasksIndirectCountEXT CmdDrawMeshTasksIndirectCountEXT; + + // ---- VK_OHOS_native_buffer extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + PFN_vkGetSwapchainGrallocUsageOpenHarmony GetSwapchainGrallocUsageOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + PFN_vkSetNativeFenceFdOpenHarmony SetNativeFenceFdOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + PFN_vkGetNativeFenceFdOpenHarmony GetNativeFenceFdOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + + // ---- VK_OpenHarmony_external_memory_OHOS_native_buffer extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + PFN_vkGetOHOSNativeBufferPropertiesOpenHarmony GetOHOSNativeBufferPropertiesOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + PFN_vkGetMemoryOHOSNativeBufferOpenHarmony GetMemoryOHOSNativeBufferOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + } VkLayerDispatchTable; diff --git a/loader/generated/vk_loader_extensions.c b/loader/generated/vk_loader_extensions.c index ea55ccff..f9373352 100644 --- a/loader/generated/vk_loader_extensions.c +++ b/loader/generated/vk_loader_extensions.c @@ -1113,6 +1113,24 @@ VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct lo table->CmdDrawMeshTasksEXT = (PFN_vkCmdDrawMeshTasksEXT)gdpa(dev, "vkCmdDrawMeshTasksEXT"); table->CmdDrawMeshTasksIndirectEXT = (PFN_vkCmdDrawMeshTasksIndirectEXT)gdpa(dev, "vkCmdDrawMeshTasksIndirectEXT"); table->CmdDrawMeshTasksIndirectCountEXT = (PFN_vkCmdDrawMeshTasksIndirectCountEXT)gdpa(dev, "vkCmdDrawMeshTasksIndirectCountEXT"); + // ---- VK_OHOS_native_buffer extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetSwapchainGrallocUsageOpenHarmony = (PFN_vkGetSwapchainGrallocUsageOpenHarmony)gdpa(dev, "vkGetSwapchainGrallocUsageOpenHarmony"); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->SetNativeFenceFdOpenHarmony = (PFN_vkSetNativeFenceFdOpenHarmony)gdpa(dev, "vkSetNativeFenceFdOpenHarmony"); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetNativeFenceFdOpenHarmony = (PFN_vkGetNativeFenceFdOpenHarmony)gdpa(dev, "vkGetNativeFenceFdOpenHarmony"); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + + // ---- VK_OpenHarmony_external_memory_OHOS_native_buffer extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetOHOSNativeBufferPropertiesOpenHarmony = (PFN_vkGetOHOSNativeBufferPropertiesOpenHarmony)gdpa(dev, "vkGetOHOSNativeBufferPropertiesOpenHarmony"); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->GetMemoryOHOSNativeBufferOpenHarmony = (PFN_vkGetMemoryOHOSNativeBufferOpenHarmony)gdpa(dev, "vkGetMemoryOHOSNativeBufferOpenHarmony"); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY } // Init Instance function pointer dispatch table with core commands @@ -7788,6 +7806,94 @@ VKAPI_ATTR void VKAPI_CALL CmdDrawMeshTasksIndirectCountEXT( disp->CmdDrawMeshTasksIndirectCountEXT(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); } +// ---- VK_OHOS_native_buffer extension trampoline/terminators + +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +VKAPI_ATTR VkResult GetSwapchainGrallocUsageOpenHarmony( + VkDevice device, + VkFormat format, + VkImageUsageFlags imageUsage, + uint64_t* grallocUsage) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetSwapchainGrallocUsageOpenHarmony: Invalid device " + "[VUID-vkGetSwapchainGrallocUsageOpenHarmony-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetSwapchainGrallocUsageOpenHarmony(device, format, imageUsage, grallocUsage); +} +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +VKAPI_ATTR VkResult SetNativeFenceFdOpenHarmony( + VkDevice device, + int32_t nativeFenceFd, + VkSemaphore semaphore, + VkFence fence) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkSetNativeFenceFdOpenHarmony: Invalid device " + "[VUID-vkSetNativeFenceFdOpenHarmony-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->SetNativeFenceFdOpenHarmony(device, nativeFenceFd, semaphore, fence); +} +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +VKAPI_ATTR VkResult GetNativeFenceFdOpenHarmony( + VkQueue queue, + uint32_t waitSemaphoreCount, + const VkSemaphore* pWaitSemaphores, + VkImage image, + int32_t* pNativeFenceFd) { + const VkLayerDispatchTable *disp = loader_get_dispatch(queue); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetNativeFenceFdOpenHarmony: Invalid queue " + "[VUID-vkGetNativeFenceFdOpenHarmony-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetNativeFenceFdOpenHarmony(queue, waitSemaphoreCount, pWaitSemaphores, image, pNativeFenceFd); +} +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + +// ---- VK_OpenHarmony_external_memory_OHOS_native_buffer extension trampoline/terminators + +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +VKAPI_ATTR VkResult GetOHOSNativeBufferPropertiesOpenHarmony( + VkDevice device, + const struct OH_NativeBuffer* buffer, + VkOHOSNativeBufferPropertiesOpenHarmony* pProperties) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetOHOSNativeBufferPropertiesOpenHarmony: Invalid device " + "[VUID-vkGetOHOSNativeBufferPropertiesOpenHarmony-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetOHOSNativeBufferPropertiesOpenHarmony(device, buffer, pProperties); +} +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +VKAPI_ATTR VkResult GetMemoryOHOSNativeBufferOpenHarmony( + VkDevice device, + const VkMemoryGetOHOSNativeBufferInfoOpenHarmony* pInfo, + struct OH_NativeBuffer** pBuffer) { + const VkLayerDispatchTable *disp = loader_get_dispatch(device); + if (NULL == disp) { + loader_log(NULL, VULKAN_LOADER_ERROR_BIT | VULKAN_LOADER_VALIDATION_BIT, 0, + "vkGetMemoryOHOSNativeBufferOpenHarmony: Invalid device " + "[VUID-vkGetMemoryOHOSNativeBufferOpenHarmony-device-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + return disp->GetMemoryOHOSNativeBufferOpenHarmony(device, pInfo, pBuffer); +} +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + // GPA helpers for extensions bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) { *addr = NULL; @@ -9490,6 +9596,40 @@ bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *na *addr = (void *)CmdDrawMeshTasksIndirectCountEXT; return true; } + + // ---- VK_OHOS_native_buffer extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + if (!strcmp("vkGetSwapchainGrallocUsageOpenHarmony", name)) { + *addr = (void *)GetSwapchainGrallocUsageOpenHarmony; + return true; + } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + if (!strcmp("vkSetNativeFenceFdOpenHarmony", name)) { + *addr = (void *)SetNativeFenceFdOpenHarmony; + return true; + } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + if (!strcmp("vkGetNativeFenceFdOpenHarmony", name)) { + *addr = (void *)GetNativeFenceFdOpenHarmony; + return true; + } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + + // ---- VK_OpenHarmony_external_memory_OHOS_native_buffer extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + if (!strcmp("vkGetOHOSNativeBufferPropertiesOpenHarmony", name)) { + *addr = (void *)GetOHOSNativeBufferPropertiesOpenHarmony; + return true; + } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + if (!strcmp("vkGetMemoryOHOSNativeBufferOpenHarmony", name)) { + *addr = (void *)GetMemoryOHOSNativeBufferOpenHarmony; + return true; + } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY return false; } diff --git a/openharmony/BUILD.gn b/openharmony/BUILD.gn index 6ec8719b..ff2b8ad1 100644 --- a/openharmony/BUILD.gn +++ b/openharmony/BUILD.gn @@ -14,6 +14,7 @@ import("//build/ohos.gni") vulkan_headers_dir = "//third_party/vulkan-headers" + # Vulkan loader build options ## Build libvulkan.so {{{ @@ -46,6 +47,7 @@ config("vulkan_loader_config") { "../loader/generated", "../loader", "../openharmony", + "//drivers/peripheral/base", ] defines = [ "API_NAME=\"Vulkan\"", @@ -66,24 +68,24 @@ ohos_shared_library("vulkan_loader") { "../loader/dev_ext_trampoline.c", "../loader/extension_manual.c", "../loader/extension_manual.h", - "../loader/get_environment.c", - "../loader/get_environment.h", "../loader/generated/vk_layer_dispatch_table.h", "../loader/generated/vk_loader_extensions.h", "../loader/generated/vk_object_types.h", - "../loader/gpa_helper.h", + "../loader/get_environment.c", + "../loader/get_environment.h", "../loader/gpa_helper.c", - "../loader/loader_common.h", + "../loader/gpa_helper.h", "../loader/loader.c", "../loader/loader.h", + "../loader/loader_common.h", "../loader/log.c", "../loader/log.h", "../loader/phys_dev_ext.c", "../loader/stack_allocation.h", "../loader/terminator.c", "../loader/trampoline.c", - "../loader/unknown_function_handling.h", "../loader/unknown_function_handling.c", + "../loader/unknown_function_handling.h", "../loader/vk_loader_layer.h", # TODO(jmadill): Use assembler where available. @@ -104,5 +106,4 @@ ohos_shared_library("vulkan_loader") { part_name = "graphic_standard" subsystem_name = "graphic" } - ## Build libvulkan.so }}} -- Gitee