Skip to content

Commit 0ccb0c1

Browse files
committed
move device header targets into Nabla's sources (its was never a tool!), refactor its builtin resources creation, add NBL_HOOK_INTERNAL_BUILTIN_RESOURCES function & use it with internal BRs, move the device header target's inputs to src/video/device_capabilities
1 parent afdddf3 commit 0ccb0c1

18 files changed

+7378
-5235
lines changed

src/nbl/CMakeLists.txt

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,14 @@ set(_NBL_EG_PRFNT_LEVEL 0 CACHE STRING "EasterEgg Profanity Level")
107107
option(NBL_EXPLICIT_MODULE_LOAD_LOG "Enable Runtime logs for external dynamic module loading" OFF)
108108
option(NBL_CPACK_NO_BUILD_DIRECTORY_MODULES "Disable searching for modules in developer's build directory in install mode" OFF)
109109

110+
add_subdirectory(device EXCLUDE_FROM_ALL)
111+
110112
if(NBL_BUILD_ANDROID)
111113
set(_NBL_COMPILE_WITH_BAW_LOADER_ OFF CACHE BOOL "Off for Android purposes at the moment" FORCE) # TODO - remove when BAW-v4 is done
112114
set(_NBL_COMPILE_WITH_BAW_WRITER_ OFF CACHE BOOL "Off for Android purposes at the moment" FORCE) # TODO - remove when BAW-v4 is done
113115
set(NBL_BUILD_MITSUBA_LOADER OFF CACHE BOOL "Android doesn't need this loader, if you want it, pay us.'" FORCE)
114116
endif()
115117

116-
# must do this because of https://github.com/Devsh-Graphics-Programming/Nabla/commit/4123d103f2a0964686cb94bb5eb632666b6abdbd#diff-62f5e9686ac3eb0f38e0efb8720c787bbccb383e66c0fa788f804a4a32e190b4R62, bad design but will work
117-
# TODO: once the TODO from above is done update remove the bellow and put to devicegen CMake
118-
set(DEVICEGEN_BUILTIN_RESOURCES_DIRECTORY_PATH "${NBL_ROOT_PATH_BINARY}/tools/deviceGen/include/nbl/video")
119-
120118
nbl_generate_conf_files()
121119

122120
nbl_get_conf_dir(NABLA_CONF_DIR_DEBUG Debug)
@@ -640,34 +638,41 @@ else()
640638
target_link_libraries(Nabla PRIVATE boost_wave)
641639
endif()
642640

641+
add_dependencies(Nabla DeviceHeaders)
642+
target_include_directories(Nabla PUBLIC "${NBL_DEVICE_GEN_INCLUDE_DIR}")
643+
643644
if(NBL_EMBED_BUILTIN_RESOURCES)
644-
get_target_property(_NABLA_INCLUDE_DIRECTORIES_ Nabla INCLUDE_DIRECTORIES)
645-
get_target_property(_SPIRV_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_ spirvBuiltinResourceData BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY)
646-
get_target_property(_BOOST_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_ boostBuiltinResourceData BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY)
645+
add_subdirectory(builtin EXCLUDE_FROM_ALL)
647646

648-
target_include_directories(spirvBuiltinResourceData PUBLIC "${_NABLA_INCLUDE_DIRECTORIES_}") # the reason behind the patch is because this internal BR target gets created before Nabla
649-
target_include_directories(boostBuiltinResourceData PUBLIC "${_NABLA_INCLUDE_DIRECTORIES_}") # the reason behind the patch is because this internal BR target gets created before Nabla
647+
function(NBL_HOOK_INTERNAL_BUILTIN_RESOURCES NBL_TARGETS)
648+
get_target_property(_NABLA_INCLUDE_DIRECTORIES_ Nabla INCLUDE_DIRECTORIES)
650649

651-
target_include_directories(Nabla PUBLIC
652-
"${_SPIRV_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}"
653-
"${_BOOST_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}"
654-
)
650+
foreach(NBL_TARGET IN LISTS NBL_TARGETS)
651+
get_target_property(_INTERNAL_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_ ${NBL_TARGET} BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY)
652+
target_include_directories(${NBL_TARGET} PUBLIC "${_NABLA_INCLUDE_DIRECTORIES_}")
653+
target_include_directories(Nabla PUBLIC "${_INTERNAL_BR_OUTPUT_INCLUDE_SEARCH_DIRECTORY_}")
654+
endforeach()
655655

656-
add_subdirectory(builtin)
657-
add_dependencies(Nabla nblBuiltinResourceData spirvBuiltinResourceData boostBuiltinResourceData)
656+
add_dependencies(Nabla ${NBL_TARGETS})
657+
658+
if(NBL_STATIC_BUILD)
659+
set(_NBL_LINK_QUALIFIER_ INTERFACE)
660+
else()
661+
set(_NBL_LINK_QUALIFIER_ PRIVATE)
662+
endif()
658663

659-
if(NBL_STATIC_BUILD)
660-
set(_NBL_LINK_QUALIFIER_ INTERFACE)
661-
else()
662-
set(_NBL_LINK_QUALIFIER_ PRIVATE)
663-
endif()
664+
target_link_libraries(Nabla ${_NBL_LINK_QUALIFIER_} ${NBL_TARGETS})
665+
endfunction()
664666

665-
target_link_libraries(Nabla ${_NBL_LINK_QUALIFIER_}
666-
nblBuiltinResourceData
667-
spirvBuiltinResourceData
668-
boostBuiltinResourceData
667+
set(NBL_INTERNAL_BUILTIN_TARGETS
668+
nblBuiltinResourceData
669+
spirvBuiltinResourceData
670+
boostBuiltinResourceData
671+
deviceGenBuiltinResourceData
669672
)
670673

674+
NBL_HOOK_INTERNAL_BUILTIN_RESOURCES("${NBL_INTERNAL_BUILTIN_TARGETS}")
675+
671676
# always install Nabla builtins (some may be included in cpp regardless if embedded or not)
672677
get_target_property(_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_ nblBuiltinResourceData BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH)
673678
get_target_property(NABLA_RESOURCES_TO_EMBED_PUBLIC nblBuiltinResourceData BUILTIN_RESOURCES)

src/nbl/device/CMakeLists.txt

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
get_filename_component(SRC_VIDEO_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../video/device_capabilities" ABSOLUTE)
2+
get_filename_component(NBL_DEVICE_GEN_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include" ABSOLUTE) # TODO: fix a bug in checking for GENERATED property which doesnt eveluate properly generator expressions so $<CONFIG> fails
3+
4+
set(NBL_DEVICE_GEN_INCLUDE_DIR "${NBL_DEVICE_GEN_INCLUDE_DIR}")
5+
set(DEVICEGEN_BUILTIN_RESOURCES_DIRECTORY_PATH "${NBL_DEVICE_GEN_INCLUDE_DIR}/nbl/video" CACHE INTERNAL "" FORCE)
6+
7+
macro(NBL_REGISTER_INPUT_DEVICE_FILE NBL_INPUT_PATH NBL_CMD_ARGUMENT)
8+
list(APPEND NBL_DEPENDS "${NBL_INPUT_PATH}") # update depends list
9+
list(APPEND NBL_INPUT_GEN_ARGUMENTS "${NBL_CMD_ARGUMENT}" "${NBL_INPUT_PATH}") # update input file gen arguments list for the python script
10+
endmacro()
11+
12+
set(OUTPUT_DL_TEMPLATE "${DEVICEGEN_BUILTIN_RESOURCES_DIRECTORY_PATH}/SPhysicalDeviceLimits_")
13+
set(OUTPUT_DF_TEMPLATE "${DEVICEGEN_BUILTIN_RESOURCES_DIRECTORY_PATH}/SPhysicalDeviceFeatures_")
14+
set(OUTPUT_DT_TEMPLATE "${DEVICEGEN_BUILTIN_RESOURCES_DIRECTORY_PATH}/device_capabilities_traits_")
15+
16+
macro(NBL_REGISTER_OUTPUT_DEVICE_FILE NBL_TEMPLATE_QUALIFIER NBL_HEADER_POSTFIX_WTIH_EXTENSION NBL_CMD_ARGUMENT)
17+
set(_NBL_OUTPUT_ "${OUTPUT_${NBL_TEMPLATE_QUALIFIER}_TEMPLATE}${NBL_HEADER_POSTFIX_WTIH_EXTENSION}")
18+
list(APPEND NBL_OUTPUT_HEADERS "${_NBL_OUTPUT_}") # update output headers list
19+
list(APPEND NBL_OUTPUT_GEN_ARGUMENTS "${NBL_CMD_ARGUMENT}" "${_NBL_OUTPUT_}") # update output file gen arguments list for the python script
20+
unset(_NBL_OUTPUT_)
21+
endmacro()
22+
23+
# prepare inputs
24+
NBL_REGISTER_INPUT_DEVICE_FILE("${SRC_VIDEO_PATH}/device_limits.json" --limits_json_path)
25+
NBL_REGISTER_INPUT_DEVICE_FILE("${SRC_VIDEO_PATH}/device_features.json" --features_json_path)
26+
27+
# prepare outputs
28+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DL members.h --limits_output_members_path)
29+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DL subset.h --limits_output_subset_path)
30+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DF members.h --features_output_members_path)
31+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DF union.h --features_output_union_path)
32+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DF intersect.h --features_output_intersect_path)
33+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DT members.hlsl --traits_output_members_path)
34+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DT testers.hlsl --traits_output_testers_path)
35+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DT defaults.hlsl --traits_output_defaults_path)
36+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DT floats.hlsl --traits_output_floats_path)
37+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DT enums.hlsl --traits_output_enums_path)
38+
NBL_REGISTER_OUTPUT_DEVICE_FILE(DT jit.h --jit_traits_output_path)
39+
40+
# python script paths
41+
set(NBL_GEN_PY "${CMAKE_CURRENT_SOURCE_DIR}/gen.py")
42+
set(NBL_DGEN_PY "${CMAKE_CURRENT_SOURCE_DIR}/DeviceGen.py")
43+
44+
list(APPEND NBL_DEPENDS
45+
"${NBL_GEN_PY}"
46+
"${NBL_DGEN_PY}"
47+
)
48+
49+
set(NBL_COMMAND
50+
"${_Python3_EXECUTABLE}"
51+
"${NBL_GEN_PY}"
52+
${NBL_INPUT_GEN_ARGUMENTS}
53+
${NBL_OUTPUT_GEN_ARGUMENTS}
54+
)
55+
56+
add_custom_command(OUTPUT ${NBL_OUTPUT_HEADERS}
57+
DEPENDS ${NBL_DEPENDS}
58+
COMMAND ${NBL_COMMAND}
59+
VERBATIM
60+
)
61+
62+
add_custom_target(DeviceHeaders DEPENDS ${NBL_OUTPUT_HEADERS})
63+
64+
LIST_BUILTIN_RESOURCE(NBL_DEVICE_GEN_RESOURCES_TO_EMBED "video/device_capabilities_traits_members.hlsl")
65+
LIST_BUILTIN_RESOURCE(NBL_DEVICE_GEN_RESOURCES_TO_EMBED "video/device_capabilities_traits_testers.hlsl")
66+
LIST_BUILTIN_RESOURCE(NBL_DEVICE_GEN_RESOURCES_TO_EMBED "video/device_capabilities_traits_defaults.hlsl")
67+
LIST_BUILTIN_RESOURCE(NBL_DEVICE_GEN_RESOURCES_TO_EMBED "video/device_capabilities_traits_floats.hlsl")
68+
LIST_BUILTIN_RESOURCE(NBL_DEVICE_GEN_RESOURCES_TO_EMBED "video/device_capabilities_traits_enums.hlsl")
69+
70+
get_filename_component(_DEVICE_GEN_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR}/builtin/include" ABSOLUTE)
71+
get_filename_component(_DEVICE_GEN_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR}/builtin/src" ABSOLUTE)
72+
73+
ADD_CUSTOM_BUILTIN_RESOURCES(deviceGenBuiltinResourceData NBL_DEVICE_GEN_RESOURCES_TO_EMBED "${NBL_DEVICE_GEN_INCLUDE_DIR}" "nbl" "nbl::devicegen::builtin" "${_DEVICE_GEN_BR_OUTPUT_DIRECTORY_HEADER_}" "${_DEVICE_GEN_BR_OUTPUT_DIRECTORY_SOURCE_}" "STATIC" "INTERNAL")
74+
add_dependencies(deviceGenBuiltinResourceData DeviceHeaders)
75+
76+
set(NBL_DEVICE_GEN_INCLUDE_DIR
77+
"${NBL_DEVICE_GEN_INCLUDE_DIR}"
78+
PARENT_SCOPE)

0 commit comments

Comments
 (0)