Skip to content

Commit 2eb0ffd

Browse files
committed
Merge master
2 parents 0e6e31a + 8e95b81 commit 2eb0ffd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+3634
-1596
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,6 @@
114114
[submodule "3rdparty/libdeflate"]
115115
path = 3rdparty/libdeflate
116116
url = git@github.com:Devsh-Graphics-Programming/libdeflate.git
117+
[submodule "docker/compiler-explorer"]
118+
path = docker/compiler-explorer
119+
url = git@github.com:Devsh-Graphics-Programming/Compiler-Explorer-Docker.git

3rdparty/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ set(_OLD_SKIP_INSTALL_ALL ${SKIP_INSTALL_ALL})
9090
set(BUILD_SHARED_LIBS OFF)
9191
set(SKIP_INSTALL_ALL ON)
9292

93-
add_subdirectory(zlib zlib EXCLUDE_FROM_ALL)
9493
file(LOCK "${CMAKE_CURRENT_SOURCE_DIR}/zlib" DIRECTORY GUARD PROCESS RESULT_VARIABLE NBL_LOCK TIMEOUT 60)
94+
add_subdirectory(zlib zlib EXCLUDE_FROM_ALL)
9595
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/zconf.h.included")
9696
execute_process(COMMAND "${CMAKE_COMMAND}" -E rename zconf.h.included zconf.h
9797
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/zlib"
@@ -291,6 +291,9 @@ NBL_ADD_GIT_TRACKING_META_LIBRARY(nabla "${NBL_ROOT_PATH}")
291291
NBL_ADD_GIT_TRACKING_META_LIBRARY(dxc "${CMAKE_CURRENT_SOURCE_DIR}/dxc/dxc")
292292
NBL_GENERATE_GIT_TRACKING_META()
293293

294+
# NGFX
295+
include(ngfx/ngfx.cmake)
296+
294297
if(NBL_BUILD_IMGUI)
295298
set(NBL_IMGUI_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/imgui")
296299
set(NBL_IMGUI_TEST_ENGINE_PROJECT_ROOT "${THIRD_PARTY_SOURCE_DIR}/imgui_test_engine")

3rdparty/ngfx/ngfx.cmake

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
option(NBL_BUILD_WITH_NGFX "Enable NGFX build" OFF)
2+
3+
# NOTE: on windows default installation path is:
4+
# "C:/Program Files/NVIDIA Corporation/Nsight Graphics <version>/SDKs/NsightGraphicsSDK" <- define as "NGFX_SDK" environment variable
5+
# then you can pick SDK version with "NGFX_SDK_VERSION" cache variable (CMake GUI list supported)
6+
7+
if(NBL_BUILD_WITH_NGFX)
8+
if(NOT DEFINED NGFX_SDK)
9+
if(NOT DEFINED ENV{NGFX_SDK})
10+
message(FATAL_ERROR "\"NGFX_SDK\" environment variable must be defined to build with NBL_BUILD_WITH_NGFX enabled!")
11+
endif()
12+
set(NGFX_SDK "$ENV{NGFX_SDK}")
13+
endif()
14+
cmake_path(NORMAL_PATH NGFX_SDK OUTPUT_VARIABLE NGFX_SDK)
15+
16+
if(NOT EXISTS "${NGFX_SDK}")
17+
message(FATAL_ERROR "Found \"NGFX_SDK\" environment variable but it is invalid, env:NGFX_SDK=\"${NGFX_SDK}\" doesn't exist!")
18+
endif()
19+
20+
file(GLOB ENTRIES "${NGFX_SDK}/*")
21+
22+
set(NGFX_VERSIONS "")
23+
foreach(ENTRY ${ENTRIES})
24+
if(IS_DIRECTORY ${ENTRY})
25+
list(APPEND NGFX_VERSIONS ${ENTRY})
26+
endif()
27+
endforeach()
28+
29+
if(NOT NGFX_VERSIONS)
30+
message(FATAL_ERROR "Could not find any NGFX SDK Version!")
31+
endif()
32+
33+
list(TRANSFORM NGFX_VERSIONS REPLACE "${NGFX_SDK}/" "")
34+
list(SORT NGFX_VERSIONS)
35+
list(GET NGFX_VERSIONS -1 LATEST_NGFX_VERSION)
36+
37+
# on the cache variable init pick the latest version, then let user pick from list
38+
set(NGFX_SDK_VERSION "${LATEST_NGFX_VERSION}" CACHE STRING "NGFX SDK Version")
39+
set_property(CACHE NGFX_SDK_VERSION PROPERTY STRINGS ${NGFX_VERSIONS})
40+
41+
set(NGFX_SDK_VERSION "$CACHE{NGFX_SDK_VERSION}")
42+
set(NGFX_SDK_BASE "${NGFX_SDK}/${NGFX_SDK_VERSION}")
43+
44+
# TODO: wanna support more *host* platforms? (*)
45+
# NOTE: also I'm hardcoding windows x64 library requests till I know the answer for (*)
46+
find_file(NBL_NGFX_INJECTION_HEADER NGFX_Injection.h PATHS ${NGFX_SDK_BASE}/include)
47+
find_file(NBL_NGFX_INJECTION_DLL NGFX_Injection.dll PATHS ${NGFX_SDK_BASE}/lib/x64)
48+
find_file(NBL_NGFX_INJECTION_IMPORT_LIBRARY NGFX_Injection.lib PATHS ${NGFX_SDK_BASE}/lib/x64)
49+
50+
if(NBL_NGFX_INJECTION_HEADER AND NBL_NGFX_INJECTION_DLL AND NBL_NGFX_INJECTION_IMPORT_LIBRARY)
51+
message(STATUS "Enabled build with NVIDIA Nsight Graphics SDK ${NGFX_SDK_VERSION}\nlocated in: \"${NGFX_SDK_BASE}\"")
52+
else()
53+
message(STATUS "Could not enable build with NVIDIA Nsight Graphics SDK ${NGFX_SDK_VERSION} - invalid components!")
54+
message(STATUS "Located in: \"${NGFX_SDK_BASE}\"")
55+
message(STATUS "NBL_NGFX_INJECTION_HEADER=\"${NBL_NGFX_INJECTION_HEADER}\"")
56+
message(STATUS "NBL_NGFX_INJECTION_DLL=\"${NBL_NGFX_INJECTION_DLL}\"")
57+
message(STATUS "NBL_NGFX_INJECTION_IMPORT_LIBRARY=\"${NBL_NGFX_INJECTION_IMPORT_LIBRARY}\"")
58+
message(FATAL_ERROR "You installation may be corupted, please fix it and re-run CMake or disable NBL_BUILD_WITH_NGFX!")
59+
endif()
60+
61+
add_library(ngfx INTERFACE)
62+
target_sources(ngfx INTERFACE "${NBL_NGFX_INJECTION_HEADER}")
63+
target_include_directories(ngfx INTERFACE "${NGFX_SDK_BASE}/include")
64+
target_link_libraries(ngfx INTERFACE "${NBL_NGFX_INJECTION_IMPORT_LIBRARY}")
65+
target_link_options(ngfx INTERFACE "/DELAYLOAD:NGFX_Injection.dll")
66+
target_compile_definitions(ngfx INTERFACE NGFX_INJECTION_DLL_DIR="${NGFX_SDK_BASE}/lib/x64")
67+
target_compile_definitions(ngfx INTERFACE NGFX_VERSION="${NGFX_SDK_VERSION}")
68+
endif()

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enable_language(C CXX ASM ASM_NASM)
1717

1818
if(MSVC)
1919
enable_language(ASM_MASM)
20+
link_libraries(delayimp)
2021
endif()
2122

2223
option(NBL_STATIC_BUILD "" OFF) # ON for static builds, OFF for shared
@@ -222,4 +223,4 @@ add_subdirectory(artifacts)
222223
option(NBL_CPACK_INCLUDE_EXAMPLES "CPack with examples and media" ON)
223224
include(cpack/package)
224225

225-
export(TARGETS ${_NBL_3RDPARTY_TARGETS_} Nabla NAMESPACE Nabla:: APPEND FILE ${NBL_ROOT_PATH_BINARY}/NablaExport.cmake)
226+
export(TARGETS ${_NBL_3RDPARTY_TARGETS_} Nabla NAMESPACE Nabla:: APPEND FILE ${NBL_ROOT_PATH_BINARY}/NablaExport.cmake)

cmake/FindNabla.cmake

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Define NBL_CONFIG_ROOT_DIRECTORY
2+
# variable to help the module find
3+
# Nabla package
4+
5+
if(NOT DEFINED CMAKE_CONFIGURATION_TYPES)
6+
set(CMAKE_CONFIGURATION_TYPES Release;RelWithDebInfo;Debug)
7+
endif()
8+
9+
if(NOT DEFINED NBL_PACKAGE_STATIC) # turn ON NBL_PACKAGE_STATIC to look for package with STATIC library type, turn off to look for DYNAMIC
10+
if(${NBL_STATIC_BUILD}) # internal, if called with Nabla's build system it will get detected autoamtically
11+
set(NBL_PACKAGE_STATIC ON)
12+
else()
13+
message(FATAL_ERROR "NBL_PACKAGE_STATIC must be defined!")
14+
endif()
15+
endif()
16+
17+
if(NBL_PACKAGE_STATIC)
18+
set(NBL_LIBRARY_TYPE static)
19+
else()
20+
set(NBL_LIBRARY_TYPE dynamic)
21+
endif()
22+
23+
foreach(X IN LISTS CMAKE_CONFIGURATION_TYPES)
24+
if(NOT "${X}" STREQUAL "")
25+
string(TOLOWER "nabla-${NBL_LIBRARY_TYPE}-${X}" _NBL_TARGET_PACKAGE_)
26+
27+
if(DEFINED NBL_CONFIG_ROOT_DIRECTORY)
28+
file(GLOB_RECURSE _NBL_G_CONFIG_ROOT_DIRECTORY_ "${NBL_CONFIG_ROOT_DIRECTORY}/*/${_NBL_TARGET_PACKAGE_}Config.cmake")
29+
cmake_path(GET _NBL_G_CONFIG_ROOT_DIRECTORY_ PARENT_PATH _NBL_G_CONFIG_ROOT_DIRECTORY_)
30+
else()
31+
unset(_NBL_G_CONFIG_ROOT_DIRECTORY_)
32+
endif()
33+
34+
find_package(${_NBL_TARGET_PACKAGE_} QUIET
35+
GLOBAL
36+
PATHS ${_NBL_G_CONFIG_ROOT_DIRECTORY_}
37+
)
38+
endif()
39+
endforeach()

cmake/common.cmake

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ function(nbl_handle_dll_definitions _TARGET_ _SCOPE_)
2929
set(_NABLA_OUTPUT_DIR_ "${NBL_ROOT_PATH_BINARY}/src/nbl/$<CONFIG>/devshgraphicsprogramming.nabla")
3030

3131
target_compile_definitions(${_TARGET_} ${_SCOPE_}
32-
_NABLA_DLL_NAME_="$<TARGET_FILE_NAME:Nabla>";_NABLA_OUTPUT_DIR_="${_NABLA_OUTPUT_DIR_}";_NABLA_INSTALL_DIR_="${CMAKE_INSTALL_PREFIX}"
33-
)
32+
_NABLA_DLL_NAME_="$<PATH:REMOVE_EXTENSION,$<TARGET_FILE_NAME:Nabla>>";_NABLA_OUTPUT_DIR_="${_NABLA_OUTPUT_DIR_}"
33+
)
3434
endif()
3535

3636
target_compile_definitions(${_TARGET_} ${_SCOPE_}
@@ -252,6 +252,8 @@ macro(nbl_create_executable_project _EXTRA_SOURCES _EXTRA_OPTIONS _EXTRA_INCLUDE
252252
target_compile_definitions(${EXECUTABLE_NAME}
253253
PRIVATE "-DNBL_CPACK_PACKAGE_NABLA_DLL_DIR=\"${_NBL_NABLA_PACKAGE_RUNTIME_DLL_DIR_PATH_REL_TO_TARGET_}\""
254254
PRIVATE "-DNBL_CPACK_PACKAGE_DXC_DLL_DIR=\"${_NBL_DXC_PACKAGE_RUNTIME_DLL_DIR_PATH_REL_TO_TARGET_}\""
255+
PRIVATE "-DNBL_CPACK_PACKAGE_NABLA_DLL_DIR_ABS_KEY=\"${_NBL_NABLA_PACKAGE_RUNTIME_DLL_DIR_PATH_}\""
256+
PRIVATE "-DNBL_CPACK_PACKAGE_DXC_DLL_DIR_ABS_KEY=\"${_NBL_DXC_PACKAGE_RUNTIME_DLL_DIR_PATH_}\""
255257
)
256258
endif()
257259

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
list(TRANSFORM @_NBL_PROXY_@ PREPEND "${CMAKE_CURRENT_LIST_DIR}/")
2+
3+
set(@_NBL_COMPOMENT_D_@ "${CMAKE_CURRENT_LIST_DIR}/@_NBL_COMPOMENT_D_V_@")
4+
5+
include(FindPackageHandleStandardArgs)
6+
find_package_handle_standard_args(@_NBL_PACKAGE_@ DEFAULT_MSG @_NBL_PROXY_@ @_NBL_COMPOMENT_D_@)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
find_package(@_NBL_PACKAGE_@
2+
REQUIRED
3+
CONFIG
4+
GLOBAL
5+
PATHS "${CMAKE_CURRENT_LIST_DIR}/compoment"
6+
NO_DEFAULT_PATH
7+
NO_PACKAGE_ROOT_PATH
8+
NO_CMAKE_PATH
9+
NO_CMAKE_ENVIRONMENT_PATH
10+
NO_SYSTEM_ENVIRONMENT_PATH
11+
NO_CMAKE_PACKAGE_REGISTRY
12+
NO_CMAKE_SYSTEM_PATH
13+
NO_CMAKE_INSTALL_PREFIX
14+
NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
15+
)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Copyright (C) 2018-2025 - DevSH Graphics Programming Sp. z O.O.
2+
# This file is part of the "Nabla Engine".
3+
# For conditions of distribution and use, see copyright notice in nabla.h

cmake/cpack/find/nabla.cmake

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
function(NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL _COMPOMENT_ _SPATH_)
2+
string(APPEND NBL_FIND_NABLA_IMPL "set(_COMPOMENT_ ${_COMPOMENT_})\nset(_SPATH_ ${_SPATH_})\nset(NBL_ROOT_PATH ${NBL_ROOT_PATH})\nset(NBL_STATIC_BUILD ${NBL_STATIC_BUILD})\n\n")
3+
string(APPEND NBL_FIND_NABLA_IMPL
4+
[=[
5+
if(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Dd][Ee][Bb][Uu][Gg])$")
6+
set(NBL_CONFIG_PREFIX_PATH debug)
7+
elseif(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$")
8+
set(NBL_CONFIG_PREFIX_PATH relwithdebinfo)
9+
elseif(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$")
10+
unset(NBL_CONFIG_PREFIX_PATH)
11+
else()
12+
message(FATAL_ERROR "Internal error, requested \"${CMAKE_INSTALL_CONFIG_NAME}\" configuration is invalid!")
13+
endif()
14+
15+
string(TOUPPER "${_COMPOMENT_}" _Cu_)
16+
string(TOLOWER "${_COMPOMENT_}" _Cl_)
17+
18+
string(TOUPPER "${_SPATH_}" _Su_)
19+
string(TOLOWER "${_SPATH_}" _Sl_)
20+
21+
string(TOUPPER "${CMAKE_INSTALL_CONFIG_NAME}" _NBL_CONFIG_)
22+
string(TOLOWER "${CMAKE_INSTALL_CONFIG_NAME}" _NBL_CONFIG_L_)
23+
24+
if(NBL_STATIC_BUILD)
25+
set(NBL_LIBRARY_TYPE STATIC)
26+
else()
27+
set(NBL_LIBRARY_TYPE DYNAMIC)
28+
endif()
29+
30+
string(TOUPPER "${NBL_LIBRARY_TYPE}" _LTu_)
31+
string(TOLOWER "${NBL_LIBRARY_TYPE}" _LTl_)
32+
33+
set(_NBL_PACKAGE_ nabla-${_Cl_}-${_LTl_}-${_NBL_CONFIG_L_})
34+
set(_NBL_COMPLETE_P_CONFIG_ nabla-${_LTl_}-${_NBL_CONFIG_L_})
35+
36+
set(NBL_CMAKE_OUTPUT_DIRECTORY "${CMAKE_INSTALL_PREFIX}/${NBL_CONFIG_PREFIX_PATH}/cmake")
37+
set(NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY "${NBL_CMAKE_OUTPUT_DIRECTORY}/compoment")
38+
39+
string(REPLACE "${CMAKE_INSTALL_PREFIX}" "" NBL_CMAKE_INSTALL_MANIFEST_CONTENT "${CMAKE_INSTALL_MANIFEST_FILES}")
40+
list(REMOVE_DUPLICATES NBL_CMAKE_INSTALL_MANIFEST_CONTENT)
41+
42+
set(_NBL_PREFIX_ "${CMAKE_INSTALL_PREFIX}/${NBL_CONFIG_PREFIX_PATH}")
43+
44+
set(NBL_CMAKE_COMPOMENT_OUTPUT_FILE "${NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY}/${_NBL_PACKAGE_}Config.cmake")
45+
set(NBL_CMAKE_CONFIG_OUTPUT_FILE "${NBL_CMAKE_OUTPUT_DIRECTORY}/${_NBL_COMPLETE_P_CONFIG_}Config.cmake")
46+
47+
cmake_path(RELATIVE_PATH CMAKE_INSTALL_PREFIX BASE_DIRECTORY "${NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY}" OUTPUT_VARIABLE _NBL_REL_TO_PREFIX_)
48+
49+
set(_NBL_PROXY_ NABLA_INSTALL_${_Cu_}_${_LTu_}_${_NBL_CONFIG_})
50+
set(_NBL_COMPOMENT_D_ "NABLA_INSTALL_${_Cu_}_DIRECTORY_${_LTu_}_${_NBL_CONFIG_}")
51+
set(_NBL_COMPOMENT_D_V_ "${_NBL_REL_TO_PREFIX_}")
52+
53+
foreach(_MANIFEST_INSTALL_REL_FILE_ IN LISTS NBL_CMAKE_INSTALL_MANIFEST_CONTENT)
54+
string(FIND "${_MANIFEST_INSTALL_REL_FILE_}" "/${_SPATH_}/" _NBL_FOUND_)
55+
56+
if(NOT "${_NBL_FOUND_}" STREQUAL "-1")
57+
set(_X_ "${_NBL_REL_TO_PREFIX_}/${_MANIFEST_INSTALL_REL_FILE_}")
58+
cmake_path(NORMAL_PATH _X_ OUTPUT_VARIABLE _X_)
59+
60+
list(APPEND ${_NBL_PROXY_} "${_X_}")
61+
endif()
62+
endforeach()
63+
64+
string(APPEND NBL_MANIFEST_IMPL "set(${_NBL_PROXY_}\n\t${${_NBL_PROXY_}}\n)")
65+
string(REPLACE ";" "\n\t" NBL_MANIFEST_IMPL "${NBL_MANIFEST_IMPL}")
66+
string(CONFIGURE "${NBL_MANIFEST_IMPL}" NBL_MANIFEST_IMPL_CONF)
67+
file(WRITE "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}" "${NBL_MANIFEST_IMPL_CONF}")
68+
69+
# the reason behind this weird looking thing is you cannot nest bracket arguments https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#bracket-argument
70+
# some variables need evaluation but some not and must be literals, to make this code read-able & work we do a small workaround
71+
72+
# Compoment
73+
configure_file("${NBL_ROOT_PATH}/cmake/cpack/find/compoment/template.cmake" "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp" @ONLY)
74+
file(READ "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp" _NBL_COMPOMENT_INCLUDE_LIST_TRANFORM_)
75+
file(REMOVE "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp")
76+
file(APPEND "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}" "\n${_NBL_COMPOMENT_INCLUDE_LIST_TRANFORM_}")
77+
78+
# Config
79+
if(NOT EXISTS "${NBL_CMAKE_CONFIG_OUTPUT_FILE}")
80+
file(READ "${NBL_ROOT_PATH}/cmake/cpack/find/licence/template.cmake" _NBL_LICENCE_)
81+
file(APPEND "${NBL_CMAKE_CONFIG_OUTPUT_FILE}" "${_NBL_LICENCE_}")
82+
endif()
83+
84+
configure_file("${NBL_ROOT_PATH}/cmake/cpack/find/config/template.cmake" "${NBL_CMAKE_CONFIG_OUTPUT_FILE}.tmp" @ONLY)
85+
file(READ "${NBL_CMAKE_CONFIG_OUTPUT_FILE}.tmp" _NBL_CONFIG_FILE_CONTENT_)
86+
file(REMOVE "${NBL_CMAKE_CONFIG_OUTPUT_FILE}.tmp")
87+
file(APPEND "${NBL_CMAKE_CONFIG_OUTPUT_FILE}" "\n\n${_NBL_CONFIG_FILE_CONTENT_}")
88+
]=]
89+
)
90+
91+
install(CODE "${NBL_FIND_NABLA_IMPL}" COMPONENT ${_COMPOMENT_})
92+
endfunction()
93+
94+
# Generate compoment configurations
95+
NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL(Headers include)
96+
NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL(Libraries lib)
97+
NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL(Runtimes runtime)

0 commit comments

Comments
 (0)