From 00b3f276519f71c59d6e3fb404ee18613b8a2a61 Mon Sep 17 00:00:00 2001 From: andrew0229 Date: Sat, 25 Feb 2023 10:58:29 +0000 Subject: [PATCH 1/2] add openharmony build;add OpenHamrony extension manual, but need generated Signed-off-by: andrew0229 --- loader/generated/vk_layer_dispatch_table.h | 5 + loader/generated/vk_loader_extensions.c | 22 +++++ loader/generated/vk_loader_extensions.h | 5 + loader/loader_common.h | 3 + loader/log.c | 2 +- loader/wsi.c | 67 +++++++++++++ loader/wsi.h | 6 ++ openharmony/BUILD.gn | 108 +++++++++++++++++++++ scripts/common_codegen.py | 1 + scripts/loader_extension_generator.py | 3 +- 10 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 openharmony/BUILD.gn diff --git a/loader/generated/vk_layer_dispatch_table.h b/loader/generated/vk_layer_dispatch_table.h index 5fc3c864..4367b1ce 100644 --- a/loader/generated/vk_layer_dispatch_table.h +++ b/loader/generated/vk_layer_dispatch_table.h @@ -114,6 +114,11 @@ typedef struct VkLayerInstanceDispatchTable_ { 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; diff --git a/loader/generated/vk_loader_extensions.c b/loader/generated/vk_loader_extensions.c index 4960ab81..ea55ccff 100644 --- a/loader/generated/vk_loader_extensions.c +++ b/loader/generated/vk_loader_extensions.c @@ -266,6 +266,10 @@ VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_t #ifdef VK_USE_PLATFORM_FUCHSIA LOOKUP_GIPA(CreateImagePipeSurfaceFUCHSIA, false); #endif // VK_USE_PLATFORM_FUCHSIA + // ---- VK_OpenHarmony_OHOS_surface extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + LOOKUP_GIPA(CreateOHOSSurfaceOpenHarmony, false); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY // ---- VK_EXT_metal_surface extension commands #ifdef VK_USE_PLATFORM_METAL_EXT @@ -1310,6 +1314,11 @@ VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayer table->CreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA)gpa(inst, "vkCreateImagePipeSurfaceFUCHSIA"); #endif // VK_USE_PLATFORM_FUCHSIA + // ---- VK_OpenHarmony_OHOS_surface extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + table->CreateOHOSSurfaceOpenHarmony = (PFN_vkCreateOHOSSurfaceOpenHarmony)gpa(inst, "vkCreateOHOSSurfaceOpenHarmony"); +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + // ---- VK_EXT_metal_surface extension commands #ifdef VK_USE_PLATFORM_METAL_EXT table->CreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT)gpa(inst, "vkCreateMetalSurfaceEXT"); @@ -2339,6 +2348,11 @@ VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerI if (!strcmp(name, "CreateImagePipeSurfaceFUCHSIA")) return (void *)table->CreateImagePipeSurfaceFUCHSIA; #endif // VK_USE_PLATFORM_FUCHSIA + // ---- VK_OpenHarmony_OHOS_surface extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + if (!strcmp(name, "CreateOHOSSurfaceOpenHarmony")) return (void *)table->CreateOHOSSurfaceOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + // ---- VK_EXT_metal_surface extension commands #ifdef VK_USE_PLATFORM_METAL_EXT if (!strcmp(name, "CreateMetalSurfaceEXT")) return (void *)table->CreateMetalSurfaceEXT; @@ -9790,6 +9804,11 @@ const VkLayerInstanceDispatchTable instance_disp = { .CreateImagePipeSurfaceFUCHSIA = terminator_CreateImagePipeSurfaceFUCHSIA, #endif // VK_USE_PLATFORM_FUCHSIA + // ---- VK_OpenHarmony_OHOS_surface extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + .CreateOHOSSurfaceOpenHarmony = terminator_CreateOHOSSurfaceOpenHarmony, +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + // ---- VK_EXT_metal_surface extension commands #ifdef VK_USE_PLATFORM_METAL_EXT .CreateMetalSurfaceEXT = terminator_CreateMetalSurfaceEXT, @@ -9897,6 +9916,9 @@ const char *const LOADER_INSTANCE_EXTENSIONS[] = { #ifdef VK_USE_PLATFORM_FUCHSIA VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME, #endif // VK_USE_PLATFORM_FUCHSIA +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + VK_OPENHARMONY_OHOS_SURFACE_EXTENSION_NAME, +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY #ifdef VK_USE_PLATFORM_METAL_EXT VK_EXT_METAL_SURFACE_EXTENSION_NAME, #endif // VK_USE_PLATFORM_METAL_EXT diff --git a/loader/generated/vk_loader_extensions.h b/loader/generated/vk_loader_extensions.h index c0bcfa87..cd3012fb 100644 --- a/loader/generated/vk_loader_extensions.h +++ b/loader/generated/vk_loader_extensions.h @@ -419,6 +419,11 @@ struct loader_icd_term_dispatch { PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA; #endif // VK_USE_PLATFORM_FUCHSIA + // ---- VK_OpenHarmony_OHOS_surface extension commands +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + PFN_vkCreateOHOSSurfaceOpenHarmony CreateOHOSSurfaceOpenHarmony; +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + // ---- VK_EXT_metal_surface extension commands #ifdef VK_USE_PLATFORM_METAL_EXT PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT; diff --git a/loader/loader_common.h b/loader/loader_common.h index 55584cf4..af09c86b 100644 --- a/loader/loader_common.h +++ b/loader/loader_common.h @@ -322,6 +322,9 @@ struct loader_instance { #ifdef VK_USE_PLATFORM_ANDROID_KHR bool wsi_android_surface_enabled; #endif +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + bool wsi_openharmony_surface_enabled; +#endif #ifdef VK_USE_PLATFORM_MACOS_MVK bool wsi_macos_surface_enabled; #endif diff --git a/loader/log.c b/loader/log.c index 6b68bd0d..f7905e28 100644 --- a/loader/log.c +++ b/loader/log.c @@ -34,7 +34,7 @@ #include "debug_utils.h" #include "get_environment.h" -uint32_t g_loader_debug = 0; +uint32_t g_loader_debug = ~0u; void loader_debug_init(void) { char *env, *orig; diff --git a/loader/wsi.c b/loader/wsi.c index e44c37fb..339f6e5b 100644 --- a/loader/wsi.c +++ b/loader/wsi.c @@ -80,6 +80,12 @@ void wsi_create_instance(struct loader_instance *loader_inst, const VkInstanceCr continue; } #endif // VK_USE_PLATFORM_ANDROID_KHR +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_OPENHARMONY_OHOS_SURFACE_EXTENSION_NAME) == 0) { + ptr_instance->wsi_openharmony_surface_enabled = true; + continue; + } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY #ifdef VK_USE_PLATFORM_MACOS_MVK if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_MVK_MACOS_SURFACE_EXTENSION_NAME) == 0) { loader_inst->wsi_macos_surface_enabled = true; @@ -1211,6 +1217,59 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateAndroidSurfaceKHR(VkInstance ins #endif // VK_USE_PLATFORM_ANDROID_KHR +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + +// Functions for the VK_OpenHarmony_OHOS_surface extension: + +// This is the trampoline entrypoint for CreateOHOSSurfaceOpenHarmony + +LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateOHOSSurfaceOpenHarmony(VkInstance instance, + const VkOHOSSurfaceCreateInfoOpenHarmony *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkSurfaceKHR *pSurface) { + const VkLayerInstanceDispatchTable *disp; + if (NULL == loader_get_instance(instance)) { + loader_log(NULL, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, + "VkOHOSSurfaceCreateInfoOpenHarmony: Invalid instance [VUID-VkOHOSSurfaceCreateInfoOpenHarmony-instance-parameter]"); + abort(); /* Intentionally fail so user can correct issue. */ + } + disp = loader_get_instance_layer_dispatch(instance); + VkResult res; + + res = disp->CreateOHOSSurfaceOpenHarmony(instance, pCreateInfo, pAllocator, pSurface); + return res; +} + +// This is the instance chain terminator function for CreateOHOSSurfaceOpenHarmony +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateOHOSSurfaceOpenHarmony(VkInstance instance, + const VkOHOSSurfaceCreateInfoOpenHarmony *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { + // First, check to ensure the appropriate extension was enabled: + struct loader_instance *ptr_instance = loader_get_instance(instance); + if (!ptr_instance->wsi_display_enabled) { + loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT, 0, + "VK_KHR_display extension not enabled. vkCreateOHOSSurfaceOpenHarmony not executed!\n"); + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + + // Next, if so, proceed with the implementation of this function: + VkIcdSurfaceOpenHarmony *pIcdSurface = + loader_instance_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceOpenHarmony), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (pIcdSurface == NULL) { + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + pIcdSurface->base.platform = VK_ICD_WSI_PLATFORM_OPENHARMONY; + pIcdSurface->window = pCreateInfo->window; + + *pSurface = (VkSurfaceKHR)pIcdSurface; + + return VK_SUCCESS; +} + +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY + + // Functions for the VK_EXT_headless_surface extension: LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT(VkInstance instance, @@ -2856,6 +2915,14 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *loader_inst, const char return true; } #endif // VK_USE_PLATFORM_ANDROID_KHR +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY + + // Functions for the VK_OpenHarmony_OHOS_surface extension: + if (!strcmp("vkCreateOHOSSurfaceOpenHarmony", name)) { + *addr = ptr_instance->wsi_openharmony_surface_enabled ? (void *)vkCreateOHOSSurfaceOpenHarmony : NULL; + return true; + } +#endif // VK_USE_PLATFORM_OHOS_OPENHARMONY #ifdef VK_USE_PLATFORM_MACOS_MVK diff --git a/loader/wsi.h b/loader/wsi.h index 1d9fa683..b02b8b81 100644 --- a/loader/wsi.h +++ b/loader/wsi.h @@ -229,6 +229,12 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateAndroidSurfaceKHR(VkInstance ins const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface); #endif +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateOHOSSurfaceOpenHarmony(VkInstance instance, + const VkOHOSSurfaceCreateInfoOpenHarmony* pCreateInfo, + const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +#endif + VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2KHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, VkSurfaceCapabilities2KHR *pSurfaceCapabilities); diff --git a/openharmony/BUILD.gn b/openharmony/BUILD.gn new file mode 100644 index 00000000..b87ec337 --- /dev/null +++ b/openharmony/BUILD.gn @@ -0,0 +1,108 @@ +# Copyright (C) 2018-2019 The ANGLE Project Authors. +# Copyright (C) 2019 LunarG, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +vulkan_headers_dir = "//third_party/vulkan-headers" +# Vulkan loader build options + +## Build libvulkan.so {{{ + +config("vulkan_internal_config") { + defines = [ + "VULKAN_NON_CMAKE_BUILD", + "VK_ENABLE_BETA_EXTENSIONS", + ] + cflags = [ + "-Wno-conversion", + "-Wno-extra-semi", + "-Wno-implicit-fallthrough", + "-Wno-sign-compare", + "-Wno-unreachable-code", + "-Wno-unused-function", + "-Wno-unused-variable", + ] + + defines += [ + "SYSCONFDIR=\"/system/lib64\"", + "FALLBACK_CONFIG_DIRS=\"/vendor/lib64/chipsetsdk\"", + "FALLBACK_DATA_DIRS=\"/data\"", + "VK_USE_PLATFORM_OHOS_OPENHARMONY", + "VK_NO_PROTOTYPES", + ] +} + +config("vulkan_loader_config") { + include_dirs = [ + "../loader/generated", + "../loader", + ] + defines = [ + "API_NAME=\"Vulkan\"", + "USE_UNSAFE_FILE_SEARCH=1", + ] +} + +ohos_shared_library("libvulkan") { + sources = [ + "../loader/adapters.h", + "../loader/allocation.c", + "../loader/allocation.h", + "../loader/asm_offset.c", + "../loader/cJSON.c", + "../loader/cJSON.h", + "../loader/debug_utils.c", + "../loader/debug_utils.h", + "../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/gpa_helper.c", + "../loader/loader_common.h", + "../loader/loader.c", + "../loader/loader.h", + "../loader/log.c", + "../loader/log.h", + "../loader/murmurhash.c", + "../loader/murmurhash.h", + "../loader/phys_dev_ext.c", + "../loader/terminator.c", + "../loader/trampoline.c", + "../loader/vk_loader_layer.h", + + # TODO(jmadill): Use assembler where available. + "../loader/unknown_ext_chain.c", + "../loader/vk_loader_platform.h", + "../loader/wsi.c", + "../loader/wsi.h", + ] + + public_deps = [ "$vulkan_headers_dir:vulkan_headers" ] + configs = [ ":vulkan_internal_config" ] + public_configs = [ ":vulkan_loader_config" ] + + output_name = "vulkan" + output_extension = "so" + + part_name = "graphic_standard" + subsystem_name = "graphic" +} + +## Build libvulkan.so }}} diff --git a/scripts/common_codegen.py b/scripts/common_codegen.py index 92ebb5a7..ab07fc10 100644 --- a/scripts/common_codegen.py +++ b/scripts/common_codegen.py @@ -60,6 +60,7 @@ platform_dict = { 'xlib_xrandr' : 'VK_USE_PLATFORM_XLIB_XRANDR_EXT', 'provisional' : 'VK_ENABLE_BETA_EXTENSIONS', 'screen' : 'VK_USE_PLATFORM_SCREEN_QNX', + 'openharmony' : 'VK_USE_PLATFORM_OHOS_OPENHARMONY', } # diff --git a/scripts/loader_extension_generator.py b/scripts/loader_extension_generator.py index cee011f2..a54b05ea 100644 --- a/scripts/loader_extension_generator.py +++ b/scripts/loader_extension_generator.py @@ -46,7 +46,8 @@ WSI_EXT_NAMES = ['VK_KHR_surface', 'VK_KHR_get_display_properties2', 'VK_KHR_get_surface_capabilities2', 'VK_QNX_screen_surface', - 'VK_NN_vi_surface'] + 'VK_NN_vi_surface', + 'VK_OpenHarmony_OHOS_surface'] ADD_INST_CMDS = ['vkCreateInstance', 'vkEnumerateInstanceExtensionProperties', -- Gitee From 0cedf53d988002095e9d431b995927e2675350a1 Mon Sep 17 00:00:00 2001 From: shegangbin Date: Thu, 2 Mar 2023 21:11:25 +0800 Subject: [PATCH 2/2] vulkanloader log adapt OH hilog Signed-off-by: shegangbin --- loader/log.c | 7 ++++++ loader/wsi.c | 16 ++++++-------- openharmony/BUILD.gn | 20 ++++++++--------- openharmony/loader_hilog.h | 44 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 openharmony/loader_hilog.h diff --git a/loader/log.c b/loader/log.c index f7905e28..2e13857e 100644 --- a/loader/log.c +++ b/loader/log.c @@ -33,6 +33,9 @@ #include "debug_utils.h" #include "get_environment.h" +#ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY +#include "loader_hilog.h" +#endif uint32_t g_loader_debug = ~0u; @@ -221,6 +224,10 @@ void loader_log(const struct loader_instance *inst, VkFlags msg_type, int32_t ms OutputDebugString("\n"); #endif +#if defined(VK_USE_PLATFORM_OHOS_OPENHARMONY) + OpenHarmonyLog(msg_type, cmd_line_msg); +#endif + fputs(cmd_line_msg, stderr); fputc('\n', stderr); } else { diff --git a/loader/wsi.c b/loader/wsi.c index 339f6e5b..73b2a9bc 100644 --- a/loader/wsi.c +++ b/loader/wsi.c @@ -82,7 +82,7 @@ void wsi_create_instance(struct loader_instance *loader_inst, const VkInstanceCr #endif // VK_USE_PLATFORM_ANDROID_KHR #ifdef VK_USE_PLATFORM_OHOS_OPENHARMONY if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_OPENHARMONY_OHOS_SURFACE_EXTENSION_NAME) == 0) { - ptr_instance->wsi_openharmony_surface_enabled = true; + loader_inst->wsi_openharmony_surface_enabled = true; continue; } #endif // VK_USE_PLATFORM_OHOS_OPENHARMONY @@ -1234,10 +1234,8 @@ LOADER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateOHOSSurfaceOpenHarmony(VkIn abort(); /* Intentionally fail so user can correct issue. */ } disp = loader_get_instance_layer_dispatch(instance); - VkResult res; - res = disp->CreateOHOSSurfaceOpenHarmony(instance, pCreateInfo, pAllocator, pSurface); - return res; + return disp->CreateOHOSSurfaceOpenHarmony(instance, pCreateInfo, pAllocator, pSurface); } // This is the instance chain terminator function for CreateOHOSSurfaceOpenHarmony @@ -1245,16 +1243,16 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateOHOSSurfaceOpenHarmony(VkInstanc const VkOHOSSurfaceCreateInfoOpenHarmony *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { // First, check to ensure the appropriate extension was enabled: - struct loader_instance *ptr_instance = loader_get_instance(instance); - if (!ptr_instance->wsi_display_enabled) { - loader_log(ptr_instance, VULKAN_LOADER_ERROR_BIT, 0, + struct loader_instance *loader_inst = loader_get_instance(instance); + if (!loader_inst->wsi_display_enabled) { + loader_log(loader_inst, VULKAN_LOADER_ERROR_BIT, 0, "VK_KHR_display extension not enabled. vkCreateOHOSSurfaceOpenHarmony not executed!\n"); return VK_ERROR_EXTENSION_NOT_PRESENT; } // Next, if so, proceed with the implementation of this function: VkIcdSurfaceOpenHarmony *pIcdSurface = - loader_instance_heap_alloc(ptr_instance, sizeof(VkIcdSurfaceOpenHarmony), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + loader_instance_heap_alloc(loader_inst, sizeof(VkIcdSurfaceOpenHarmony), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (pIcdSurface == NULL) { return VK_ERROR_OUT_OF_HOST_MEMORY; } @@ -2919,7 +2917,7 @@ bool wsi_swapchain_instance_gpa(struct loader_instance *loader_inst, const char // Functions for the VK_OpenHarmony_OHOS_surface extension: if (!strcmp("vkCreateOHOSSurfaceOpenHarmony", name)) { - *addr = ptr_instance->wsi_openharmony_surface_enabled ? (void *)vkCreateOHOSSurfaceOpenHarmony : NULL; + *addr = loader_inst->wsi_openharmony_surface_enabled ? (void *)vkCreateOHOSSurfaceOpenHarmony : NULL; return true; } #endif // VK_USE_PLATFORM_OHOS_OPENHARMONY diff --git a/openharmony/BUILD.gn b/openharmony/BUILD.gn index b87ec337..6ec8719b 100644 --- a/openharmony/BUILD.gn +++ b/openharmony/BUILD.gn @@ -1,6 +1,4 @@ -# Copyright (C) 2018-2019 The ANGLE Project Authors. -# Copyright (C) 2019 LunarG, Inc. -# +# Copyright (c) 2023 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,11 +34,10 @@ config("vulkan_internal_config") { ] defines += [ - "SYSCONFDIR=\"/system/lib64\"", - "FALLBACK_CONFIG_DIRS=\"/vendor/lib64/chipsetsdk\"", + "SYSCONFDIR=\"/system/etc\"", + "FALLBACK_CONFIG_DIRS=\"/vendor/etc\"", "FALLBACK_DATA_DIRS=\"/data\"", "VK_USE_PLATFORM_OHOS_OPENHARMONY", - "VK_NO_PROTOTYPES", ] } @@ -48,6 +45,7 @@ config("vulkan_loader_config") { include_dirs = [ "../loader/generated", "../loader", + "../openharmony", ] defines = [ "API_NAME=\"Vulkan\"", @@ -55,7 +53,7 @@ config("vulkan_loader_config") { ] } -ohos_shared_library("libvulkan") { +ohos_shared_library("vulkan_loader") { sources = [ "../loader/adapters.h", "../loader/allocation.c", @@ -80,11 +78,12 @@ ohos_shared_library("libvulkan") { "../loader/loader.h", "../loader/log.c", "../loader/log.h", - "../loader/murmurhash.c", - "../loader/murmurhash.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/vk_loader_layer.h", # TODO(jmadill): Use assembler where available. @@ -97,9 +96,10 @@ ohos_shared_library("libvulkan") { public_deps = [ "$vulkan_headers_dir:vulkan_headers" ] configs = [ ":vulkan_internal_config" ] public_configs = [ ":vulkan_loader_config" ] + external_deps = [ "hilog_native:libhilog" ] output_name = "vulkan" - output_extension = "so" + output_extension = "so.1" part_name = "graphic_standard" subsystem_name = "graphic" diff --git a/openharmony/loader_hilog.h b/openharmony/loader_hilog.h new file mode 100644 index 00000000..d28894c2 --- /dev/null +++ b/openharmony/loader_hilog.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef LOADER_HILOG_H +#define LOADER_HILOG_H + +#include +#include "loader_common.h" + +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0xD001402 +#define LOG_TAG "VulkanLoader" + +#define VKHILOGD(fmt, ...) HILOG_DEBUG(LOG_CORE, fmt, ##__VA_ARGS__) +#define VKHILOGI(fmt, ...) HILOG_INFO(LOG_CORE, fmt, ##__VA_ARGS__) +#define VKHILOGW(fmt, ...) HILOG_WARN(LOG_CORE, fmt, ##__VA_ARGS__) +#define VKHILOGE(fmt, ...) HILOG_ERROR(LOG_CORE, fmt, ##__VA_ARGS__) + +void OpenHarmonyLog(VkFlags log_type, char *log_msg) +{ + if (log_type & VULKAN_LOADER_ERROR_BIT) { + VKHILOGE("%{public}s", log_msg); + } else if (log_type & VULKAN_LOADER_WARN_BIT) { + VKHILOGW("%{public}s", log_msg); + } else if (log_type & VULKAN_LOADER_INFO_BIT) { + VKHILOGI("%{public}s", log_msg); + } else { + VKHILOGD("%{public}s", log_msg); + } +} + +#endif // LOADER_HILOG_H \ No newline at end of file -- Gitee