Skip to content
Open
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
2c3d2af
Update MeshLoaders example and test list for OBJ PLY STL
AnastaZIuk Feb 5, 2026
7130e19
Always draw AABB in MeshLoaders
AnastaZIuk Feb 5, 2026
97b15e2
Fix MeshLoaders camera matrices
AnastaZIuk Feb 5, 2026
99454ac
Stabilize meshloader CI references and validation
AnastaZIuk Feb 7, 2026
3335a72
Improve mesh loaders benchmark harness timings
AnastaZIuk Feb 8, 2026
0c843be
Add runtime tuning flags and unified path based load timing
AnastaZIuk Feb 11, 2026
feb4ecf
Refactor MeshLoaders app split and docs polish
AnastaZIuk Feb 11, 2026
c9a8735
Refactor meshloaders app flow and benchmark CTest wiring
AnastaZIuk Feb 12, 2026
07224bd
Improve meshloaders row view startup and controls
AnastaZIuk Feb 13, 2026
55d1112
Add optional hash parity CTests for meshloaders
AnastaZIuk Feb 13, 2026
b39dea9
Scope transfer-src swapchain usage to meshloaders
AnastaZIuk Feb 13, 2026
294a21a
Keep transfer-src swapchain setup local to meshloaders
AnastaZIuk Feb 14, 2026
d8227db
Address PR 250 review comments
AnastaZIuk Feb 19, 2026
2c1d70e
Merge branch 'master' of github.com:Devsh-Graphics-Programming/Nabla-…
AnastaZIuk Feb 19, 2026
48945f7
Refine mesh loader image compare code units
AnastaZIuk Mar 5, 2026
3b3a359
Merge branch 'master' of github.com:Devsh-Graphics-Programming/Nabla-…
AnastaZIuk Mar 5, 2026
391e4eb
Simplify MeshLoaders runtime tuning and hash checks
AnastaZIuk Mar 5, 2026
4eb1314
Refactor MeshLoaders app runtime state
AnastaZIuk Mar 6, 2026
906372e
Update mesh loaders example
AnastaZIuk Mar 6, 2026
dd7fa53
Refine mesh loaders example flow
AnastaZIuk Mar 8, 2026
6ceae5f
Refine mesh loaders example flow
AnastaZIuk Mar 9, 2026
f060676
Merge remote-tracking branch 'origin/master' into loaders
AnastaZIuk Mar 9, 2026
540fc1a
Handle scene assets in mesh loaders example
AnastaZIuk Mar 10, 2026
653bbdc
Refine mesh loaders scene example
AnastaZIuk Mar 10, 2026
328c4fb
Frame mesh loaders row view scenes
AnastaZIuk Mar 10, 2026
db245df
Pin mesh loaders benchmark dataset
AnastaZIuk Mar 10, 2026
9fe02df
Trim mesh loaders example glue
AnastaZIuk Mar 10, 2026
9d1103f
Pipeline mesh loaders screenshot capture
AnastaZIuk Mar 10, 2026
b38a4f7
Reduce mesh loaders test wall time
AnastaZIuk Mar 10, 2026
ec33704
Accelerate mesh loaders roundtrip flow
AnastaZIuk Mar 11, 2026
d18b6d9
Add mesh loaders perf artifacts
AnastaZIuk Mar 11, 2026
530edd6
Use git provenance in mesh perf
AnastaZIuk Mar 11, 2026
2aa2d14
Enable examples git tracking
AnastaZIuk Mar 11, 2026
348eef7
Ignore examples git check target
AnastaZIuk Mar 11, 2026
87b1305
Share examples git metadata target
AnastaZIuk Mar 11, 2026
a41b88c
Add mesh loaders perf reference update flow
AnastaZIuk Mar 11, 2026
187aebe
Stabilize mesh loaders perf metrics
AnastaZIuk Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 129 additions & 8 deletions 12_MeshLoaders/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,26 +1,147 @@
set(NBL_INCLUDE_SERACH_DIRECTORIES
set(SRCs
main.cpp
MeshLoadersApp.hpp
MeshLoadersAppLifecycle.cpp
MeshLoadersAppLoad.cpp
MeshLoadersAppRuntime.cpp
inputs.json
README.md
)

option(NBL_MESHLOADERS_ENABLE_BENCHMARK_DATASETS "Enable benchmark dataset clone + benchmark payload setup for 12_MeshLoaders." OFF)
option(NBL_MESHLOADERS_DEFAULT_START_WITH_BENCHMARK_TESTLIST "When benchmark datasets are enabled, use benchmark payload as default startup test list in batch mode." OFF)
option(NBL_MESHLOADERS_ENABLE_HASH_CTESTS "Enable hash parity CTests (legacy_seq/new_seq/new_parallel) for 12_MeshLoaders." OFF)
set(NBL_MESHLOADERS_BENCHMARK_DATASET_DIR "${CMAKE_BINARY_DIR}/meshloaders_benchmark_datasets" CACHE PATH "Destination directory for cloned 12_MeshLoaders benchmark datasets.")
set(NBL_MESHLOADERS_BENCHMARK_DATASET_REPO "https://github.com/Devsh-Graphics-Programming/Nabla-Benchmark-Datasets.git" CACHE STRING "Git repository URL for 12_MeshLoaders benchmark datasets.")
set(NBL_MESHLOADERS_BENCHMARK_PAYLOAD_RELATIVE_PATH "inputs_benchmark.json" CACHE STRING "Relative path to committed benchmark payload JSON inside dataset repo.")

set(NBL_INCLUDE_SEARCH_DIRECTORIES
"${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_SOURCE_DIR}/3rdparty"
)
set(NBL_LIBRARIES
nlohmann_json::nlohmann_json
)
set(NBL_LIBRARIES)

if (NBL_BUILD_MITSUBA_LOADER)
list(APPEND NBL_INCLUDE_SERACH_DIRECTORIES
list(APPEND NBL_INCLUDE_SEARCH_DIRECTORIES
"${NBL_EXT_MITSUBA_LOADER_INCLUDE_DIRS}"
)
list(APPEND NBL_LIBRARIES
"${NBL_EXT_MITSUBA_LOADER_LIB}"
)
endif()

# TODO; Arek I removed `NBL_EXECUTABLE_PROJECT_CREATION_PCH_TARGET` from the last parameter here, doesn't this macro have 4 arguments anyway !?
nbl_create_executable_project("" "" "${NBL_INCLUDE_SERACH_DIRECTORIES}" "${NBL_LIBRARIES}")
# TODO: Arek temporarily disabled cause I haven't figured out how to make this target yet
# LINK_BUILTIN_RESOURCES_TO_TARGET(${EXECUTABLE_NAME} nblExamplesGeometrySpirvBRD)
nbl_create_executable_project("${SRCs}" "" "${NBL_INCLUDE_SEARCH_DIRECTORIES}" "${NBL_LIBRARIES}")

if (NBL_BUILD_DEBUG_DRAW)
target_link_libraries(${EXECUTABLE_NAME} PRIVATE Nabla::ext::DebugDraw)
endif()


add_dependencies(${EXECUTABLE_NAME} argparse)
target_include_directories(${EXECUTABLE_NAME} PUBLIC $<TARGET_PROPERTY:argparse,INTERFACE_INCLUDE_DIRECTORIES>)
target_include_directories(${EXECUTABLE_NAME} PUBLIC $<TARGET_PROPERTY:argparse,INTERFACE_INCLUDE_DIRECTORIES>)

add_dependencies(${EXECUTABLE_NAME} nlohmann_json::nlohmann_json)
target_include_directories(${EXECUTABLE_NAME} PUBLIC $<TARGET_PROPERTY:nlohmann_json::nlohmann_json,INCLUDE_DIRECTORIES>)

if (NBL_MESHLOADERS_ENABLE_BENCHMARK_DATASETS)
set(NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON "${NBL_MESHLOADERS_BENCHMARK_DATASET_DIR}/${NBL_MESHLOADERS_BENCHMARK_PAYLOAD_RELATIVE_PATH}" CACHE FILEPATH "Committed benchmark testlist for 12_MeshLoaders." FORCE)
if (NOT EXISTS "${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}")
if (EXISTS "${NBL_MESHLOADERS_BENCHMARK_DATASET_DIR}" AND NOT EXISTS "${NBL_MESHLOADERS_BENCHMARK_DATASET_DIR}/.git")
message(STATUS "[meshloaders-bench] Dataset dir exists without .git, skipping fetch and using local files: ${NBL_MESHLOADERS_BENCHMARK_DATASET_DIR}")
else()
include(FetchContent)
FetchContent_Declare(nbl_meshloaders_benchmark_dataset
GIT_REPOSITORY "${NBL_MESHLOADERS_BENCHMARK_DATASET_REPO}"
GIT_TAG "master"
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
SOURCE_DIR "${NBL_MESHLOADERS_BENCHMARK_DATASET_DIR}"
BINARY_DIR "${CMAKE_BINARY_DIR}/CMakeFiles/nbl_meshloaders_benchmark_dataset-build"
)
FetchContent_GetProperties(nbl_meshloaders_benchmark_dataset)
if (NOT nbl_meshloaders_benchmark_dataset_POPULATED)
FetchContent_Populate(nbl_meshloaders_benchmark_dataset)
endif ()
Comment on lines +58 to +77
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why yet another subrepo and not our media submodule?

endif ()
endif ()
if (NOT EXISTS "${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}")
message(FATAL_ERROR "Benchmark payload JSON not found: ${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}. Commit a full payload file into dataset repo and point NBL_MESHLOADERS_BENCHMARK_PAYLOAD_RELATIVE_PATH to it.")
endif ()
file(READ "${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}" _meshloaders_payload_probe LIMIT 256)
string(FIND "${_meshloaders_payload_probe}" "version https://git-lfs.github.com/spec/v1" _meshloaders_payload_lfs_ix)
if (NOT _meshloaders_payload_lfs_ix EQUAL -1)
message(FATAL_ERROR "Benchmark payload JSON must be a normal Git file, not an LFS pointer: ${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}")
endif ()
message(STATUS "[meshloaders-bench] Benchmark inputs payload: ${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}")
if (NBL_MESHLOADERS_DEFAULT_START_WITH_BENCHMARK_TESTLIST)
file(TO_CMAKE_PATH "${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}" _NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON_CMAKE)
target_compile_definitions(${EXECUTABLE_NAME} PRIVATE NBL_MESHLOADERS_DEFAULT_BENCHMARK_TESTLIST_PATH="${_NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON_CMAKE}")
message(STATUS "[meshloaders-bench] Default batch startup test list: benchmark payload")
else()
message(STATUS "[meshloaders-bench] Default batch startup test list: local inputs.json")
endif()
endif()

enable_testing()

add_test(NAME NBL_MESHLOADERS_CI
COMMAND "$<TARGET_FILE:${EXECUTABLE_NAME}>" --ci
WORKING_DIRECTORY "$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>"
COMMAND_EXPAND_LISTS
)

if (NBL_MESHLOADERS_ENABLE_HASH_CTESTS)
set(_NBL_MESHLOADERS_HASH_TEST_COMMON_ARGS
--hash-test
)

if (NBL_MESHLOADERS_ENABLE_BENCHMARK_DATASETS)
list(APPEND _NBL_MESHLOADERS_HASH_TEST_COMMON_ARGS --testlist "${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}")
endif()

add_test(NAME NBL_MESHLOADERS_HASH_TEST_HEURISTIC
COMMAND "$<TARGET_FILE:${EXECUTABLE_NAME}>" ${_NBL_MESHLOADERS_HASH_TEST_COMMON_ARGS} --runtime-tuning heuristic
WORKING_DIRECTORY "$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>"
COMMAND_EXPAND_LISTS
)
add_test(NAME NBL_MESHLOADERS_HASH_TEST_HYBRID
COMMAND "$<TARGET_FILE:${EXECUTABLE_NAME}>" ${_NBL_MESHLOADERS_HASH_TEST_COMMON_ARGS} --runtime-tuning hybrid
WORKING_DIRECTORY "$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>"
COMMAND_EXPAND_LISTS
)
set_tests_properties(
NBL_MESHLOADERS_HASH_TEST_HEURISTIC
NBL_MESHLOADERS_HASH_TEST_HYBRID
PROPERTIES
LABELS "meshloaders;hash;ci"
)
endif()

if (NBL_MESHLOADERS_ENABLE_BENCHMARK_DATASETS)
set(_NBL_MESHLOADERS_BENCHMARK_CI_COMMON_ARGS
--ci
--update-references
--testlist "${NBL_MESHLOADERS_BENCHMARK_INPUTS_JSON}"
--loader-content-hashes
)

add_test(NAME NBL_MESHLOADERS_CI_BENCHMARK_HEURISTIC
COMMAND "$<TARGET_FILE:${EXECUTABLE_NAME}>" ${_NBL_MESHLOADERS_BENCHMARK_CI_COMMON_ARGS} --runtime-tuning heuristic
WORKING_DIRECTORY "$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>"
COMMAND_EXPAND_LISTS
)
add_test(NAME NBL_MESHLOADERS_CI_BENCHMARK_HYBRID
COMMAND "$<TARGET_FILE:${EXECUTABLE_NAME}>" ${_NBL_MESHLOADERS_BENCHMARK_CI_COMMON_ARGS} --runtime-tuning hybrid
WORKING_DIRECTORY "$<TARGET_FILE_DIR:${EXECUTABLE_NAME}>"
COMMAND_EXPAND_LISTS
)
set_tests_properties(
NBL_MESHLOADERS_CI_BENCHMARK_HEURISTIC
NBL_MESHLOADERS_CI_BENCHMARK_HYBRID
PROPERTIES
TIMEOUT 21600
LABELS "meshloaders;benchmark;ci"
)
endif()
Loading