Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
173 changes: 119 additions & 54 deletions cmake/common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1144,6 +1144,12 @@ define_property(TARGET PROPERTY NBL_MOUNT_POINT_DEFINES
BRIEF_DOCS "List of preprocessor defines with mount points"
)

option(NSC_DEBUG_EDIF_FILE_BIT "Add \"-fspv-debug=file\" to NSC Debug CLI" ON)
option(NSC_DEBUG_EDIF_SOURCE_BIT "Add \"-fspv-debug=source\" to NSC Debug CLI" OFF)
option(NSC_DEBUG_EDIF_LINE_BIT "Add \"-fspv-debug=line\" to NSC Debug CLI" OFF)
option(NSC_DEBUG_EDIF_TOOL_BIT "Add \"-fspv-debug=tool\" to NSC Debug CLI" ON)
option(NSC_DEBUG_EDIF_NON_SEMANTIC_BIT "Add \"-fspv-debug=vulkan-with-source\" to NSC Debug CLI" OFF)

function(NBL_CREATE_NSC_COMPILE_RULES)
set(COMMENT "this code has been autogenerated with Nabla CMake NBL_CREATE_HLSL_COMPILE_RULES utility")
set(DEVICE_CONFIG_VIEW
Expand Down Expand Up @@ -1178,9 +1184,34 @@ struct DeviceConfigCaps
-enable-16bit-types
-Zpr
-spirv
-fspv-target-env=vulkan1.3
-fspv-target-env=vulkan1.3
-WShadow
-WConversion
$<$<CONFIG:Debug>:-O0>
$<$<CONFIG:Release>:-O3>
Copy link
Member

Choose a reason for hiding this comment

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

you can turn it into $<$<CONFIG:Release,RelWithDebInfo>:-O3>

$<$<CONFIG:RelWithDebInfo>:-O3>
)

if(NSC_DEBUG_EDIF_FILE_BIT)
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=file>)
endif()

if(NSC_DEBUG_EDIF_SOURCE_BIT)
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=source>)
endif()

if(NSC_DEBUG_EDIF_LINE_BIT)
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=line>)
endif()

if(NSC_DEBUG_EDIF_TOOL_BIT)
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=tool>)
endif()

if(NSC_DEBUG_EDIF_NON_SEMANTIC_BIT)
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=vulkan-with-source>)
endif()

if(NOT NBL_EMBED_BUILTIN_RESOURCES)
list(APPEND REQUIRED_OPTIONS
-I "${NBL_ROOT_PATH}/include"
Expand Down Expand Up @@ -1210,12 +1241,12 @@ struct DeviceConfigCaps

get_target_property(HEADER_RULE_GENERATED ${IMPL_TARGET} NBL_HEADER_GENERATED_RULE)
if(NOT HEADER_RULE_GENERATED)
set(INCLUDE_DIR "$<TARGET_PROPERTY:${IMPL_TARGET},BINARY_DIR>/${IMPL_TARGET}/.cmake/include")
set(INCLUDE_DIR "$<TARGET_PROPERTY:${IMPL_TARGET},BINARY_DIR>/${IMPL_TARGET}/.cmake/include/$<CONFIG>")
set(INCLUDE_FILE "${INCLUDE_DIR}/$<TARGET_PROPERTY:${IMPL_TARGET},NBL_HEADER_PATH>")
set(INCLUDE_CONTENT $<TARGET_PROPERTY:${IMPL_TARGET},NBL_HEADER_CONTENT>)

file(GENERATE OUTPUT ${INCLUDE_FILE}
CONTENT ${INCLUDE_CONTENT}
CONTENT $<GENEX_EVAL:${INCLUDE_CONTENT}>
TARGET ${IMPL_TARGET}
)

Expand Down Expand Up @@ -1277,17 +1308,22 @@ namespace @IMPL_NAMESPACE@ {
foreach(INDEX RANGE ${LAST_INDEX})
string(JSON INPUT GET "${IMPL_INPUTS}" ${INDEX} INPUT)
string(JSON BASE_KEY GET "${IMPL_INPUTS}" ${INDEX} KEY)
string(JSON COMPILE_OPTIONS_LENGTH LENGTH "${IMPL_INPUTS}" ${INDEX} COMPILE_OPTIONS)


set(COMPILE_OPTIONS "")
math(EXPR LAST_CO "${COMPILE_OPTIONS_LENGTH} - 1")
foreach(COMP_IDX RANGE 0 ${LAST_CO})
string(JSON COMP_ITEM GET "${IMPL_INPUTS}" ${INDEX} COMPILE_OPTIONS ${COMP_IDX})
list(APPEND COMPILE_OPTIONS "${COMP_ITEM}")
endforeach()
string(JSON HAS_COMPILE_OPTIONS ERROR_VARIABLE ERROR_VAR TYPE "${IMPL_INPUTS}" ${INDEX} COMPILE_OPTIONS)
if(HAS_COMPILE_OPTIONS STREQUAL "ARRAY")
string(JSON COMPILE_OPTIONS_LENGTH LENGTH "${IMPL_INPUTS}" ${INDEX} COMPILE_OPTIONS)
if(NOT COMPILE_OPTIONS_LENGTH EQUAL 0)
math(EXPR LAST_CO "${COMPILE_OPTIONS_LENGTH} - 1")
foreach(COMP_IDX RANGE 0 ${LAST_CO})
string(JSON COMP_ITEM GET "${IMPL_INPUTS}" ${INDEX} COMPILE_OPTIONS ${COMP_IDX})
list(APPEND COMPILE_OPTIONS "${COMP_ITEM}")
endforeach()
endif()
endif()

set(DEPENDS_ON "")
string(JSON HAS_DEPENDS TYPE "${IMPL_INPUTS}" ${INDEX} DEPENDS)
string(JSON HAS_DEPENDS ERROR_VARIABLE ERROR_VAR TYPE "${IMPL_INPUTS}" ${INDEX} DEPENDS)
if(HAS_DEPENDS STREQUAL "ARRAY")
string(JSON DEPENDS_LENGTH LENGTH "${IMPL_INPUTS}" ${INDEX} DEPENDS)
if(NOT DEPENDS_LENGTH EQUAL 0)
Expand All @@ -1305,7 +1341,7 @@ namespace @IMPL_NAMESPACE@ {

set(HAS_CAPS FALSE)
set(CAPS_LENGTH 0)
string(JSON CAPS_TYPE TYPE "${IMPL_INPUTS}" ${INDEX} CAPS)
string(JSON CAPS_TYPE ERROR_VARIABLE ERROR_VAR TYPE "${IMPL_INPUTS}" ${INDEX} CAPS)
if(CAPS_TYPE STREQUAL "ARRAY")
string(JSON CAPS_LENGTH LENGTH "${IMPL_INPUTS}" ${INDEX} CAPS)
if(NOT CAPS_LENGTH EQUAL 0)
Expand All @@ -1323,12 +1359,27 @@ namespace @IMPL_NAMESPACE@ {

set(CAP_NAMES "")
set(CAP_TYPES "")
set(CAP_KINDS "")
if(HAS_CAPS)
math(EXPR LAST_CAP "${CAPS_LENGTH} - 1")
foreach(CAP_IDX RANGE 0 ${LAST_CAP})
string(JSON CAP_KIND ERROR_VARIABLE CAP_TYPE_ERROR GET "${IMPL_INPUTS}" ${INDEX} CAPS ${CAP_IDX} kind)
string(JSON CAP_NAME GET "${IMPL_INPUTS}" ${INDEX} CAPS ${CAP_IDX} name)
string(JSON CAP_TYPE GET "${IMPL_INPUTS}" ${INDEX} CAPS ${CAP_IDX} type)

# -> TODO: improve validation, input should be string
if(CAP_TYPE_ERROR)
set(CAP_KIND limits) # I assume its limit by default (or when invalid value present, currently)
else()
if(NOT CAP_KIND MATCHES "^(limits|features)$")
ERROR_WHILE_PARSING_ITEM(
"Invalid CAP kind \"${CAP_KIND}\" for ${CAP_NAME}\n"
"Allowed kinds are: limits, features"
)
endif()
endif()
# <-

if(NOT CAP_TYPE MATCHES "^(bool|uint16_t|uint32_t|uint64_t)$")
ERROR_WHILE_PARSING_ITEM(
"Invalid CAP type \"${CAP_TYPE}\" for ${CAP_NAME}\n"
Expand Down Expand Up @@ -1366,6 +1417,7 @@ namespace @IMPL_NAMESPACE@ {
set(CAP_VALUES_${CAP_IDX} "${VALUES}")
list(APPEND CAP_NAMES "${CAP_NAME}")
list(APPEND CAP_TYPES "${CAP_TYPE}")
list(APPEND CAP_KINDS "${CAP_KIND}")
endforeach()
endif()

Expand Down Expand Up @@ -1399,68 +1451,81 @@ namespace @IMPL_NAMESPACE@ {
nbl::core::string retval = "@BASE_KEY@";
@RETVAL_EVAL@
retval += ".spv";
return retval;
return "$<CONFIG>/" + retval;
}
}

]=])
unset(RETVAL_EVAL)
foreach(CAP ${CAP_NAMES})
string(CONFIGURE [=[
retval += ".@CAP@_" + std::to_string(limits.@CAP@);
]=] RETVALUE_VIEW @ONLY)
string(APPEND RETVAL_EVAL "${RETVALUE_VIEW}")
endforeach(CAP)
list(LENGTH CAP_NAMES CAP_COUNT)
if(CAP_COUNT GREATER 0)
math(EXPR LAST_CAP "${CAP_COUNT} - 1")
foreach(i RANGE ${LAST_CAP})
list(GET CAP_NAMES ${i} CAP)
list(GET CAP_KINDS ${i} KIND)
string(CONFIGURE [=[
retval += ".@CAP@_" + std::to_string(@KIND@.@CAP@);
]=] RETVALUE_VIEW @ONLY)
string(APPEND RETVAL_EVAL "${RETVALUE_VIEW}")
endforeach()
endif()

string(CONFIGURE "${HEADER_ITEM_VIEW}" HEADER_ITEM_EVAL @ONLY)
set_property(TARGET ${IMPL_TARGET} APPEND_STRING PROPERTY NBL_HEADER_CONTENT "${HEADER_ITEM_EVAL}")

function(GENERATE_KEYS PREFIX CAP_INDEX CAPS_EVAL_PART)
if(NUM_CAPS EQUAL 0 OR CAP_INDEX EQUAL ${NUM_CAPS})
# generate .config file
set(FINAL_KEY "${BASE_KEY}${PREFIX}.spv") # always add ext even if its already there to make sure asset loader always is able to load as IShader

set(TARGET_OUTPUT "${IMPL_BINARY_DIR}/${FINAL_KEY}")
set(CONFIG_FILE "${TARGET_OUTPUT}.config")
set(CONFIG_FILE_TARGET_OUTPUT "${IMPL_BINARY_DIR}/${FINAL_KEY}")
set(CONFIG_FILE "${CONFIG_FILE_TARGET_OUTPUT}.config")
set(CAPS_EVAL "${CAPS_EVAL_PART}")

string(CONFIGURE "${DEVICE_CONFIG_VIEW}" CONFIG_CONTENT @ONLY)
file(WRITE "${CONFIG_FILE}" "${CONFIG_CONTENT}")

set(NBL_NSC_COMPILE_COMMAND
"$<TARGET_FILE:nsc>"
-Fc "${TARGET_OUTPUT}"
${COMPILE_OPTIONS} ${REQUIRED_OPTIONS} ${IMPL_COMMON_OPTIONS}
"${CONFIG_FILE}"
)

add_custom_command(OUTPUT "${TARGET_OUTPUT}"
COMMAND ${NBL_NSC_COMPILE_COMMAND}
DEPENDS ${DEPENDS_ON}
COMMENT "Creating \"${TARGET_OUTPUT}\""
VERBATIM
COMMAND_EXPAND_LISTS
)

set(HEADER_ONLY_LIKE "${CONFIG_FILE}" "${TARGET_INPUT}" "${TARGET_OUTPUT}")
target_sources(${IMPL_TARGET} PRIVATE ${HEADER_ONLY_LIKE})

set_source_files_properties(${HEADER_ONLY_LIKE} PROPERTIES
HEADER_FILE_ONLY ON
VS_TOOL_OVERRIDE None
)

set_source_files_properties("${TARGET_OUTPUT}" PROPERTIES
NBL_SPIRV_REGISTERED_INPUT "${TARGET_INPUT}"
NBL_SPIRV_PERMUTATION_CONFIG "${CONFIG_FILE}"
NBL_SPIRV_BINARY_DIR "${IMPL_BINARY_DIR}"
NBL_SPIRV_ACCESS_KEY "${FINAL_KEY}"
)

set_property(TARGET ${IMPL_TARGET} APPEND PROPERTY NBL_SPIRV_OUTPUTS "${TARGET_OUTPUT}")
# generate keys and commands for compiling shaders
foreach(BUILD_CONFIGURATION ${CMAKE_CONFIGURATION_TYPES})
set(FINAL_KEY_REL_PATH "${BUILD_CONFIGURATION}/${FINAL_KEY}")
set(TARGET_OUTPUT "${IMPL_BINARY_DIR}/${FINAL_KEY_REL_PATH}")

set(NBL_NSC_COMPILE_COMMAND
"$<TARGET_FILE:nsc>"
-Fc "${TARGET_OUTPUT}"
${COMPILE_OPTIONS} ${REQUIRED_OPTIONS} ${IMPL_COMMON_OPTIONS}
"${CONFIG_FILE}"
)

add_custom_command(OUTPUT "${TARGET_OUTPUT}"
COMMAND ${NBL_NSC_COMPILE_COMMAND}
DEPENDS ${DEPENDS_ON}
COMMENT "Creating \"${TARGET_OUTPUT}\""
VERBATIM
COMMAND_EXPAND_LISTS
)

set(HEADER_ONLY_LIKE "${CONFIG_FILE}" "${TARGET_INPUT}" "${TARGET_OUTPUT}")
target_sources(${IMPL_TARGET} PRIVATE ${HEADER_ONLY_LIKE})

set_source_files_properties(${HEADER_ONLY_LIKE} PROPERTIES
HEADER_FILE_ONLY ON
VS_TOOL_OVERRIDE None
)

set_source_files_properties("${TARGET_OUTPUT}" PROPERTIES
NBL_SPIRV_REGISTERED_INPUT "${TARGET_INPUT}"
NBL_SPIRV_PERMUTATION_CONFIG "${CONFIG_FILE}"
NBL_SPIRV_BINARY_DIR "${IMPL_BINARY_DIR}"
NBL_SPIRV_ACCESS_KEY "${FINAL_KEY_REL_PATH}"
)

set_property(TARGET ${IMPL_TARGET} APPEND PROPERTY NBL_SPIRV_OUTPUTS "${TARGET_OUTPUT}")
endforeach()
return()
endif()

list(GET CAP_NAMES ${CAP_INDEX} CURRENT_CAP)
list(GET CAP_TYPES ${CAP_INDEX} CURRENT_TYPE)
list(GET CAP_KINDS ${CAP_INDEX} CURRENT_KIND)
set(VAR_NAME "CAP_VALUES_${CAP_INDEX}")
set(VALUES "${${VAR_NAME}}")

Expand Down
2 changes: 1 addition & 1 deletion examples_tests
Submodule examples_tests updated 37 files
+1 −1 03_DeviceSelectionAndSharedSources/main.cpp
+46 −1 05_StreamingAndBufferDeviceAddressApp/CMakeLists.txt
+1 −4 05_StreamingAndBufferDeviceAddressApp/app_resources/shader.comp.hlsl
+6 −5 05_StreamingAndBufferDeviceAddressApp/main.cpp
+46 −1 07_StagingAndMultipleQueues/CMakeLists.txt
+28 −16 07_StagingAndMultipleQueues/main.cpp
+67 −0 10_CountingSort/CMakeLists.txt
+6 −0 10_CountingSort/app_resources/common.hlsl
+28 −17 10_CountingSort/main.cpp
+46 −1 11_FFT/CMakeLists.txt
+9 −22 11_FFT/main.cpp
+45 −0 24_ColorSpaceTest/CMakeLists.txt
+17 −18 24_ColorSpaceTest/main.cpp
+69 −1 62_CAD/CMakeLists.txt
+19 −74 62_CAD/main.cpp
+0 −6 62_CAD/shaders/globals.hlsl
+5 −5 62_CAD/shaders/main_pipeline/vertex_shader.hlsl
+52 −1 64_EmulatedFloatTest/CMakeLists.txt
+1 −0 64_EmulatedFloatTest/app_resources/benchmark/benchmark.comp.hlsl
+1 −0 64_EmulatedFloatTest/app_resources/test.comp.hlsl
+12 −40 64_EmulatedFloatTest/main.cpp
+46 −1 67_RayQueryGeometry/CMakeLists.txt
+0 −2 67_RayQueryGeometry/app_resources/render.comp.hlsl
+7 −5 67_RayQueryGeometry/main.cpp
+97 −1 70_FLIPFluids/CMakeLists.txt
+3 −0 70_FLIPFluids/app_resources/compute/diffusion.comp.hlsl
+2 −0 70_FLIPFluids/app_resources/compute/pressureSolver.comp.hlsl
+1 −0 70_FLIPFluids/app_resources/compute/updateFluidCells.comp.hlsl
+60 −88 70_FLIPFluids/main.cpp
+100 −0 71_RayTracingPipeline/CMakeLists.txt
+7 −0 71_RayTracingPipeline/app_resources/common.hlsl
+2 −1 71_RayTracingPipeline/app_resources/raytrace.rahit.hlsl
+15 −10 71_RayTracingPipeline/app_resources/raytrace.rchit.hlsl
+3 −3 71_RayTracingPipeline/app_resources/raytrace.rgen.hlsl
+2 −1 71_RayTracingPipeline/app_resources/raytrace.rint.hlsl
+3 −1 71_RayTracingPipeline/app_resources/raytrace_shadow.rahit.hlsl
+24 −75 71_RayTracingPipeline/main.cpp
Loading