From bcc127ff536276d4435b5b6d67fdef1c28243a58 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Thu, 23 Feb 2023 20:29:21 +0100 Subject: [PATCH 01/46] add src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in and src/nbl/builtin/template/CAPKResourcesArchieve.h.in files, rewrite src/nbl/builtin/CMakeLists.txt and update src/nbl/CMakeLists.txt - save work. TODO: bring back python generation data --- src/nbl/CMakeLists.txt | 6 - src/nbl/builtin/CMakeLists.txt | 546 +++++++++--------- .../template/CAPKResourcesArchieve.cpp.in | 14 + .../template/CAPKResourcesArchieve.h.in | 23 + 4 files changed, 306 insertions(+), 283 deletions(-) create mode 100644 src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in create mode 100644 src/nbl/builtin/template/CAPKResourcesArchieve.h.in diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index e0f4811ede..1424104a7e 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -611,12 +611,6 @@ if(NBL_PCH) target_precompile_headers(Nabla PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/pch.h") endif() -if(NBL_EMBED_BUILTIN_RESOURCES) - add_dependencies(Nabla nblBuiltinResourceData) - target_link_libraries(Nabla PUBLIC nblBuiltinResourceData) - target_include_directories(Nabla PUBLIC "${NBL_BUILTIN_RESOURCES_HEADER}") -endif() - # extensions start_tracking_variables_for_propagation_to_parent() add_subdirectory(ext) diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index 49cfd3879a..42a94bfacb 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -1,293 +1,285 @@ find_package(Python3 REQUIRED) -set(NBL_RESOURCES_TO_EMBED - "nbl/builtin/glsl/utils/acceleration_structures.glsl" - "nbl/builtin/shader/loader/mtl/vertex_impl.glsl" - "nbl/builtin/shader/loader/mtl/vertex_no_uv.vert" # TODO: remove naming tautology - "nbl/builtin/shader/loader/mtl/vertex_uv.vert" # TODO: remove naming tautology - "nbl/builtin/shader/loader/mtl/fragment_impl.glsl" - "nbl/builtin/shader/loader/mtl/fragment_no_uv.frag" # TODO: remove naming tautology - "nbl/builtin/shader/loader/mtl/fragment_uv.frag" # TODO: remove naming tautology - "nbl/builtin/shader/loader/gltf/common.glsl" - "nbl/builtin/shader/loader/gltf/vertex_impl.glsl" - "nbl/builtin/shader/loader/gltf/uv.vert" - "nbl/builtin/shader/loader/gltf/color.vert" - "nbl/builtin/shader/loader/gltf/no_uv_color.vert" - "nbl/builtin/shader/loader/gltf/fragment_impl.glsl" - "nbl/builtin/shader/loader/gltf/uv.frag" - "nbl/builtin/shader/loader/gltf/color.frag" - "nbl/builtin/shader/loader/gltf/no_uv_color.frag" - "nbl/builtin/specialized_shader/fullscreentriangle.vert" - "nbl/builtin/material/lambertian/singletexture/specialized_shader.vert" - "nbl/builtin/material/lambertian/singletexture/specialized_shader.frag" - "nbl/builtin/material/debug/vertex_color/specialized_shader.vert" - "nbl/builtin/material/debug/vertex_normal/specialized_shader.vert" - "nbl/builtin/material/debug/vertex_normal/specialized_shader.frag" - "nbl/builtin/material/debug/vertex_uv/specialized_shader.frag" - # generic GLSL headers after this line - "nbl/builtin/glsl/macros.glsl" - "nbl/builtin/glsl/algorithm.glsl" - "nbl/builtin/glsl/ieee754.glsl" - # barycentric - "nbl/builtin/glsl/barycentric/extensions.glsl" - "nbl/builtin/glsl/barycentric/frag.glsl" - "nbl/builtin/glsl/barycentric/vert.glsl" - "nbl/builtin/glsl/barycentric/utils.glsl" - # bump mapping - "nbl/builtin/glsl/bump_mapping/fragment.glsl" # TODO: rename to `frag.glsl` - "nbl/builtin/glsl/bump_mapping/utils.glsl" - # bxdf - "nbl/builtin/glsl/bxdf/common.glsl" - "nbl/builtin/glsl/bxdf/common_samples.glsl" - "nbl/builtin/glsl/bxdf/fresnel.glsl" - "nbl/builtin/glsl/bxdf/ndf/common.glsl" - "nbl/builtin/glsl/bxdf/ndf/blinn_phong.glsl" - "nbl/builtin/glsl/bxdf/ndf/beckmann.glsl" - "nbl/builtin/glsl/bxdf/ndf/ggx.glsl" - "nbl/builtin/glsl/bxdf/geom/smith/common.glsl" - "nbl/builtin/glsl/bxdf/geom/smith/beckmann.glsl" - "nbl/builtin/glsl/bxdf/geom/smith/ggx.glsl" - # brdf - "nbl/builtin/glsl/bxdf/brdf/diffuse/lambert.glsl" - "nbl/builtin/glsl/bxdf/brdf/diffuse/oren_nayar.glsl" - "nbl/builtin/glsl/bxdf/brdf/specular/blinn_phong.glsl" - "nbl/builtin/glsl/bxdf/brdf/specular/beckmann.glsl" - "nbl/builtin/glsl/bxdf/brdf/specular/ggx.glsl" - "nbl/builtin/glsl/bxdf/brdf/diffuse/fresnel_correction.glsl" - # bsdf - "nbl/builtin/glsl/bxdf/bsdf/diffuse/lambert.glsl" - "nbl/builtin/glsl/bxdf/bsdf/specular/common.glsl" - "nbl/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl" - "nbl/builtin/glsl/bxdf/bsdf/specular/beckmann.glsl" - "nbl/builtin/glsl/bxdf/bsdf/specular/ggx.glsl" - # colorspace - "nbl/builtin/glsl/colorspace/EOTF.glsl" - "nbl/builtin/glsl/colorspace/OETF.glsl" - "nbl/builtin/glsl/colorspace/decodeCIEXYZ.glsl" - "nbl/builtin/glsl/colorspace/encodeCIEXYZ.glsl" - # Culling and LoD System - "nbl/builtin/glsl/culling_lod_selection/dispatch_indirect_params.glsl" - "nbl/builtin/glsl/culling_lod_selection/draw_instance_count_scan_override.glsl" - "nbl/builtin/glsl/culling_lod_selection/input_descriptor_set.glsl" - "nbl/builtin/glsl/culling_lod_selection/instance_cull_and_lod_select.comp" - "nbl/builtin/glsl/culling_lod_selection/instance_draw_count_scan_override.glsl" - "nbl/builtin/glsl/culling_lod_selection/instance_draw_cull.comp" - "nbl/builtin/glsl/culling_lod_selection/instance_ref_counting_sort_scatter.comp" - "nbl/builtin/glsl/culling_lod_selection/potentially_visible_instance_draw_struct.glsl" - "nbl/builtin/glsl/culling_lod_selection/output_descriptor_modifiers.glsl" - "nbl/builtin/glsl/culling_lod_selection/output_descriptor_set.glsl" - # VK_FORMAT support - "nbl/builtin/glsl/format/decode.glsl" - "nbl/builtin/glsl/format/encode.glsl" - "nbl/builtin/glsl/format/constants.glsl" - # asset loaders (mostly for pipelines) - "nbl/builtin/glsl/loader/mtl/common.glsl" - # LoD Library - "nbl/builtin/glsl/lod_library/structs.glsl" - "nbl/builtin/glsl/lod_library/descriptor_set.glsl" - # math and limits - "nbl/builtin/glsl/math/constants.glsl" - "nbl/builtin/glsl/math/complex.glsl" - "nbl/builtin/glsl/math/functions.glsl" - "nbl/builtin/glsl/math/quaternions.glsl" - "nbl/builtin/glsl/math/typeless_arithmetic.glsl" - "nbl/builtin/glsl/limits/numeric.glsl" - # material_compiler - "nbl/builtin/glsl/material_compiler/common.glsl" - "nbl/builtin/glsl/material_compiler/common_declarations.glsl" - "nbl/builtin/glsl/material_compiler/common_invariant_declarations.glsl" - "nbl/builtin/glsl/material_compiler/rasterization/impl.glsl" - # property pool - "nbl/builtin/glsl/property_pool/transfer.glsl" - "nbl/builtin/glsl/property_pool/copy.comp" - # random numbers - "nbl/builtin/glsl/random/xoroshiro.glsl" - # sampling - "nbl/builtin/glsl/sampling/bilinear.glsl" - "nbl/builtin/glsl/sampling/box_muller_transform.glsl" - "nbl/builtin/glsl/sampling/concentric_mapping.glsl" - "nbl/builtin/glsl/sampling/cos_weighted.glsl" - "nbl/builtin/glsl/sampling/linear.glsl" - "nbl/builtin/glsl/sampling/projected_spherical_triangle.glsl" - "nbl/builtin/glsl/sampling/spherical_rectangle.glsl" - "nbl/builtin/glsl/sampling/spherical_triangle.glsl" - "nbl/builtin/glsl/sampling/quantized_sequence.glsl" - # global exclusive scan - "nbl/builtin/glsl/scan/direct.comp" - "nbl/builtin/glsl/scan/declarations.glsl" - "nbl/builtin/glsl/scan/descriptors.glsl" - "nbl/builtin/glsl/scan/default_scheduler.glsl" - "nbl/builtin/glsl/scan/indirect.comp" - "nbl/builtin/glsl/scan/parameters_struct.glsl" - "nbl/builtin/glsl/scan/virtual_workgroup.glsl" - # faster and easier scan - "nbl/builtin/glsl/scanning_append/scanning_append.glsl" - # scene - "nbl/builtin/glsl/scene/animation.glsl" - "nbl/builtin/glsl/scene/keyframe.glsl" - "nbl/builtin/glsl/scene/node.glsl" - # shapes - "nbl/builtin/glsl/shapes/aabb.glsl" - "nbl/builtin/glsl/shapes/frustum.glsl" - "nbl/builtin/glsl/shapes/rectangle.glsl" - "nbl/builtin/glsl/shapes/triangle.glsl" - # skinning - "nbl/builtin/glsl/skinning/cache_descriptor_set.glsl" - "nbl/builtin/glsl/skinning/cache_update.comp" - "nbl/builtin/glsl/skinning/debug.vert" - "nbl/builtin/glsl/skinning/linear.glsl" - "nbl/builtin/glsl/skinning/render_descriptor_set.glsl" - "nbl/builtin/glsl/skinning/update_descriptor_set.glsl" - # subgroup emulation - "nbl/builtin/glsl/subgroup/shared_arithmetic_portability.glsl" - "nbl/builtin/glsl/subgroup/basic_portability.glsl" - "nbl/builtin/glsl/subgroup/arithmetic_portability.glsl" - "nbl/builtin/glsl/subgroup/arithmetic_portability_impl.glsl" - ##"nbl/builtin/glsl/subgroup/fft.glsl" - # utilities - "nbl/builtin/glsl/utils/indirect_commands.glsl" - "nbl/builtin/glsl/utils/common.glsl" - "nbl/builtin/glsl/utils/culling.glsl" - "nbl/builtin/glsl/utils/compressed_normal_matrix_t.glsl" - "nbl/builtin/glsl/utils/normal_decode.glsl" - "nbl/builtin/glsl/utils/normal_encode.glsl" - "nbl/builtin/glsl/utils/transform.glsl" - "nbl/builtin/glsl/utils/morton.glsl" - "nbl/builtin/glsl/utils/surface_transform_transformedDerivatives.glsl" - "nbl/builtin/glsl/utils/surface_transform.glsl" - "nbl/builtin/glsl/utils/surface_transform_e.h" - # virtual texturing - "nbl/builtin/glsl/virtual_texturing/descriptors.glsl" - "nbl/builtin/glsl/virtual_texturing/extensions.glsl" - "nbl/builtin/glsl/virtual_texturing/impl_functions.glsl" - # workgroup "intrinsics" - "nbl/builtin/glsl/workgroup/shared_arithmetic.glsl" - "nbl/builtin/glsl/workgroup/shared_ballot.glsl" - "nbl/builtin/glsl/workgroup/shared_clustered.glsl" - "nbl/builtin/glsl/workgroup/shared_fft.glsl" - "nbl/builtin/glsl/workgroup/shared_shuffle.glsl" - "nbl/builtin/glsl/workgroup/shared_shuffle_relative.glsl" - "nbl/builtin/glsl/workgroup/shared_vote.glsl" - "nbl/builtin/glsl/workgroup/arithmetic.glsl" - "nbl/builtin/glsl/workgroup/ballot.glsl" - "nbl/builtin/glsl/workgroup/basic.glsl" - "nbl/builtin/glsl/workgroup/clustered.glsl" - "nbl/builtin/glsl/workgroup/fft.glsl" - "nbl/builtin/glsl/workgroup/shuffle.glsl" - "nbl/builtin/glsl/workgroup/shuffle_relative.glsl" - "nbl/builtin/glsl/workgroup/vote.glsl" - #transform_tree - "nbl/builtin/glsl/transform_tree/global_transform_update.comp" - "nbl/builtin/glsl/transform_tree/global_transform_and_normal_matrix_update.comp" - "nbl/builtin/glsl/transform_tree/global_transform_update_common.glsl" - "nbl/builtin/glsl/transform_tree/global_transform_update_descriptor_set.glsl" - "nbl/builtin/glsl/transform_tree/modification_request_range.glsl" - "nbl/builtin/glsl/transform_tree/pool_descriptor_set.glsl" - "nbl/builtin/glsl/transform_tree/render_descriptor_set.glsl" - "nbl/builtin/glsl/transform_tree/relative_transform_modification.glsl" - "nbl/builtin/glsl/transform_tree/relative_transform_update.comp" - "nbl/builtin/glsl/transform_tree/relative_transform_update_common.glsl" - "nbl/builtin/glsl/transform_tree/relative_transform_update_descriptor_set.glsl" - "nbl/builtin/glsl/transform_tree/debug.vert" - # ext shouldn't be built into the engine, but there's no harm including some non-dynamic GLSL source to make life easier - #"nbl/builtin/glsl/ext/.glsl" - # radix sort - "nbl/builtin/glsl/ext/FFT/default_compute_fft.comp" - "nbl/builtin/glsl/ext/FFT/fft.glsl" - "nbl/builtin/glsl/ext/FFT/parameters_struct.glsl" - "nbl/builtin/glsl/ext/FFT/parameters.glsl" - "nbl/builtin/glsl/ext/FFT/types.glsl" - "nbl/builtin/glsl/ext/LumaMeter/common.glsl" - "nbl/builtin/glsl/ext/LumaMeter/impl.glsl" - "nbl/builtin/glsl/ext/ToneMapper/operators.glsl" - "nbl/builtin/glsl/ext/RadeonRays/intersection.glsl" - "nbl/builtin/glsl/ext/RadeonRays/ray.glsl" - "nbl/builtin/glsl/ext/MitsubaLoader/instance_data_struct.glsl" - "nbl/builtin/glsl/ext/MitsubaLoader/instance_data_descriptor.glsl" - "nbl/builtin/glsl/ext/MitsubaLoader/material_compiler_compatibility_impl.glsl" - # OIT - "nbl/builtin/glsl/ext/OIT/oit.glsl" - "nbl/builtin/glsl/ext/OIT/insert_node.glsl" - "nbl/builtin/glsl/ext/OIT/resolve.frag" - # virtual geometry - "nbl/builtin/glsl/virtual_geometry/descriptors.glsl" - "nbl/builtin/glsl/virtual_geometry/virtual_attribute.glsl" - "nbl/builtin/glsl/virtual_geometry/virtual_attribute_fetch.glsl" - # depth pyramid generator - "nbl/builtin/glsl/ext/DepthPyramidGenerator/common.glsl" - "nbl/builtin/glsl/ext/DepthPyramidGenerator/push_constants_struct_common.h" - "nbl/builtin/glsl/ext/DepthPyramidGenerator/depth_pyramid_generator_impl.glsl" - "nbl/builtin/glsl/ext/DepthPyramidGenerator/virtual_work_group.glsl" - # blit - "nbl/builtin/glsl/blit/formats_encode.glsl" - "nbl/builtin/glsl/blit/parameters.glsl" - "nbl/builtin/glsl/blit/multi_dimensional_array_addressing.glsl" - "nbl/builtin/glsl/blit/default_compute_common.comp" - - "nbl/builtin/glsl/blit/default_compute_blit.comp" - "nbl/builtin/glsl/blit/blit/blit.glsl" - "nbl/builtin/glsl/blit/blit/descriptors.glsl" - - "nbl/builtin/glsl/blit/default_compute_alpha_test.comp" - "nbl/builtin/glsl/blit/alpha_test/alpha_test.glsl" - "nbl/builtin/glsl/blit/alpha_test/descriptors.glsl" - - "nbl/builtin/glsl/blit/default_compute_normalization.comp" - "nbl/builtin/glsl/blit/normalization/normalization.glsl" - "nbl/builtin/glsl/blit/normalization/descriptors.glsl" - "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl" -PARENT_SCOPE) - -function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _NAMESPACE_ _CUSTOM_RESOURCES_TO_EMBED_ _OUTPUT_DIRECTORY_) - set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") - set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") +macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) + set(_OPTIONAL_ALIAS_ "${ARGV2}") + + list(APPEND ${_BUNDLE_NAME_} "${_LBR_PATH_}") + set(${_BUNDLE_NAME_} ${${_BUNDLE_NAME_}} PARENT_SCOPE) # override + + list(APPEND _LBR_${_BUNDLE_NAME_}_ "${_LBR_PATH_},${_OPTIONAL_ALIAS_}") + set(_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE) # override +endmacro() - foreach(X IN LISTS _CUSTOM_RESOURCES_TO_EMBED_) - list(APPEND NBL_DEPENDENCY_FILES "${NBL_ROOT_PATH}/include/${X}") - endforeach() +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/acceleration_structures.glsl" "cipsko") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/acceleration_structures.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_no_uv.vert") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_uv.vert") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/fragment_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/fragment_no_uv.frag") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/fragment_uv.frag") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/vertex_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/uv.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/color.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/no_uv_color.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/fragment_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/uv.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/color.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/no_uv_color.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/specialized_shader/fullscreentriangle.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/lambertian/singletexture/specialized_shader.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/lambertian/singletexture/specialized_shader.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_color/specialized_shader.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_normal/specialized_shader.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_normal/specialized_shader.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_uv/specialized_shader.frag") +# generic GLSL headers after this line +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/macros.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/algorithm.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ieee754.glsl") +# barycentric +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/extensions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/frag.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/vert.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/utils.glsl") +# bump mapping +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bump_mapping/fragment.glsl") # TODO: rename to `frag.glsl` +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bump_mapping/utils.glsl") +# bxdf +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/common_samples.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/fresnel.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/blinn_phong.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/ggx.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/geom/smith/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/geom/smith/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/geom/smith/ggx.glsl") +# brdf +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/diffuse/lambert.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/diffuse/oren_nayar.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/specular/blinn_phong.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/specular/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/specular/ggx.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/diffuse/fresnel_correction.glsl") +# bsdf +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/diffuse/lambert.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/ggx.glsl") +# colorspace +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/EOTF.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/OETF.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/decodeCIEXYZ.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/encodeCIEXYZ.glsl") +# Culling and LoD System +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/dispatch_indirect_params.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/draw_instance_count_scan_override.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/input_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_cull_and_lod_select.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_draw_count_scan_override.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_draw_cull.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_ref_counting_sort_scatter.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/potentially_visible_instance_draw_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/output_descriptor_modifiers.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/output_descriptor_set.glsl") +# VK_FORMAT support +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/format/decode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/format/encode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/format/constants.glsl") +# asset loaders (mostly for pipelines) +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/loader/mtl/common.glsl") +# LoD Library +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/lod_library/structs.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/lod_library/descriptor_set.glsl") +# math and limits +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/constants.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/complex.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/functions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/quaternions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/typeless_arithmetic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/limits/numeric.glsl") +# material_compiler +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/common_declarations.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/common_invariant_declarations.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/rasterization/impl.glsl") +# property pool +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/property_pool/transfer.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/property_pool/copy.comp") +# random numbers +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/random/xoroshiro.glsl") +# sampling +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/bilinear.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/box_muller_transform.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/concentric_mapping.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/cos_weighted.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/linear.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/projected_spherical_triangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/spherical_rectangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/spherical_triangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/quantized_sequence.glsl") +# global exclusive scan +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/direct.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/declarations.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/default_scheduler.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/indirect.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/parameters_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/virtual_workgroup.glsl") +# faster and easier scan +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scanning_append/scanning_append.glsl") +# scene +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scene/animation.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scene/keyframe.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scene/node.glsl") +# shapes +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/aabb.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/frustum.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/rectangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/triangle.glsl") +# skinning +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/cache_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/cache_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/debug.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/linear.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/render_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/update_descriptor_set.glsl") +# subgroup emulation +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/shared_arithmetic_portability.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/basic_portability.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/arithmetic_portability.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/arithmetic_portability_impl.glsl") +##LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/fft.glsl") +# utilities +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/indirect_commands.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/culling.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/compressed_normal_matrix_t.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/normal_decode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/normal_encode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/transform.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/morton.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/surface_transform_transformedDerivatives.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/surface_transform.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/surface_transform_e.h") +# virtual texturing +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_texturing/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_texturing/extensions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_texturing/impl_functions.glsl") +# workgroup "intrinsics" +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_arithmetic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_ballot.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_clustered.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_fft.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_shuffle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_shuffle_relative.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_vote.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/arithmetic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/ballot.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/basic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/clustered.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/fft.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shuffle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shuffle_relative.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/vote.glsl") +#transform_tree +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_and_normal_matrix_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_update_common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_update_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/modification_request_range.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/pool_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/render_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_modification.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_update_common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_update_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/debug.vert") +# ext shouldn't be built into the engine, but there's no harm including some non-dynamic GLSL source to make life easier +#LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/.glsl") +# radix sort +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/default_compute_fft.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/fft.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/parameters_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/parameters.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/types.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/LumaMeter/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/LumaMeter/impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/ToneMapper/operators.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/RadeonRays/intersection.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/RadeonRays/ray.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/MitsubaLoader/instance_data_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/MitsubaLoader/instance_data_descriptor.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/MitsubaLoader/material_compiler_compatibility_impl.glsl") +# OIT +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/OIT/oit.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/OIT/insert_node.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/OIT/resolve.frag") +# virtual geometry +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_geometry/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_geometry/virtual_attribute.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_geometry/virtual_attribute_fetch.glsl") +# depth pyramid generator +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/push_constants_struct_common.h") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/depth_pyramid_generator_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/virtual_work_group.glsl") +# blit +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/formats_encode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/parameters.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/multi_dimensional_array_addressing.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_common.comp") - list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") - list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_blit.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/blit/blit.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/blit/descriptors.glsl") - set(NBL_RESOURCES_LIST_FILE "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/resources.txt") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_alpha_test.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/alpha_test/alpha_test.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/alpha_test/descriptors.glsl") - string(REPLACE ";" "," RESOURCES_ARGS "${_CUSTOM_RESOURCES_TO_EMBED_}") - file(MAKE_DIRECTORY "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") - file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_normalization.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/normalization.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") - set(NBL_BS_HEADER_FILENAME "builtinResources.h") - set(NBL_BS_DATA_SOURCE_FILENAME "builtinResourceData.cpp") - set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") - set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") +function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) + set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_SOURCE "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CAPKResourcesArchieve.cpp.in") + set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CAPKResourcesArchieve.h.in") - set(_NBL_SOURCES_ - "${NBL_BUILTIN_RESOURCES_HEADER}" - "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - ) - - add_custom_command( - OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" - COMMENT "Generating built-in resources" - DEPENDS ${NBL_DEPENDENCY_FILES} - VERBATIM - ) + string(REPLACE "::" "/" _PATH_PREFIX_ "${_NAMESPACE_}") - add_library(${_TARGET_NAME_} STATIC - ${_NBL_SOURCES_} - ) + set(_ITR_ 0) + foreach(X IN LISTS _LBR_${_BUNDLE_NAME_}_) + set(_CURRENT_ITEM_ "${X}") + string(FIND "${_CURRENT_ITEM_}" "," _FOUND_ REVERSE) + + string(REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_}") + string(REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_}") + + if(EXISTS "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") + list(APPEND NBL_DEPENDENCY_FILES "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") + file(SIZE "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}" _FILE_SIZE_) + + string(APPEND _RESOURCES_INIT_LIST_ "\t\t{\"${_CURRENT_PATH_}\", ${_FILE_SIZE_}, 0xdeadbeefu, ${_ITR_}, EAT_NULL},\n") # initializer list + else() + message(FATAL_ERROR "!") # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource + endif() + + math(EXPR _ITR_ "${_ITR_} + 1") + endforeach() - target_include_directories(${_TARGET_NAME_} PUBLIC "${NBL_ROOT_PATH}/include") + configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_SOURCE}" "${_OUTPUT_DIRECTORY_}/CAPKResourcesArchieve.cpp") + configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_DIRECTORY_}/CAPKResourcesArchieve.h") - if(NBL_DYNAMIC_MSVC_RUNTIME) - set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") - else() - set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") - endif() + # TODO: bring back python generation (?) endfunction() function(NBL_ADD_BUILTIN_RESOURCES) - ADD_CUSTOM_BUILTIN_RESOURCES(nblBuiltinResourceData "nbl::builtin" "${NBL_RESOURCES_TO_EMBED}" "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") + ADD_CUSTOM_BUILTIN_RESOURCES(nblBuiltinResourceData NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") endfunction() diff --git a/src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in b/src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in new file mode 100644 index 0000000000..c75f35a0a6 --- /dev/null +++ b/src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in @@ -0,0 +1,14 @@ +#include "CAPKResourcesArchieve.h" + +namespace @_NAMESPACE_@ +{ + static core::vector resources + { +@_RESOURCES_INIT_LIST_@ + }; + + core::vector CAPKResourcesArchive::getItemList() + { + return resources; + } +} \ No newline at end of file diff --git a/src/nbl/builtin/template/CAPKResourcesArchieve.h.in b/src/nbl/builtin/template/CAPKResourcesArchieve.h.in new file mode 100644 index 0000000000..f764272b70 --- /dev/null +++ b/src/nbl/builtin/template/CAPKResourcesArchieve.h.in @@ -0,0 +1,23 @@ +#include + +namespace @_NAMESPACE_@ +{ + class CAPKResourcesArchive final : public system::CFileArchive + { + constexpr static std::string_view pathPrefix = "@_PATH_PREFIX_@"; + constexpr static bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } + + public: + inline CAPKResourcesArchive(const system::path& _path, system::logger_opt_smart_ptr&& logger) + : system::CFileArchive(_path,std::move(logger), getItemList()) {} + + protected: + file_buffer_t getFileBuffer(const system::IFileArchive::SListEntry* item) override + { + auto found = get_resource_runtime(item->pathRelativeToArchive); + return {found.first, found.second, nullptr}; + } + + static core::vector getItemList(); // defined in the auto-generated file + }; +} \ No newline at end of file From f4a8ab0f7df10de7c51982b9c8e7124d1134ac5d Mon Sep 17 00:00:00 2001 From: Michael Pollind Date: Thu, 23 Feb 2023 19:42:45 -0800 Subject: [PATCH 02/46] bugfix: address build issues with embedded assets for clang and gnu compiler Signed-off-by: Michael Pollind --- include/nbl/system/ISystem.h | 2 +- src/nbl/builtin/CMakeLists.txt | 2 +- src/nbl/builtin/builtinDataGen.py | 15 ++++++++++----- src/nbl/builtin/builtinHeaderGen.py | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/include/nbl/system/ISystem.h b/include/nbl/system/ISystem.h index cc2f5df663..dec6549934 100644 --- a/include/nbl/system/ISystem.h +++ b/include/nbl/system/ISystem.h @@ -9,7 +9,7 @@ #include "nbl/system/ICancellableAsyncQueueDispatcher.h" #include "nbl/system/IFileArchive.h" -//#include "nbl/builtin/builtinResources.h" +#include "nbl/builtin/builtinResources.h" #include diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index 49cfd3879a..e5651954b1 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -268,7 +268,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _NAMESPACE_ _CUSTOM_RESOURCE add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" + COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" COMMENT "Generating built-in resources" DEPENDS ${NBL_DEPENDENCY_FILES} VERBATIM diff --git a/src/nbl/builtin/builtinDataGen.py b/src/nbl/builtin/builtinDataGen.py index 7dbf8513db..a8abaddd4f 100644 --- a/src/nbl/builtin/builtinDataGen.py +++ b/src/nbl/builtin/builtinDataGen.py @@ -17,7 +17,6 @@ cmakeSourceDir = sys.argv[2] resourcesFile = sys.argv[3] resourcesNamespace = sys.argv[4] - correspondingHeaderFile = sys.argv[5] with open(resourcesFile, "r") as f: resourcePaths = f.read().rstrip().split(',') @@ -25,12 +24,19 @@ #opening a file outp = open(outputFilename,"w+") - outp.write("#include \"" + correspondingHeaderFile + "\"\n") + + outp.write("#include \"nbl/core/string/StringLiteral.h\"\n") + outp.write("#include \n") + outp.write("#include \n"); + outp.write("#include \n"); outp.write("\tnamespace " + resourcesNamespace + " {\n") + + outp.write("template") + outp.write("const std::pair get_resource();") # writing binary data of all files in a loop for x in resourcePaths: - outp.write('\n\ttemplate<> const std::pair get_resource()' % x) + outp.write('\n\ttemplate<> const std::pair get_resource()' % x) outp.write('\n\t{') outp.write('\n\t\tstatic const uint8_t data[] = {\n\t\t\t') try: @@ -53,7 +59,6 @@ outp.write('\n\t\t};') outp.write('\n\t\treturn { data, sizeof(data) };') outp.write('\n\t}') - outp.write('\n\ttemplate const std::pair get_resource();\n\n\n'%x) outp.write("\tstd::pair get_resource_runtime(const std::string& filename) {\n") @@ -68,7 +73,7 @@ outp.write("\t\tswitch (resource->second) \n\t\t\t{\n") counter = 1 for x in resourcePaths: - outp.write("\t\t\tcase %d:\n\t\t\t\t\treturn get_resource();\n" % (counter,x)) + outp.write("\t\t\tcase %d:\n\t\t\t\t\treturn get_resource();\n" % (counter,x)) counter+= 1 outp.write("\t\t\tdefault:\n") diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index 9f296c60bb..e1da040f83 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -37,7 +37,7 @@ #Iterating through input list for x in resourcePaths: - outp.write('\n\t\textern template const std::pair get_resource();' % x) + outp.write('\n\t\textern template const std::pair get_resource();' % x) outp.write("\n\t}") outp.write("\n#endif") From 9cfedb94babedbc157ed692d579d9cf14e205ceb Mon Sep 17 00:00:00 2001 From: Michael Pollind Date: Thu, 23 Feb 2023 20:04:38 -0800 Subject: [PATCH 03/46] address build problems with gnu compiler Signed-off-by: Michael Pollind --- src/nbl/asset/IAssetManager.cpp | 14 +++++++------- src/nbl/video/utilities/CPropertyPoolHandler.cpp | 2 +- src/nbl/video/utilities/CScanner.cpp | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/nbl/asset/IAssetManager.cpp b/src/nbl/asset/IAssetManager.cpp index 4c55899ed5..52502045ed 100644 --- a/src/nbl/asset/IAssetManager.cpp +++ b/src/nbl/asset/IAssetManager.cpp @@ -239,38 +239,38 @@ void IAssetManager::insertBuiltinAssets() }; auto fileSystem = getSystem(); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(fileSystem->loadBuiltinData(), asset::IShader::ESS_VERTEX, { "nbl/builtin/specialized_shader/fullscreentriangle.vert" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(fileSystem->loadBuiltinData(), asset::IShader::ESS_VERTEX, { "nbl/builtin/material/lambertian/singletexture/specialized_shader.vert", "nbl/builtin/material/debug/vertex_uv/specialized_shader.vert" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), // it somehow adds an extra "tt" raw string to the end of the returned value, beware + buildInGLSLShader(fileSystem->loadBuiltinData(), // it somehow adds an extra "tt" raw string to the end of the returned value, beware asset::IShader::ESS_FRAGMENT, { "nbl/builtin/material/lambertian/singletexture/specialized_shader.frag" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(fileSystem->loadBuiltinData(), asset::IShader::ESS_VERTEX, { "nbl/builtin/material/debug/vertex_normal/specialized_shader.vert"}); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(fileSystem->loadBuiltinData(), asset::IShader::ESS_VERTEX, { "nbl/builtin/material/debug/vertex_color/specialized_shader.vert" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(fileSystem->loadBuiltinData(), asset::IShader::ESS_FRAGMENT, { "nbl/builtin/material/debug/vertex_uv/specialized_shader.frag" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(fileSystem->loadBuiltinData(), asset::IShader::ESS_FRAGMENT, { "nbl/builtin/material/debug/vertex_normal/specialized_shader.frag", diff --git a/src/nbl/video/utilities/CPropertyPoolHandler.cpp b/src/nbl/video/utilities/CPropertyPoolHandler.cpp index 3cce0fd3e0..07287aa520 100644 --- a/src/nbl/video/utilities/CPropertyPoolHandler.cpp +++ b/src/nbl/video/utilities/CPropertyPoolHandler.cpp @@ -15,7 +15,7 @@ CPropertyPoolHandler::CPropertyPoolHandler(core::smart_refctd_ptrgetPhysicalDevice()->getSystem(); core::smart_refctd_ptr glsl; { - auto glslFile = system->loadBuiltinData(); + auto glslFile = system->loadBuiltinData(); glsl = core::make_smart_refctd_ptr(glslFile->getSize()); memcpy(glsl->getPointer(), glslFile->getMappedPointer(), glsl->getSize()); } diff --git a/src/nbl/video/utilities/CScanner.cpp b/src/nbl/video/utilities/CScanner.cpp index f6d8654926..9daf17801d 100644 --- a/src/nbl/video/utilities/CScanner.cpp +++ b/src/nbl/video/utilities/CScanner.cpp @@ -9,9 +9,9 @@ core::smart_refctd_ptr CScanner::createShader(const bool indi core::smart_refctd_ptr glsl; { if(indirect) - glsl = system->loadBuiltinData(); + glsl = system->loadBuiltinData(); else - glsl = system->loadBuiltinData(); + glsl = system->loadBuiltinData(); } auto buffer = core::make_smart_refctd_ptr(glsl->getSize()); memcpy(buffer->getPointer(), glsl->getMappedPointer(), glsl->getSize()); From a4b32c6ea5071bfdf3e73a0c2a092c305a8c1b62 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sat, 25 Feb 2023 12:45:19 +0100 Subject: [PATCH 04/46] list all created builtin libraries and link to Nabla, bring back python scripts for builtin resources generation --- cmake/common.cmake | 1 + include/nbl/builtin/common.h | 4 +-- include/nbl/system/ISystem.h | 1 - src/nbl/CMakeLists.txt | 22 ++++++++++++--- src/nbl/builtin/CMakeLists.txt | 50 +++++++++++++++++++++++++++++++--- 5 files changed, 67 insertions(+), 11 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index f2dc0e50fd..6b5548c907 100755 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -84,6 +84,7 @@ macro(nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDE target_include_directories(${EXECUTABLE_NAME} PUBLIC "${NBL_ROOT_PATH}/examples_tests/common" + PUBLIC "${NBL_ROOT_PATH_BINARY}/include" PUBLIC ../../include PRIVATE ${_EXTRA_INCLUDES} ) diff --git a/include/nbl/builtin/common.h b/include/nbl/builtin/common.h index bf75b1935c..49f8f7b1fc 100644 --- a/include/nbl/builtin/common.h +++ b/include/nbl/builtin/common.h @@ -11,8 +11,8 @@ #include #include - -#include "nbl/core/string/StringLiteral.h" +//#include "nbl/builtin/" +#include "nbl/builtin/builtinResources.h" namespace nbl::builtin { diff --git a/include/nbl/system/ISystem.h b/include/nbl/system/ISystem.h index cc2f5df663..e0e79c543c 100644 --- a/include/nbl/system/ISystem.h +++ b/include/nbl/system/ISystem.h @@ -9,7 +9,6 @@ #include "nbl/system/ICancellableAsyncQueueDispatcher.h" #include "nbl/system/IFileArchive.h" -//#include "nbl/builtin/builtinResources.h" #include diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 1424104a7e..fc1c15c3d9 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -411,6 +411,20 @@ if(NOT NBL_STATIC_BUILD) set_target_properties(Nabla PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${NBL_ASSEMBLY_DIRECTORY}) endif() +if(NBL_EMBED_BUILTIN_RESOURCES) + add_dependencies(Nabla ${_NBL_BUILTIN_RESOURCES_LIBRARIES_}) + + if(NBL_STATIC_BUILD) + target_link_libraries(Nabla INTERFACE + ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} + ) + else() + target_link_libraries(Nabla PRIVATE + ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} + ) + endif() +endif() + ## Set up 3rdparty deps # Parallel Hashmap target_include_directories(Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR}/parallel-hashmap/parallel_hashmap) @@ -622,13 +636,13 @@ if(NOT NBL_STATIC_BUILD) COMMENT "Launching defines.h generation script!" VERBATIM ) - - add_custom_target(generate_define_header ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/$/generated/define.h") - add_dependencies(Nabla generate_define_header) endif() nbl_install_headers("${NABLA_HEADERS_PUBLIC}" "${NBL_ROOT_PATH}/include") -nbl_install_file("${CMAKE_CURRENT_BINARY_DIR}/$/generated/define.h" "") +if(NOT NBL_STATIC_BUILD) + nbl_install_file("${CMAKE_CURRENT_BINARY_DIR}/$/generated/define.h" "") +endif() +nbl_install_file("${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/builtinResources.h" "nbl/builtin") nbl_install_config_header(BuildConfigOptions.h) # TODO: @AnastazIuk change macros to functions! https://github.com/buildaworldnet/IrrlichtBAW/issues/311 diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index 42a94bfacb..cd82ed8922 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -10,7 +10,6 @@ macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) set(_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE) # override endmacro() -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/acceleration_structures.glsl" "cipsko") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/acceleration_structures.glsl") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_impl.glsl") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_no_uv.vert") # TODO: remove naming tautology @@ -250,6 +249,8 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalizatio function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_SOURCE "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CAPKResourcesArchieve.cpp.in") set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CAPKResourcesArchieve.h.in") + set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") + set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") string(REPLACE "::" "/" _PATH_PREFIX_ "${_NAMESPACE_}") @@ -276,10 +277,51 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_SOURCE}" "${_OUTPUT_DIRECTORY_}/CAPKResourcesArchieve.cpp") configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_DIRECTORY_}/CAPKResourcesArchieve.h") - # TODO: bring back python generation (?) + list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") + list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") + + set(NBL_RESOURCES_LIST_FILE "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/resources.txt") + + string(REPLACE ";" "," RESOURCES_ARGS "${${_BUNDLE_NAME_}}") + file(MAKE_DIRECTORY "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") + file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") + + set(NBL_BS_HEADER_FILENAME "builtinResources.h") + set(NBL_BS_DATA_SOURCE_FILENAME "builtinResourceData.cpp") + set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") + set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") + + set(_NBL_SOURCES_ + "${NBL_BUILTIN_RESOURCES_HEADER}" + "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" + ) + + add_custom_command( + OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" + COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" + COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" + COMMENT "Generating built-in resources" + DEPENDS ${NBL_DEPENDENCY_FILES} + VERBATIM + ) + + add_library(${_TARGET_NAME_} STATIC + ${_NBL_SOURCES_} + ) + + target_include_directories(${_TARGET_NAME_} PUBLIC "${NBL_ROOT_PATH}/include") + + if(NBL_DYNAMIC_MSVC_RUNTIME) + set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + else() + set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() + + list(APPEND _NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_TARGET_NAME_}) + set(_NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} PARENT_SCOPE) # override endfunction() -function(NBL_ADD_BUILTIN_RESOURCES) +macro(NBL_ADD_BUILTIN_RESOURCES) ADD_CUSTOM_BUILTIN_RESOURCES(nblBuiltinResourceData NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") -endfunction() +endmacro() From b6d5e308547aa1d6e0fee8e44e620a49db90e8a1 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sat, 25 Feb 2023 16:15:08 +0100 Subject: [PATCH 05/46] move some code from common.h to autogenerated CArchive.h, update src/nbl/CMakeLists.txt with builtin python generation, update some source files, introduce Nabla internal NBL_BUILTIN_RESOURCES_DIRECTORY_PATH, add CArchive.h.in file --- CMakeLists.txt | 1 + include/nbl/builtin/common.h | 13 ------- include/nbl/config/BuildConfigOptions.h.in | 2 + include/nbl/system/ISystem.h | 9 +++++ src/nbl/CMakeLists.txt | 1 + src/nbl/asset/utils/CGLSLCompiler.cpp | 2 +- src/nbl/asset/utils/CHLSLCompiler.cpp | 1 + src/nbl/builtin/CMakeLists.txt | 11 +++--- .../template/CAPKResourcesArchieve.cpp.in | 14 ------- .../template/CAPKResourcesArchieve.h.in | 23 ----------- src/nbl/builtin/template/CArchive.h.in | 38 +++++++++++++++++++ src/nbl/system/ISystem.cpp | 3 +- 12 files changed, 60 insertions(+), 58 deletions(-) delete mode 100644 src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in delete mode 100644 src/nbl/builtin/template/CAPKResourcesArchieve.h.in create mode 100644 src/nbl/builtin/template/CArchive.h.in diff --git a/CMakeLists.txt b/CMakeLists.txt index f4bc05ff1c..6cf22a72b8 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,7 @@ endif() get_filename_component(NBL_ROOT_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) get_filename_component(NBL_ROOT_PATH_BINARY "${CMAKE_CURRENT_BINARY_DIR}" ABSOLUTE) +set(NBL_BUILTIN_RESOURCES_DIRECTORY_PATH "${NBL_ROOT_PATH}/include") # Configure CCache if available find_program(CCACHE_FOUND ccache) diff --git a/include/nbl/builtin/common.h b/include/nbl/builtin/common.h index 49f8f7b1fc..a2c241fa95 100644 --- a/include/nbl/builtin/common.h +++ b/include/nbl/builtin/common.h @@ -16,22 +16,9 @@ namespace nbl::builtin { - -constexpr std::string_view PathPrefix = "nbl/builtin/"; -constexpr bool hasPathPrefix(std::string_view str) { return str.find(PathPrefix) == 0ull; } // if you attempt to use this without `NBL_EMBED_BUILTIN_RESOURCES_` CMake option, this will always return `{nullptr,0ull}` std::pair get_resource_runtime(const std::string&); -#ifndef _NBL_EMBED_BUILTIN_RESOURCES_ -#define _NBL_BUILTIN_PATH_AVAILABLE -constexpr std::string_view getBuiltinResourcesDirectoryPath() -{ - std::string_view retval = __FILE__; - retval.remove_suffix(PathPrefix.size()+std::string_view("common.h").size()); - return retval; -} -#endif - } #endif diff --git a/include/nbl/config/BuildConfigOptions.h.in b/include/nbl/config/BuildConfigOptions.h.in index 03823d69ab..08c6f7eea6 100644 --- a/include/nbl/config/BuildConfigOptions.h.in +++ b/include/nbl/config/BuildConfigOptions.h.in @@ -77,6 +77,8 @@ #endif #endif +#define NBL_BUILTIN_RESOURCES_DIRECTORY_PATH "@NBL_BUILTIN_RESOURCES_DIRECTORY_PATH@" + // DDL exports #cmakedefine _NBL_SHARED_BUILD_ #ifdef _NBL_SHARED_BUILD_ diff --git a/include/nbl/system/ISystem.h b/include/nbl/system/ISystem.h index e0e79c543c..ab4feec02c 100644 --- a/include/nbl/system/ISystem.h +++ b/include/nbl/system/ISystem.h @@ -83,6 +83,15 @@ class NBL_API2 ISystem : public core::IReferenceCounted void handle_request(SRequestType& req, SRequestParams_WRITE& param); core::smart_refctd_ptr m_caller; }; + +#ifndef _NBL_EMBED_BUILTIN_RESOURCES_ + constexpr std::string_view getBuiltinResourcesDirectoryPath() + { + std::string_view retval = NBL_BUILTIN_RESOURCES_DIRECTORY_PATH; + return retval; + } +#endif + friend class ISystemFile; CAsyncQueue m_dispatcher; diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index fc1c15c3d9..b49a6fbc4e 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -364,6 +364,7 @@ set(NABLA_HEADERS "${NBL_ROOT_PATH}/include/nabla.h" ${NABLA_HEADERS_PUBLIC} ${N set(NBL_LIBRARY_CREATION_SOURCES ${NABLA_SRCS_COMMON} ${NABLA_HEADERS} + ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} $ $ $ diff --git a/src/nbl/asset/utils/CGLSLCompiler.cpp b/src/nbl/asset/utils/CGLSLCompiler.cpp index b99a7b77ac..f3f8377660 100644 --- a/src/nbl/asset/utils/CGLSLCompiler.cpp +++ b/src/nbl/asset/utils/CGLSLCompiler.cpp @@ -3,12 +3,12 @@ // For conditions of distribution and use, see copyright notice in nabla.h #include "nbl/asset/utils/CGLSLCompiler.h" #include "nbl/asset/utils/shadercUtils.h" +#include "nbl/builtin/CArchive.h" #include #include #include - using namespace nbl; using namespace nbl::asset; diff --git a/src/nbl/asset/utils/CHLSLCompiler.cpp b/src/nbl/asset/utils/CHLSLCompiler.cpp index 01351a34c8..9add864e50 100644 --- a/src/nbl/asset/utils/CHLSLCompiler.cpp +++ b/src/nbl/asset/utils/CHLSLCompiler.cpp @@ -3,6 +3,7 @@ // For conditions of distribution and use, see copyright notice in nabla.h #include "nbl/asset/utils/CHLSLCompiler.h" #include "nbl/asset/utils/shadercUtils.h" +#include "nbl/builtin/CArchive.h" #include #include diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index cd82ed8922..d919a6ba68 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -247,8 +247,7 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalizatio LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) - set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_SOURCE "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CAPKResourcesArchieve.cpp.in") - set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CAPKResourcesArchieve.h.in") + set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") @@ -266,7 +265,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH list(APPEND NBL_DEPENDENCY_FILES "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") file(SIZE "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}" _FILE_SIZE_) - string(APPEND _RESOURCES_INIT_LIST_ "\t\t{\"${_CURRENT_PATH_}\", ${_FILE_SIZE_}, 0xdeadbeefu, ${_ITR_}, EAT_NULL},\n") # initializer list + string(APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t{\"${_CURRENT_PATH_}\", ${_FILE_SIZE_}, 0xdeadbeefu, ${_ITR_}, nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n") # initializer list else() message(FATAL_ERROR "!") # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource endif() @@ -274,8 +273,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH math(EXPR _ITR_ "${_ITR_} + 1") endforeach() - configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_SOURCE}" "${_OUTPUT_DIRECTORY_}/CAPKResourcesArchieve.cpp") - configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_DIRECTORY_}/CAPKResourcesArchieve.h") + configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_DIRECTORY_}/CArchive.h") list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") @@ -317,6 +315,9 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() + list(APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_DIRECTORY_}/CArchive.h") + set(_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} PARENT_SCOPE) + list(APPEND _NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_TARGET_NAME_}) set(_NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} PARENT_SCOPE) # override endfunction() diff --git a/src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in b/src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in deleted file mode 100644 index c75f35a0a6..0000000000 --- a/src/nbl/builtin/template/CAPKResourcesArchieve.cpp.in +++ /dev/null @@ -1,14 +0,0 @@ -#include "CAPKResourcesArchieve.h" - -namespace @_NAMESPACE_@ -{ - static core::vector resources - { -@_RESOURCES_INIT_LIST_@ - }; - - core::vector CAPKResourcesArchive::getItemList() - { - return resources; - } -} \ No newline at end of file diff --git a/src/nbl/builtin/template/CAPKResourcesArchieve.h.in b/src/nbl/builtin/template/CAPKResourcesArchieve.h.in deleted file mode 100644 index f764272b70..0000000000 --- a/src/nbl/builtin/template/CAPKResourcesArchieve.h.in +++ /dev/null @@ -1,23 +0,0 @@ -#include - -namespace @_NAMESPACE_@ -{ - class CAPKResourcesArchive final : public system::CFileArchive - { - constexpr static std::string_view pathPrefix = "@_PATH_PREFIX_@"; - constexpr static bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } - - public: - inline CAPKResourcesArchive(const system::path& _path, system::logger_opt_smart_ptr&& logger) - : system::CFileArchive(_path,std::move(logger), getItemList()) {} - - protected: - file_buffer_t getFileBuffer(const system::IFileArchive::SListEntry* item) override - { - auto found = get_resource_runtime(item->pathRelativeToArchive); - return {found.first, found.second, nullptr}; - } - - static core::vector getItemList(); // defined in the auto-generated file - }; -} \ No newline at end of file diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in new file mode 100644 index 0000000000..e335331591 --- /dev/null +++ b/src/nbl/builtin/template/CArchive.h.in @@ -0,0 +1,38 @@ +#ifndef _NBL_C_ARCHIVE_H_ +#define _NBL_C_ARCHIVE_H_ + +#include + +namespace @_NAMESPACE_@ +{ + constexpr std::string_view pathPrefix = "@_PATH_PREFIX_@"; + constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } + + class CArchive final : public system::CFileArchive + { + public: + inline CArchive(system::path _path, system::logger_opt_smart_ptr&& logger) + : system::CFileArchive(std::move(_path),std::move(logger), getItemList()) {} + + protected: + file_buffer_t getFileBuffer(const system::IFileArchive::SListEntry* item) override + { + auto found = get_resource_runtime(item->pathRelativeToArchive.string()); + return { const_cast(found.first), found.second, nullptr }; + } + + core::vector getItemList() + { + static core::vector resources + { +@_RESOURCES_INIT_LIST_@ + }; + + return resources; + } + }; +} + +#endif // _NBL_C_ARCHIVE_H_ + + diff --git a/src/nbl/system/ISystem.cpp b/src/nbl/system/ISystem.cpp index 788e714112..d1c1be50b3 100644 --- a/src/nbl/system/ISystem.cpp +++ b/src/nbl/system/ISystem.cpp @@ -1,15 +1,14 @@ #include "nbl/system/ISystem.h" #include "nbl/system/ISystemFile.h" #include "nbl/system/CFileView.h" +#include "nbl/builtin/CArchive.h" #include "nbl/system/CArchiveLoaderZip.h" #include "nbl/system/CArchiveLoaderTar.h" - using namespace nbl; using namespace nbl::system; - ISystem::ISystem(core::smart_refctd_ptr&& caller) : m_dispatcher(std::move(caller)) { addArchiveLoader(core::make_smart_refctd_ptr(nullptr)); From d667624d8a98b0d357f8ab624f30624e6bb1e134 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sat, 25 Feb 2023 16:16:23 +0100 Subject: [PATCH 06/46] update examples_tests submodule with archive builtin resources test --- examples_tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples_tests b/examples_tests index f83ab96990..692587f6b7 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit f83ab96990d86d6adfa377597222215c9b6f8f40 +Subproject commit 692587f6b7251824d8e252893a3097c81ada4992 From 0e5b7debcfc0f6213cf594b1297400787aa95380 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Tue, 28 Feb 2023 21:59:01 +0100 Subject: [PATCH 07/46] correct python script, fix and correct CArchive.h.in and update src/nbl/builtin/CMakeLists.txt. Update examples_tests submodule --- examples_tests | 2 +- src/nbl/builtin/CMakeLists.txt | 12 ++++++++---- src/nbl/builtin/builtinHeaderGen.py | 7 ++++--- src/nbl/builtin/template/CArchive.h.in | 21 ++++++++++++--------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/examples_tests b/examples_tests index 692587f6b7..08bcc1dc99 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 692587f6b7251824d8e252893a3097c81ada4992 +Subproject commit 08bcc1dc995d22f1fd50e0942ee0cd04c1874262 diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index d919a6ba68..9e81db6953 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -250,8 +250,14 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") + set(NBL_BS_HEADER_FILENAME "builtinResources.h") + set(NBL_BS_DATA_SOURCE_FILENAME "builtinResourceData.cpp") string(REPLACE "::" "/" _PATH_PREFIX_ "${_NAMESPACE_}") + string(REPLACE "::" "_" _GUARD_SUFFIX_ "${_NAMESPACE_}") + string(REGEX REPLACE "^[0-9]+\." "" _GUARD_SUFFIX_ ${_GUARD_SUFFIX_}) + string(TOUPPER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) + string(MAKE_C_IDENTIFIER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) set(_ITR_ 0) foreach(X IN LISTS _LBR_${_BUNDLE_NAME_}_) @@ -284,8 +290,6 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH file(MAKE_DIRECTORY "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") - set(NBL_BS_HEADER_FILENAME "builtinResources.h") - set(NBL_BS_DATA_SOURCE_FILENAME "builtinResourceData.cpp") set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") @@ -296,8 +300,8 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" + COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" + COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" COMMENT "Generating built-in resources" DEPENDS ${NBL_DEPENDENCY_FILES} VERBATIM diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index 9f296c60bb..60040e764c 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -17,6 +17,7 @@ cmakeSourceDir = sys.argv[2] resourcesFile = sys.argv[3] resourcesNamespace = sys.argv[4] + guardSuffix = sys.argv[5] with open(resourcesFile, "r") as f: resourcePaths = f.read().rstrip().split(',') @@ -24,8 +25,8 @@ #opening a file outp = open(outputFilename,"w+") - outp.write("#ifndef BUILTINRESOURCEDATA_H\n") - outp.write("#define BUILTINRESOURCEDATA_H\n") + outp.write("#ifndef _" + guardSuffix + "_BUILTINRESOURCEDATA_H_\n") + outp.write("#define _" + guardSuffix + "_BUILTINRESOURCEDATA_H\n") outp.write("#include \n") outp.write("#include \n") outp.write("#include \n") @@ -40,6 +41,6 @@ outp.write('\n\t\textern template const std::pair get_resource();' % x) outp.write("\n\t}") - outp.write("\n#endif") + outp.write("\n#endif // _" + guardSuffix + "_BUILTINRESOURCEDATA_H_") outp.close() diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index e335331591..74cdc9f007 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -1,29 +1,32 @@ -#ifndef _NBL_C_ARCHIVE_H_ -#define _NBL_C_ARCHIVE_H_ +#ifndef _@_GUARD_SUFFIX_@_C_ARCHIVE_H_ +#define _@_GUARD_SUFFIX_@_C_ARCHIVE_H_ #include +#include "@NBL_BS_HEADER_FILENAME@" namespace @_NAMESPACE_@ { constexpr std::string_view pathPrefix = "@_PATH_PREFIX_@"; constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } + + std::pair get_resource_runtime(const std::string& filename); - class CArchive final : public system::CFileArchive + class CArchive final : public nbl::system::CFileArchive { public: - inline CArchive(system::path _path, system::logger_opt_smart_ptr&& logger) - : system::CFileArchive(std::move(_path),std::move(logger), getItemList()) {} + inline CArchive(nbl::system::path _path, nbl::system::logger_opt_smart_ptr&& logger) + : nbl::system::CFileArchive(std::move(_path),std::move(logger), getItemList()) {} protected: - file_buffer_t getFileBuffer(const system::IFileArchive::SListEntry* item) override + file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override { auto found = get_resource_runtime(item->pathRelativeToArchive.string()); return { const_cast(found.first), found.second, nullptr }; } - core::vector getItemList() + nbl::core::vector getItemList() { - static core::vector resources + static nbl::core::vector resources { @_RESOURCES_INIT_LIST_@ }; @@ -33,6 +36,6 @@ namespace @_NAMESPACE_@ }; } -#endif // _NBL_C_ARCHIVE_H_ +#endif // _@_GUARD_SUFFIX_@_C_ARCHIVE_H_ From 46b2b7116e68425b3475e0c73a6559bac89f95cb Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 10 Mar 2023 14:01:00 +0100 Subject: [PATCH 08/46] correct nasty bug and make sure builtin resources works --- src/nbl/builtin/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index 9e81db6953..cf4090c385 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -247,6 +247,8 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalizatio LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) + file(MAKE_DIRECTORY "${_OUTPUT_DIRECTORY_}") + set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") @@ -284,10 +286,9 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") - set(NBL_RESOURCES_LIST_FILE "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/resources.txt") + set(NBL_RESOURCES_LIST_FILE "${_OUTPUT_DIRECTORY_}/resources.txt") string(REPLACE ";" "," RESOURCES_ARGS "${${_BUNDLE_NAME_}}") - file(MAKE_DIRECTORY "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") From 446e301bad776a276895bb69e7a870306fc93f74 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 10 Mar 2023 14:21:02 +0100 Subject: [PATCH 09/46] correct missing correspondingHeaderFile after merge and remove #include of libraries we include in correspondingHeaderFile header --- src/nbl/builtin/builtinDataGen.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/nbl/builtin/builtinDataGen.py b/src/nbl/builtin/builtinDataGen.py index a8abaddd4f..c2f8a3b758 100644 --- a/src/nbl/builtin/builtinDataGen.py +++ b/src/nbl/builtin/builtinDataGen.py @@ -17,18 +17,15 @@ cmakeSourceDir = sys.argv[2] resourcesFile = sys.argv[3] resourcesNamespace = sys.argv[4] + correspondingHeaderFile = sys.argv[5] with open(resourcesFile, "r") as f: resourcePaths = f.read().rstrip().split(',') #opening a file outp = open(outputFilename,"w+") - - - outp.write("#include \"nbl/core/string/StringLiteral.h\"\n") - outp.write("#include \n") - outp.write("#include \n"); - outp.write("#include \n"); + + outp.write("#include \"" + correspondingHeaderFile + "\"\n") outp.write("\tnamespace " + resourcesNamespace + " {\n") outp.write("template") From c110ce0f2323575b5ae872eaff0650f5f4d4120f Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 10 Mar 2023 14:51:29 +0100 Subject: [PATCH 10/46] move builtin resources creation macro and function to src/nbl/builtin/utils.cmake --- src/nbl/builtin/CMakeLists.txt | 93 +--------------------------------- src/nbl/builtin/utils.cmake | 92 +++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 92 deletions(-) create mode 100644 src/nbl/builtin/utils.cmake diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index cf4090c385..b9aed74556 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -1,14 +1,4 @@ -find_package(Python3 REQUIRED) - -macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) - set(_OPTIONAL_ALIAS_ "${ARGV2}") - - list(APPEND ${_BUNDLE_NAME_} "${_LBR_PATH_}") - set(${_BUNDLE_NAME_} ${${_BUNDLE_NAME_}} PARENT_SCOPE) # override - - list(APPEND _LBR_${_BUNDLE_NAME_}_ "${_LBR_PATH_},${_OPTIONAL_ALIAS_}") - set(_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE) # override -endmacro() +include("${CMAKE_CURRENT_SOURCE_DIR}/utils.cmake") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/acceleration_structures.glsl") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_impl.glsl") @@ -246,87 +236,6 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalizatio LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/descriptors.glsl") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") -function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) - file(MAKE_DIRECTORY "${_OUTPUT_DIRECTORY_}") - - set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") - set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") - set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") - set(NBL_BS_HEADER_FILENAME "builtinResources.h") - set(NBL_BS_DATA_SOURCE_FILENAME "builtinResourceData.cpp") - - string(REPLACE "::" "/" _PATH_PREFIX_ "${_NAMESPACE_}") - string(REPLACE "::" "_" _GUARD_SUFFIX_ "${_NAMESPACE_}") - string(REGEX REPLACE "^[0-9]+\." "" _GUARD_SUFFIX_ ${_GUARD_SUFFIX_}) - string(TOUPPER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) - string(MAKE_C_IDENTIFIER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) - - set(_ITR_ 0) - foreach(X IN LISTS _LBR_${_BUNDLE_NAME_}_) - set(_CURRENT_ITEM_ "${X}") - string(FIND "${_CURRENT_ITEM_}" "," _FOUND_ REVERSE) - - string(REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_}") - string(REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_}") - - if(EXISTS "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") - list(APPEND NBL_DEPENDENCY_FILES "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") - file(SIZE "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}" _FILE_SIZE_) - - string(APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t{\"${_CURRENT_PATH_}\", ${_FILE_SIZE_}, 0xdeadbeefu, ${_ITR_}, nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n") # initializer list - else() - message(FATAL_ERROR "!") # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource - endif() - - math(EXPR _ITR_ "${_ITR_} + 1") - endforeach() - - configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_DIRECTORY_}/CArchive.h") - - list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") - list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") - - set(NBL_RESOURCES_LIST_FILE "${_OUTPUT_DIRECTORY_}/resources.txt") - - string(REPLACE ";" "," RESOURCES_ARGS "${${_BUNDLE_NAME_}}") - file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") - - set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") - set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") - - set(_NBL_SOURCES_ - "${NBL_BUILTIN_RESOURCES_HEADER}" - "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - ) - - add_custom_command( - OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" - COMMENT "Generating built-in resources" - DEPENDS ${NBL_DEPENDENCY_FILES} - VERBATIM - ) - - add_library(${_TARGET_NAME_} STATIC - ${_NBL_SOURCES_} - ) - - target_include_directories(${_TARGET_NAME_} PUBLIC "${NBL_ROOT_PATH}/include") - - if(NBL_DYNAMIC_MSVC_RUNTIME) - set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") - else() - set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") - endif() - - list(APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_DIRECTORY_}/CArchive.h") - set(_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} PARENT_SCOPE) - - list(APPEND _NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_TARGET_NAME_}) - set(_NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} PARENT_SCOPE) # override -endfunction() - macro(NBL_ADD_BUILTIN_RESOURCES) ADD_CUSTOM_BUILTIN_RESOURCES(nblBuiltinResourceData NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") endmacro() diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake new file mode 100644 index 0000000000..46151810f1 --- /dev/null +++ b/src/nbl/builtin/utils.cmake @@ -0,0 +1,92 @@ +find_package(Python3 REQUIRED) + +macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) + set(_OPTIONAL_ALIAS_ "${ARGV2}") + + list(APPEND ${_BUNDLE_NAME_} "${_LBR_PATH_}") + set(${_BUNDLE_NAME_} ${${_BUNDLE_NAME_}} PARENT_SCOPE) # override + + list(APPEND _LBR_${_BUNDLE_NAME_}_ "${_LBR_PATH_},${_OPTIONAL_ALIAS_}") + set(_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE) # override +endmacro() + +function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) + file(MAKE_DIRECTORY "${_OUTPUT_DIRECTORY_}") + + set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") + set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") + set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") + set(NBL_BS_HEADER_FILENAME "builtinResources.h") + set(NBL_BS_DATA_SOURCE_FILENAME "builtinResourceData.cpp") + + string(REPLACE "::" "/" _PATH_PREFIX_ "${_NAMESPACE_}") + string(REPLACE "::" "_" _GUARD_SUFFIX_ "${_NAMESPACE_}") + string(REGEX REPLACE "^[0-9]+\." "" _GUARD_SUFFIX_ ${_GUARD_SUFFIX_}) + string(TOUPPER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) + string(MAKE_C_IDENTIFIER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) + + set(_ITR_ 0) + foreach(X IN LISTS _LBR_${_BUNDLE_NAME_}_) + set(_CURRENT_ITEM_ "${X}") + string(FIND "${_CURRENT_ITEM_}" "," _FOUND_ REVERSE) + + string(REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_}") + string(REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_}") + + if(EXISTS "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") + list(APPEND NBL_DEPENDENCY_FILES "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") + file(SIZE "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}" _FILE_SIZE_) + + string(APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t{\"${_CURRENT_PATH_}\", ${_FILE_SIZE_}, 0xdeadbeefu, ${_ITR_}, nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n") # initializer list + else() + message(FATAL_ERROR "!") # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource + endif() + + math(EXPR _ITR_ "${_ITR_} + 1") + endforeach() + + configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_DIRECTORY_}/CArchive.h") + + list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") + list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") + + set(NBL_RESOURCES_LIST_FILE "${_OUTPUT_DIRECTORY_}/resources.txt") + + string(REPLACE ";" "," RESOURCES_ARGS "${${_BUNDLE_NAME_}}") + file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") + + set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") + set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") + + set(_NBL_SOURCES_ + "${NBL_BUILTIN_RESOURCES_HEADER}" + "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" + ) + + add_custom_command( + OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" + COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" + COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" + COMMENT "Generating built-in resources" + DEPENDS ${NBL_DEPENDENCY_FILES} + VERBATIM + ) + + add_library(${_TARGET_NAME_} STATIC + ${_NBL_SOURCES_} + ) + + target_include_directories(${_TARGET_NAME_} PUBLIC "${NBL_ROOT_PATH}/include") + + if(NBL_DYNAMIC_MSVC_RUNTIME) + set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + else() + set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() + + list(APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_DIRECTORY_}/CArchive.h") + set(_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} PARENT_SCOPE) + + list(APPEND _NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_TARGET_NAME_}) + set(_NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} PARENT_SCOPE) # override +endfunction() From 782b6bac229cf741268ee5c732aa6f2159b0b856 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 10 Mar 2023 16:12:31 +0100 Subject: [PATCH 11/46] request only python interpreter and correct its variable name, add more validation and fix bugs, set builtin resources library target CXX_STANDARD to 20 --- src/nbl/builtin/CMakeLists.txt | 2 ++ src/nbl/builtin/utils.cmake | 19 +++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index b9aed74556..c4904ea40c 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -1,3 +1,5 @@ +find_package (Python3 COMPONENTS Interpreter REQUIRED) + include("${CMAKE_CURRENT_SOURCE_DIR}/utils.cmake") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/acceleration_structures.glsl") diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 46151810f1..afc02854c5 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -1,5 +1,3 @@ -find_package(Python3 REQUIRED) - macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) set(_OPTIONAL_ALIAS_ "${ARGV2}") @@ -11,6 +9,10 @@ macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) endmacro() function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) + if(NOT DEFINED Python3_EXECUTABLE) + message(FATAL_ERROR "Python3_EXECUTABLE must be defined!") + endif() + file(MAKE_DIRECTORY "${_OUTPUT_DIRECTORY_}") set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") @@ -57,26 +59,23 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") - - set(_NBL_SOURCES_ - "${NBL_BUILTIN_RESOURCES_HEADER}" - "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - ) add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" - COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" + COMMAND "${Python3_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" + COMMAND "${Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" COMMENT "Generating built-in resources" DEPENDS ${NBL_DEPENDENCY_FILES} VERBATIM ) add_library(${_TARGET_NAME_} STATIC - ${_NBL_SOURCES_} + "${NBL_BUILTIN_RESOURCES_HEADER}" + "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" ) target_include_directories(${_TARGET_NAME_} PUBLIC "${NBL_ROOT_PATH}/include") + set_target_properties(${_TARGET_NAME_} PROPERTIES CXX_STANDARD 20) if(NBL_DYNAMIC_MSVC_RUNTIME) set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") From 469483a2a18d4762033f1b9d997da02ed84cfaab Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 17 Mar 2023 12:42:14 +0100 Subject: [PATCH 12/46] correct python3 variable --- src/nbl/builtin/utils.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index afc02854c5..0fb4a0c110 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -9,8 +9,8 @@ macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) endmacro() function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) - if(NOT DEFINED Python3_EXECUTABLE) - message(FATAL_ERROR "Python3_EXECUTABLE must be defined!") + if(NOT DEFINED _Python3_EXECUTABLE) + message(FATAL_ERROR "_Python3_EXECUTABLE must be defined - call find_package(Python3 COMPONENTS Interpreter REQUIRED)") endif() file(MAKE_DIRECTORY "${_OUTPUT_DIRECTORY_}") @@ -62,8 +62,8 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - COMMAND "${Python3_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" - COMMAND "${Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" + COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" + COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" COMMENT "Generating built-in resources" DEPENDS ${NBL_DEPENDENCY_FILES} VERBATIM From 1f9585785ff3522a6c44af7bec04b3e05e3f8b8e Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sun, 26 Mar 2023 13:30:08 +0200 Subject: [PATCH 13/46] make define.h generate again, it looks like policy of custom command had to change and it's no more dependency of Nabla - create proxy target and fix it. Force Nabla to use CMake 3.26 --- CMakeLists.txt | 2 +- src/nbl/CMakeLists.txt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6cf22a72b8..32a61ecf1f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # This file is part of the "Nabla Engine". # For conditions of distribution and use, see copyright notice in nabla.h.in or nabla.h -cmake_minimum_required(VERSION 3.25) +cmake_minimum_required(VERSION 3.26) #policies cmake_policy(SET CMP0112 NEW) diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index b49a6fbc4e..fe98be29b8 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -637,6 +637,13 @@ if(NOT NBL_STATIC_BUILD) COMMENT "Launching defines.h generation script!" VERBATIM ) + + add_custom_target(generate_nabla_defines ALL + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/$/generated/define.h" + VERBATIM + ) + + add_dependencies(Nabla generate_nabla_defines) endif() nbl_install_headers("${NABLA_HEADERS_PUBLIC}" "${NBL_ROOT_PATH}/include") From e2e3adcf162d5afb8eb54f7e59e7b8f62f80e12d Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Tue, 28 Mar 2023 22:09:37 +0200 Subject: [PATCH 14/46] update scripts for generating define.h header - add `_DXC_DLL_NAME_` --- 3rdparty/dxc/CMakeLists.txt | 7 +++++++ cmake/install/nbl/sharedDefines.h.in | 1 + cmake/scripts/nbl/nablaDefines.cmake | 4 ++++ src/nbl/CMakeLists.txt | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/3rdparty/dxc/CMakeLists.txt b/3rdparty/dxc/CMakeLists.txt index 51ab8dceee..fd80a3367d 100644 --- a/3rdparty/dxc/CMakeLists.txt +++ b/3rdparty/dxc/CMakeLists.txt @@ -121,4 +121,11 @@ CACHE INTERNAL "") set(DXC_DLL $,${NBL_DXC_DEBUG_DLL},${NBL_DXC_RELEASE_DLL}> +CACHE INTERNAL "") + +cmake_path(GET NBL_DXC_DEBUG_DLL FILENAME _NBL_DXC_DEBUG_DLL_NAME_) +cmake_path(GET NBL_DXC_RELEASE_DLL FILENAME _NBL_DXC_RELEASE_DLL_NAME_) + +set(DXC_DLL_NAME + $,${_NBL_DXC_DEBUG_DLL_NAME_},${_NBL_DXC_RELEASE_DLL_NAME_}> CACHE INTERNAL "") \ No newline at end of file diff --git a/cmake/install/nbl/sharedDefines.h.in b/cmake/install/nbl/sharedDefines.h.in index 1413dc1286..d904c8a0b6 100644 --- a/cmake/install/nbl/sharedDefines.h.in +++ b/cmake/install/nbl/sharedDefines.h.in @@ -4,4 +4,5 @@ */ #define _NABLA_DLL_NAME_ "@_NABLA_DLL_NAME_@" +#define _DXC_DLL_NAME_ "@_DXC_DLL_NAME_@" #define _NABLA_INSTALL_DIR_ @_NABLA_INSTALL_DIR_@ \ No newline at end of file diff --git a/cmake/scripts/nbl/nablaDefines.cmake b/cmake/scripts/nbl/nablaDefines.cmake index ee5317ade6..615e041aa4 100644 --- a/cmake/scripts/nbl/nablaDefines.cmake +++ b/cmake/scripts/nbl/nablaDefines.cmake @@ -42,6 +42,10 @@ if(NOT DEFINED _NABLA_DLL_NAME_) message(FATAL_ERROR "_NABLA_DLL_NAME_ variable must be specified for this script!") endif() +if(NOT DEFINED _DXC_DLL_NAME_) + message(FATAL_ERROR "_DXC_DLL_NAME_ variable must be specified for this script!") +endif() + if(NOT DEFINED _NABLA_INSTALL_DIR_) message(FATAL_ERROR "_NABLA_INSTALL_DIR_ variable must be specified for this script!") endif() diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index fe98be29b8..d924b336e4 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -633,7 +633,7 @@ propagate_changed_variables_to_parent_scope() if(NOT NBL_STATIC_BUILD) add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$/generated/define.h" - COMMAND "${CMAKE_COMMAND}" -DNBL_ROOT_PATH:PATH=${NBL_ROOT_PATH} -DNBL_WRAPPER_FILE:FILEPATH=${_NBL_DEFINE_FILE_WRAPPER_} -DNBL_GEN_DIRECTORY:PATH=${CMAKE_CURRENT_BINARY_DIR}/$/generated -D_NABLA_DLL_NAME_:STRING=$ -D_NABLA_INSTALL_DIR_:PATH="${CMAKE_INSTALL_PREFIX}" -P ${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaDefines.cmake + COMMAND "${CMAKE_COMMAND}" -DNBL_ROOT_PATH:PATH=${NBL_ROOT_PATH} -DNBL_WRAPPER_FILE:FILEPATH=${_NBL_DEFINE_FILE_WRAPPER_} -DNBL_GEN_DIRECTORY:PATH=${CMAKE_CURRENT_BINARY_DIR}/$/generated -D_NABLA_DLL_NAME_:STRING=$ -D_DXC_DLL_NAME_:STRING=${DXC_DLL_NAME} -D_NABLA_INSTALL_DIR_:PATH="${CMAKE_INSTALL_PREFIX}" -P ${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaDefines.cmake COMMENT "Launching defines.h generation script!" VERBATIM ) From 5ab06c8b4282405b095f687cff27ca33f32750dc Mon Sep 17 00:00:00 2001 From: Erfan Date: Tue, 11 Apr 2023 16:34:52 +0330 Subject: [PATCH 15/46] Cherry pick some of Erfan's work from master --- include/nbl/asset/ECommonEnums.h | 2 + include/nbl/video/IAPIConnection.h | 11 +++++ src/nbl/video/CVulkanConnection.cpp | 67 +++++++++++++++++++++++------ 3 files changed, 68 insertions(+), 12 deletions(-) diff --git a/include/nbl/asset/ECommonEnums.h b/include/nbl/asset/ECommonEnums.h index c25ce9ac65..f6453f713c 100644 --- a/include/nbl/asset/ECommonEnums.h +++ b/include/nbl/asset/ECommonEnums.h @@ -63,6 +63,7 @@ enum E_PIPELINE_STAGE_FLAGS : uint32_t EPSF_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000, EPSF_COMMAND_PREPROCESS_BIT_NV = 0x00020000 }; +NBL_ENUM_ADD_BITWISE_OPERATORS(E_PIPELINE_STAGE_FLAGS) enum E_ACCESS_FLAGS : uint32_t { @@ -99,6 +100,7 @@ enum E_ACCESS_FLAGS : uint32_t EAF_ALL_ACCESSES_BIT_DEVSH = 0x0004ffff, EAF_ALL_BUFFER_ACCESSES_DEVSH = EAF_ALL_ACCESSES_BIT_DEVSH^(EAF_INPUT_ATTACHMENT_READ_BIT|EAF_COLOR_ATTACHMENT_READ_BIT|EAF_COLOR_ATTACHMENT_WRITE_BIT|EAF_DEPTH_STENCIL_ATTACHMENT_READ_BIT|EAF_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT|EAF_MEMORY_READ_BIT|EAF_MEMORY_WRITE_BIT|EAF_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT|EAF_SHADING_RATE_IMAGE_READ_BIT_NV|EAF_FRAGMENT_DENSITY_MAP_READ_BIT_EXT) }; +NBL_ENUM_ADD_BITWISE_OPERATORS(E_ACCESS_FLAGS) enum E_DEPENDENCY_FLAGS { diff --git a/include/nbl/video/IAPIConnection.h b/include/nbl/video/IAPIConnection.h index 1b16bf958a..4e8091aeea 100644 --- a/include/nbl/video/IAPIConnection.h +++ b/include/nbl/video/IAPIConnection.h @@ -28,6 +28,17 @@ class NBL_API2 IAPIConnection : public core::IReferenceCounted // VK_LAYER_KHRONOS_validation (instance layer) bool validations = false; + // VK_LAYER_KHRONOS_validation (instance extension) + /* TODO: Possibly bring in all as Validation extensions enum + typedef enum VkValidationFeatureEnableEXT { + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0, + VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1, + VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2, + VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3, + VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4, + } VkValidationFeatureEnableEXT; + */ + bool synchronizationValidation = false; // VK_EXT_debug_utils // When combined with validation layers, even more detailed feedback on the application�s use of Vulkan will be provided. diff --git a/src/nbl/video/CVulkanConnection.cpp b/src/nbl/video/CVulkanConnection.cpp index 31b50922a0..a648fb613f 100644 --- a/src/nbl/video/CVulkanConnection.cpp +++ b/src/nbl/video/CVulkanConnection.cpp @@ -138,7 +138,11 @@ namespace nbl::video }; - if(featuresToEnable.debugUtils) + if(featuresToEnable.synchronizationValidation /* || other flags taht require VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME */) + { + insertToFeatureSetIfAvailable(VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME, "synchronizationValidation"); + } + if (featuresToEnable.debugUtils) { insertToFeatureSetIfAvailable(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, "debugUtils"); } @@ -161,28 +165,67 @@ namespace nbl::video if(!allRequestedFeaturesSupported) return nullptr; + + VkBaseInStructure* structsTail = nullptr; + VkBaseInStructure* structsHead = nullptr; + // Vulkan has problems with having features in the feature chain that have all values set to false. + // For example having an empty "RayTracingPipelineFeaturesKHR" in the chain will lead to validation errors for RayQueryONLY applications. + auto addStructToChain = [&structsHead, &structsTail](void* feature) -> void + { + VkBaseInStructure* toAdd = reinterpret_cast(feature); + + // For protecting against duplication of feature structures that may be requested to add to chain twice due to extension requirements + const bool alreadyAdded = (toAdd->pNext != nullptr || toAdd == structsTail); + + if (structsHead == nullptr) + { + structsHead = toAdd; + structsTail = toAdd; + } + else if (!alreadyAdded) + { + structsTail->pNext = toAdd; + structsTail = toAdd; + } + }; + + + VkValidationFeaturesEXT validationFeaturesEXT = { VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT, nullptr }; + VkValidationFeatureEnableEXT validationsEnable[16u] = {}; + VkValidationFeatureDisableEXT validationsDisable[16u] = {}; + validationFeaturesEXT.pEnabledValidationFeatures = validationsEnable; + + // TODO: Do the samefor other validation features as well(?) + if (enabledFeatures.synchronizationValidation) + { + validationsEnable[validationFeaturesEXT.enabledValidationFeatureCount] = VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT; + validationFeaturesEXT.enabledValidationFeatureCount += 1u; + addStructToChain(&validationFeaturesEXT); + } + + uint32_t instanceApiVersion = MinimumVulkanApiVersion; + vkEnumerateInstanceVersion(&instanceApiVersion); // Get Highest + if(instanceApiVersion < MinimumVulkanApiVersion) + { + assert(false); + return nullptr; + } + std::unique_ptr debugCallback = nullptr; - VkDebugUtilsMessengerCreateInfoEXT debugMessengerCreateInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT }; + VkDebugUtilsMessengerCreateInfoEXT debugMessengerCreateInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, nullptr }; if (logger && enabledFeatures.debugUtils) { auto logLevelMask = logger->getLogLevelMask(); debugCallback = std::make_unique(std::move(logger)); - debugMessengerCreateInfo.pNext = nullptr; debugMessengerCreateInfo.flags = 0; auto debugCallbackFlags = getDebugCallbackFlagsFromLogLevelMask(logLevelMask); debugMessengerCreateInfo.messageSeverity = debugCallbackFlags.first; debugMessengerCreateInfo.messageType = debugCallbackFlags.second; debugMessengerCreateInfo.pfnUserCallback = CVulkanDebugCallback::defaultCallback; debugMessengerCreateInfo.pUserData = debugCallback.get(); - } - - uint32_t instanceApiVersion = MinimumVulkanApiVersion; - vkEnumerateInstanceVersion(&instanceApiVersion); // Get Highest - if(instanceApiVersion < MinimumVulkanApiVersion) - { - assert(false); - return nullptr; + + addStructToChain(&debugMessengerCreateInfo); } VkInstance vk_instance; @@ -196,7 +239,7 @@ namespace nbl::video applicationInfo.engineVersion = NABLA_VERSION_INTEGER; VkInstanceCreateInfo createInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO }; - createInfo.pNext = enabledFeatures.debugUtils ? (VkDebugUtilsMessengerCreateInfoEXT*)&debugMessengerCreateInfo : nullptr; + createInfo.pNext = structsHead; createInfo.flags = static_cast(0); createInfo.pApplicationInfo = &applicationInfo; createInfo.enabledLayerCount = requiredLayerNameCount; From 4ce34b4977ecac66b9b00bb890f18dd9789dd4ea Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Wed, 12 Apr 2023 15:38:43 +0200 Subject: [PATCH 16/46] bad merge - fix src/nbl/builtin/builtinDataGen.py --- src/nbl/builtin/builtinDataGen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/nbl/builtin/builtinDataGen.py b/src/nbl/builtin/builtinDataGen.py index b76002a8f1..c2f8a3b758 100644 --- a/src/nbl/builtin/builtinDataGen.py +++ b/src/nbl/builtin/builtinDataGen.py @@ -17,6 +17,7 @@ cmakeSourceDir = sys.argv[2] resourcesFile = sys.argv[3] resourcesNamespace = sys.argv[4] + correspondingHeaderFile = sys.argv[5] with open(resourcesFile, "r") as f: resourcePaths = f.read().rstrip().split(',') From 345e2e02028dac515e351bd88dcef393fca7af62 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Wed, 12 Apr 2023 19:29:10 +0200 Subject: [PATCH 17/46] spot issues with ambiguity causing linker errors and lack of some spirv symbols --- src/nbl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 907a8086fa..36b742aa5d 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -498,7 +498,7 @@ if(NBL_STATIC_BUILD) else() target_link_libraries(Nabla PRIVATE SPIRV SPIRV-Tools SPIRV-Tools-opt) endif() -target_include_directories(Nabla PUBLIC BEFORE ${THIRD_PARTY_SOURCE_DIR}/SPIRV-Tools/include) +target_include_directories(Nabla PUBLIC BEFORE "${THIRD_PARTY_SOURCE_DIR}/dxc/dxc/external/SPIRV-Tools/include") # simdjson add_dependencies(Nabla simdjson) if(NBL_STATIC_BUILD) From 8373b38e18cf163a913b0e24beabedbbfee5613c Mon Sep 17 00:00:00 2001 From: devshgraphicsprogrammingjenkins <97687838+devshgraphicsprogrammingjenkins@users.noreply.github.com> Date: Wed, 19 Apr 2023 17:02:45 +0200 Subject: [PATCH 18/46] spot a bug thanks to my apple clang compiler - but I'm not surprised I haven't seen this on MSVC so far.. --- src/nbl/builtin/builtinHeaderGen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index a9ed679b5f..11632e54ff 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -26,7 +26,7 @@ outp = open(outputFilename,"w+") outp.write("#ifndef _" + guardSuffix + "_BUILTINRESOURCEDATA_H_\n") - outp.write("#define _" + guardSuffix + "_BUILTINRESOURCEDATA_H\n") + outp.write("#define _" + guardSuffix + "_BUILTINRESOURCEDATA_H_\n") outp.write("#include \n") outp.write("#include \n") outp.write("#include \n") From cb5450a4ea08c0741a67bae0e67e00ea8169ff63 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Fri, 5 May 2023 23:27:43 +0200 Subject: [PATCH 19/46] Mounting directories (#492) * Create CMountDirectoryArchive.h * Update CMountDirectoryArchive.h * changed variable name and func to get relative path --- include/nbl/system/IFileArchive.h | 8 ++-- src/nbl/system/CMountDirectoryArchive.h | 61 +++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 src/nbl/system/CMountDirectoryArchive.h diff --git a/include/nbl/system/IFileArchive.h b/include/nbl/system/IFileArchive.h index e62c6a8176..75226311cb 100644 --- a/include/nbl/system/IFileArchive.h +++ b/include/nbl/system/IFileArchive.h @@ -64,10 +64,10 @@ class IFileArchive : public core::IReferenceCounted }; // - core::SRange listAssets() const {return {m_items.data(),m_items.data()+m_items.size()};} + virtual core::SRange listAssets() const {return {m_items.data(),m_items.data()+m_items.size()};} // List all files and directories in a specific dir of the archive - core::SRange listAssets(const path& asset_path) const; + virtual core::SRange listAssets(const path& asset_path) const; // virtual core::smart_refctd_ptr getFile(const path& pathRelativeToArchive, const std::string_view& password) = 0; @@ -88,10 +88,10 @@ class IFileArchive : public core::IReferenceCounted return &(*found); } - std::mutex itemMutex; // TODO: update to readers writer lock + mutable std::mutex itemMutex; // TODO: update to readers writer lock path m_defaultAbsolutePath; // files and directories - core::vector m_items; + mutable core::vector m_items; // system::logger_opt_smart_ptr m_logger; }; diff --git a/src/nbl/system/CMountDirectoryArchive.h b/src/nbl/system/CMountDirectoryArchive.h new file mode 100644 index 0000000000..bbfd19bf73 --- /dev/null +++ b/src/nbl/system/CMountDirectoryArchive.h @@ -0,0 +1,61 @@ +#include "nbl/system/IFileArchive.h" + +#include "nbl/system/IFile.h" + +namespace nbl::system { + + + +class CMountDirectoryArchive : public IFileArchive +{ + ISystem* m_system; + +public: + inline CMountDirectoryArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, ISystem* system) : + IFileArchive(std::move(_defaultAbsolutePath), std::move(logger)) + { + m_system = system; + } + + core::smart_refctd_ptr getFile(const path& pathRelativeToArchive, const std::string_view& password) override + { + { + //std::unique_lock(itemMutex); already inside `getItemFromPath` + if (!getItemFromPath(pathRelativeToArchive)) + return nullptr; + } + system::ISystem::future_t> future; + m_system->createFile(future, m_defaultAbsolutePath / pathRelativeToArchive, system::IFile::ECF_READ); + if (auto file = future.acquire()) + return *file; + } + + core::SRange listAssets(const path& asset_path) const override + { + populateItemList(asset_path); + return IFileArchive::listAssets(asset_path); + } + virtual core::SRange listAssets() const override { + populateItemList(path()); + return IFileArchive::listAssets(); + } + + void populateItemList(const path& p) const { + std::unique_lock lock(itemMutex); + auto items = m_system->listItemsInDirectory(m_defaultAbsolutePath/p); + m_items.clear(); + + for (auto item : items) + { + if (item.has_extension()) + { + auto relpath = item.lexically_relative(m_defaultAbsolutePath); + auto entry = SListEntry{ relpath, 0xdeadbeefu, 0xdeadbeefu, 0xdeadbeefu, EAT_NONE }; + m_items.push_back(entry); + } + } + lock.unlock(); + } +}; + +} //namespace nbl::system \ No newline at end of file From 9daedfa6c2e35e59dafb96148346600e668472fe Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Wed, 10 May 2023 20:44:55 +0200 Subject: [PATCH 20/46] add some docs to src/nbl/builtin/utils.cmake, add new parameters for header and source outputs, rewrite some code lines, add custom properties to builtin resources CMake library target, add install macro for builtin resources, correct CArchive.h.in and save work for tomorrow --- cmake/common.cmake | 7 ++ src/nbl/CMakeLists.txt | 6 +- src/nbl/builtin/CMakeLists.txt | 4 +- src/nbl/builtin/template/CArchive.h.in | 2 +- src/nbl/builtin/utils.cmake | 90 +++++++++++++++++++++----- 5 files changed, 88 insertions(+), 21 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 6b5548c907..d67b19b25b 100755 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -339,6 +339,13 @@ function(nbl_install_file _FILE _RELATIVE_DESTINATION) install(FILES ${_FILE} DESTINATION relwithdebinfo/include/${_RELATIVE_DESTINATION} CONFIGURATIONS RelWithDebInfo) endfunction() +function(nbl_install_builtin_resources _TARGET_) + get_target_property(_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_ ${_TARGET_} BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY) + get_target_property(_BUILTIN_RESOURCES_HEADERS_ ${_TARGET_} BUILTIN_RESOURCES_HEADERS) + + nbl_install_headers("${_BUILTIN_RESOURCES_HEADERS_}" "${_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_}") +endfunction() + function(nbl_install_config_header _CONF_HDR_NAME) nbl_get_conf_dir(dir_deb Debug) nbl_get_conf_dir(dir_rel Release) diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 36b742aa5d..07ab45cded 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -116,7 +116,7 @@ nbl_get_conf_dir(NABLA_CONF_DIR_DEBUG Debug) nbl_get_conf_dir(NABLA_CONF_DIR_RELEASE Release) if(NBL_EMBED_BUILTIN_RESOURCES) add_subdirectory(builtin) - NBL_ADD_BUILTIN_RESOURCES() + NBL_ADD_BUILTIN_RESOURCES(nblBuiltinResourceData) endif() nbl_get_conf_dir(NABLA_CONF_DIR_RELWITHDEBINFO RelWithDebInfo) @@ -662,6 +662,10 @@ endif() nbl_install_file("${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/builtinResources.h" "nbl/builtin") nbl_install_config_header(BuildConfigOptions.h) +if(NBL_EMBED_BUILTIN_RESOURCES) + nbl_install_builtin_resources(nblBuiltinResourceData) +endif() + # TODO: @AnastazIuk change macros to functions! https://github.com/buildaworldnet/IrrlichtBAW/issues/311 macro(nbl_install_program _TRGT) install(PROGRAMS $ DESTINATION lib CONFIGURATIONS Release) diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index c4904ea40c..d559bae73d 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -238,7 +238,7 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalizatio LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/descriptors.glsl") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") -macro(NBL_ADD_BUILTIN_RESOURCES) - ADD_CUSTOM_BUILTIN_RESOURCES(nblBuiltinResourceData NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin") +macro(NBL_ADD_BUILTIN_RESOURCES _TARGET_) # internal for Nabla only + ADD_CUSTOM_BUILTIN_RESOURCES("${_TARGET_}" NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include") endmacro() diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index 74cdc9f007..fd4b049b8f 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -1,7 +1,7 @@ #ifndef _@_GUARD_SUFFIX_@_C_ARCHIVE_H_ #define _@_GUARD_SUFFIX_@_C_ARCHIVE_H_ -#include +#include "nbl/system/CFileArchive.h" #include "@NBL_BS_HEADER_FILENAME@" namespace @_NAMESPACE_@ diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 0fb4a0c110..6f01e6ac70 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -1,3 +1,7 @@ +# Assigns builtin resources to a bundle a target library will be created with +# _BUNDLE_NAME_ is a bundle name, must be a valid CMake variable +# _LBR_PATH_ is a path to builtin resource + macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) set(_OPTIONAL_ALIAS_ "${ARGV2}") @@ -8,14 +12,20 @@ macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) set(_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE) # override endmacro() -function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_) +# Creates a library with builtin resources for given bundle +# _TARGET_NAME_ is name of a target library that will be created +# _BUNDLE_NAME_ is a bundle name builtin resources are associated with +# _BUNDLE_SEARCH_DIRECTORY_ is an absolute search directory path for builtin resorces for given bundle +# _NAMESPACE_ is a C++ namespace builtin resources will be wrapped into +# _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ is an absolute path to output directory for builtin resources header files which will be a search directory for generated headers outputed to ${_OUTPUT_HEADER_DIRECTORY_}/${_PATH_PREFIX_} where path prefix is the namespace turned into a path +# _OUTPUT_SOURCE_DIRECTORY_ is an absolute path to output directory for builtin resources source files + +function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ _OUTPUT_SOURCE_DIRECTORY_) if(NOT DEFINED _Python3_EXECUTABLE) message(FATAL_ERROR "_Python3_EXECUTABLE must be defined - call find_package(Python3 COMPONENTS Interpreter REQUIRED)") endif() - file(MAKE_DIRECTORY "${_OUTPUT_DIRECTORY_}") - - set(NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") + set(NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") set(NBL_BS_HEADER_FILENAME "builtinResources.h") @@ -27,19 +37,35 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH string(TOUPPER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) string(MAKE_C_IDENTIFIER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) + set(_OUTPUT_HEADER_DIRECTORY_ "${_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}/${_PATH_PREFIX_}") + + file(MAKE_DIRECTORY "${_OUTPUT_HEADER_DIRECTORY_}") + file(MAKE_DIRECTORY "${_OUTPUT_SOURCE_DIRECTORY_}") + set(_ITR_ 0) - foreach(X IN LISTS _LBR_${_BUNDLE_NAME_}_) + foreach(X IN LISTS _LBR_${_BUNDLE_NAME_}_) # iterate over builtin resources bundle list given bundle name set(_CURRENT_ITEM_ "${X}") string(FIND "${_CURRENT_ITEM_}" "," _FOUND_ REVERSE) - string(REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_}") - string(REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_}") + string(REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_}") # _LBR_PATH_ path for given bundle + string(REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_}") # optional alias for given builtin resource + + set(NBL_BUILTIN_RESOURCE_ABS_PATH "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") # an absolute path to a builtin resource + list(APPEND NBL_BUILTIN_RESOURCES "${NBL_BUILTIN_RESOURCE_ABS_PATH}") - if(EXISTS "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") - list(APPEND NBL_DEPENDENCY_FILES "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") - file(SIZE "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}" _FILE_SIZE_) + if(EXISTS "${NBL_BUILTIN_RESOURCE_ABS_PATH}") + list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_RESOURCE_ABS_PATH}") + file(SIZE "${NBL_BUILTIN_RESOURCE_ABS_PATH}" _FILE_SIZE_) # determine size of builtin resource in bytes + + macro(LIST_RESOURCE_FOR_ARCHIVER _LBR_PATH_ _LBR_FILE_SIZE_ _LBR_ID_) + string(APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t{\"${_LBR_PATH_}\", ${_LBR_FILE_SIZE_}, 0xdeadbeefu, ${_LBR_ID_}, nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n") # initializer list + endmacro() + + LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_PATH_}" "${_FILE_SIZE_}" "${_ITR_}") - string(APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t{\"${_CURRENT_PATH_}\", ${_FILE_SIZE_}, 0xdeadbeefu, ${_ITR_}, nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n") # initializer list + if(_CURRENT_ALIAS_) # if an alias is present list it with the same ID of the current handled builtin resource + LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_ALIAS_}" "${_FILE_SIZE_}" "${_ITR_}") + endif() else() message(FATAL_ERROR "!") # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource endif() @@ -47,18 +73,18 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH math(EXPR _ITR_ "${_ITR_} + 1") endforeach() - configure_file("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_DIRECTORY_}/CArchive.h") + configure_file("${NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h") list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") - set(NBL_RESOURCES_LIST_FILE "${_OUTPUT_DIRECTORY_}/resources.txt") + set(NBL_RESOURCES_LIST_FILE "${_OUTPUT_SOURCE_DIRECTORY_}/resources.txt") string(REPLACE ";" "," RESOURCES_ARGS "${${_BUNDLE_NAME_}}") file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") - set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") - set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") + set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_HEADER_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") + set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_SOURCE_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" @@ -83,9 +109,39 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set_property(TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() - list(APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_DIRECTORY_}/CArchive.h") + set(NBL_BUILTIN_RESOURCES ${NBL_BUILTIN_RESOURCES}) # turn builtin resources paths list into variable + set(NBL_BUILTIN_RESOURCES_HEADERS + "${NBL_BUILTIN_RESOURCES_HEADER}" + "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h" + ) + + list(APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h") set(_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} PARENT_SCOPE) list(APPEND _NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_TARGET_NAME_}) set(_NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} PARENT_SCOPE) # override -endfunction() + + macro(_ADD_PROPERTY_ _BR_PROPERTY_ _BR_PROXY_VAR_) + get_property(_BR_PROPERTY_DEFINED_ + TARGET ${_TARGET_NAME_} + PROPERTY ${_BR_PROPERTY_} + DEFINED + ) + + if(NOT _BR_PROPERTY_DEFINED_) + define_property(TARGET PROPERTY ${_BR_PROPERTY_}) + set_target_properties(${_TARGET_NAME_} PROPERTIES ${_BR_PROPERTY_} "${${_BR_PROXY_VAR_}}") + endif() + + unset(_BR_PROPERTY_DEFINED_) + endmacro() + + _ADD_PROPERTY_(BUILTIN_RESOURCES NBL_BUILTIN_RESOURCES) + _ADD_PROPERTY_(BUILTIN_RESOURCES_BUNDLE_NAME _BUNDLE_NAME_) + _ADD_PROPERTY_(BUILTIN_RESOURCES_BUNDLE_SEARCH_DIRECTORY _BUNDLE_SEARCH_DIRECTORY_) + _ADD_PROPERTY_(BUILTIN_RESOURCES_NAMESPACE _NAMESPACE_) + _ADD_PROPERTY_(BUILTIN_RESOURCES_HEADER_DIRECTORY _OUTPUT_HEADER_DIRECTORY_) + _ADD_PROPERTY_(BUILTIN_RESOURCES_SOURCE_DIRECTORY _OUTPUT_SOURCE_DIRECTORY_) + _ADD_PROPERTY_(BUILTIN_RESOURCES_HEADERS NBL_BUILTIN_RESOURCES_HEADERS) + _ADD_PROPERTY_(BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY _OUTPUT_INCLUDE_SEARCH_DIRECTORY_) +endfunction() \ No newline at end of file From c847d6d9e6c5723d550ee7158a7789c6ba48211e Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 12 May 2023 08:24:20 +0200 Subject: [PATCH 21/46] save work, don't add every builtin resource as Nabla dependency, hardcode path in CArchive.h.in --- src/nbl/CMakeLists.txt | 10 ++++++---- src/nbl/builtin/template/CArchive.h.in | 5 +++-- src/nbl/builtin/utils.cmake | 11 ++++------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 07ab45cded..3a4aff3164 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -369,10 +369,12 @@ source_group("Resources to embed" FILES ${NABLA_RESOURCES_TO_EMBED_PUBLIC}) set(NABLA_HEADERS "${NBL_ROOT_PATH}/include/nabla.h" ${NABLA_HEADERS_PUBLIC} ${NABLA_HEADERS_PIRV1} ${NABLA_HEADERS_PRIV2}) +get_target_property(_BUILTIN_RESOURCES_HEADER_DIRECTORY_ nblBuiltinResourceData BUILTIN_RESOURCES_HEADER_DIRECTORY) + set(NBL_LIBRARY_CREATION_SOURCES ${NABLA_SRCS_COMMON} ${NABLA_HEADERS} - ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} + ${_BUILTIN_RESOURCES_HEADER_DIRECTORY_} $ $ $ @@ -421,15 +423,15 @@ if(NOT NBL_STATIC_BUILD) endif() if(NBL_EMBED_BUILTIN_RESOURCES) - add_dependencies(Nabla ${_NBL_BUILTIN_RESOURCES_LIBRARIES_}) + add_dependencies(Nabla nblBuiltinResourceData) if(NBL_STATIC_BUILD) target_link_libraries(Nabla INTERFACE - ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} + nblBuiltinResourceData ) else() target_link_libraries(Nabla PRIVATE - ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} + nblBuiltinResourceData ) endif() endif() diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index fd4b049b8f..dcaed6430b 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -6,6 +6,7 @@ namespace @_NAMESPACE_@ { + constexpr std::string_view path = "@_NAMESPACE_@/@_PATH_PREFIX_@" constexpr std::string_view pathPrefix = "@_PATH_PREFIX_@"; constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } @@ -14,8 +15,8 @@ namespace @_NAMESPACE_@ class CArchive final : public nbl::system::CFileArchive { public: - inline CArchive(nbl::system::path _path, nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(std::move(_path),std::move(logger), getItemList()) {} + inline CArchive(nbl::system::logger_opt_smart_ptr&& logger) + : nbl::system::CFileArchive(std::move(nbl::system::path(path.data())),std::move(logger), getItemList()) {} protected: file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 6f01e6ac70..2ee8288aea 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -100,7 +100,10 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" ) - target_include_directories(${_TARGET_NAME_} PUBLIC "${NBL_ROOT_PATH}/include") + target_include_directories(${_TARGET_NAME_} PUBLIC + "${NBL_ROOT_PATH}/include" + "${_OUTPUT_HEADER_DIRECTORY_}" + ) set_target_properties(${_TARGET_NAME_} PROPERTIES CXX_STANDARD 20) if(NBL_DYNAMIC_MSVC_RUNTIME) @@ -115,12 +118,6 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h" ) - list(APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h") - set(_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} PARENT_SCOPE) - - list(APPEND _NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_TARGET_NAME_}) - set(_NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} PARENT_SCOPE) # override - macro(_ADD_PROPERTY_ _BR_PROPERTY_ _BR_PROXY_VAR_) get_property(_BR_PROPERTY_DEFINED_ TARGET ${_TARGET_NAME_} From b9435da8369e4051fb37121f07635e94de3f99d5 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Tue, 16 May 2023 22:20:30 +0200 Subject: [PATCH 22/46] handle multiple builtin resource aliases with CMake --- src/nbl/builtin/template/CArchive.h.in | 3 +-- src/nbl/builtin/utils.cmake | 32 +++++++++++++++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index dcaed6430b..aeda2be51f 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -6,7 +6,6 @@ namespace @_NAMESPACE_@ { - constexpr std::string_view path = "@_NAMESPACE_@/@_PATH_PREFIX_@" constexpr std::string_view pathPrefix = "@_PATH_PREFIX_@"; constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } @@ -16,7 +15,7 @@ namespace @_NAMESPACE_@ { public: inline CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(std::move(nbl::system::path(path.data())),std::move(logger), getItemList()) {} + : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), getItemList()) {} protected: file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 2ee8288aea..fbf7599158 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -3,13 +3,25 @@ # _LBR_PATH_ is a path to builtin resource macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) - set(_OPTIONAL_ALIAS_ "${ARGV2}") + math(EXPR _ALIAS_C_ "${ARGC} - 2" OUTPUT_FORMAT DECIMAL) + set(_ALIAS_ARGS_ ${ARGV}) + + if("${_ALIAS_C_}" GREATER "0") + list(SUBLIST _ALIAS_ARGS_ "2" "${_ALIAS_C_}" _ALIAS_ARGS_) + + foreach(_ALIAS_ IN LISTS _ALIAS_ARGS_) + string(APPEND _OPTIONAL_ALIASES_ ",${_ALIAS_}") + endforeach() + endif() list(APPEND ${_BUNDLE_NAME_} "${_LBR_PATH_}") set(${_BUNDLE_NAME_} ${${_BUNDLE_NAME_}} PARENT_SCOPE) # override - list(APPEND _LBR_${_BUNDLE_NAME_}_ "${_LBR_PATH_},${_OPTIONAL_ALIAS_}") + list(APPEND _LBR_${_BUNDLE_NAME_}_ "${_LBR_PATH_}${_OPTIONAL_ALIASES_}") set(_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE) # override + + unset(_OPTIONAL_ALIASES_) + unset(_ALIAS_ARGS_) endmacro() # Creates a library with builtin resources for given bundle @@ -47,8 +59,16 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(_CURRENT_ITEM_ "${X}") string(FIND "${_CURRENT_ITEM_}" "," _FOUND_ REVERSE) - string(REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_}") # _LBR_PATH_ path for given bundle - string(REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_}") # optional alias for given builtin resource + + string(REPLACE "," ";" _ITEM_DATA_ "${_CURRENT_ITEM_}") + list(LENGTH _ITEM_DATA_ _ITEM_D_SIZE_) + list(GET _ITEM_DATA_ 0 _CURRENT_PATH_) # _LBR_PATH_ path for given bundle + + if(_ITEM_D_SIZE_ GREATER 1) + list(SUBLIST _ITEM_DATA_ "1" "${_ITEM_D_SIZE_}" _ITEM_ALIASES_) # optional aliases for given builtin resource + else() + unset(_ITEM_ALIASES_) + endif() set(NBL_BUILTIN_RESOURCE_ABS_PATH "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") # an absolute path to a builtin resource list(APPEND NBL_BUILTIN_RESOURCES "${NBL_BUILTIN_RESOURCE_ABS_PATH}") @@ -63,9 +83,9 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_PATH_}" "${_FILE_SIZE_}" "${_ITR_}") - if(_CURRENT_ALIAS_) # if an alias is present list it with the same ID of the current handled builtin resource + foreach(_CURRENT_ALIAS_ IN LISTS _ITEM_ALIASES_) LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_ALIAS_}" "${_FILE_SIZE_}" "${_ITR_}") - endif() + endforeach() else() message(FATAL_ERROR "!") # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource endif() From 78f8bfaf83f49c42e5cdb3328d70bf4b51ff039f Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Thu, 18 May 2023 22:15:20 +0200 Subject: [PATCH 23/46] patch python builtin generation scripts to handle multiple aliases. TODO - perform tests --- src/nbl/builtin/CMakeLists.txt | 2 +- src/nbl/builtin/builtinDataGen.py | 37 +++++++++++++++++++++++------ src/nbl/builtin/builtinHeaderGen.py | 11 +++++++-- src/nbl/builtin/utils.cmake | 3 +-- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index d559bae73d..4abc8572e1 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -239,6 +239,6 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalizatio LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") macro(NBL_ADD_BUILTIN_RESOURCES _TARGET_) # internal for Nabla only - ADD_CUSTOM_BUILTIN_RESOURCES("${_TARGET_}" NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include") + ADD_CUSTOM_BUILTIN_RESOURCES("${_TARGET_}" NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include" "${NBL_ROOT_PATH_BINARY}/src") endmacro() diff --git a/src/nbl/builtin/builtinDataGen.py b/src/nbl/builtin/builtinDataGen.py index c2f8a3b758..68b6a21e29 100644 --- a/src/nbl/builtin/builtinDataGen.py +++ b/src/nbl/builtin/builtinDataGen.py @@ -20,8 +20,8 @@ correspondingHeaderFile = sys.argv[5] with open(resourcesFile, "r") as f: - resourcePaths = f.read().rstrip().split(',') - + resourcePaths = f.read().rstrip().readlines() + #opening a file outp = open(outputFilename,"w+") @@ -32,7 +32,10 @@ outp.write("const std::pair get_resource();") # writing binary data of all files in a loop - for x in resourcePaths: + for z in resourcePaths: + itemData = z.split(',') + x = itemData[0] + outp.write('\n\ttemplate<> const std::pair get_resource()' % x) outp.write('\n\t{') outp.write('\n\t\tstatic const uint8_t data[] = {\n\t\t\t') @@ -56,20 +59,40 @@ outp.write('\n\t\t};') outp.write('\n\t\treturn { data, sizeof(data) };') outp.write('\n\t}') - - + + if len(itemData) > 1: + for alias in range(1, len(itemData)): + outp.write('\n\ttemplate<> const std::pair get_resource()' % alias) + outp.write('\n\t{') + outp.write('\n\t\treturn get_resource();' % x) + outp.write('\n\t{') + outp.write("\tstd::pair get_resource_runtime(const std::string& filename) {\n") outp.write("\t\tstatic std::unordered_map resourcesByFilename( {\n") counter = 1 - for x in resourcePaths: + + for z in resourcePaths: + itemData = z.split(',') + x = itemData[0] + outp.write("\t\t\t{\"%s\", %d},\n" % (x,counter)) + + if len(itemData) > 1: + for alias in range(1, len(itemData)): + outp.write("\t\t\t{\"%s\", %d},\n" % (alias,counter)) + counter+= 1 + outp.write("\t\t});\n\n") outp.write("\t\tauto resource = resourcesByFilename.find(filename);\n") outp.write("\t\tif(resource == resourcesByFilename.end()) return { nullptr,0ull };\n") outp.write("\t\tswitch (resource->second) \n\t\t\t{\n") counter = 1 - for x in resourcePaths: + + for z in resourcePaths: + itemData = z.split(',') + x = itemData[0] + outp.write("\t\t\tcase %d:\n\t\t\t\t\treturn get_resource();\n" % (counter,x)) counter+= 1 diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index 11632e54ff..18df26feaa 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -20,7 +20,7 @@ guardSuffix = sys.argv[5] with open(resourcesFile, "r") as f: - resourcePaths = f.read().rstrip().split(',') + resourcePaths = f.read().rstrip().readlines() #opening a file outp = open(outputFilename,"w+") @@ -37,8 +37,15 @@ outp.write("\t\tconst std::pair get_resource();\n") #Iterating through input list - for x in resourcePaths: + for z in resourcePaths: + itemData = z.split(',') + x = itemData[0] + outp.write('\n\t\textern template const std::pair get_resource();' % x) + + if len(itemData) > 1: + for alias in range(1, len(itemData)): + outp.write('\n\t\textern template const std::pair get_resource();' % alias) outp.write("\n\t}") outp.write("\n#endif // _" + guardSuffix + "_BUILTINRESOURCEDATA_H_") diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index fbf7599158..6015acf083 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -59,7 +59,6 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(_CURRENT_ITEM_ "${X}") string(FIND "${_CURRENT_ITEM_}" "," _FOUND_ REVERSE) - string(REPLACE "," ";" _ITEM_DATA_ "${_CURRENT_ITEM_}") list(LENGTH _ITEM_DATA_ _ITEM_D_SIZE_) list(GET _ITEM_DATA_ 0 _CURRENT_PATH_) # _LBR_PATH_ path for given bundle @@ -100,7 +99,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(NBL_RESOURCES_LIST_FILE "${_OUTPUT_SOURCE_DIRECTORY_}/resources.txt") - string(REPLACE ";" "," RESOURCES_ARGS "${${_BUNDLE_NAME_}}") + string(REPLACE ";" "\n" RESOURCES_ARGS "${_LBR_${_BUNDLE_NAME_}_}") file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}") set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_HEADER_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") From 3d753f5901983c1e2af9879566c3985fd7d8abf7 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 19 May 2023 10:53:27 +0200 Subject: [PATCH 24/46] correct all issues & compile errors regarding builtin resources targets, perform tests and make it works with aliases. Have default abs path for archive entry generated by CMake, rstrip each python string and have declaration of an explicit template specialization in bs header. Update examples_tests submodule --- examples_tests | 2 +- src/nbl/builtin/builtinDataGen.py | 24 ++++++++++++------------ src/nbl/builtin/builtinHeaderGen.py | 12 ++++++------ src/nbl/builtin/template/CArchive.h.in | 2 +- src/nbl/builtin/utils.cmake | 1 + 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/examples_tests b/examples_tests index 9e33b15477..15c7b09494 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 9e33b154775f0db1cfb7385c5cd1e42a1acbc4a2 +Subproject commit 15c7b09494b8fb96169cce1970f13089ebc68be4 diff --git a/src/nbl/builtin/builtinDataGen.py b/src/nbl/builtin/builtinDataGen.py index 68b6a21e29..d125e123f3 100644 --- a/src/nbl/builtin/builtinDataGen.py +++ b/src/nbl/builtin/builtinDataGen.py @@ -19,9 +19,9 @@ resourcesNamespace = sys.argv[4] correspondingHeaderFile = sys.argv[5] - with open(resourcesFile, "r") as f: - resourcePaths = f.read().rstrip().readlines() - + file = open(resourcesFile, 'r') + resourcePaths = file.readlines() + #opening a file outp = open(outputFilename,"w+") @@ -34,7 +34,7 @@ # writing binary data of all files in a loop for z in resourcePaths: itemData = z.split(',') - x = itemData[0] + x = itemData[0].rstrip() outp.write('\n\ttemplate<> const std::pair get_resource()' % x) outp.write('\n\t{') @@ -58,14 +58,14 @@ outp.write('\n\t\t};') outp.write('\n\t\treturn { data, sizeof(data) };') - outp.write('\n\t}') + outp.write('\n\t}\n') if len(itemData) > 1: - for alias in range(1, len(itemData)): - outp.write('\n\ttemplate<> const std::pair get_resource()' % alias) + for i in range(1, len(itemData)): + outp.write('\n\ttemplate<> const std::pair get_resource()' % itemData[i].rstrip()) outp.write('\n\t{') outp.write('\n\t\treturn get_resource();' % x) - outp.write('\n\t{') + outp.write('\n\t}\n') outp.write("\tstd::pair get_resource_runtime(const std::string& filename) {\n") outp.write("\t\tstatic std::unordered_map resourcesByFilename( {\n") @@ -73,13 +73,13 @@ for z in resourcePaths: itemData = z.split(',') - x = itemData[0] + x = itemData[0].rstrip() outp.write("\t\t\t{\"%s\", %d},\n" % (x,counter)) if len(itemData) > 1: - for alias in range(1, len(itemData)): - outp.write("\t\t\t{\"%s\", %d},\n" % (alias,counter)) + for i in range(1, len(itemData)): + outp.write("\t\t\t{\"%s\", %d},\n" % (itemData[i].rstrip(),counter)) counter+= 1 @@ -91,7 +91,7 @@ for z in resourcePaths: itemData = z.split(',') - x = itemData[0] + x = itemData[0].rstrip() outp.write("\t\t\tcase %d:\n\t\t\t\t\treturn get_resource();\n" % (counter,x)) counter+= 1 diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index 18df26feaa..2945858cc7 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -19,8 +19,8 @@ resourcesNamespace = sys.argv[4] guardSuffix = sys.argv[5] - with open(resourcesFile, "r") as f: - resourcePaths = f.read().rstrip().readlines() + file = open(resourcesFile, 'r') + resourcePaths = file.readlines() #opening a file outp = open(outputFilename,"w+") @@ -39,13 +39,13 @@ #Iterating through input list for z in resourcePaths: itemData = z.split(',') - x = itemData[0] + x = itemData[0].rstrip() - outp.write('\n\t\textern template const std::pair get_resource();' % x) + outp.write('\n\t\ttemplate<> const std::pair get_resource();' % x) if len(itemData) > 1: - for alias in range(1, len(itemData)): - outp.write('\n\t\textern template const std::pair get_resource();' % alias) + for i in range(1, len(itemData)): + outp.write('\n\t\ttemplate<> const std::pair get_resource();' % itemData[i].rstrip()) outp.write("\n\t}") outp.write("\n#endif // _" + guardSuffix + "_BUILTINRESOURCEDATA_H_") diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index aeda2be51f..72f08de2aa 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -15,7 +15,7 @@ namespace @_NAMESPACE_@ { public: inline CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), getItemList()) {} + : nbl::system::CFileArchive(nbl::system::path("@_DEFAULT_ABSOLUTE_BUNDLE_SEARCH_DIRECTORY_@"),std::move(logger), getItemList()) {} protected: file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 6015acf083..6be0118fbc 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -69,6 +69,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH unset(_ITEM_ALIASES_) endif() + set(_DEFAULT_ABSOLUTE_BUNDLE_SEARCH_DIRECTORY_ "${_BUNDLE_SEARCH_DIRECTORY_}") set(NBL_BUILTIN_RESOURCE_ABS_PATH "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") # an absolute path to a builtin resource list(APPEND NBL_BUILTIN_RESOURCES "${NBL_BUILTIN_RESOURCE_ABS_PATH}") From 043382747f4066bd10bbb141175d68d84c69af8f Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 19 May 2023 11:38:19 +0200 Subject: [PATCH 25/46] add LINK_BUILTIN_RESOURCES_TO_TARGET and correct bug in macro, update examples_tests submodule --- cmake/common.cmake | 12 ++++++++++++ examples_tests | 2 +- src/nbl/builtin/utils.cmake | 8 +++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index d67b19b25b..b7c15a6523 100755 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -358,6 +358,18 @@ function(nbl_install_config_header _CONF_HDR_NAME) install(FILES ${file_relWithDebInfo} DESTINATION relwithdebinfo/include CONFIGURATIONS RelWithDebInfo) endfunction() +# links builtin resource target to a target +# @_TARGET_@ is target name builtin resource target will be linked to +# @_BS_TARGET_@ is a builtin resource target + +function(LINK_BUILTIN_RESOURCES_TO_TARGET _TARGET_ _BS_TARGET_) + add_dependencies(${EXECUTABLE_NAME} systemTestBuiltinResourceData) + target_link_libraries(${EXECUTABLE_NAME} PUBLIC systemTestBuiltinResourceData) + + get_target_property(_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_ ${_BS_TARGET_} BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY) + target_include_directories(${EXECUTABLE_NAME} PUBLIC "${_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_}") +endfunction() + macro(nbl_android_create_apk _TARGET) get_target_property(TARGET_NAME ${_TARGET} NAME) # TARGET_NAME_IDENTIFIER is identifier that can be used in code diff --git a/examples_tests b/examples_tests index 15c7b09494..44cccb47d9 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 15c7b09494b8fb96169cce1970f13089ebc68be4 +Subproject commit 44cccb47d99e7e5a8cace7e048e8496f6c21c943 diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 6be0118fbc..e4346a6589 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -49,6 +49,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH string(TOUPPER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) string(MAKE_C_IDENTIFIER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) + set(_OUTPUT_INCLUDE_SEARCH_DIRECTORY_ "${_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}") set(_OUTPUT_HEADER_DIRECTORY_ "${_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}/${_PATH_PREFIX_}") file(MAKE_DIRECTORY "${_OUTPUT_HEADER_DIRECTORY_}") @@ -144,11 +145,12 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH PROPERTY ${_BR_PROPERTY_} DEFINED ) - + if(NOT _BR_PROPERTY_DEFINED_) - define_property(TARGET PROPERTY ${_BR_PROPERTY_}) - set_target_properties(${_TARGET_NAME_} PROPERTIES ${_BR_PROPERTY_} "${${_BR_PROXY_VAR_}}") + define_property(TARGET PROPERTY ${_BR_PROPERTY_}) endif() + + set_target_properties(${_TARGET_NAME_} PROPERTIES ${_BR_PROPERTY_} "${${_BR_PROXY_VAR_}}") unset(_BR_PROPERTY_DEFINED_) endmacro() From ba669f7138363bcf9315cb009802038a463ef9d4 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 19 May 2023 13:59:49 +0200 Subject: [PATCH 26/46] address all ISystem comments - nuke some stuff, make it compile but encounter issues at runtime --- examples_tests | 2 +- include/nbl/builtin/common.h | 24 ------- .../nbl/scene/ICullingLoDSelectionSystem.h | 12 +++- include/nbl/scene/ISkinInstanceCacheManager.h | 17 +++-- include/nbl/scene/ITransformTreeManager.h | 11 ++- include/nbl/system/ISystem.h | 27 ++----- src/nbl/CMakeLists.txt | 2 +- src/nbl/asset/IAssetManager.cpp | 23 ++++-- src/nbl/asset/interchange/CGLTFLoader.cpp | 13 +++- .../CGraphicsPipelineLoaderMTL.cpp | 13 +++- src/nbl/builtin/CMakeLists.txt | 2 +- src/nbl/system/ISystem.cpp | 70 +++---------------- .../video/utilities/CPropertyPoolHandler.cpp | 11 ++- src/nbl/video/utilities/CScanner.cpp | 13 +++- 14 files changed, 110 insertions(+), 130 deletions(-) delete mode 100644 include/nbl/builtin/common.h diff --git a/examples_tests b/examples_tests index 44cccb47d9..2734718823 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 44cccb47d99e7e5a8cace7e048e8496f6c21c943 +Subproject commit 27347188231e10928268e943e7905b855794b0e3 diff --git a/include/nbl/builtin/common.h b/include/nbl/builtin/common.h deleted file mode 100644 index ab6f01be20..0000000000 --- a/include/nbl/builtin/common.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2018-2020 - DevSH Graphics Programming Sp. z O.O. -// This file is part of the "Nabla Engine". -// For conditions of distribution and use, see copyright notice in nabla.h - - - -#ifndef _NBL_BUILTIN_COMMON_H_INCLUDED_ -#define _NBL_BUILTIN_COMMON_H_INCLUDED_ - -#include "BuildConfigOptions.h" - -#include -#include - -#include "nbl/builtin/builtinResources.h" - -namespace nbl::builtin -{ - -// if you attempt to use this without `NBL_EMBED_BUILTIN_RESOURCES_` CMake option, this will always return `{nullptr,0ull}` -std::pair get_resource_runtime(const std::string&); - -} -#endif diff --git a/include/nbl/scene/ICullingLoDSelectionSystem.h b/include/nbl/scene/ICullingLoDSelectionSystem.h index 411e9f7637..5ce6df591d 100644 --- a/include/nbl/scene/ICullingLoDSelectionSystem.h +++ b/include/nbl/scene/ICullingLoDSelectionSystem.h @@ -490,7 +490,17 @@ class ICullingLoDSelectionSystem : public virtual core::IReferenceCounted auto getShader = [device]() -> shader_source_and_path { auto system = device->getPhysicalDevice()->getSystem(); - auto glslFile = system->loadBuiltinData(); + + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + system->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + + auto glslFile = loadBuiltinData(Path.value); core::smart_refctd_ptr glsl; { glsl = core::make_smart_refctd_ptr(glslFile->getSize()); diff --git a/include/nbl/scene/ISkinInstanceCacheManager.h b/include/nbl/scene/ISkinInstanceCacheManager.h index 88debdbd1b..496272d916 100644 --- a/include/nbl/scene/ISkinInstanceCacheManager.h +++ b/include/nbl/scene/ISkinInstanceCacheManager.h @@ -26,7 +26,16 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted auto system = device->getPhysicalDevice()->getSystem(); auto createShader = [&system,&device](auto uniqueString, asset::IShader::E_SHADER_STAGE type=asset::IShader::ESS_COMPUTE) -> core::smart_refctd_ptr { - auto glslFile = system->loadBuiltinData(); + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + system->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + + auto glslFile = loadBuiltinData(uniqueString); core::smart_refctd_ptr glsl; { glsl = core::make_smart_refctd_ptr(glslFile->getSize()); @@ -36,9 +45,9 @@ class ISkinInstanceCacheManager : public virtual core::IReferenceCounted return device->createSpecializedShader(shader.get(),{nullptr,nullptr,"main"}); }; - auto updateSpec = createShader(NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("nbl/builtin/glsl/skinning/cache_update.comp")()); - auto debugDrawVertexSpec = createShader(NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("nbl/builtin/glsl/skinning/debug.vert")(),asset::IShader::ESS_VERTEX); - auto debugDrawFragmentSpec = createShader(NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("nbl/builtin/material/debug/vertex_normal/specialized_shader.frag")(),asset::IShader::ESS_FRAGMENT); + auto updateSpec = createShader("nbl/builtin/glsl/skinning/cache_update.comp"); + auto debugDrawVertexSpec = createShader("nbl/builtin/glsl/skinning/debug.vert",asset::IShader::ESS_VERTEX); + auto debugDrawFragmentSpec = createShader("nbl/builtin/material/debug/vertex_normal/specialized_shader.frag",asset::IShader::ESS_FRAGMENT); if (!updateSpec || !debugDrawVertexSpec || !debugDrawFragmentSpec) return nullptr; diff --git a/include/nbl/scene/ITransformTreeManager.h b/include/nbl/scene/ITransformTreeManager.h index 838e37245d..141bb38566 100644 --- a/include/nbl/scene/ITransformTreeManager.h +++ b/include/nbl/scene/ITransformTreeManager.h @@ -108,7 +108,16 @@ class ITransformTreeManager : public virtual core::IReferenceCounted auto system = device->getPhysicalDevice()->getSystem(); auto createShader = [&system,&device](asset::IShader::E_SHADER_STAGE type=asset::IShader::ESS_COMPUTE) -> core::smart_refctd_ptr { - auto glslFile = system->loadBuiltinData(); + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + system->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + + auto glslFile = loadBuiltinData(Path.value); core::smart_refctd_ptr glsl; { glsl = core::make_smart_refctd_ptr(glslFile->getSize()); diff --git a/include/nbl/system/ISystem.h b/include/nbl/system/ISystem.h index 8e855ce820..ea78dbff89 100644 --- a/include/nbl/system/ISystem.h +++ b/include/nbl/system/ISystem.h @@ -5,16 +5,15 @@ #include "nbl/core/declarations.h" #include "nbl/core/util/bitflag.h" -//#include "nbl/system/ICancellableAsyncQueueDispatcher.h" -//#include "nbl/system/IFileArchive.h" - -#include "nbl/builtin/common.h" - #include #include "nbl/system/IFileArchive.h" #include "nbl/system/IAsyncQueueDispatcher.h" +#ifdef _NBL_EMBED_BUILTIN_RESOURCES_ +#include "nbl/builtin/builtinResources.h" +#endif + namespace nbl::system { @@ -61,21 +60,6 @@ class NBL_API2 ISystem : public core::IReferenceCounted } #endif - //! Compile time resource ID - template - inline core::smart_refctd_ptr loadBuiltinData() - { - #ifdef _NBL_EMBED_BUILTIN_RESOURCES_ - return impl_loadEmbeddedBuiltinData(Path.value,nbl::builtin::get_resource()); - #else - future_t> future; - createFile(future,system::path(Path.value),core::bitflag(IFileBase::ECF_READ)|IFileBase::ECF_MAPPABLE); - if (future.wait()) - return future.copy(); - return nullptr; - #endif - } - // inline void addArchiveLoader(core::smart_refctd_ptr&& loader) { @@ -209,9 +193,6 @@ class NBL_API2 ISystem : public core::IReferenceCounted explicit ISystem(core::smart_refctd_ptr&& caller); virtual ~ISystem() {} - // - core::smart_refctd_ptr impl_loadEmbeddedBuiltinData(const std::string& builtinPath, const std::pair& found) const; - // given an `absolutePath` find the archive it belongs to struct FoundArchiveFile { diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 3a4aff3164..3416a84043 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -116,7 +116,7 @@ nbl_get_conf_dir(NABLA_CONF_DIR_DEBUG Debug) nbl_get_conf_dir(NABLA_CONF_DIR_RELEASE Release) if(NBL_EMBED_BUILTIN_RESOURCES) add_subdirectory(builtin) - NBL_ADD_BUILTIN_RESOURCES(nblBuiltinResourceData) + NBL_ADD_BUILTIN_RESOURCES(nblBuiltinResourceData) # internal, must be added with the macro to properly propagate scope endif() nbl_get_conf_dir(NABLA_CONF_DIR_RELWITHDEBINFO RelWithDebInfo) diff --git a/src/nbl/asset/IAssetManager.cpp b/src/nbl/asset/IAssetManager.cpp index 0a6ade8741..19614addd5 100644 --- a/src/nbl/asset/IAssetManager.cpp +++ b/src/nbl/asset/IAssetManager.cpp @@ -242,38 +242,47 @@ void IAssetManager::insertBuiltinAssets() }; auto fileSystem = getSystem(); - buildInGLSLShader(fileSystem->loadBuiltinData(), + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + fileSystem->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + + buildInGLSLShader(loadBuiltinData("nbl/builtin/specialized_shader/fullscreentriangle.vert"), asset::IShader::ESS_VERTEX, { "nbl/builtin/specialized_shader/fullscreentriangle.vert" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(loadBuiltinData("nbl/builtin/material/lambertian/singletexture/specialized_shader.vert"), asset::IShader::ESS_VERTEX, { "nbl/builtin/material/lambertian/singletexture/specialized_shader.vert", "nbl/builtin/material/debug/vertex_uv/specialized_shader.vert" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), // it somehow adds an extra "tt" raw string to the end of the returned value, beware + buildInGLSLShader(loadBuiltinData("nbl/builtin/material/lambertian/singletexture/specialized_shader.frag"), // it somehow adds an extra "tt" raw string to the end of the returned value, beware asset::IShader::ESS_FRAGMENT, { "nbl/builtin/material/lambertian/singletexture/specialized_shader.frag" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(loadBuiltinData("nbl/builtin/material/debug/vertex_normal/specialized_shader.vert"), asset::IShader::ESS_VERTEX, { "nbl/builtin/material/debug/vertex_normal/specialized_shader.vert"}); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(loadBuiltinData("nbl/builtin/material/debug/vertex_color/specialized_shader.vert"), asset::IShader::ESS_VERTEX, { "nbl/builtin/material/debug/vertex_color/specialized_shader.vert" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(loadBuiltinData("nbl/builtin/material/debug/vertex_uv/specialized_shader.frag"), asset::IShader::ESS_FRAGMENT, { "nbl/builtin/material/debug/vertex_uv/specialized_shader.frag" }); - buildInGLSLShader(fileSystem->loadBuiltinData(), + buildInGLSLShader(loadBuiltinData("nbl/builtin/material/debug/vertex_normal/specialized_shader.frag"), asset::IShader::ESS_FRAGMENT, { "nbl/builtin/material/debug/vertex_normal/specialized_shader.frag", diff --git a/src/nbl/asset/interchange/CGLTFLoader.cpp b/src/nbl/asset/interchange/CGLTFLoader.cpp index abc0b364fc..1f8d788aa0 100644 --- a/src/nbl/asset/interchange/CGLTFLoader.cpp +++ b/src/nbl/asset/interchange/CGLTFLoader.cpp @@ -47,7 +47,18 @@ using namespace nbl::asset; { auto registerShader = [&](auto constexprStringType, IShader::E_SHADER_STAGE stage, const char* extraDefine=nullptr) -> void { - core::smart_refctd_ptr glslFile = assetManager->getSystem()->loadBuiltinData(); + auto fileSystem = assetManager->getSystem(); + + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + fileSystem->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + + core::smart_refctd_ptr glslFile = loadBuiltinData(decltype(constexprStringType)::value); auto glsl = core::make_smart_refctd_ptr(glslFile->getSize()); memcpy(glsl->getPointer(),glslFile->getMappedPointer(),glsl->getSize()); diff --git a/src/nbl/asset/interchange/CGraphicsPipelineLoaderMTL.cpp b/src/nbl/asset/interchange/CGraphicsPipelineLoaderMTL.cpp index 1cf5c5b56d..be47d53c11 100644 --- a/src/nbl/asset/interchange/CGraphicsPipelineLoaderMTL.cpp +++ b/src/nbl/asset/interchange/CGraphicsPipelineLoaderMTL.cpp @@ -30,7 +30,18 @@ CGraphicsPipelineLoaderMTL::CGraphicsPipelineLoaderMTL(IAssetManager* _am, core: //create vertex shaders and insert them into cache auto registerShader = [&](ICPUShader::E_SHADER_STAGE stage) -> void { - core::smart_refctd_ptr data = m_assetMgr->getSystem()->loadBuiltinData(); + auto fileSystem = m_assetMgr->getSystem(); + + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + fileSystem->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + + core::smart_refctd_ptr data = loadBuiltinData(Path.value); auto buffer = core::make_smart_refctd_ptr(data->getSize()+1u); char* bufferPtr = reinterpret_cast(buffer->getPointer()); memcpy(bufferPtr, data->getMappedPointer(), data->getSize()); diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index 4abc8572e1..797abdefae 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -238,7 +238,7 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalizatio LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/descriptors.glsl") LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") -macro(NBL_ADD_BUILTIN_RESOURCES _TARGET_) # internal for Nabla only +macro(NBL_ADD_BUILTIN_RESOURCES _TARGET_) # internal & Nabla only, must be added with the macro to properly propagate scope ADD_CUSTOM_BUILTIN_RESOURCES("${_TARGET_}" NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include" "${NBL_ROOT_PATH_BINARY}/src") endmacro() diff --git a/src/nbl/system/ISystem.cpp b/src/nbl/system/ISystem.cpp index b1d8a4685e..835cf73d77 100644 --- a/src/nbl/system/ISystem.cpp +++ b/src/nbl/system/ISystem.cpp @@ -5,6 +5,7 @@ #include "nbl/system/CArchiveLoaderZip.h" #include "nbl/system/CArchiveLoaderTar.h" +#include "nbl/system/CMountDirectoryArchive.h" using namespace nbl; using namespace nbl::system; @@ -13,39 +14,18 @@ ISystem::ISystem(core::smart_refctd_ptr&& caller) : m_dispatch { addArchiveLoader(core::make_smart_refctd_ptr(nullptr)); addArchiveLoader(core::make_smart_refctd_ptr(nullptr)); -} - -core::smart_refctd_ptr ISystem::impl_loadEmbeddedBuiltinData(const std::string& builtinPath, const std::pair& found) const -{ -#ifdef _NBL_EMBED_BUILTIN_RESOURCES_ - if (found.first && found.second) - { - auto fileView = core::make_smart_refctd_ptr>( - builtinPath, - IFile::ECF_READ, - const_cast(found.first), - found.second - ); - return fileView; - } -#endif - return nullptr; + + #ifdef _NBL_EMBED_BUILTIN_RESOURCES_ + mount(core::make_smart_refctd_ptr(nullptr)); + #else + mount(core::make_smart_refctd_ptr(NBL_BUILTIN_RESOURCES_DIRECTORY_PATH, nullptr), "nbl/builtin"); + #endif } bool ISystem::exists(const system::path& filename, const core::bitflag flags) const { const bool writeUsage = flags.value&IFile::ECF_WRITE; - if (!writeUsage && builtin::hasPathPrefix(filename.string())) - { - #ifdef _NBL_EMBED_BUILTIN_RESOURCES_ - std::pair found = nbl::builtin::get_resource_runtime(filename.string()); - if (found.first && found.second) - return true; - #else - if (exists(builtin::getBuiltinResourcesDirectoryPath()/filename,flags)) - return true; - #endif - } + // filename too long if (filename.string().size() >= sizeof(SRequestParams_CREATE_FILE::filename)) return false; @@ -58,10 +38,6 @@ bool ISystem::exists(const system::path& filename, const core::bitflag ISystem::listItemsInDirectory(const system::path& p) } else { - #ifdef _NBL_EMBED_BUILTIN_RESOURCES_ - // TODO: Change the python generator and make builtinResourceData.cpp's `resourcesByFilename` a nicely named `extern` variable - // then in ISystem precompute a [unordered] multimap with keys being builtin subpaths and values being full paths they contain - // find all the values here and iterate over them, adding to `res - #else - err.clear(); - // check root path is prefixed with "nbl/builtin/" - if (builtin::hasPathPrefix(p.string())) - { - const auto subdirs = std::filesystem::recursive_directory_iterator(builtin::getBuiltinResourcesDirectoryPath()/p,err); - if (!err) - for (auto entry : subdirs) // there are never any archives inside builtins - res.push_back(entry.path()); - } - #endif // check for part of subpath being an archive auto path = std::filesystem::exists(p) ? std::filesystem::canonical(p):p; // going up the directory tree @@ -215,21 +176,6 @@ void ISystem::createFile(future_t>& future, std::f if (std::filesystem::exists(filename)) filename = std::filesystem::canonical(filename); - // try builtins - if (!(flags.value&IFile::ECF_WRITE) && builtin::hasPathPrefix(filename.string())) - { - #ifdef _NBL_EMBED_BUILTIN_RESOURCES_ - auto file = impl_loadEmbeddedBuiltinData(filename.string(),nbl::builtin::get_resource_runtime(filename.string())); - if (file) - { - future.set_result(const_cast(file.get())); - return; - } - #else - createFile(future,builtin::getBuiltinResourcesDirectoryPath()/filename,flags); - return; - #endif - } // try archives (readonly, for now) if (!(flags.value&IFile::ECF_WRITE)) { diff --git a/src/nbl/video/utilities/CPropertyPoolHandler.cpp b/src/nbl/video/utilities/CPropertyPoolHandler.cpp index 07baa3ad2e..6fcb5b30dd 100644 --- a/src/nbl/video/utilities/CPropertyPoolHandler.cpp +++ b/src/nbl/video/utilities/CPropertyPoolHandler.cpp @@ -15,7 +15,16 @@ CPropertyPoolHandler::CPropertyPoolHandler(core::smart_refctd_ptrgetPhysicalDevice()->getSystem(); core::smart_refctd_ptr glsl; { - auto glslFile = system->loadBuiltinData(); + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + system->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + + auto glslFile = loadBuiltinData("nbl/builtin/glsl/property_pool/copy.comp"); glsl = core::make_smart_refctd_ptr(glslFile->getSize()); memcpy(glsl->getPointer(), glslFile->getMappedPointer(), glsl->getSize()); } diff --git a/src/nbl/video/utilities/CScanner.cpp b/src/nbl/video/utilities/CScanner.cpp index 9daf17801d..a9c2f25c92 100644 --- a/src/nbl/video/utilities/CScanner.cpp +++ b/src/nbl/video/utilities/CScanner.cpp @@ -8,10 +8,19 @@ core::smart_refctd_ptr CScanner::createShader(const bool indi auto system = m_device->getPhysicalDevice()->getSystem(); core::smart_refctd_ptr glsl; { + auto loadBuiltinData = [&](const std::string _path) -> core::smart_refctd_ptr + { + nbl::system::ISystem::future_t> future; + system->createFile(future, system::path(_path), core::bitflag(nbl::system::IFileBase::ECF_READ) | nbl::system::IFileBase::ECF_MAPPABLE); + if (future.wait()) + return future.copy(); + return nullptr; + }; + if(indirect) - glsl = system->loadBuiltinData(); + glsl = loadBuiltinData("nbl/builtin/glsl/scan/indirect.comp"); else - glsl = system->loadBuiltinData(); + glsl = loadBuiltinData("nbl/builtin/glsl/scan/direct.comp"); } auto buffer = core::make_smart_refctd_ptr(glsl->getSize()); memcpy(buffer->getPointer(), glsl->getMappedPointer(), glsl->getSize()); From 7709a8c9c269d5e1e4834ebfcf30f61381766e48 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Sat, 20 May 2023 00:00:22 +0200 Subject: [PATCH 27/46] Changing things in File Archive class --- include/nbl/system/IFileArchive.h | 90 ++++++++++++++++--------- src/nbl/system/CMountDirectoryArchive.h | 14 ++-- src/nbl/system/IFileArchive.cpp | 32 ++------- 3 files changed, 70 insertions(+), 66 deletions(-) diff --git a/include/nbl/system/IFileArchive.h b/include/nbl/system/IFileArchive.h index 75226311cb..cbcf2fa983 100644 --- a/include/nbl/system/IFileArchive.h +++ b/include/nbl/system/IFileArchive.h @@ -33,41 +33,64 @@ class IFileArchive : public core::IReferenceCounted EAT_MALLOC // decompress to RAM }; //! An entry in a list of items, can be a folder or a file. - struct SListEntry + struct SFileList { - //! The name of the file including the path relative to archive root - system::path pathRelativeToArchive; - - //! The size of the file in bytes - size_t size; - - //! FileOffset inside an archive - size_t offset; - - //! The ID of the file in an archive, it maps it to a memory pool entry for CFileView - uint32_t ID; - - // `EAT_NONE` for directories - E_ALLOCATOR_TYPE allocatorType; - - //! The == operator is provided so that CFileList can slowly search the list! - inline bool operator==(const struct SListEntry& other) const - { - return pathRelativeToArchive.string()==other.pathRelativeToArchive.string(); - } - - //! The < operator is provided so that CFileList can sort and quickly search the list. - inline bool operator<(const struct SListEntry& other) const + struct SEntry { - return pathRelativeToArchive>; + using range_t = core::SRange; + + inline operator range_t() const { return m_range; } + + SFileList(const SFileList&) = default; + SFileList(SFileList&&) = default; + SFileList& operator=(const SFileList&) = default; + SFileList& operator=(SFileList&&) = default; + + private: + // default ctor full range + SFileList(refctd_storage_t _data) : m_data(_data), m_range({ _data->data(),_data->data() + _data->size() }) {} + + friend class IFileArchive; + refctd_storage_t m_data; + range_t m_range; }; // - virtual core::SRange listAssets() const {return {m_items.data(),m_items.data()+m_items.size()};} + virtual inline SFileList listAssets() const { + return { m_items.load() }; + } // List all files and directories in a specific dir of the archive - virtual core::SRange listAssets(const path& asset_path) const; + virtual SFileList listAssets(const path& pathRelativeToArchive) const; // virtual core::smart_refctd_ptr getFile(const path& pathRelativeToArchive, const std::string_view& password) = 0; @@ -79,11 +102,12 @@ class IFileArchive : public core::IReferenceCounted IFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger) : m_defaultAbsolutePath(std::move(_defaultAbsolutePath)), m_logger(std::move(logger)) {} - inline const SListEntry* getItemFromPath(const system::path& pathRelativeToArchive) const + inline const SFileList::SEntry* getItemFromPath(const system::path& pathRelativeToArchive) const { - const IFileArchive::SListEntry itemToFind = { pathRelativeToArchive }; - const auto found = std::lower_bound(m_items.begin(),m_items.end(),itemToFind); - if (found==m_items.end() || found->pathRelativeToArchive!=pathRelativeToArchive) + const SFileList::SEntry itemToFind = { pathRelativeToArchive }; + auto items = m_items.load(); + const auto found = std::lower_bound(items->begin(), items->end(),itemToFind); + if (found== items->end() || found->pathRelativeToArchive != pathRelativeToArchive) return nullptr; return &(*found); } @@ -91,7 +115,7 @@ class IFileArchive : public core::IReferenceCounted mutable std::mutex itemMutex; // TODO: update to readers writer lock path m_defaultAbsolutePath; // files and directories - mutable core::vector m_items; + mutable std::atomic m_items; // system::logger_opt_smart_ptr m_logger; }; diff --git a/src/nbl/system/CMountDirectoryArchive.h b/src/nbl/system/CMountDirectoryArchive.h index bbfd19bf73..3d7a4e7c62 100644 --- a/src/nbl/system/CMountDirectoryArchive.h +++ b/src/nbl/system/CMountDirectoryArchive.h @@ -30,31 +30,29 @@ class CMountDirectoryArchive : public IFileArchive return *file; } - core::SRange listAssets(const path& asset_path) const override + SFileList listAssets(const path& asset_path) const override { populateItemList(asset_path); return IFileArchive::listAssets(asset_path); } - virtual core::SRange listAssets() const override { + SFileList listAssets() const override { populateItemList(path()); return IFileArchive::listAssets(); } void populateItemList(const path& p) const { - std::unique_lock lock(itemMutex); auto items = m_system->listItemsInDirectory(m_defaultAbsolutePath/p); - m_items.clear(); - + auto new_entries = std::make_shared< std::vector>(); for (auto item : items) { if (item.has_extension()) { auto relpath = item.lexically_relative(m_defaultAbsolutePath); - auto entry = SListEntry{ relpath, 0xdeadbeefu, 0xdeadbeefu, 0xdeadbeefu, EAT_NONE }; - m_items.push_back(entry); + auto entry = SFileList::SEntry{ relpath, 0xdeadbeefu, 0xdeadbeefu, 0xdeadbeefu, EAT_NONE }; + new_entries->push_back(entry); } } - lock.unlock(); + m_items.store({new_entries}); } }; diff --git a/src/nbl/system/IFileArchive.cpp b/src/nbl/system/IFileArchive.cpp index 0993e8988f..6cc29e4756 100644 --- a/src/nbl/system/IFileArchive.cpp +++ b/src/nbl/system/IFileArchive.cpp @@ -6,35 +6,17 @@ using namespace nbl; using namespace nbl::system; -core::SRange IFileArchive::listAssets(const path& asset_path) const +IFileArchive::SFileList IFileArchive::listAssets(const path& pathRelativeToArchive) const { - // TODO: use something from ISystem for this? - constexpr auto isSubDir = [](path p, path root) -> bool - { - while (p != path()) + auto trimmedList = listAssets(); { - if (p==root) - return true; - p = p.parent_path(); + auto begin = trimmedList.m_data->begin(); + auto end = trimmedList.m_data->end(); + const SFileList::SEntry itemToFind = { pathRelativeToArchive }; + trimmedList.m_range = { &(*std::lower_bound(begin,end,itemToFind)),&(*std::upper_bound(begin,end,itemToFind)) }; } - return false; - }; + return trimmedList; - const IFileArchive::SListEntry* begin = nullptr; - const IFileArchive::SListEntry* end = nullptr; - for (auto& entry : m_items) - { - if (isSubDir(entry.pathRelativeToArchive, asset_path)) - { - if (begin) - end = &entry; - else - begin = &entry; - } - else if (end) - break; - } - return {begin,end}; /* // future, cause lower/upper bound don't work like that From 38084b201c596ba4e040b7a68aa35cb68165c948 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Sun, 21 May 2023 04:46:37 +0200 Subject: [PATCH 28/46] Changed type name to new entry type --- include/nbl/system/CFileArchive.h | 6 ++---- include/nbl/system/IFileArchive.h | 1 - src/nbl/system/CAPKResourcesArchive.cpp | 6 +++--- src/nbl/system/CAPKResourcesArchive.h | 2 +- src/nbl/system/CArchiveLoaderTar.cpp | 4 ++-- src/nbl/system/CArchiveLoaderTar.h | 2 +- src/nbl/system/CArchiveLoaderZip.cpp | 4 ++-- src/nbl/system/CArchiveLoaderZip.h | 2 +- src/nbl/system/ISystem.cpp | 6 +++--- 9 files changed, 15 insertions(+), 18 deletions(-) diff --git a/include/nbl/system/CFileArchive.h b/include/nbl/system/CFileArchive.h index fd19198c09..0eb26dd748 100644 --- a/include/nbl/system/CFileArchive.h +++ b/include/nbl/system/CFileArchive.h @@ -76,8 +76,6 @@ class CFileArchive : public IFileArchive public: inline core::smart_refctd_ptr getFile(const path& pathRelativeToArchive, const std::string_view& password) override { - std::unique_lock lock(itemMutex); - const auto* item = getItemFromPath(pathRelativeToArchive); if (!item) return nullptr; @@ -127,7 +125,7 @@ class CFileArchive : public IFileArchive } template - inline core::smart_refctd_ptr> getFile_impl(const IFileArchive::SListEntry* item) + inline core::smart_refctd_ptr> getFile_impl(const IFileArchive::SFileList::SEntry* item) { auto* file = reinterpret_cast*>(m_filesBuffer+item->ID*SIZEOF_INNER_ARCHIVE_FILE); // NOTE: Intentionally calling grab() on maybe-not-existing object! @@ -160,7 +158,7 @@ class CFileArchive : public IFileArchive size_t size; void* allocatorState; }; - virtual file_buffer_t getFileBuffer(const IFileArchive::SListEntry* item) = 0; + virtual file_buffer_t getFileBuffer(const IFileArchive::SFileList::SEntry* item) = 0; std::atomic_flag* m_fileFlags = nullptr; std::byte* m_filesBuffer = nullptr; diff --git a/include/nbl/system/IFileArchive.h b/include/nbl/system/IFileArchive.h index cbcf2fa983..aef3ee18dc 100644 --- a/include/nbl/system/IFileArchive.h +++ b/include/nbl/system/IFileArchive.h @@ -112,7 +112,6 @@ class IFileArchive : public core::IReferenceCounted return &(*found); } - mutable std::mutex itemMutex; // TODO: update to readers writer lock path m_defaultAbsolutePath; // files and directories mutable std::atomic m_items; diff --git a/src/nbl/system/CAPKResourcesArchive.cpp b/src/nbl/system/CAPKResourcesArchive.cpp index 011a9ff85f..f6e41858d6 100644 --- a/src/nbl/system/CAPKResourcesArchive.cpp +++ b/src/nbl/system/CAPKResourcesArchive.cpp @@ -12,7 +12,7 @@ CAPKResourcesArchive::CAPKResourcesArchive(const path& _path, system::logger_opt { } -core::vector CAPKResourcesArchive::computeItems(const std::string& asset_path, ANativeActivity* activity, JNIEnv* jniEnv) +core::vector CAPKResourcesArchive::computeItems(const std::string& asset_path, ANativeActivity* activity, JNIEnv* jniEnv) { auto context_object = activity->clazz; auto getAssets_method = jniEnv->GetMethodID(jniEnv->GetObjectClass(context_object), "getAssets", "()Landroid/content/res/AssetManager;"); @@ -27,7 +27,7 @@ core::vector CAPKResourcesArchive::computeItems(const auto length = jniEnv->GetArrayLength(files_object); - core::vector result; + core::vector result; for (decltype(length) i=0; iGetObjectArrayElement(files_object,i); @@ -54,7 +54,7 @@ core::vector CAPKResourcesArchive::computeItems(const return result; } -CFileArchive::file_buffer_t CAPKResourcesArchive::getFileBuffer(const IFileArchive::SListEntry* item) +CFileArchive::file_buffer_t CAPKResourcesArchive::getFileBuffer(const IFileArchive::SFileList::SEntry* item) { AAsset* asset = AAssetManager_open(m_mgr,item->pathRelativeToArchive.string().c_str(),AASSET_MODE_BUFFER); return {const_cast(AAsset_getBuffer(asset)),static_cast(AAsset_getLength(asset)),asset}; diff --git a/src/nbl/system/CAPKResourcesArchive.h b/src/nbl/system/CAPKResourcesArchive.h index 3ea1c9b757..e2a6fd2ac8 100644 --- a/src/nbl/system/CAPKResourcesArchive.h +++ b/src/nbl/system/CAPKResourcesArchive.h @@ -22,7 +22,7 @@ class CAPKResourcesArchive final : public CFileArchive protected: static core::vector computeItems(const std::string& asset_path, ANativeActivity* activity, JNIEnv* jniEnv); - file_buffer_t getFileBuffer(const IFileArchive::SListEntry* item) override; + file_buffer_t getFileBuffer(const IFileArchive::SFileList::SEntry* item) override; AAssetManager* m_mgr; diff --git a/src/nbl/system/CArchiveLoaderTar.cpp b/src/nbl/system/CArchiveLoaderTar.cpp index 917a3bd543..f2e9cc9c3a 100644 --- a/src/nbl/system/CArchiveLoaderTar.cpp +++ b/src/nbl/system/CArchiveLoaderTar.cpp @@ -41,7 +41,7 @@ struct STarHeader using namespace nbl; using namespace nbl::system; -CFileArchive::file_buffer_t CArchiveLoaderTar::CArchive::getFileBuffer(const IFileArchive::SListEntry* item) +CFileArchive::file_buffer_t CArchiveLoaderTar::CArchive::getFileBuffer(const IFileArchive::SFileList::SEntry* item) { assert(item->allocatorType==EAT_NULL); return {reinterpret_cast(m_file->getMappedPointer())+item->offset,item->size,nullptr}; @@ -98,7 +98,7 @@ core::smart_refctd_ptr CArchiveLoaderTar::createArchive_impl(core: if (!file || !(file->getFlags()&IFileBase::ECF_MAPPABLE)) return nullptr; - core::vector items; + core::vector items; for (size_t pos=0ull; true; ) { STarHeader fHead; diff --git a/src/nbl/system/CArchiveLoaderTar.h b/src/nbl/system/CArchiveLoaderTar.h index c6b70829c9..c2487c6270 100644 --- a/src/nbl/system/CArchiveLoaderTar.h +++ b/src/nbl/system/CArchiveLoaderTar.h @@ -18,7 +18,7 @@ class CArchiveLoaderTar final : public IArchiveLoader CFileArchive(path(_file->getFileName()),std::move(logger),std::move(_items)), m_file(std::move(_file)) {} protected: - file_buffer_t getFileBuffer(const IFileArchive::SListEntry* item) override; + file_buffer_t getFileBuffer(const IFileArchive::SFileList::SEntry* item) override; core::smart_refctd_ptr m_file; }; diff --git a/src/nbl/system/CArchiveLoaderZip.cpp b/src/nbl/system/CArchiveLoaderZip.cpp index 60f072cb69..bf594d0774 100644 --- a/src/nbl/system/CArchiveLoaderZip.cpp +++ b/src/nbl/system/CArchiveLoaderZip.cpp @@ -106,7 +106,7 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: return nullptr; } - core::vector items; + core::vector items; core::vector itemsMetadata; // load file entries { @@ -367,7 +367,7 @@ bool CFileArchiveZip::scanCentralDirectoryHeader(size_t& offset) } #endif -CFileArchive::file_buffer_t CArchiveLoaderZip::CArchive::getFileBuffer(const IFileArchive::SListEntry* item) +CFileArchive::file_buffer_t CArchiveLoaderZip::CArchive::getFileBuffer(const IFileArchive::SFileList::SEntry* item) { const auto& header = m_itemsMetadata[item->ID]; // Nabla supports 0, 8, 12, 14, 99 diff --git a/src/nbl/system/CArchiveLoaderZip.h b/src/nbl/system/CArchiveLoaderZip.h index 1baecf300e..fb7ba9de97 100644 --- a/src/nbl/system/CArchiveLoaderZip.h +++ b/src/nbl/system/CArchiveLoaderZip.h @@ -46,7 +46,7 @@ class CArchiveLoaderZip final : public IArchiveLoader {} private: - file_buffer_t getFileBuffer(const IFileArchive::SListEntry* item) override; + file_buffer_t getFileBuffer(const IFileArchive::SFileList::SEntry* item) override; core::smart_refctd_ptr m_file; core::vector m_itemsMetadata; diff --git a/src/nbl/system/ISystem.cpp b/src/nbl/system/ISystem.cpp index 835cf73d77..5275e78562 100644 --- a/src/nbl/system/ISystem.cpp +++ b/src/nbl/system/ISystem.cpp @@ -63,7 +63,7 @@ core::vector ISystem::listItemsInDirectory(const system::path& p) const auto archives = m_cachedArchiveFiles.findRange(archPath); for (auto& arch : archives) { - const auto assets = arch.second->listAssets(std::filesystem::relative(dirPath,archPath)); + const auto assets = static_cast(arch.second->listAssets(std::filesystem::relative(dirPath,archPath))); for (auto& item : assets) res.push_back(archPath/item.pathRelativeToArchive); } @@ -244,9 +244,9 @@ ISystem::FoundArchiveFile ISystem::findFileInArchive(const system::path& absolut for (auto& archive : archives) { const auto relative = std::filesystem::relative(absolutePath,path); - const auto items = archive.second->listAssets(); + const auto items = static_cast(archive.second->listAssets()); - const IFileArchive::SListEntry itemToFind = { relative }; + const IFileArchive::SFileList::SEntry itemToFind = { relative }; auto found = std::lower_bound(items.begin(), items.end(), itemToFind); if (found!=items.end() && found->pathRelativeToArchive==relative) return {archive.second.get(),relative}; From c97b67cb1674c3a3441fb5f43d52ea517d974140 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Sun, 21 May 2023 04:51:53 +0200 Subject: [PATCH 29/46] Update CFileArchive.h --- include/nbl/system/CFileArchive.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/include/nbl/system/CFileArchive.h b/include/nbl/system/CFileArchive.h index 0eb26dd748..116f3d673b 100644 --- a/include/nbl/system/CFileArchive.h +++ b/include/nbl/system/CFileArchive.h @@ -105,13 +105,14 @@ class CFileArchive : public IFileArchive } protected: - CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector _items) : + CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector _items) : IFileArchive(std::move(_defaultAbsolutePath),std::move(logger)) { - m_items = std::move(_items); - std::sort(m_items.begin(),m_items.end()); + auto itemsSharedPtr = std::make_shared>(std::move(_items)); + std::sort(itemsSharedPtr->begin(), itemsSharedPtr->end()); + m_items.store(itemsSharedPtr); - const auto fileCount = m_items.size(); + const auto fileCount = itemsSharedPtr->size(); m_filesBuffer = (std::byte*)_NBL_ALIGNED_MALLOC(fileCount*SIZEOF_INNER_ARCHIVE_FILE, ALIGNOF_INNER_ARCHIVE_FILE); m_fileFlags = (std::atomic_flag*)_NBL_ALIGNED_MALLOC(fileCount*sizeof(std::atomic_flag), alignof(std::atomic_flag)); for (size_t i=0u; i Date: Sun, 21 May 2023 04:54:52 +0200 Subject: [PATCH 30/46] Updated more files to have correct archive entry type --- include/nbl/system/CFileArchive.h | 2 +- src/nbl/system/CArchiveLoaderTar.h | 2 +- src/nbl/system/CArchiveLoaderZip.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/nbl/system/CFileArchive.h b/include/nbl/system/CFileArchive.h index 116f3d673b..bdccf434c1 100644 --- a/include/nbl/system/CFileArchive.h +++ b/include/nbl/system/CFileArchive.h @@ -105,7 +105,7 @@ class CFileArchive : public IFileArchive } protected: - CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector _items) : + CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector&& _items) : IFileArchive(std::move(_defaultAbsolutePath),std::move(logger)) { auto itemsSharedPtr = std::make_shared>(std::move(_items)); diff --git a/src/nbl/system/CArchiveLoaderTar.h b/src/nbl/system/CArchiveLoaderTar.h index c2487c6270..7b1b7a655f 100644 --- a/src/nbl/system/CArchiveLoaderTar.h +++ b/src/nbl/system/CArchiveLoaderTar.h @@ -14,7 +14,7 @@ class CArchiveLoaderTar final : public IArchiveLoader class CArchive final : public CFileArchive { public: - CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, core::vector&& _items) : + CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, core::vector&& _items) : CFileArchive(path(_file->getFileName()),std::move(logger),std::move(_items)), m_file(std::move(_file)) {} protected: diff --git a/src/nbl/system/CArchiveLoaderZip.h b/src/nbl/system/CArchiveLoaderZip.h index fb7ba9de97..2bd08e694d 100644 --- a/src/nbl/system/CArchiveLoaderZip.h +++ b/src/nbl/system/CArchiveLoaderZip.h @@ -39,7 +39,7 @@ class CArchiveLoaderZip final : public IArchiveLoader CArchive( core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, - core::vector&& _items, + core::vector&& _items, core::vector&& _itemsMetadata ) : CFileArchive(path(_file->getFileName()),std::move(logger),std::move(_items)), m_file(std::move(_file)), m_itemsMetadata(std::move(_itemsMetadata)), m_password("") From a7c99b6b9bf5f235dc99eb8bd37c8d6b50f87115 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sun, 21 May 2023 11:51:23 +0200 Subject: [PATCH 31/46] introduce in ADD_CUSTOM_BUILTIN_RESOURCES function, correct builtin resources auto-generated files and paths for proper archive creation. Update examples_tests submodule and perform tests. Add more docs --- examples_tests | 2 +- src/nbl/CMakeLists.txt | 4 +- src/nbl/builtin/CMakeLists.txt | 402 ++++++++++++------------- src/nbl/builtin/template/CArchive.h.in | 2 +- src/nbl/builtin/utils.cmake | 21 +- 5 files changed, 221 insertions(+), 210 deletions(-) diff --git a/examples_tests b/examples_tests index 2734718823..dc24822799 160000 --- a/examples_tests +++ b/examples_tests @@ -1 +1 @@ -Subproject commit 27347188231e10928268e943e7905b855794b0e3 +Subproject commit dc248227998a2afa1569d385786d62d03c68a8b5 diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 3416a84043..de83e4c67f 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -361,8 +361,10 @@ file(GLOB_RECURSE NABLA_HEADERS_PRIV1 "*.h") file(GLOB_RECURSE NABLA_HEADERS_PRIV2 "${NBL_ROOT_PATH}/src/nbl/*.h") #always install builtins (some may be included in cpp regardless if embedded or not) + +get_target_property(_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_ nblBuiltinResourceData BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH) foreach(X IN LISTS NBL_RESOURCES_TO_EMBED) - list(APPEND NABLA_RESOURCES_TO_EMBED_PUBLIC "${NBL_ROOT_PATH}/include/${X}") + list(APPEND NABLA_RESOURCES_TO_EMBED_PUBLIC "${NBL_ROOT_PATH}/include/${_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}/${X}") endforeach() list(APPEND NABLA_HEADERS_PUBLIC ${NABLA_RESOURCES_TO_EMBED_PUBLIC}) source_group("Resources to embed" FILES ${NABLA_RESOURCES_TO_EMBED_PUBLIC}) diff --git a/src/nbl/builtin/CMakeLists.txt b/src/nbl/builtin/CMakeLists.txt index 797abdefae..cbbb7316e8 100644 --- a/src/nbl/builtin/CMakeLists.txt +++ b/src/nbl/builtin/CMakeLists.txt @@ -2,243 +2,243 @@ find_package (Python3 COMPONENTS Interpreter REQUIRED) include("${CMAKE_CURRENT_SOURCE_DIR}/utils.cmake") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/acceleration_structures.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_impl.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_no_uv.vert") # TODO: remove naming tautology -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/vertex_uv.vert") # TODO: remove naming tautology -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/fragment_impl.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/fragment_no_uv.frag") # TODO: remove naming tautology -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/mtl/fragment_uv.frag") # TODO: remove naming tautology -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/vertex_impl.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/uv.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/color.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/no_uv_color.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/fragment_impl.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/uv.frag") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/color.frag") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/shader/loader/gltf/no_uv_color.frag") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/specialized_shader/fullscreentriangle.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/lambertian/singletexture/specialized_shader.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/lambertian/singletexture/specialized_shader.frag") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_color/specialized_shader.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_normal/specialized_shader.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_normal/specialized_shader.frag") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/material/debug/vertex_uv/specialized_shader.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/acceleration_structures.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/mtl/vertex_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/mtl/vertex_no_uv.vert") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/mtl/vertex_uv.vert") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/mtl/fragment_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/mtl/fragment_no_uv.frag") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/mtl/fragment_uv.frag") # TODO: remove naming tautology +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/vertex_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/uv.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/color.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/no_uv_color.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/fragment_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/uv.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/color.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "shader/loader/gltf/no_uv_color.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "specialized_shader/fullscreentriangle.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "material/lambertian/singletexture/specialized_shader.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "material/lambertian/singletexture/specialized_shader.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "material/debug/vertex_color/specialized_shader.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "material/debug/vertex_normal/specialized_shader.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "material/debug/vertex_normal/specialized_shader.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "material/debug/vertex_uv/specialized_shader.frag") # generic GLSL headers after this line -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/macros.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/algorithm.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ieee754.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/macros.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/algorithm.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ieee754.glsl") # barycentric -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/extensions.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/frag.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/vert.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/barycentric/utils.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/barycentric/extensions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/barycentric/frag.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/barycentric/vert.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/barycentric/utils.glsl") # bump mapping -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bump_mapping/fragment.glsl") # TODO: rename to `frag.glsl` -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bump_mapping/utils.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bump_mapping/fragment.glsl") # TODO: rename to `frag.glsl` +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bump_mapping/utils.glsl") # bxdf -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/common_samples.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/fresnel.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/blinn_phong.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/beckmann.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/ndf/ggx.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/geom/smith/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/geom/smith/beckmann.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/geom/smith/ggx.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/common_samples.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/fresnel.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/ndf/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/ndf/blinn_phong.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/ndf/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/ndf/ggx.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/geom/smith/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/geom/smith/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/geom/smith/ggx.glsl") # brdf -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/diffuse/lambert.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/diffuse/oren_nayar.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/specular/blinn_phong.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/specular/beckmann.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/specular/ggx.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/brdf/diffuse/fresnel_correction.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/brdf/diffuse/lambert.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/brdf/diffuse/oren_nayar.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/brdf/specular/blinn_phong.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/brdf/specular/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/brdf/specular/ggx.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/brdf/diffuse/fresnel_correction.glsl") # bsdf -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/diffuse/lambert.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/dielectric.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/beckmann.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/bxdf/bsdf/specular/ggx.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/bsdf/diffuse/lambert.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/bsdf/specular/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/bsdf/specular/dielectric.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/bsdf/specular/beckmann.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/bxdf/bsdf/specular/ggx.glsl") # colorspace -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/EOTF.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/OETF.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/decodeCIEXYZ.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/colorspace/encodeCIEXYZ.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/colorspace/EOTF.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/colorspace/OETF.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/colorspace/decodeCIEXYZ.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/colorspace/encodeCIEXYZ.glsl") # Culling and LoD System -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/dispatch_indirect_params.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/draw_instance_count_scan_override.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/input_descriptor_set.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_cull_and_lod_select.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_draw_count_scan_override.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_draw_cull.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/instance_ref_counting_sort_scatter.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/potentially_visible_instance_draw_struct.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/output_descriptor_modifiers.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/culling_lod_selection/output_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/dispatch_indirect_params.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/draw_instance_count_scan_override.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/input_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/instance_cull_and_lod_select.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/instance_draw_count_scan_override.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/instance_draw_cull.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/instance_ref_counting_sort_scatter.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/potentially_visible_instance_draw_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/output_descriptor_modifiers.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/culling_lod_selection/output_descriptor_set.glsl") # VK_FORMAT support -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/format/decode.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/format/encode.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/format/constants.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/format/decode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/format/encode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/format/constants.glsl") # asset loaders (mostly for pipelines) -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/loader/mtl/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/loader/mtl/common.glsl") # LoD Library -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/lod_library/structs.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/lod_library/descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/lod_library/structs.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/lod_library/descriptor_set.glsl") # math and limits -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/constants.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/complex.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/functions.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/quaternions.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/math/typeless_arithmetic.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/limits/numeric.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/math/constants.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/math/complex.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/math/functions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/math/quaternions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/math/typeless_arithmetic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/limits/numeric.glsl") # material_compiler -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/common_declarations.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/common_invariant_declarations.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/material_compiler/rasterization/impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/material_compiler/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/material_compiler/common_declarations.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/material_compiler/common_invariant_declarations.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/material_compiler/rasterization/impl.glsl") # property pool -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/property_pool/transfer.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/property_pool/copy.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/property_pool/transfer.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/property_pool/copy.comp") # random numbers -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/random/xoroshiro.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/random/xoroshiro.glsl") # sampling -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/bilinear.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/box_muller_transform.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/concentric_mapping.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/cos_weighted.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/linear.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/projected_spherical_triangle.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/spherical_rectangle.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/spherical_triangle.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/sampling/quantized_sequence.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/bilinear.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/box_muller_transform.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/concentric_mapping.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/cos_weighted.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/linear.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/projected_spherical_triangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/spherical_rectangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/spherical_triangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/sampling/quantized_sequence.glsl") # global exclusive scan -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/direct.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/declarations.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/descriptors.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/default_scheduler.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/indirect.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/parameters_struct.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scan/virtual_workgroup.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scan/direct.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scan/declarations.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scan/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scan/default_scheduler.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scan/indirect.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scan/parameters_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scan/virtual_workgroup.glsl") # faster and easier scan -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scanning_append/scanning_append.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scanning_append/scanning_append.glsl") # scene -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scene/animation.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scene/keyframe.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/scene/node.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scene/animation.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scene/keyframe.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/scene/node.glsl") # shapes -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/aabb.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/frustum.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/rectangle.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/shapes/triangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/shapes/aabb.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/shapes/frustum.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/shapes/rectangle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/shapes/triangle.glsl") # skinning -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/cache_descriptor_set.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/cache_update.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/debug.vert") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/linear.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/render_descriptor_set.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/skinning/update_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/skinning/cache_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/skinning/cache_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/skinning/debug.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/skinning/linear.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/skinning/render_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/skinning/update_descriptor_set.glsl") # subgroup emulation -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/shared_arithmetic_portability.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/basic_portability.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/arithmetic_portability.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/arithmetic_portability_impl.glsl") -##LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/subgroup/fft.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/subgroup/shared_arithmetic_portability.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/subgroup/basic_portability.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/subgroup/arithmetic_portability.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/subgroup/arithmetic_portability_impl.glsl") +##LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/subgroup/fft.glsl") # utilities -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/indirect_commands.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/culling.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/compressed_normal_matrix_t.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/normal_decode.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/normal_encode.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/transform.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/morton.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/surface_transform_transformedDerivatives.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/surface_transform.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/utils/surface_transform_e.h") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/indirect_commands.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/culling.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/compressed_normal_matrix_t.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/normal_decode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/normal_encode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/transform.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/morton.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/surface_transform_transformedDerivatives.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/surface_transform.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/utils/surface_transform_e.h") # virtual texturing -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_texturing/descriptors.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_texturing/extensions.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_texturing/impl_functions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/virtual_texturing/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/virtual_texturing/extensions.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/virtual_texturing/impl_functions.glsl") # workgroup "intrinsics" -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_arithmetic.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_ballot.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_clustered.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_fft.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_shuffle.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_shuffle_relative.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shared_vote.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/arithmetic.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/ballot.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/basic.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/clustered.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/fft.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shuffle.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/shuffle_relative.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/workgroup/vote.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shared_arithmetic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shared_ballot.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shared_clustered.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shared_fft.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shared_shuffle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shared_shuffle_relative.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shared_vote.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/arithmetic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/ballot.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/basic.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/clustered.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/fft.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shuffle.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/shuffle_relative.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/workgroup/vote.glsl") #transform_tree -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_update.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_and_normal_matrix_update.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_update_common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/global_transform_update_descriptor_set.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/modification_request_range.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/pool_descriptor_set.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/render_descriptor_set.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_modification.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_update.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_update_common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/relative_transform_update_descriptor_set.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/transform_tree/debug.vert") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/global_transform_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/global_transform_and_normal_matrix_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/global_transform_update_common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/global_transform_update_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/modification_request_range.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/pool_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/render_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/relative_transform_modification.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/relative_transform_update.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/relative_transform_update_common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/relative_transform_update_descriptor_set.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/transform_tree/debug.vert") # ext shouldn't be built into the engine, but there's no harm including some non-dynamic GLSL source to make life easier -#LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/.glsl") +#LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/.glsl") # radix sort -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/default_compute_fft.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/fft.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/parameters_struct.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/parameters.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/FFT/types.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/LumaMeter/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/LumaMeter/impl.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/ToneMapper/operators.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/RadeonRays/intersection.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/RadeonRays/ray.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/MitsubaLoader/instance_data_struct.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/MitsubaLoader/instance_data_descriptor.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/MitsubaLoader/material_compiler_compatibility_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/FFT/default_compute_fft.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/FFT/fft.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/FFT/parameters_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/FFT/parameters.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/FFT/types.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/LumaMeter/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/LumaMeter/impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/ToneMapper/operators.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/RadeonRays/intersection.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/RadeonRays/ray.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/MitsubaLoader/instance_data_struct.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/MitsubaLoader/instance_data_descriptor.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/MitsubaLoader/material_compiler_compatibility_impl.glsl") # OIT -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/OIT/oit.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/OIT/insert_node.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/OIT/resolve.frag") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/OIT/oit.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/OIT/insert_node.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/OIT/resolve.frag") # virtual geometry -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_geometry/descriptors.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_geometry/virtual_attribute.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/virtual_geometry/virtual_attribute_fetch.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/virtual_geometry/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/virtual_geometry/virtual_attribute.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/virtual_geometry/virtual_attribute_fetch.glsl") # depth pyramid generator -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/common.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/push_constants_struct_common.h") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/depth_pyramid_generator_impl.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/ext/DepthPyramidGenerator/virtual_work_group.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/DepthPyramidGenerator/common.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/DepthPyramidGenerator/push_constants_struct_common.h") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/DepthPyramidGenerator/depth_pyramid_generator_impl.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/ext/DepthPyramidGenerator/virtual_work_group.glsl") # blit -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/formats_encode.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/parameters.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/multi_dimensional_array_addressing.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_common.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/formats_encode.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/parameters.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/multi_dimensional_array_addressing.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/default_compute_common.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_blit.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/blit/blit.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/blit/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/default_compute_blit.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/blit/blit.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/blit/descriptors.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_alpha_test.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/alpha_test/alpha_test.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/alpha_test/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/default_compute_alpha_test.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/alpha_test/alpha_test.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/alpha_test/descriptors.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/default_compute_normalization.comp") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/normalization.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/descriptors.glsl") -LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "nbl/builtin/glsl/blit/normalization/shared_normalization.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/default_compute_normalization.comp") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/normalization/normalization.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/normalization/descriptors.glsl") +LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "glsl/blit/normalization/shared_normalization.glsl") macro(NBL_ADD_BUILTIN_RESOURCES _TARGET_) # internal & Nabla only, must be added with the macro to properly propagate scope - ADD_CUSTOM_BUILTIN_RESOURCES("${_TARGET_}" NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include" "${NBL_ROOT_PATH_BINARY}/src") + ADD_CUSTOM_BUILTIN_RESOURCES("${_TARGET_}" NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl/builtin" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include" "${NBL_ROOT_PATH_BINARY}/src") endmacro() diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index 72f08de2aa..69a09f5e00 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -15,7 +15,7 @@ namespace @_NAMESPACE_@ { public: inline CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(nbl::system::path("@_DEFAULT_ABSOLUTE_BUNDLE_SEARCH_DIRECTORY_@"),std::move(logger), getItemList()) {} + : nbl::system::CFileArchive(nbl::system::path("@_BUNDLE_ARCHIVE_ABSOLUTE_PATH_@"),std::move(logger), getItemList()) {} protected: file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index e4346a6589..8b0ec1d45b 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -28,11 +28,19 @@ endmacro() # _TARGET_NAME_ is name of a target library that will be created # _BUNDLE_NAME_ is a bundle name builtin resources are associated with # _BUNDLE_SEARCH_DIRECTORY_ is an absolute search directory path for builtin resorces for given bundle +# _BUNDLE_ARCHIVE_ABSOLUTE_PATH_ is a "absolute path" for an archive which will store a given bundle of builtin resources, must be relative _BUNDLE_SEARCH_DIRECTORY_ # _NAMESPACE_ is a C++ namespace builtin resources will be wrapped into # _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ is an absolute path to output directory for builtin resources header files which will be a search directory for generated headers outputed to ${_OUTPUT_HEADER_DIRECTORY_}/${_PATH_PREFIX_} where path prefix is the namespace turned into a path # _OUTPUT_SOURCE_DIRECTORY_ is an absolute path to output directory for builtin resources source files +# +# As an example one could list a resource as following +# LIST_BUILTIN_RESOURCE(SOME_RESOURCES_TO_EMBED "glsl/blit/default_compute_normalization.comp") +# and then create builtin resource target with the resource above using +# ADD_CUSTOM_BUILTIN_RESOURCES("aTarget" SOME_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl/builtin" "myns::builtin" "${NBL_ROOT_PATH_BINARY}/include" "${NBL_ROOT_PATH_BINARY}/src") +# a real absolute path to the resource on the disk would be ${NBL_ROOT_PATH}/include/nbl/builtin/glsl/blit/default_compute_normalization.comp +# the builtin resource path seen in an archive would be "nbl/builtin/builtin/glsl/blit/default_compute_normalization.comp" where "nbl/builtin" would be an absolute path for an archive -function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ _OUTPUT_SOURCE_DIRECTORY_) +function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _BUNDLE_ARCHIVE_ABSOLUTE_PATH_ _NAMESPACE_ _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ _OUTPUT_SOURCE_DIRECTORY_) if(NOT DEFINED _Python3_EXECUTABLE) message(FATAL_ERROR "_Python3_EXECUTABLE must be defined - call find_package(Python3 COMPONENTS Interpreter REQUIRED)") endif() @@ -70,8 +78,8 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH unset(_ITEM_ALIASES_) endif() - set(_DEFAULT_ABSOLUTE_BUNDLE_SEARCH_DIRECTORY_ "${_BUNDLE_SEARCH_DIRECTORY_}") - set(NBL_BUILTIN_RESOURCE_ABS_PATH "${_BUNDLE_SEARCH_DIRECTORY_}/${_CURRENT_PATH_}") # an absolute path to a builtin resource + set(_BUNDLE_ARCHIVE_ABSOLUTE_PATH_ "${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}") + set(NBL_BUILTIN_RESOURCE_ABS_PATH "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}/${_CURRENT_PATH_}") # an absolute path to a resource a builtin resource will be created as list(APPEND NBL_BUILTIN_RESOURCES "${NBL_BUILTIN_RESOURCE_ABS_PATH}") if(EXISTS "${NBL_BUILTIN_RESOURCE_ABS_PATH}") @@ -82,7 +90,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH string(APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t{\"${_LBR_PATH_}\", ${_LBR_FILE_SIZE_}, 0xdeadbeefu, ${_LBR_ID_}, nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n") # initializer list endmacro() - LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_PATH_}" "${_FILE_SIZE_}" "${_ITR_}") + LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_PATH_}" "${_FILE_SIZE_}" "${_ITR_}") # pass builtin resource path to an archive without _BUNDLE_ARCHIVE_ABSOLUTE_PATH_ foreach(_CURRENT_ALIAS_ IN LISTS _ITEM_ALIASES_) LIST_RESOURCE_FOR_ARCHIVER("${_CURRENT_ALIAS_}" "${_FILE_SIZE_}" "${_ITR_}") @@ -109,8 +117,8 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" - COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" + COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" + COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" COMMENT "Generating built-in resources" DEPENDS ${NBL_DEPENDENCY_FILES} VERBATIM @@ -158,6 +166,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH _ADD_PROPERTY_(BUILTIN_RESOURCES NBL_BUILTIN_RESOURCES) _ADD_PROPERTY_(BUILTIN_RESOURCES_BUNDLE_NAME _BUNDLE_NAME_) _ADD_PROPERTY_(BUILTIN_RESOURCES_BUNDLE_SEARCH_DIRECTORY _BUNDLE_SEARCH_DIRECTORY_) + _ADD_PROPERTY_(BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH _BUNDLE_ARCHIVE_ABSOLUTE_PATH_) _ADD_PROPERTY_(BUILTIN_RESOURCES_NAMESPACE _NAMESPACE_) _ADD_PROPERTY_(BUILTIN_RESOURCES_HEADER_DIRECTORY _OUTPUT_HEADER_DIRECTORY_) _ADD_PROPERTY_(BUILTIN_RESOURCES_SOURCE_DIRECTORY _OUTPUT_SOURCE_DIRECTORY_) From e8e5a4b6493d682efd060bd790532fa92fd6a886 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sun, 21 May 2023 11:55:33 +0200 Subject: [PATCH 32/46] update docs --- src/nbl/builtin/utils.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 8b0ec1d45b..b513971e07 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -1,5 +1,5 @@ # Assigns builtin resources to a bundle a target library will be created with -# _BUNDLE_NAME_ is a bundle name, must be a valid CMake variable +# _BUNDLE_NAME_ is a bundle name, must be a valid CMake list variable # _LBR_PATH_ is a path to builtin resource macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_) @@ -26,7 +26,7 @@ endmacro() # Creates a library with builtin resources for given bundle # _TARGET_NAME_ is name of a target library that will be created -# _BUNDLE_NAME_ is a bundle name builtin resources are associated with +# _BUNDLE_NAME_ a list variable populated using LIST_BUILTIN_RESOURCE # _BUNDLE_SEARCH_DIRECTORY_ is an absolute search directory path for builtin resorces for given bundle # _BUNDLE_ARCHIVE_ABSOLUTE_PATH_ is a "absolute path" for an archive which will store a given bundle of builtin resources, must be relative _BUNDLE_SEARCH_DIRECTORY_ # _NAMESPACE_ is a C++ namespace builtin resources will be wrapped into @@ -38,7 +38,7 @@ endmacro() # and then create builtin resource target with the resource above using # ADD_CUSTOM_BUILTIN_RESOURCES("aTarget" SOME_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl/builtin" "myns::builtin" "${NBL_ROOT_PATH_BINARY}/include" "${NBL_ROOT_PATH_BINARY}/src") # a real absolute path to the resource on the disk would be ${NBL_ROOT_PATH}/include/nbl/builtin/glsl/blit/default_compute_normalization.comp -# the builtin resource path seen in an archive would be "nbl/builtin/builtin/glsl/blit/default_compute_normalization.comp" where "nbl/builtin" would be an absolute path for an archive +# the builtin resource path seen in Nabla filesystem would be "nbl/builtin/builtin/glsl/blit/default_compute_normalization.comp" where "nbl/builtin" would be an absolute path for an archive function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _BUNDLE_ARCHIVE_ABSOLUTE_PATH_ _NAMESPACE_ _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ _OUTPUT_SOURCE_DIRECTORY_) if(NOT DEFINED _Python3_EXECUTABLE) From 9cb464f9455167cb05da75e61c56d80be2953320 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sun, 21 May 2023 12:08:39 +0200 Subject: [PATCH 33/46] update a few lines regarding path prefix, use pathPrefix created given --- src/nbl/builtin/template/CArchive.h.in | 4 ++-- src/nbl/builtin/utils.cmake | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index 69a09f5e00..820b9ea670 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -6,7 +6,7 @@ namespace @_NAMESPACE_@ { - constexpr std::string_view pathPrefix = "@_PATH_PREFIX_@"; + constexpr std::string_view pathPrefix = "@_BUNDLE_ARCHIVE_ABSOLUTE_PATH_@"; constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } std::pair get_resource_runtime(const std::string& filename); @@ -15,7 +15,7 @@ namespace @_NAMESPACE_@ { public: inline CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(nbl::system::path("@_BUNDLE_ARCHIVE_ABSOLUTE_PATH_@"),std::move(logger), getItemList()) {} + : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), getItemList()) {} protected: file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index b513971e07..7a0b224b88 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -30,7 +30,7 @@ endmacro() # _BUNDLE_SEARCH_DIRECTORY_ is an absolute search directory path for builtin resorces for given bundle # _BUNDLE_ARCHIVE_ABSOLUTE_PATH_ is a "absolute path" for an archive which will store a given bundle of builtin resources, must be relative _BUNDLE_SEARCH_DIRECTORY_ # _NAMESPACE_ is a C++ namespace builtin resources will be wrapped into -# _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ is an absolute path to output directory for builtin resources header files which will be a search directory for generated headers outputed to ${_OUTPUT_HEADER_DIRECTORY_}/${_PATH_PREFIX_} where path prefix is the namespace turned into a path +# _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ is an absolute path to output directory for builtin resources header files which will be a search directory for generated headers outputed to ${_OUTPUT_HEADER_DIRECTORY_}/${_NAMESPACE_PREFIX_} where namespace prefix is the namespace turned into a path # _OUTPUT_SOURCE_DIRECTORY_ is an absolute path to output directory for builtin resources source files # # As an example one could list a resource as following @@ -51,14 +51,14 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(NBL_BS_HEADER_FILENAME "builtinResources.h") set(NBL_BS_DATA_SOURCE_FILENAME "builtinResourceData.cpp") - string(REPLACE "::" "/" _PATH_PREFIX_ "${_NAMESPACE_}") + string(REPLACE "::" "/" _NAMESPACE_PREFIX_ "${_NAMESPACE_}") string(REPLACE "::" "_" _GUARD_SUFFIX_ "${_NAMESPACE_}") string(REGEX REPLACE "^[0-9]+\." "" _GUARD_SUFFIX_ ${_GUARD_SUFFIX_}) string(TOUPPER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) string(MAKE_C_IDENTIFIER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_) set(_OUTPUT_INCLUDE_SEARCH_DIRECTORY_ "${_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}") - set(_OUTPUT_HEADER_DIRECTORY_ "${_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}/${_PATH_PREFIX_}") + set(_OUTPUT_HEADER_DIRECTORY_ "${_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}/${_NAMESPACE_PREFIX_}") file(MAKE_DIRECTORY "${_OUTPUT_HEADER_DIRECTORY_}") file(MAKE_DIRECTORY "${_OUTPUT_SOURCE_DIRECTORY_}") From 763f9fbc9bb66bfe83064f0f882b098e425f9ddd Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Sun, 21 May 2023 12:26:33 +0200 Subject: [PATCH 34/46] remove getItemList() proxy function and keep resources as inline static const list directly in the CArchive.h --- src/nbl/builtin/template/CArchive.h.in | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index 820b9ea670..2a108641b7 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -15,7 +15,7 @@ namespace @_NAMESPACE_@ { public: inline CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), getItemList()) {} + : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), resources) {} protected: file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override @@ -24,15 +24,10 @@ namespace @_NAMESPACE_@ return { const_cast(found.first), found.second, nullptr }; } - nbl::core::vector getItemList() + inline static const nbl::core::vector resources { - static nbl::core::vector resources - { @_RESOURCES_INIT_LIST_@ - }; - - return resources; - } + }; }; } From 806a43ebedc5fbae7efb081880c7cccf813967fd Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Sun, 21 May 2023 19:04:39 +0200 Subject: [PATCH 35/46] Switched all vectors from std to core --- include/nbl/system/CFileArchive.h | 5 +++-- include/nbl/system/IFileArchive.h | 2 +- src/nbl/system/CMountDirectoryArchive.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/nbl/system/CFileArchive.h b/include/nbl/system/CFileArchive.h index bdccf434c1..2999084bb6 100644 --- a/include/nbl/system/CFileArchive.h +++ b/include/nbl/system/CFileArchive.h @@ -105,10 +105,11 @@ class CFileArchive : public IFileArchive } protected: - CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector&& _items) : + CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector _items) : IFileArchive(std::move(_defaultAbsolutePath),std::move(logger)) { - auto itemsSharedPtr = std::make_shared>(std::move(_items)); + //should _items be rvalue reference? + auto itemsSharedPtr = std::make_shared>(std::move(_items)); std::sort(itemsSharedPtr->begin(), itemsSharedPtr->end()); m_items.store(itemsSharedPtr); diff --git a/include/nbl/system/IFileArchive.h b/include/nbl/system/IFileArchive.h index aef3ee18dc..3a6b6e79da 100644 --- a/include/nbl/system/IFileArchive.h +++ b/include/nbl/system/IFileArchive.h @@ -65,7 +65,7 @@ class IFileArchive : public core::IReferenceCounted return pathRelativeToArchive < other.pathRelativeToArchive; } }; - using refctd_storage_t = std::shared_ptr>; + using refctd_storage_t = std::shared_ptr>; using range_t = core::SRange; inline operator range_t() const { return m_range; } diff --git a/src/nbl/system/CMountDirectoryArchive.h b/src/nbl/system/CMountDirectoryArchive.h index 3d7a4e7c62..b246ebb7b5 100644 --- a/src/nbl/system/CMountDirectoryArchive.h +++ b/src/nbl/system/CMountDirectoryArchive.h @@ -42,7 +42,7 @@ class CMountDirectoryArchive : public IFileArchive void populateItemList(const path& p) const { auto items = m_system->listItemsInDirectory(m_defaultAbsolutePath/p); - auto new_entries = std::make_shared< std::vector>(); + auto new_entries = std::make_shared>(); for (auto item : items) { if (item.has_extension()) From 34c4cdf2b2890acc47100c3783fea7191250b09f Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Tue, 23 May 2023 12:09:08 +0200 Subject: [PATCH 36/46] correct a bug --- cmake/common.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index b7c15a6523..2ce96afac1 100755 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -363,8 +363,8 @@ endfunction() # @_BS_TARGET_@ is a builtin resource target function(LINK_BUILTIN_RESOURCES_TO_TARGET _TARGET_ _BS_TARGET_) - add_dependencies(${EXECUTABLE_NAME} systemTestBuiltinResourceData) - target_link_libraries(${EXECUTABLE_NAME} PUBLIC systemTestBuiltinResourceData) + add_dependencies(${EXECUTABLE_NAME} ${_BS_TARGET_}) + target_link_libraries(${EXECUTABLE_NAME} PUBLIC ${_BS_TARGET_}) get_target_property(_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_ ${_BS_TARGET_} BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY) target_include_directories(${EXECUTABLE_NAME} PUBLIC "${_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_}") From 1ecd112a8e553e5ff7c26b3d59d925047f0f3487 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Tue, 23 May 2023 13:23:37 +0200 Subject: [PATCH 37/46] include search directory of nbl builtin resources for targets created as ext projects with Nabla --- cmake/common.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/common.cmake b/cmake/common.cmake index 2ce96afac1..47220dcad9 100755 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -221,6 +221,7 @@ macro(nbl_create_ext_library_project EXT_NAME LIB_HEADERS LIB_SOURCES LIB_INCLUD add_dependencies(${LIB_NAME} Nabla) get_target_property(_NBL_NABLA_TARGET_BINARY_DIR_ Nabla BINARY_DIR) + get_target_property(_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_ nblBuiltinResourceData BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY) target_include_directories(${LIB_NAME} PUBLIC ${_NBL_NABLA_TARGET_BINARY_DIR_}/build/import @@ -230,6 +231,7 @@ macro(nbl_create_ext_library_project EXT_NAME LIB_HEADERS LIB_SOURCES LIB_INCLUD PUBLIC ${CMAKE_SOURCE_DIR}/include PUBLIC ${CMAKE_SOURCE_DIR}/src PUBLIC ${CMAKE_SOURCE_DIR}/source/Nabla + PUBLIC ${_BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY_} PRIVATE ${LIB_INCLUDES} ) add_dependencies(${LIB_NAME} Nabla) From e73e0afd262e3161730f3a336138a15a2d0a4835 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Tue, 23 May 2023 15:35:48 +0200 Subject: [PATCH 38/46] add handling DLL imports/exports for builtin resource targets, have optional _SHARED_ argument in ADD_CUSTOM_BUILTIN_RESOURCES --- src/nbl/builtin/builtinHeaderGen.py | 27 +++++++++++++++++++++++++-- src/nbl/builtin/utils.cmake | 19 +++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index 2945858cc7..dbd0b56427 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -18,6 +18,7 @@ resourcesFile = sys.argv[3] resourcesNamespace = sys.argv[4] guardSuffix = sys.argv[5] + isSharedLibrary = sys.argv[6] file = open(resourcesFile, 'r') resourcePaths = file.readlines() @@ -32,6 +33,22 @@ outp.write("#include \n") outp.write("#include \n") outp.write("#include \n#include \n\n") + + if isSharedLibrary: + outp.write("#if defined(__NBL_BUILDING_TARGET__) // currently compiling the target, this define is passed through the commandline\n") + outp.write("#if defined(_MSC_VER)\n") + outp.write("#define NBL_API2 __declspec(dllexport)\n") + outp.write("#elif defined(__GNUC__)\n") + outp.write('#define NBL_API2 __attribute__ ((visibility ("default")))' + "\n") + outp.write("#endif\n") + outp.write("#else\n") + outp.write("#if defined(_MSC_VER)\n") + outp.write("#define NBL_API2 __declspec(dllimport)\n") + outp.write("#else\n") + outp.write("#define NBL_API2\n") + outp.write("#endif\n") + outp.write("#endif\n\n") + outp.write("namespace " + resourcesNamespace + " { \n") outp.write("\t\ttemplate\n") outp.write("\t\tconst std::pair get_resource();\n") @@ -41,11 +58,17 @@ itemData = z.split(',') x = itemData[0].rstrip() - outp.write('\n\t\ttemplate<> const std::pair get_resource();' % x) + if isSharedLibrary: + outp.write('\n\t\ttemplate<> NBL_API2 const std::pair get_resource();' % x) + else: + outp.write('\n\t\ttemplate<> const std::pair get_resource();' % x) if len(itemData) > 1: for i in range(1, len(itemData)): - outp.write('\n\t\ttemplate<> const std::pair get_resource();' % itemData[i].rstrip()) + if isSharedLibrary: + outp.write('\n\t\ttemplate<> NBL_API2 const std::pair get_resource();' % itemData[i].rstrip()) + else: + outp.write('\n\t\ttemplate<> const std::pair get_resource();' % itemData[i].rstrip()) outp.write("\n\t}") outp.write("\n#endif // _" + guardSuffix + "_BUILTINRESOURCEDATA_H_") diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 7a0b224b88..3506a96d53 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -32,6 +32,7 @@ endmacro() # _NAMESPACE_ is a C++ namespace builtin resources will be wrapped into # _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ is an absolute path to output directory for builtin resources header files which will be a search directory for generated headers outputed to ${_OUTPUT_HEADER_DIRECTORY_}/${_NAMESPACE_PREFIX_} where namespace prefix is the namespace turned into a path # _OUTPUT_SOURCE_DIRECTORY_ is an absolute path to output directory for builtin resources source files +# _STATIC_ optional last argument is a bool, if true then add_library will use STATIC, SHARED otherwise. Pay attention that MSVC runtime is controlled by NBL_DYNAMIC_MSVC_RUNTIME which is not an argument of this function # # As an example one could list a resource as following # LIST_BUILTIN_RESOURCE(SOME_RESOURCES_TO_EMBED "glsl/blit/default_compute_normalization.comp") @@ -114,21 +115,35 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_HEADER_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_SOURCE_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") + + if("${ARGV7}" STREQUAL "SHARED") + set(_LIB_TYPE_ SHARED) + set(_SHARED_ True) + else() + set(_LIB_TYPE_ STATIC) + set(_SHARED_ False) + endif() add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" - COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" + COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${_GUARD_SUFFIX_}" "${_SHARED_}" COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" COMMENT "Generating built-in resources" DEPENDS ${NBL_DEPENDENCY_FILES} VERBATIM ) - add_library(${_TARGET_NAME_} STATIC + add_library(${_TARGET_NAME_} ${_LIB_TYPE_} "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" ) + if(_LIB_TYPE_ STREQUAL SHARED) + target_compile_definitions(${_TARGET_NAME_} + PRIVATE __NBL_BUILDING_TARGET__ + ) + endif() + target_include_directories(${_TARGET_NAME_} PUBLIC "${NBL_ROOT_PATH}/include" "${_OUTPUT_HEADER_DIRECTORY_}" From 0fa3cf3c62450233ceb41c3b6b646d1d15b91aea Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Tue, 23 May 2023 16:32:17 +0200 Subject: [PATCH 39/46] add more NBL_API2 for some classes and update builtin resource generation python scripts - make their sources be independent of Nabla's NBL_API2. Update builtin CMake utils --- .../system/CFileViewVirtualAllocatorWin32.h | 2 +- include/nbl/system/IFileArchive.h | 2 +- src/nbl/builtin/builtinHeaderGen.py | 20 ++++++++++++------- src/nbl/builtin/template/CArchive.h.in | 2 -- src/nbl/builtin/utils.cmake | 16 +++++++-------- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/include/nbl/system/CFileViewVirtualAllocatorWin32.h b/include/nbl/system/CFileViewVirtualAllocatorWin32.h index 36b2366b82..ff53dc74e5 100644 --- a/include/nbl/system/CFileViewVirtualAllocatorWin32.h +++ b/include/nbl/system/CFileViewVirtualAllocatorWin32.h @@ -4,7 +4,7 @@ namespace nbl::system { #ifdef _NBL_PLATFORM_WINDOWS_ -class CFileViewVirtualAllocatorWin32 : public IFileViewAllocator +class NBL_API2 CFileViewVirtualAllocatorWin32 : public IFileViewAllocator { public: using IFileViewAllocator::IFileViewAllocator; diff --git a/include/nbl/system/IFileArchive.h b/include/nbl/system/IFileArchive.h index 75226311cb..2ba5510fa3 100644 --- a/include/nbl/system/IFileArchive.h +++ b/include/nbl/system/IFileArchive.h @@ -21,7 +21,7 @@ namespace nbl::system class IFile; //! The FileArchive manages archives and provides access to files inside them. -class IFileArchive : public core::IReferenceCounted +class NBL_API2 IFileArchive : public core::IReferenceCounted { public: enum E_ALLOCATOR_TYPE diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index dbd0b56427..c3437e2d31 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -18,7 +18,7 @@ resourcesFile = sys.argv[3] resourcesNamespace = sys.argv[4] guardSuffix = sys.argv[5] - isSharedLibrary = sys.argv[6] + isSharedLibrary = True if sys.argv[6] == "True" else False file = open(resourcesFile, 'r') resourcePaths = file.readlines() @@ -37,19 +37,25 @@ if isSharedLibrary: outp.write("#if defined(__NBL_BUILDING_TARGET__) // currently compiling the target, this define is passed through the commandline\n") outp.write("#if defined(_MSC_VER)\n") - outp.write("#define NBL_API2 __declspec(dllexport)\n") + outp.write("#define BR_API __declspec(dllexport)\n") outp.write("#elif defined(__GNUC__)\n") - outp.write('#define NBL_API2 __attribute__ ((visibility ("default")))' + "\n") + outp.write('#define BR_API __attribute__ ((visibility ("default")))' + "\n") outp.write("#endif\n") outp.write("#else\n") outp.write("#if defined(_MSC_VER)\n") - outp.write("#define NBL_API2 __declspec(dllimport)\n") + outp.write("#define BR_API __declspec(dllimport)\n") outp.write("#else\n") - outp.write("#define NBL_API2\n") + outp.write("#define BR_API\n") outp.write("#endif\n") outp.write("#endif\n\n") outp.write("namespace " + resourcesNamespace + " { \n") + + if isSharedLibrary: + outp.write("\t\tBR_API std::pair get_resource_runtime(const std::string& filename);\n\n") + else: + outp.write("\t\tstd::pair get_resource_runtime(const std::string& filename);\n\n") + outp.write("\t\ttemplate\n") outp.write("\t\tconst std::pair get_resource();\n") @@ -59,14 +65,14 @@ x = itemData[0].rstrip() if isSharedLibrary: - outp.write('\n\t\ttemplate<> NBL_API2 const std::pair get_resource();' % x) + outp.write('\n\t\ttemplate<> BR_API const std::pair get_resource();' % x) else: outp.write('\n\t\ttemplate<> const std::pair get_resource();' % x) if len(itemData) > 1: for i in range(1, len(itemData)): if isSharedLibrary: - outp.write('\n\t\ttemplate<> NBL_API2 const std::pair get_resource();' % itemData[i].rstrip()) + outp.write('\n\t\ttemplate<> BR_API const std::pair get_resource();' % itemData[i].rstrip()) else: outp.write('\n\t\ttemplate<> const std::pair get_resource();' % itemData[i].rstrip()) diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index 2a108641b7..d5318b3250 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -8,8 +8,6 @@ namespace @_NAMESPACE_@ { constexpr std::string_view pathPrefix = "@_BUNDLE_ARCHIVE_ABSOLUTE_PATH_@"; constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } - - std::pair get_resource_runtime(const std::string& filename); class CArchive final : public nbl::system::CFileArchive { diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 3506a96d53..4709feab14 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -45,6 +45,14 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH if(NOT DEFINED _Python3_EXECUTABLE) message(FATAL_ERROR "_Python3_EXECUTABLE must be defined - call find_package(Python3 COMPONENTS Interpreter REQUIRED)") endif() + + if("${ARGV7}" STREQUAL "SHARED") + set(_LIB_TYPE_ SHARED) + set(_SHARED_ True) + else() + set(_LIB_TYPE_ STATIC) + set(_SHARED_ False) + endif() set(NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") @@ -115,14 +123,6 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH set(NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_HEADER_DIRECTORY_}/${NBL_BS_HEADER_FILENAME}") set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_SOURCE_DIRECTORY_}/${NBL_BS_DATA_SOURCE_FILENAME}") - - if("${ARGV7}" STREQUAL "SHARED") - set(_LIB_TYPE_ SHARED) - set(_SHARED_ True) - else() - set(_LIB_TYPE_ STATIC) - set(_SHARED_ False) - endif() add_custom_command( OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" From cf5fec1a953a4d4ed2bf571fb82ed63bfc09fc20 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Wed, 24 May 2023 04:23:33 +0200 Subject: [PATCH 40/46] reverted core to std on vector usages --- include/nbl/system/CFileArchive.h | 5 ++--- include/nbl/system/IFileArchive.h | 2 +- src/nbl/system/CAPKResourcesArchive.cpp | 4 ++-- src/nbl/system/CArchiveLoaderTar.cpp | 2 +- src/nbl/system/CArchiveLoaderTar.h | 2 +- src/nbl/system/CArchiveLoaderZip.cpp | 2 +- src/nbl/system/CArchiveLoaderZip.h | 2 +- src/nbl/system/CMountDirectoryArchive.h | 2 +- 8 files changed, 10 insertions(+), 11 deletions(-) diff --git a/include/nbl/system/CFileArchive.h b/include/nbl/system/CFileArchive.h index 2999084bb6..56dc8c1d10 100644 --- a/include/nbl/system/CFileArchive.h +++ b/include/nbl/system/CFileArchive.h @@ -105,11 +105,10 @@ class CFileArchive : public IFileArchive } protected: - CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector _items) : + CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, std::vector* _items) : IFileArchive(std::move(_defaultAbsolutePath),std::move(logger)) { - //should _items be rvalue reference? - auto itemsSharedPtr = std::make_shared>(std::move(_items)); + auto itemsSharedPtr = std::make_shared>(std::move(_items)); std::sort(itemsSharedPtr->begin(), itemsSharedPtr->end()); m_items.store(itemsSharedPtr); diff --git a/include/nbl/system/IFileArchive.h b/include/nbl/system/IFileArchive.h index 3a6b6e79da..aef3ee18dc 100644 --- a/include/nbl/system/IFileArchive.h +++ b/include/nbl/system/IFileArchive.h @@ -65,7 +65,7 @@ class IFileArchive : public core::IReferenceCounted return pathRelativeToArchive < other.pathRelativeToArchive; } }; - using refctd_storage_t = std::shared_ptr>; + using refctd_storage_t = std::shared_ptr>; using range_t = core::SRange; inline operator range_t() const { return m_range; } diff --git a/src/nbl/system/CAPKResourcesArchive.cpp b/src/nbl/system/CAPKResourcesArchive.cpp index f6e41858d6..680c019ecb 100644 --- a/src/nbl/system/CAPKResourcesArchive.cpp +++ b/src/nbl/system/CAPKResourcesArchive.cpp @@ -12,7 +12,7 @@ CAPKResourcesArchive::CAPKResourcesArchive(const path& _path, system::logger_opt { } -core::vector CAPKResourcesArchive::computeItems(const std::string& asset_path, ANativeActivity* activity, JNIEnv* jniEnv) +std::vector CAPKResourcesArchive::computeItems(const std::string& asset_path, ANativeActivity* activity, JNIEnv* jniEnv) { auto context_object = activity->clazz; auto getAssets_method = jniEnv->GetMethodID(jniEnv->GetObjectClass(context_object), "getAssets", "()Landroid/content/res/AssetManager;"); @@ -27,7 +27,7 @@ core::vector CAPKResourcesArchive::computeItems auto length = jniEnv->GetArrayLength(files_object); - core::vector result; + std::vector result; for (decltype(length) i=0; iGetObjectArrayElement(files_object,i); diff --git a/src/nbl/system/CArchiveLoaderTar.cpp b/src/nbl/system/CArchiveLoaderTar.cpp index f2e9cc9c3a..0e600a29b0 100644 --- a/src/nbl/system/CArchiveLoaderTar.cpp +++ b/src/nbl/system/CArchiveLoaderTar.cpp @@ -98,7 +98,7 @@ core::smart_refctd_ptr CArchiveLoaderTar::createArchive_impl(core: if (!file || !(file->getFlags()&IFileBase::ECF_MAPPABLE)) return nullptr; - core::vector items; + std::vector items; for (size_t pos=0ull; true; ) { STarHeader fHead; diff --git a/src/nbl/system/CArchiveLoaderTar.h b/src/nbl/system/CArchiveLoaderTar.h index 7b1b7a655f..3cbde55a9b 100644 --- a/src/nbl/system/CArchiveLoaderTar.h +++ b/src/nbl/system/CArchiveLoaderTar.h @@ -14,7 +14,7 @@ class CArchiveLoaderTar final : public IArchiveLoader class CArchive final : public CFileArchive { public: - CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, core::vector&& _items) : + CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, std::vector&& _items) : CFileArchive(path(_file->getFileName()),std::move(logger),std::move(_items)), m_file(std::move(_file)) {} protected: diff --git a/src/nbl/system/CArchiveLoaderZip.cpp b/src/nbl/system/CArchiveLoaderZip.cpp index bf594d0774..4c8ad60b5c 100644 --- a/src/nbl/system/CArchiveLoaderZip.cpp +++ b/src/nbl/system/CArchiveLoaderZip.cpp @@ -106,7 +106,7 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: return nullptr; } - core::vector items; + std::vector items; core::vector itemsMetadata; // load file entries { diff --git a/src/nbl/system/CArchiveLoaderZip.h b/src/nbl/system/CArchiveLoaderZip.h index 2bd08e694d..8de2ca6db1 100644 --- a/src/nbl/system/CArchiveLoaderZip.h +++ b/src/nbl/system/CArchiveLoaderZip.h @@ -39,7 +39,7 @@ class CArchiveLoaderZip final : public IArchiveLoader CArchive( core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, - core::vector&& _items, + std::vector&& _items, core::vector&& _itemsMetadata ) : CFileArchive(path(_file->getFileName()),std::move(logger),std::move(_items)), m_file(std::move(_file)), m_itemsMetadata(std::move(_itemsMetadata)), m_password("") diff --git a/src/nbl/system/CMountDirectoryArchive.h b/src/nbl/system/CMountDirectoryArchive.h index b246ebb7b5..cb0f3cc44c 100644 --- a/src/nbl/system/CMountDirectoryArchive.h +++ b/src/nbl/system/CMountDirectoryArchive.h @@ -42,7 +42,7 @@ class CMountDirectoryArchive : public IFileArchive void populateItemList(const path& p) const { auto items = m_system->listItemsInDirectory(m_defaultAbsolutePath/p); - auto new_entries = std::make_shared>(); + auto new_entries = std::make_shared>(); for (auto item : items) { if (item.has_extension()) From dffbed282fff42168f00df8deb912f1489dd5ce8 Mon Sep 17 00:00:00 2001 From: AnastaZIuk Date: Fri, 26 May 2023 14:28:16 +0200 Subject: [PATCH 41/46] Split archive into header CArchive.h and source CArchive.cpp files, have it compiled with one single builtin resources library. Rename BR_API to NBL_BR_API. Move creation of nblBuiltinResourceData, have Nabla created first to be capable of using it's properties. Target source builtin files with PRIVATE qualifier to Nabla target. Perform tests --- src/nbl/CMakeLists.txt | 62 ++++++++++++------------ src/nbl/builtin/builtinHeaderGen.py | 14 +++--- src/nbl/builtin/template/CArchive.cpp.in | 15 ++++++ src/nbl/builtin/template/CArchive.h.in | 12 ++--- src/nbl/builtin/utils.cmake | 16 +++++- 5 files changed, 69 insertions(+), 50 deletions(-) create mode 100644 src/nbl/builtin/template/CArchive.cpp.in diff --git a/src/nbl/CMakeLists.txt b/src/nbl/CMakeLists.txt index 4afb786a51..878d658ae3 100755 --- a/src/nbl/CMakeLists.txt +++ b/src/nbl/CMakeLists.txt @@ -114,10 +114,6 @@ endif() nbl_get_conf_dir(NABLA_CONF_DIR_DEBUG Debug) nbl_get_conf_dir(NABLA_CONF_DIR_RELEASE Release) -if(NBL_EMBED_BUILTIN_RESOURCES) - add_subdirectory(builtin) - NBL_ADD_BUILTIN_RESOURCES(nblBuiltinResourceData) # internal, must be added with the macro to properly propagate scope -endif() nbl_get_conf_dir(NABLA_CONF_DIR_RELWITHDEBINFO RelWithDebInfo) if (NBL_COMPILE_WITH_CUDA) @@ -360,25 +356,11 @@ set(COMMON_INCLUDE_DIRS file(GLOB_RECURSE NABLA_HEADERS_PRIV1 "*.h") file(GLOB_RECURSE NABLA_HEADERS_PRIV2 "${NBL_ROOT_PATH}/src/nbl/*.h") -#always install builtins (some may be included in cpp regardless if embedded or not) - -get_target_property(_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_ nblBuiltinResourceData BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH) -foreach(X IN LISTS NBL_RESOURCES_TO_EMBED) - list(APPEND NABLA_RESOURCES_TO_EMBED_PUBLIC "${NBL_ROOT_PATH}/include/${_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}/${X}") -endforeach() -list(APPEND NABLA_HEADERS_PUBLIC ${NABLA_RESOURCES_TO_EMBED_PUBLIC}) -source_group("Resources to embed" FILES ${NABLA_RESOURCES_TO_EMBED_PUBLIC}) -set_source_files_properties(${NABLA_RESOURCES_TO_EMBED_PUBLIC} - PROPERTIES HEADER_FILE_ONLY TRUE) - set(NABLA_HEADERS "${NBL_ROOT_PATH}/include/nabla.h" ${NABLA_HEADERS_PUBLIC} ${NABLA_HEADERS_PIRV1} ${NABLA_HEADERS_PRIV2}) -get_target_property(_BUILTIN_RESOURCES_HEADER_DIRECTORY_ nblBuiltinResourceData BUILTIN_RESOURCES_HEADER_DIRECTORY) - set(NBL_LIBRARY_CREATION_SOURCES ${NABLA_SRCS_COMMON} ${NABLA_HEADERS} - ${_BUILTIN_RESOURCES_HEADER_DIRECTORY_} $ $ $ @@ -426,20 +408,6 @@ if(NOT NBL_STATIC_BUILD) set_target_properties(Nabla PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${NBL_ASSEMBLY_DIRECTORY}) endif() -if(NBL_EMBED_BUILTIN_RESOURCES) - add_dependencies(Nabla nblBuiltinResourceData) - - if(NBL_STATIC_BUILD) - target_link_libraries(Nabla INTERFACE - nblBuiltinResourceData - ) - else() - target_link_libraries(Nabla PRIVATE - nblBuiltinResourceData - ) - endif() -endif() - ## Set up 3rdparty deps # Parallel Hashmap target_include_directories(Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR}/parallel-hashmap/parallel_hashmap) @@ -626,6 +594,36 @@ target_compile_definitions(Nabla INTERFACE _NBL_PCH_IGNORE_PRIVATE_HEADERS ) +if(NBL_EMBED_BUILTIN_RESOURCES) + add_subdirectory(builtin) + NBL_ADD_BUILTIN_RESOURCES(nblBuiltinResourceData) # internal, must be added with the macro to properly propagate scope + add_dependencies(Nabla nblBuiltinResourceData) + + if(NBL_STATIC_BUILD) + target_link_libraries(Nabla INTERFACE + nblBuiltinResourceData + ) + else() + target_link_libraries(Nabla PRIVATE + nblBuiltinResourceData + ) + endif() + + # always install builtins (some may be included in cpp regardless if embedded or not) + get_target_property(_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_ nblBuiltinResourceData BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH) + foreach(X IN LISTS NBL_RESOURCES_TO_EMBED) + list(APPEND NABLA_RESOURCES_TO_EMBED_PUBLIC "${NBL_ROOT_PATH}/include/${_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}/${X}") + endforeach() + + target_sources(Nabla PRIVATE + ${NABLA_RESOURCES_TO_EMBED_PUBLIC} + ) + + list(APPEND NABLA_HEADERS_PUBLIC ${NABLA_RESOURCES_TO_EMBED_PUBLIC}) + source_group("Resources to embed" FILES ${NABLA_RESOURCES_TO_EMBED_PUBLIC}) + set_source_files_properties(${NABLA_RESOURCES_TO_EMBED_PUBLIC} PROPERTIES HEADER_FILE_ONLY TRUE) +endif() + # generate Nabla definitions to a header glue_source_definitions(Nabla _NBL_SOURCE_DEFINITIONS_) set(_NBL_DEFINE_FILE_WRAPPER_ ${CMAKE_CURRENT_BINARY_DIR}/include/define.h) diff --git a/src/nbl/builtin/builtinHeaderGen.py b/src/nbl/builtin/builtinHeaderGen.py index c3437e2d31..f8e6d9e989 100644 --- a/src/nbl/builtin/builtinHeaderGen.py +++ b/src/nbl/builtin/builtinHeaderGen.py @@ -37,22 +37,22 @@ if isSharedLibrary: outp.write("#if defined(__NBL_BUILDING_TARGET__) // currently compiling the target, this define is passed through the commandline\n") outp.write("#if defined(_MSC_VER)\n") - outp.write("#define BR_API __declspec(dllexport)\n") + outp.write("#define NBL_BR_API __declspec(dllexport)\n") outp.write("#elif defined(__GNUC__)\n") - outp.write('#define BR_API __attribute__ ((visibility ("default")))' + "\n") + outp.write('#define NBL_BR_API __attribute__ ((visibility ("default")))' + "\n") outp.write("#endif\n") outp.write("#else\n") outp.write("#if defined(_MSC_VER)\n") - outp.write("#define BR_API __declspec(dllimport)\n") + outp.write("#define NBL_BR_API __declspec(dllimport)\n") outp.write("#else\n") - outp.write("#define BR_API\n") + outp.write("#define NBL_BR_API\n") outp.write("#endif\n") outp.write("#endif\n\n") outp.write("namespace " + resourcesNamespace + " { \n") if isSharedLibrary: - outp.write("\t\tBR_API std::pair get_resource_runtime(const std::string& filename);\n\n") + outp.write("\t\tNBL_BR_API std::pair get_resource_runtime(const std::string& filename);\n\n") else: outp.write("\t\tstd::pair get_resource_runtime(const std::string& filename);\n\n") @@ -65,14 +65,14 @@ x = itemData[0].rstrip() if isSharedLibrary: - outp.write('\n\t\ttemplate<> BR_API const std::pair get_resource();' % x) + outp.write('\n\t\ttemplate<> NBL_BR_API const std::pair get_resource();' % x) else: outp.write('\n\t\ttemplate<> const std::pair get_resource();' % x) if len(itemData) > 1: for i in range(1, len(itemData)): if isSharedLibrary: - outp.write('\n\t\ttemplate<> BR_API const std::pair get_resource();' % itemData[i].rstrip()) + outp.write('\n\t\ttemplate<> NBL_BR_API const std::pair get_resource();' % itemData[i].rstrip()) else: outp.write('\n\t\ttemplate<> const std::pair get_resource();' % itemData[i].rstrip()) diff --git a/src/nbl/builtin/template/CArchive.cpp.in b/src/nbl/builtin/template/CArchive.cpp.in new file mode 100644 index 0000000000..b7280a190d --- /dev/null +++ b/src/nbl/builtin/template/CArchive.cpp.in @@ -0,0 +1,15 @@ +#include "CArchive.h" +#include + +using namespace @_NAMESPACE_@; + +static const auto k_builtinArchiveFileList = std::make_shared>(nbl::core::vector{ +@_RESOURCES_INIT_LIST_@ +}); + +CArchive::CArchive(nbl::system::logger_opt_smart_ptr&& logger) + : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), *const_cast*>(k_builtinArchiveFileList.get())) +{ + +} + diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index d5318b3250..0aa2909d65 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -9,23 +9,17 @@ namespace @_NAMESPACE_@ constexpr std::string_view pathPrefix = "@_BUNDLE_ARCHIVE_ABSOLUTE_PATH_@"; constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; } - class CArchive final : public nbl::system::CFileArchive + class @_NBL_BR_API_@ CArchive final : public nbl::system::CFileArchive { public: - inline CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), resources) {} + CArchive(nbl::system::logger_opt_smart_ptr&& logger); protected: file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override { auto found = get_resource_runtime(item->pathRelativeToArchive.string()); return { const_cast(found.first), found.second, nullptr }; - } - - inline static const nbl::core::vector resources - { -@_RESOURCES_INIT_LIST_@ - }; + } }; } diff --git a/src/nbl/builtin/utils.cmake b/src/nbl/builtin/utils.cmake index 4709feab14..260cbb9bcb 100644 --- a/src/nbl/builtin/utils.cmake +++ b/src/nbl/builtin/utils.cmake @@ -49,12 +49,15 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH if("${ARGV7}" STREQUAL "SHARED") set(_LIB_TYPE_ SHARED) set(_SHARED_ True) + set(NBL_BR_API "NBL_BR_API") else() set(_LIB_TYPE_ STATIC) set(_SHARED_ False) + unset(NBL_BR_API) endif() set(NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in") + set(NBL_TEMPLATE_RESOURCES_ARCHIVE_SOURCE "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.cpp.in") set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py") set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py") set(NBL_BS_HEADER_FILENAME "builtinResources.h") @@ -112,6 +115,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH endforeach() configure_file("${NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h") + configure_file("${NBL_TEMPLATE_RESOURCES_ARCHIVE_SOURCE}" "${_OUTPUT_SOURCE_DIRECTORY_}/CArchive.cpp") list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}") list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}") @@ -130,12 +134,14 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}" COMMENT "Generating built-in resources" DEPENDS ${NBL_DEPENDENCY_FILES} - VERBATIM + VERBATIM ) add_library(${_TARGET_NAME_} ${_LIB_TYPE_} "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" + "${_OUTPUT_SOURCE_DIRECTORY_}/CArchive.cpp" + "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h" ) if(_LIB_TYPE_ STREQUAL SHARED) @@ -144,8 +150,14 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH ) endif() + get_target_property(_NABLA_INCLUDE_DIRECTORIES_ Nabla INCLUDE_DIRECTORIES) + + if(NOT DEFINED _NABLA_INCLUDE_DIRECTORIES_) # TODO, validate by populating generator expressions if any and checking whether a path to the BuildConfigOptions.h exists per config + message(ERROR "_NABLA_INCLUDE_DIRECTORIES_ has been not found. You are required to define _NABLA_INCLUDE_DIRECTORIES_ containing at least include search directory path to BuildConfigOptions.h") + endif() + target_include_directories(${_TARGET_NAME_} PUBLIC - "${NBL_ROOT_PATH}/include" + "${_NABLA_INCLUDE_DIRECTORIES_}" "${_OUTPUT_HEADER_DIRECTORY_}" ) set_target_properties(${_TARGET_NAME_} PROPERTIES CXX_STANDARD 20) From 7f665bf4092540dfbecb4f3091f20c178b9c77d0 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Fri, 26 May 2023 18:59:14 +0200 Subject: [PATCH 42/46] Changed back to core::vector, fixes to generated CArchives --- include/nbl/system/CFileArchive.h | 4 ++-- include/nbl/system/IFileArchive.h | 2 +- src/nbl/builtin/template/CArchive.cpp.in | 4 ++-- src/nbl/builtin/template/CArchive.h.in | 2 +- src/nbl/system/CAPKResourcesArchive.cpp | 4 ++-- src/nbl/system/CArchiveLoaderTar.cpp | 10 +++++----- src/nbl/system/CArchiveLoaderTar.h | 4 ++-- src/nbl/system/CArchiveLoaderZip.cpp | 12 ++++++------ src/nbl/system/CArchiveLoaderZip.h | 4 ++-- src/nbl/system/CMountDirectoryArchive.h | 8 ++++++-- 10 files changed, 29 insertions(+), 25 deletions(-) diff --git a/include/nbl/system/CFileArchive.h b/include/nbl/system/CFileArchive.h index 56dc8c1d10..dd3c28aa2d 100644 --- a/include/nbl/system/CFileArchive.h +++ b/include/nbl/system/CFileArchive.h @@ -105,10 +105,10 @@ class CFileArchive : public IFileArchive } protected: - CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, std::vector* _items) : + CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector* _items) : IFileArchive(std::move(_defaultAbsolutePath),std::move(logger)) { - auto itemsSharedPtr = std::make_shared>(std::move(_items)); + auto itemsSharedPtr = std::shared_ptr>(_items); std::sort(itemsSharedPtr->begin(), itemsSharedPtr->end()); m_items.store(itemsSharedPtr); diff --git a/include/nbl/system/IFileArchive.h b/include/nbl/system/IFileArchive.h index 540eaa6602..c913557c25 100644 --- a/include/nbl/system/IFileArchive.h +++ b/include/nbl/system/IFileArchive.h @@ -65,7 +65,7 @@ class NBL_API2 IFileArchive : public core::IReferenceCounted return pathRelativeToArchive < other.pathRelativeToArchive; } }; - using refctd_storage_t = std::shared_ptr>; + using refctd_storage_t = std::shared_ptr>; using range_t = core::SRange; inline operator range_t() const { return m_range; } diff --git a/src/nbl/builtin/template/CArchive.cpp.in b/src/nbl/builtin/template/CArchive.cpp.in index b7280a190d..72562063c0 100644 --- a/src/nbl/builtin/template/CArchive.cpp.in +++ b/src/nbl/builtin/template/CArchive.cpp.in @@ -3,12 +3,12 @@ using namespace @_NAMESPACE_@; -static const auto k_builtinArchiveFileList = std::make_shared>(nbl::core::vector{ +static const auto k_builtinArchiveFileList = std::make_shared>(nbl::core::vector{ @_RESOURCES_INIT_LIST_@ }); CArchive::CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), *const_cast*>(k_builtinArchiveFileList.get())) + : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), const_cast*>(k_builtinArchiveFileList.get())) { } diff --git a/src/nbl/builtin/template/CArchive.h.in b/src/nbl/builtin/template/CArchive.h.in index 0aa2909d65..8e15b843df 100644 --- a/src/nbl/builtin/template/CArchive.h.in +++ b/src/nbl/builtin/template/CArchive.h.in @@ -15,7 +15,7 @@ namespace @_NAMESPACE_@ CArchive(nbl::system::logger_opt_smart_ptr&& logger); protected: - file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override + file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SFileList::SEntry* item) override { auto found = get_resource_runtime(item->pathRelativeToArchive.string()); return { const_cast(found.first), found.second, nullptr }; diff --git a/src/nbl/system/CAPKResourcesArchive.cpp b/src/nbl/system/CAPKResourcesArchive.cpp index 680c019ecb..f6e41858d6 100644 --- a/src/nbl/system/CAPKResourcesArchive.cpp +++ b/src/nbl/system/CAPKResourcesArchive.cpp @@ -12,7 +12,7 @@ CAPKResourcesArchive::CAPKResourcesArchive(const path& _path, system::logger_opt { } -std::vector CAPKResourcesArchive::computeItems(const std::string& asset_path, ANativeActivity* activity, JNIEnv* jniEnv) +core::vector CAPKResourcesArchive::computeItems(const std::string& asset_path, ANativeActivity* activity, JNIEnv* jniEnv) { auto context_object = activity->clazz; auto getAssets_method = jniEnv->GetMethodID(jniEnv->GetObjectClass(context_object), "getAssets", "()Landroid/content/res/AssetManager;"); @@ -27,7 +27,7 @@ std::vector CAPKResourcesArchive::computeItems( auto length = jniEnv->GetArrayLength(files_object); - std::vector result; + core::vector result; for (decltype(length) i=0; iGetObjectArrayElement(files_object,i); diff --git a/src/nbl/system/CArchiveLoaderTar.cpp b/src/nbl/system/CArchiveLoaderTar.cpp index 0e600a29b0..adad8d949c 100644 --- a/src/nbl/system/CArchiveLoaderTar.cpp +++ b/src/nbl/system/CArchiveLoaderTar.cpp @@ -98,7 +98,7 @@ core::smart_refctd_ptr CArchiveLoaderTar::createArchive_impl(core: if (!file || !(file->getFlags()&IFileBase::ECF_MAPPABLE)) return nullptr; - std::vector items; + core::vector* items = new core::vector(); for (size_t pos=0ull; true; ) { STarHeader fHead; @@ -158,11 +158,11 @@ core::smart_refctd_ptr CArchiveLoaderTar::createArchive_impl(core: pos = offset + core::roundUp(size,BlockSize); // add file to list - auto& item = items.emplace_back(); + auto& item = items->emplace_back(); item.pathRelativeToArchive = fullPath; item.size = size; item.offset = offset; - item.ID = items.size()-1u; + item.ID = items->size()-1u; item.allocatorType = IFileArchive::EAT_NULL; break; } @@ -173,8 +173,8 @@ core::smart_refctd_ptr CArchiveLoaderTar::createArchive_impl(core: break; } } - if (items.empty()) + if (items->empty()) return nullptr; - return core::make_smart_refctd_ptr(std::move(file),core::smart_refctd_ptr(m_logger.get()),std::move(items)); + return core::make_smart_refctd_ptr(std::move(file),core::smart_refctd_ptr(m_logger.get()),items); } \ No newline at end of file diff --git a/src/nbl/system/CArchiveLoaderTar.h b/src/nbl/system/CArchiveLoaderTar.h index 3cbde55a9b..2b784d96f8 100644 --- a/src/nbl/system/CArchiveLoaderTar.h +++ b/src/nbl/system/CArchiveLoaderTar.h @@ -14,8 +14,8 @@ class CArchiveLoaderTar final : public IArchiveLoader class CArchive final : public CFileArchive { public: - CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, std::vector&& _items) : - CFileArchive(path(_file->getFileName()),std::move(logger),std::move(_items)), m_file(std::move(_file)) {} + CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, core::vector* _items) : + CFileArchive(path(_file->getFileName()),std::move(logger),_items), m_file(std::move(_file)) {} protected: file_buffer_t getFileBuffer(const IFileArchive::SFileList::SEntry* item) override; diff --git a/src/nbl/system/CArchiveLoaderZip.cpp b/src/nbl/system/CArchiveLoaderZip.cpp index 4c8ad60b5c..93754d3cc8 100644 --- a/src/nbl/system/CArchiveLoaderZip.cpp +++ b/src/nbl/system/CArchiveLoaderZip.cpp @@ -106,7 +106,7 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: return nullptr; } - std::vector items; + core::vector* items = new core::vector(); core::vector itemsMetadata; // load file entries { @@ -119,7 +119,7 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: if (_path.empty()) return; - auto& item = items.emplace_back(); + auto& item = items->emplace_back(); item.pathRelativeToArchive = _path; item.size = meta.DataDescriptor.UncompressedSize; item.offset = offset; @@ -316,7 +316,7 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: if (!success) return nullptr; } - items.reserve(dirEnd.TotalEntries); + items->reserve(dirEnd.TotalEntries); itemsMetadata.reserve(dirEnd.TotalEntries); offset = dirEnd.Offset; #if 0 @@ -333,11 +333,11 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: } } - assert(items.size()==itemsMetadata.size()); - if (items.empty()) + assert(items->size()==itemsMetadata.size()); + if (items->empty()) return nullptr; - return core::make_smart_refctd_ptr(std::move(file),core::smart_refctd_ptr(m_logger.get()),std::move(items),std::move(itemsMetadata)); + return core::make_smart_refctd_ptr(std::move(file),core::smart_refctd_ptr(m_logger.get()),items,std::move(itemsMetadata)); } #if 0 diff --git a/src/nbl/system/CArchiveLoaderZip.h b/src/nbl/system/CArchiveLoaderZip.h index 8de2ca6db1..446c9c6b99 100644 --- a/src/nbl/system/CArchiveLoaderZip.h +++ b/src/nbl/system/CArchiveLoaderZip.h @@ -39,9 +39,9 @@ class CArchiveLoaderZip final : public IArchiveLoader CArchive( core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, - std::vector&& _items, + core::vector* _items, core::vector&& _itemsMetadata - ) : CFileArchive(path(_file->getFileName()),std::move(logger),std::move(_items)), + ) : CFileArchive(path(_file->getFileName()),std::move(logger),_items), m_file(std::move(_file)), m_itemsMetadata(std::move(_itemsMetadata)), m_password("") {} diff --git a/src/nbl/system/CMountDirectoryArchive.h b/src/nbl/system/CMountDirectoryArchive.h index cb0f3cc44c..8450c8e60c 100644 --- a/src/nbl/system/CMountDirectoryArchive.h +++ b/src/nbl/system/CMountDirectoryArchive.h @@ -1,3 +1,6 @@ +#ifndef _NBL_SYSTEM_C_MOUNT_DIRECTORY_ARCHIVE_H_INCLUDED_ +#define _NBL_SYSTEM_C_MOUNT_DIRECTORY_ARCHIVE_H_INCLUDED_ + #include "nbl/system/IFileArchive.h" #include "nbl/system/IFile.h" @@ -42,7 +45,7 @@ class CMountDirectoryArchive : public IFileArchive void populateItemList(const path& p) const { auto items = m_system->listItemsInDirectory(m_defaultAbsolutePath/p); - auto new_entries = std::make_shared>(); + auto new_entries = std::make_shared>(); for (auto item : items) { if (item.has_extension()) @@ -56,4 +59,5 @@ class CMountDirectoryArchive : public IFileArchive } }; -} //namespace nbl::system \ No newline at end of file +} //namespace nbl::system +#endif \ No newline at end of file From 76d10b4aacc73056e804060edf9c76bff9e54892 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Fri, 26 May 2023 19:06:10 +0200 Subject: [PATCH 43/46] got rid of double shared ptr to a single object --- src/nbl/builtin/template/CArchive.cpp.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nbl/builtin/template/CArchive.cpp.in b/src/nbl/builtin/template/CArchive.cpp.in index 72562063c0..cda032ee1b 100644 --- a/src/nbl/builtin/template/CArchive.cpp.in +++ b/src/nbl/builtin/template/CArchive.cpp.in @@ -3,12 +3,12 @@ using namespace @_NAMESPACE_@; -static const auto k_builtinArchiveFileList = std::make_shared>(nbl::core::vector{ +static const auto k_builtinArchiveFileList = new nbl::core::vector{ @_RESOURCES_INIT_LIST_@ }); CArchive::CArchive(nbl::system::logger_opt_smart_ptr&& logger) - : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), const_cast*>(k_builtinArchiveFileList.get())) + : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), k_builtinArchiveFileList)) { } From c18fc863ba0b538374202399524ccaf279ba0961 Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Fri, 26 May 2023 19:08:38 +0200 Subject: [PATCH 44/46] removed extra parenthesis --- src/nbl/builtin/template/CArchive.cpp.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbl/builtin/template/CArchive.cpp.in b/src/nbl/builtin/template/CArchive.cpp.in index cda032ee1b..772ce260ab 100644 --- a/src/nbl/builtin/template/CArchive.cpp.in +++ b/src/nbl/builtin/template/CArchive.cpp.in @@ -5,7 +5,7 @@ using namespace @_NAMESPACE_@; static const auto k_builtinArchiveFileList = new nbl::core::vector{ @_RESOURCES_INIT_LIST_@ -}); +}; CArchive::CArchive(nbl::system::logger_opt_smart_ptr&& logger) : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), k_builtinArchiveFileList)) From e55b5a0b987fe3bfba5e581bf805bd6baa7f1a5c Mon Sep 17 00:00:00 2001 From: "Hazard (Cyprian Skrzypczak)" Date: Fri, 26 May 2023 19:09:57 +0200 Subject: [PATCH 45/46] removed extra parentheses --- src/nbl/builtin/template/CArchive.cpp.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbl/builtin/template/CArchive.cpp.in b/src/nbl/builtin/template/CArchive.cpp.in index 772ce260ab..18926302ff 100644 --- a/src/nbl/builtin/template/CArchive.cpp.in +++ b/src/nbl/builtin/template/CArchive.cpp.in @@ -8,7 +8,7 @@ static const auto k_builtinArchiveFileList = new nbl::core::vector Date: Fri, 26 May 2023 21:32:51 +0200 Subject: [PATCH 46/46] Moved CMountDirectoryArchive.h to include, changed type to sharedptr --- include/nbl/system/CFileArchive.h | 9 ++++----- {src => include}/nbl/system/CMountDirectoryArchive.h | 0 src/nbl/builtin/template/CArchive.cpp.in | 5 +++-- src/nbl/system/CArchiveLoaderTar.cpp | 3 ++- src/nbl/system/CArchiveLoaderTar.h | 2 +- src/nbl/system/CArchiveLoaderZip.cpp | 4 ++-- src/nbl/system/CArchiveLoaderZip.h | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) rename {src => include}/nbl/system/CMountDirectoryArchive.h (100%) diff --git a/include/nbl/system/CFileArchive.h b/include/nbl/system/CFileArchive.h index dd3c28aa2d..e344959a56 100644 --- a/include/nbl/system/CFileArchive.h +++ b/include/nbl/system/CFileArchive.h @@ -105,14 +105,13 @@ class CFileArchive : public IFileArchive } protected: - CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, core::vector* _items) : + CFileArchive(path&& _defaultAbsolutePath, system::logger_opt_smart_ptr&& logger, std::shared_ptr> _items) : IFileArchive(std::move(_defaultAbsolutePath),std::move(logger)) { - auto itemsSharedPtr = std::shared_ptr>(_items); - std::sort(itemsSharedPtr->begin(), itemsSharedPtr->end()); - m_items.store(itemsSharedPtr); + std::sort(_items->begin(), _items->end()); + m_items.store(_items); - const auto fileCount = itemsSharedPtr->size(); + const auto fileCount = _items->size(); m_filesBuffer = (std::byte*)_NBL_ALIGNED_MALLOC(fileCount*SIZEOF_INNER_ARCHIVE_FILE, ALIGNOF_INNER_ARCHIVE_FILE); m_fileFlags = (std::atomic_flag*)_NBL_ALIGNED_MALLOC(fileCount*sizeof(std::atomic_flag), alignof(std::atomic_flag)); for (size_t i=0u; i{ +static const std::shared_ptr> k_builtinArchiveFileList = std::make_shared>( + nbl::core::vector{ @_RESOURCES_INIT_LIST_@ -}; +}); CArchive::CArchive(nbl::system::logger_opt_smart_ptr&& logger) : nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), k_builtinArchiveFileList) diff --git a/src/nbl/system/CArchiveLoaderTar.cpp b/src/nbl/system/CArchiveLoaderTar.cpp index adad8d949c..aa5abe4b58 100644 --- a/src/nbl/system/CArchiveLoaderTar.cpp +++ b/src/nbl/system/CArchiveLoaderTar.cpp @@ -98,7 +98,8 @@ core::smart_refctd_ptr CArchiveLoaderTar::createArchive_impl(core: if (!file || !(file->getFlags()&IFileBase::ECF_MAPPABLE)) return nullptr; - core::vector* items = new core::vector(); + std::shared_ptr> items = std::make_shared>(); + for (size_t pos=0ull; true; ) { STarHeader fHead; diff --git a/src/nbl/system/CArchiveLoaderTar.h b/src/nbl/system/CArchiveLoaderTar.h index 2b784d96f8..89241af7b9 100644 --- a/src/nbl/system/CArchiveLoaderTar.h +++ b/src/nbl/system/CArchiveLoaderTar.h @@ -14,7 +14,7 @@ class CArchiveLoaderTar final : public IArchiveLoader class CArchive final : public CFileArchive { public: - CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, core::vector* _items) : + CArchive(core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, std::shared_ptr> _items) : CFileArchive(path(_file->getFileName()),std::move(logger),_items), m_file(std::move(_file)) {} protected: diff --git a/src/nbl/system/CArchiveLoaderZip.cpp b/src/nbl/system/CArchiveLoaderZip.cpp index 93754d3cc8..bd6c5ad557 100644 --- a/src/nbl/system/CArchiveLoaderZip.cpp +++ b/src/nbl/system/CArchiveLoaderZip.cpp @@ -106,7 +106,7 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: return nullptr; } - core::vector* items = new core::vector(); + std::shared_ptr> items = std::make_shared>(); core::vector itemsMetadata; // load file entries { @@ -337,7 +337,7 @@ core::smart_refctd_ptr CArchiveLoaderZip::createArchive_impl(core: if (items->empty()) return nullptr; - return core::make_smart_refctd_ptr(std::move(file),core::smart_refctd_ptr(m_logger.get()),items,std::move(itemsMetadata)); + return core::make_smart_refctd_ptr(std::move(file),core::smart_refctd_ptr(m_logger.get()), items, std::move(itemsMetadata)); } #if 0 diff --git a/src/nbl/system/CArchiveLoaderZip.h b/src/nbl/system/CArchiveLoaderZip.h index 446c9c6b99..b5d2666516 100644 --- a/src/nbl/system/CArchiveLoaderZip.h +++ b/src/nbl/system/CArchiveLoaderZip.h @@ -39,7 +39,7 @@ class CArchiveLoaderZip final : public IArchiveLoader CArchive( core::smart_refctd_ptr&& _file, system::logger_opt_smart_ptr&& logger, - core::vector* _items, + std::shared_ptr> _items, core::vector&& _itemsMetadata ) : CFileArchive(path(_file->getFileName()),std::move(logger),_items), m_file(std::move(_file)), m_itemsMetadata(std::move(_itemsMetadata)), m_password("")