1# Copyright (c) 2024 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13import("//build/ohos.gni") 14import("//foundation/graphic/graphic_2d/graphic_config.gni") 15import("//foundation/graphic/graphic_3d/lume/lume_config.gni") 16 17declare_args() { 18 RENDER_BUILD_GLES = true 19 RENDER_BUILD_VULKAN = true 20 RENDER_EMBEDDED_ASSETS_ENABLED = true 21 RENDER_ROFS = "rofsRndr" 22} 23 24config("lume_render_api") { 25 include_dirs = [ "api" ] 26 27 defines = [] 28 29 if (BUILDTYPE == "Release") { 30 defines += [ "PLUGIN_LOG_NO_DEBUG=0" ] 31 } 32 33 if (BUILDTYPE == "MinSizeRel") { 34 defines += [ "PLUGIN_LOG_NO_DEBUG=0" ] 35 } 36 37 if (BUILDTYPE == "RelWithDebInfo") { 38 defines += [ "PLUGIN_LOG_NO_DEBUG=0" ] 39 } 40 41 if (LUME_OHOS_BUILD) { 42 defines += [ "__OHOS_PLATFORM__" ] 43 } 44 45 if (LUME_OHOS_BUILD && RENDER_BUILD_VULKAN) { 46 include_dirs += [ 47 "src/vulkan/ohos", 48 #"//third_party/skia/third_party/vulkanmemoryallocator/include" 49 ] 50 } 51} 52 53config("lume_render_config") { 54 include_dirs = [ 55 "3rdparty/", 56 "src/", 57 ] 58 59 defines = [ 60 "RENDER_PUBLIC=__attribute__((visibility(\"default\")))", 61 "RENDER_DEV_ENABLED=0", 62 "RENDER_PERF_ENABLED=0", 63 "RENDER_TESTS_ENABLED=0", 64 "RENDER_LOG_TO_CONSOLE=1", 65 "RENDER_LOG_TO_FILE", 66 "RENDER_LOG_TO_DEBUG_OUTPUT=0", 67 "RENDER_VULKAN_VALIDATION_ENABLED=0", 68 "RENDER_DEBUG_GPU_RESOURCE_IDS=0", 69 "RENDER_DEBUG_MARKERS_ENABLED=0", 70 "RENDER_DEBUG_COMMAND_MARKERS_ENABLED=0", 71 "RENDER_GL_FLIP_Y_SWAPCHAIN=0", 72 "RENDER_GL_DEBUG=0", 73 "RENDER_GPU_TIMESTAMP_QUERIES_ENABLED=0", 74 "RENDER_VULKAN_RT_ENABLED=0", 75 "RENDER_BUILDTYPE=${BUILDTYPE}", 76 "CORE_USE_COMPILER_GENERATED_STATIC_LIST=1", 77 "CORE_STATIC_PLUGIN_HEADER=${CORE_STATIC_PLUGIN_HEADER}", 78 ] 79 80 if (RENDER_EMBEDDED_ASSETS_ENABLED) { 81 defines += [ "RENDER_EMBEDDED_ASSETS_ENABLED=1" ] 82 } 83 84 if (RENDER_BUILD_GLES) { 85 defines += [ "RENDER_HAS_GLES_BACKEND=1" ] 86 } 87 88 if (RENDER_BUILD_VULKAN) { 89 defines += [ 90 "RENDER_HAS_VULKAN_BACKEND=1", 91 "VMA_STATS_STRING_ENABLED=0", 92 "VMA_STATIC_VULKAN_FUNCTIONS=0", 93 94 #"USE_NEW_VMA=0" 95 ] 96 97 if (LUME_OHOS_BUILD) { 98 defines += [ "RENDER_VULKAN_VALIDATION_ENABLE_WARNINGS=0" ] 99 } 100 } 101 defines += [ "RENDER_PUBLIC=__attribute__((visibility(\"default\")))" ] 102 103 ldflags = [ "-Wl,--undefined=AGPRender_StaticPlugin" ] 104 105 cflags = [ 106 "-Wno-nullability-completeness", 107 "-Wno-ignored-qualifiers", 108 "-Wno-switch", 109 ] 110} 111group("libvulkan") { 112 #public_deps = [ "${LIB_VULKAN_3D}" ] 113 #public_deps = libvulkan3D 114 external_deps = [ "vulkan-loader:vulkan_loader" ] 115} 116 117ohos_source_set("lume_render_src") { 118 public_configs = [ 119 ":lume_render_config", 120 ":lume_render_api", 121 "${LUME_CORE_PATH}:lume_base_api", 122 "${LUME_CORE_PATH}:lume_engine_api", 123 "${LUME_CORE_PATH}:lume_default", 124 "${LUME_CORE_PATH}:lume_component_help_config", 125 ] 126 127 sources = [ 128 "src/default_engine_constants.h", 129 "src/device/device.cpp", 130 "src/device/device.h", 131 132 # "src/device/generic/platform_hardware_buffer.cpp", 133 "src/device/gpu_acceleration_structure.h", 134 "src/device/gpu_buffer.h", 135 "src/device/gpu_image.h", 136 "src/device/gpu_program.h", 137 "src/device/gpu_program_util.cpp", 138 "src/device/gpu_program_util.h", 139 "src/device/gpu_resource_cache.cpp", 140 "src/device/gpu_resource_cache.h", 141 "src/device/gpu_resource_desc_flag_validation.h", 142 "src/device/gpu_resource_handle_util.cpp", 143 "src/device/gpu_resource_handle_util.h", 144 "src/device/gpu_resource_manager.cpp", 145 "src/device/gpu_resource_manager.h", 146 "src/device/gpu_resource_manager_base.h", 147 "src/device/gpu_resource_manager_base.inl", 148 "src/device/gpu_resource_util.cpp", 149 "src/device/gpu_resource_util.h", 150 "src/device/gpu_sampler.h", 151 "src/device/gpu_semaphore.h", 152 "src/device/pipeline_state_object.h", 153 "src/device/render_frame_sync.h", 154 "src/device/shader_manager.cpp", 155 "src/device/shader_manager.h", 156 "src/device/shader_module.h", 157 "src/device/shader_pipeline_binder.cpp", 158 "src/device/shader_pipeline_binder.h", 159 "src/device/swapchain.h", 160 "src/loader/json_format_serialization.h", 161 "src/loader/json_util.h", 162 "src/loader/pipeline_layout_loader.cpp", 163 "src/loader/pipeline_layout_loader.h", 164 "src/loader/render_data_configuration_loader.cpp", 165 "src/loader/render_data_configuration_loader.h", 166 "src/loader/render_data_loader.cpp", 167 "src/loader/render_data_loader.h", 168 "src/loader/render_node_graph_loader.cpp", 169 "src/loader/render_node_graph_loader.h", 170 "src/loader/shader_data_loader.cpp", 171 "src/loader/shader_data_loader.h", 172 "src/loader/shader_loader.cpp", 173 "src/loader/shader_loader.h", 174 "src/loader/shader_state_loader.cpp", 175 "src/loader/shader_state_loader.h", 176 "src/loader/shader_state_loader_util.cpp", 177 "src/loader/shader_state_loader_util.h", 178 "src/loader/vertex_input_declaration_loader.cpp", 179 "src/loader/vertex_input_declaration_loader.h", 180 "src/perf/cpu_perf_scope.h", 181 "src/perf/cpu_timer.cpp", 182 "src/perf/cpu_timer.h", 183 "src/perf/gpu_query.h", 184 "src/perf/gpu_query_manager.cpp", 185 "src/perf/gpu_query_manager.h", 186 "src/plugin/static_plugin.cpp", 187 "src/render_backend.h", 188 "src/render_context.cpp", 189 "src/render_context.h", 190 "src/render_graph.cpp", 191 "src/render_graph.h", 192 "src/renderer.cpp", 193 "src/renderer.h", 194 "src/resource_handle_impl.cpp", 195 "src/resource_handle_impl.h", 196 "version.cpp", 197 198 #"src/plugin/static_registry.cpp", 199 200 "src/datastore/render_data_store_default_acceleration_structure_staging.cpp", 201 "src/datastore/render_data_store_default_acceleration_structure_staging.h", 202 "src/datastore/render_data_store_default_gpu_resource_data_copy.cpp", 203 "src/datastore/render_data_store_default_gpu_resource_data_copy.h", 204 "src/datastore/render_data_store_default_staging.cpp", 205 "src/datastore/render_data_store_default_staging.h", 206 "src/datastore/render_data_store_manager.cpp", 207 "src/datastore/render_data_store_manager.h", 208 "src/datastore/render_data_store_pod.cpp", 209 "src/datastore/render_data_store_pod.h", 210 "src/datastore/render_data_store_post_process.cpp", 211 "src/datastore/render_data_store_post_process.h", 212 "src/datastore/render_data_store_shader_passes.cpp", 213 "src/node/core_render_node_factory.cpp", 214 "src/node/core_render_node_factory.h", 215 "src/node/render_bloom.cpp", 216 "src/node/render_bloom.h", 217 "src/node/render_blur.cpp", 218 "src/node/render_blur.h", 219 "src/node/render_copy.cpp", 220 "src/node/render_copy.h", 221 "src/node/render_motion_blur.cpp", 222 "src/node/render_motion_blur.h", 223 "src/node/render_node_back_buffer.cpp", 224 "src/node/render_node_back_buffer.h", 225 "src/node/render_node_bloom.cpp", 226 "src/node/render_node_bloom.h", 227 "src/node/render_node_combined_post_process.cpp", 228 "src/node/render_node_combined_post_process.h", 229 "src/node/render_node_compute_generic.cpp", 230 "src/node/render_node_compute_generic.h", 231 "src/node/render_node_create_gpu_buffers.cpp", 232 "src/node/render_node_create_gpu_buffers.h", 233 "src/node/render_node_create_gpu_images.cpp", 234 "src/node/render_node_create_gpu_images.h", 235 "src/node/render_node_default_acceleration_structure_staging.cpp", 236 "src/node/render_node_default_acceleration_structure_staging.h", 237 "src/node/render_node_end_frame_staging.cpp", 238 "src/node/render_node_end_frame_staging.h", 239 "src/node/render_node_fullscreen_generic.cpp", 240 "src/node/render_node_fullscreen_generic.h", 241 "src/node/render_node_mip_chain_post_process.cpp", 242 "src/node/render_node_mip_chain_post_process.h", 243 "src/node/render_node_shader_passes_generic.cpp", 244 "src/node/render_node_shader_passes_generic.h", 245 "src/node/render_node_single_post_process.cpp", 246 "src/node/render_node_single_post_process.h", 247 "src/node/render_node_staging.cpp", 248 "src/node/render_node_staging.h", 249 "src/node/render_staging.cpp", 250 "src/node/render_staging.h", 251 "src/nodecontext/node_context_descriptor_set_manager.cpp", 252 "src/nodecontext/node_context_descriptor_set_manager.h", 253 "src/nodecontext/node_context_pool_manager.h", 254 "src/nodecontext/node_context_pso_manager.cpp", 255 "src/nodecontext/node_context_pso_manager.h", 256 "src/nodecontext/pipeline_descriptor_set_binder.cpp", 257 "src/nodecontext/pipeline_descriptor_set_binder.h", 258 "src/nodecontext/render_barrier_list.cpp", 259 "src/nodecontext/render_barrier_list.h", 260 "src/nodecontext/render_command_list.cpp", 261 "src/nodecontext/render_command_list.h", 262 "src/nodecontext/render_node_context_manager.cpp", 263 "src/nodecontext/render_node_context_manager.h", 264 "src/nodecontext/render_node_graph_manager.cpp", 265 "src/nodecontext/render_node_graph_manager.h", 266 "src/nodecontext/render_node_graph_node_store.h", 267 "src/nodecontext/render_node_graph_share_manager.cpp", 268 "src/nodecontext/render_node_graph_share_manager.h", 269 "src/nodecontext/render_node_manager.cpp", 270 "src/nodecontext/render_node_manager.h", 271 "src/nodecontext/render_node_parser_util.cpp", 272 "src/nodecontext/render_node_parser_util.h", 273 "src/nodecontext/render_node_post_process_util.cpp", 274 "src/nodecontext/render_node_post_process_util.h", 275 "src/nodecontext/render_node_util.cpp", 276 "src/nodecontext/render_node_util.h", 277 "src/util/linear_allocator.h", 278 "src/util/log.h", 279 "src/util/property_util.cpp", 280 "src/util/render_frame_util.cpp", 281 "src/util/render_frame_util.h", 282 "src/util/render_util.cpp", 283 "src/util/render_util.h", 284 "src/util/string_util.h", 285 ] 286 287 if (RENDER_BUILD_GLES) { 288 sources += [ 289 "src/gles/device_gles.cpp", 290 "src/gles/device_gles.h", 291 "src/gles/egl_state.cpp", 292 "src/gles/egl_state.h", 293 "src/gles/generic/platform_device_gles.cpp", 294 "src/gles/gl_functions.h", 295 "src/gles/gpu_buffer_gles.cpp", 296 "src/gles/gpu_buffer_gles.h", 297 "src/gles/gpu_image_gles.cpp", 298 "src/gles/gpu_image_gles.h", 299 "src/gles/gpu_program_gles.cpp", 300 "src/gles/gpu_program_gles.h", 301 "src/gles/gpu_query_gles.cpp", 302 "src/gles/gpu_query_gles.h", 303 "src/gles/gpu_resource_util_gles.cpp", 304 "src/gles/gpu_resource_util_gles.h", 305 "src/gles/gpu_sampler_gles.cpp", 306 "src/gles/gpu_sampler_gles.h", 307 "src/gles/gpu_semaphore_gles.cpp", 308 "src/gles/node_context_descriptor_set_manager_gles.cpp", 309 "src/gles/node_context_descriptor_set_manager_gles.h", 310 "src/gles/node_context_pool_manager_gles.cpp", 311 "src/gles/node_context_pool_manager_gles.h", 312 "src/gles/pipeline_state_object_gles.cpp", 313 "src/gles/pipeline_state_object_gles.h", 314 "src/gles/render_backend_gles.cpp", 315 "src/gles/render_backend_gles.h", 316 "src/gles/render_frame_sync_gles.cpp", 317 "src/gles/render_frame_sync_gles.h", 318 "src/gles/shader_module_gles.cpp", 319 "src/gles/shader_module_gles.h", 320 "src/gles/spirv_cross_helper_structs_gles.h", 321 "src/gles/spirv_cross_helpers_gles.cpp", 322 "src/gles/spirv_cross_helpers_gles.h", 323 "src/gles/surface_information.h", 324 "src/gles/swapchain_gles.cpp", 325 "src/gles/swapchain_gles.h", 326 "src/gles/wgl_state.cpp", 327 "src/gles/wgl_state.h", 328 ] 329 } 330 331 if (RENDER_BUILD_VULKAN) { 332 sources += [ 333 "src/vulkan/create_functions_vk.cpp", 334 "src/vulkan/create_functions_vk.h", 335 "src/vulkan/device_vk.cpp", 336 "src/vulkan/device_vk.h", 337 "src/vulkan/gpu_buffer_vk.cpp", 338 "src/vulkan/gpu_buffer_vk.h", 339 "src/vulkan/gpu_image_vk.cpp", 340 "src/vulkan/gpu_image_vk.h", 341 "src/vulkan/gpu_memory_allocator_vk.cpp", 342 "src/vulkan/gpu_memory_allocator_vk.h", 343 "src/vulkan/gpu_program_vk.cpp", 344 "src/vulkan/gpu_program_vk.h", 345 "src/vulkan/gpu_query_vk.cpp", 346 "src/vulkan/gpu_query_vk.h", 347 "src/vulkan/gpu_resource_util_vk.cpp", 348 "src/vulkan/gpu_resource_util_vk.h", 349 "src/vulkan/gpu_sampler_vk.cpp", 350 "src/vulkan/gpu_sampler_vk.h", 351 "src/vulkan/gpu_semaphore_vk.cpp", 352 "src/vulkan/gpu_semaphore_vk.h", 353 "src/vulkan/node_context_descriptor_set_manager_vk.cpp", 354 "src/vulkan/node_context_descriptor_set_manager_vk.h", 355 "src/vulkan/node_context_pool_manager_vk.cpp", 356 "src/vulkan/node_context_pool_manager_vk.h", 357 "src/vulkan/pipeline_create_functions_vk.cpp", 358 "src/vulkan/pipeline_create_functions_vk.h", 359 "src/vulkan/pipeline_state_object_vk.cpp", 360 "src/vulkan/pipeline_state_object_vk.h", 361 "src/vulkan/platform_hardware_buffer_util_vk.cpp", 362 "src/vulkan/platform_hardware_buffer_util_vk.h", 363 "src/vulkan/render_backend_vk.cpp", 364 "src/vulkan/render_backend_vk.h", 365 "src/vulkan/render_frame_sync_vk.cpp", 366 "src/vulkan/render_frame_sync_vk.h", 367 "src/vulkan/shader_module_vk.cpp", 368 "src/vulkan/shader_module_vk.h", 369 "src/vulkan/swapchain_vk.cpp", 370 "src/vulkan/swapchain_vk.h", 371 "src/vulkan/validate_vk.h", 372 ] 373 374 if (LUME_OHOS_BUILD) { 375 # platform source 376 sources += [ 377 "src/device/ohos/platform_hardware_buffer.cpp", 378 "src/vulkan/ohos/platform_create_functions_vk.cpp", 379 "src/vulkan/ohos/platform_device_vk.cpp", 380 "src/vulkan/ohos/platform_gpu_image_vk.cpp", 381 "src/vulkan/ohos/platform_hardware_buffer_util.cpp", 382 "src/vulkan/ohos/platform_vk.cpp", 383 "src/vulkan/ohos/platform_vk.h", 384 ] 385 } 386 } 387 external_deps = [ 388 "c_utils:utils", 389 "graphic_2d:EGL", 390 "graphic_2d:GLESv3", 391 ] 392 393 if (RENDER_BUILD_VULKAN) { 394 deps = [ ":libvulkan" ] 395 396 #public_deps = [ "//third_party/vulkan-headers:vulkan_headers" ] 397 external_deps += [ "vulkan-headers:vulkan_headers" ] 398 } 399 400 part_name = "graphic_3d" 401 subsystem_name = "graphic" 402} 403 404lume_compile_shader("lume_render_compile_shader") { 405 script = "${LUME_CORE_PATH}/tools/CompilerShader.sh" 406 outputs = [ "$target_gen_dir" ] 407 tool_path = "$target_gen_dir" 408 dest_gen_path = "$target_gen_dir/assets" 409 asset_path = rebase_path("./assets/render", root_build_dir) 410 shader_path = "${dest_gen_path}/shaders" 411 include_path = rebase_path("api", root_build_dir) 412 compileShader_deps = 413 [ "${LUME_BINARY_PATH}/LumeShaderCompiler:lume_binary_shader_compile" ] 414} 415 416lume_rofs("lume_render_rofs") { 417 output_obj = "" 418 if (target_cpu == "arm") { 419 output_obj = "${RENDER_ROFS}_32.o" 420 } 421 422 if (target_cpu == "arm64") { 423 output_obj = "${RENDER_ROFS}_64.o" 424 } 425 426 outputs = "${target_gen_dir}/assets/${output_obj}" 427 428 tool_path = "$target_gen_dir" 429 root = "/" 430 bin_name = "BINARYDATAFORRENDER" 431 size_name = "SIZEOFDATAFORRENDER" 432 base_name = RENDER_ROFS 433 script = "${LUME_CORE_PATH}/tools/CompilerAsset.sh" 434 copy_path = "$target_gen_dir/assets" 435 compileShader_deps = [ 436 ":lume_render_compile_shader", 437 "${LUME_BINARY_PATH}/lumeassetcompiler:lume_binary_assets_compile", 438 ] 439 file_extension = "\".spv;.json;.lsb;.shader;.shadergs;.shadervid;.shaderpl;.rng;.gl;.gles\"" 440} 441 442source_set("lume_render_rofs_obj") { 443 output_obj = "" 444 if (target_cpu == "arm") { 445 output_obj = "${RENDER_ROFS}_32.o" 446 } 447 448 if (target_cpu == "arm64") { 449 output_obj = "${RENDER_ROFS}_64.o" 450 } 451 452 sources = [ "${target_gen_dir}/assets/${output_obj}" ] 453 deps = [ ":lume_render_rofs" ] 454} 455 456ohos_static_library("libAGPRender") { 457 public_deps = [ ":lume_render_src" ] 458 459 if (RENDER_EMBEDDED_ASSETS_ENABLED) { 460 deps = [ ":lume_render_rofs_obj" ] 461 } 462 part_name = "graphic_3d" 463 subsystem_name = "graphic" 464} 465 466config("lume_render_plugin_config") { 467 defines = [ "CORE_PLUGIN=1" ] 468} 469 470ohos_source_set("lume_render_src_plugin") { 471 sources = [ 472 "src/plugin/dynamic_plugin.cpp", 473 "src/plugin/dynamic_registry.cpp", 474 "src/util/json.cpp", 475 ] 476 477 configs = [ 478 ":lume_render_plugin_config", 479 ":lume_render_api", 480 "${LUME_CORE_PATH}:lume_base_api", 481 "${LUME_CORE_PATH}:lume_engine_api", 482 "${LUME_CORE_PATH}:lume_default", 483 ] 484 485 part_name = "graphic_3d" 486 subsystem_name = "graphic" 487} 488 489ohos_shared_library(LIB_RENDER) { 490 public_deps = [ 491 ":libAGPRender", 492 ":lume_render_src_plugin", 493 ] 494 495 part_name = "graphic_3d" 496 subsystem_name = "graphic" 497} 498