Skip to content

Commit 265100c

Browse files
committed
Extended NBL_CREATE_NSC_COMPILE_RULES function, now it creates precompiled shaders per build configuration
1 parent b4ce8f6 commit 265100c

File tree

2 files changed

+75
-40
lines changed

2 files changed

+75
-40
lines changed

cmake/common.cmake

Lines changed: 74 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,12 @@ define_property(TARGET PROPERTY NBL_MOUNT_POINT_DEFINES
11441144
BRIEF_DOCS "List of preprocessor defines with mount points"
11451145
)
11461146

1147+
option(NSC_DEBUG_EDIF_FILE_BIT "Add \"-fspv-debug=file\" to NSC Debug CLI" ON)
1148+
option(NSC_DEBUG_EDIF_SOURCE_BIT "Add \"-fspv-debug=source\" to NSC Debug CLI" OFF)
1149+
option(NSC_DEBUG_EDIF_LINE_BIT "Add \"-fspv-debug=line\" to NSC Debug CLI" OFF)
1150+
option(NSC_DEBUG_EDIF_TOOL_BIT "Add \"-fspv-debug=tool\" to NSC Debug CLI" ON)
1151+
option(NSC_DEBUG_EDIF_NON_SEMANTIC_BIT "Add \"-fspv-debug=vulkan-with-source\" to NSC Debug CLI" OFF)
1152+
11471153
function(NBL_CREATE_NSC_COMPILE_RULES)
11481154
set(COMMENT "this code has been autogenerated with Nabla CMake NBL_CREATE_HLSL_COMPILE_RULES utility")
11491155
set(DEVICE_CONFIG_VIEW
@@ -1178,9 +1184,34 @@ struct DeviceConfigCaps
11781184
-enable-16bit-types
11791185
-Zpr
11801186
-spirv
1181-
-fspv-target-env=vulkan1.3
1187+
-fspv-target-env=vulkan1.3
1188+
-WShadow
1189+
-WConversion
1190+
$<$<CONFIG:Debug>:-O0>
1191+
$<$<CONFIG:Release>:-O3>
1192+
$<$<CONFIG:RelWithDebInfo>:-O3>
11821193
)
11831194

1195+
if(NSC_DEBUG_EDIF_FILE_BIT)
1196+
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=file>)
1197+
endif()
1198+
1199+
if(NSC_DEBUG_EDIF_SOURCE_BIT)
1200+
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=source>)
1201+
endif()
1202+
1203+
if(NSC_DEBUG_EDIF_LINE_BIT)
1204+
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=line>)
1205+
endif()
1206+
1207+
if(NSC_DEBUG_EDIF_TOOL_BIT)
1208+
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=tool>)
1209+
endif()
1210+
1211+
if(NSC_DEBUG_EDIF_NON_SEMANTIC_BIT)
1212+
list(APPEND REQUIRED_OPTIONS $<$<CONFIG:Debug>:-fspv-debug=vulkan-with-source>)
1213+
endif()
1214+
11841215
if(NOT NBL_EMBED_BUILTIN_RESOURCES)
11851216
list(APPEND REQUIRED_OPTIONS
11861217
-I "${NBL_ROOT_PATH}/include"
@@ -1210,12 +1241,12 @@ struct DeviceConfigCaps
12101241

12111242
get_target_property(HEADER_RULE_GENERATED ${IMPL_TARGET} NBL_HEADER_GENERATED_RULE)
12121243
if(NOT HEADER_RULE_GENERATED)
1213-
set(INCLUDE_DIR "$<TARGET_PROPERTY:${IMPL_TARGET},BINARY_DIR>/${IMPL_TARGET}/.cmake/include")
1244+
set(INCLUDE_DIR "$<TARGET_PROPERTY:${IMPL_TARGET},BINARY_DIR>/${IMPL_TARGET}/.cmake/include/$<CONFIG>")
12141245
set(INCLUDE_FILE "${INCLUDE_DIR}/$<TARGET_PROPERTY:${IMPL_TARGET},NBL_HEADER_PATH>")
12151246
set(INCLUDE_CONTENT $<TARGET_PROPERTY:${IMPL_TARGET},NBL_HEADER_CONTENT>)
12161247

12171248
file(GENERATE OUTPUT ${INCLUDE_FILE}
1218-
CONTENT ${INCLUDE_CONTENT}
1249+
CONTENT $<GENEX_EVAL:${INCLUDE_CONTENT}>
12191250
TARGET ${IMPL_TARGET}
12201251
)
12211252

@@ -1420,7 +1451,7 @@ namespace @IMPL_NAMESPACE@ {
14201451
nbl::core::string retval = "@BASE_KEY@";
14211452
@RETVAL_EVAL@
14221453
retval += ".spv";
1423-
return retval;
1454+
return "$<CONFIG>/" + retval;
14241455
}
14251456
}
14261457

@@ -1444,46 +1475,50 @@ namespace @IMPL_NAMESPACE@ {
14441475

14451476
function(GENERATE_KEYS PREFIX CAP_INDEX CAPS_EVAL_PART)
14461477
if(NUM_CAPS EQUAL 0 OR CAP_INDEX EQUAL ${NUM_CAPS})
1478+
# generate .config file
14471479
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
1448-
1449-
set(TARGET_OUTPUT "${IMPL_BINARY_DIR}/${FINAL_KEY}")
1450-
set(CONFIG_FILE "${TARGET_OUTPUT}.config")
1480+
set(CONFIG_FILE_TARGET_OUTPUT "${IMPL_BINARY_DIR}/${FINAL_KEY}")
1481+
set(CONFIG_FILE "${CONFIG_FILE_TARGET_OUTPUT}.config")
14511482
set(CAPS_EVAL "${CAPS_EVAL_PART}")
1452-
14531483
string(CONFIGURE "${DEVICE_CONFIG_VIEW}" CONFIG_CONTENT @ONLY)
14541484
file(WRITE "${CONFIG_FILE}" "${CONFIG_CONTENT}")
14551485

1456-
set(NBL_NSC_COMPILE_COMMAND
1457-
"$<TARGET_FILE:nsc>"
1458-
-Fc "${TARGET_OUTPUT}"
1459-
${COMPILE_OPTIONS} ${REQUIRED_OPTIONS} ${IMPL_COMMON_OPTIONS}
1460-
"${CONFIG_FILE}"
1461-
)
1462-
1463-
add_custom_command(OUTPUT "${TARGET_OUTPUT}"
1464-
COMMAND ${NBL_NSC_COMPILE_COMMAND}
1465-
DEPENDS ${DEPENDS_ON}
1466-
COMMENT "Creating \"${TARGET_OUTPUT}\""
1467-
VERBATIM
1468-
COMMAND_EXPAND_LISTS
1469-
)
1470-
1471-
set(HEADER_ONLY_LIKE "${CONFIG_FILE}" "${TARGET_INPUT}" "${TARGET_OUTPUT}")
1472-
target_sources(${IMPL_TARGET} PRIVATE ${HEADER_ONLY_LIKE})
1473-
1474-
set_source_files_properties(${HEADER_ONLY_LIKE} PROPERTIES
1475-
HEADER_FILE_ONLY ON
1476-
VS_TOOL_OVERRIDE None
1477-
)
1478-
1479-
set_source_files_properties("${TARGET_OUTPUT}" PROPERTIES
1480-
NBL_SPIRV_REGISTERED_INPUT "${TARGET_INPUT}"
1481-
NBL_SPIRV_PERMUTATION_CONFIG "${CONFIG_FILE}"
1482-
NBL_SPIRV_BINARY_DIR "${IMPL_BINARY_DIR}"
1483-
NBL_SPIRV_ACCESS_KEY "${FINAL_KEY}"
1484-
)
1485-
1486-
set_property(TARGET ${IMPL_TARGET} APPEND PROPERTY NBL_SPIRV_OUTPUTS "${TARGET_OUTPUT}")
1486+
# generate keys and commands for compiling shaders
1487+
foreach(BUILD_CONFIGURATION ${CMAKE_CONFIGURATION_TYPES})
1488+
set(TARGET_OUTPUT "${IMPL_BINARY_DIR}/${BUILD_CONFIGURATION}/${FINAL_KEY}")
1489+
1490+
set(NBL_NSC_COMPILE_COMMAND
1491+
"$<TARGET_FILE:nsc>"
1492+
-Fc "${TARGET_OUTPUT}"
1493+
${COMPILE_OPTIONS} ${REQUIRED_OPTIONS} ${IMPL_COMMON_OPTIONS}
1494+
"${CONFIG_FILE}"
1495+
)
1496+
1497+
add_custom_command(OUTPUT "${TARGET_OUTPUT}"
1498+
COMMAND ${NBL_NSC_COMPILE_COMMAND}
1499+
DEPENDS ${DEPENDS_ON}
1500+
COMMENT "Creating \"${TARGET_OUTPUT}\""
1501+
VERBATIM
1502+
COMMAND_EXPAND_LISTS
1503+
)
1504+
1505+
set(HEADER_ONLY_LIKE "${CONFIG_FILE}" "${TARGET_INPUT}" "${TARGET_OUTPUT}")
1506+
target_sources(${IMPL_TARGET} PRIVATE ${HEADER_ONLY_LIKE})
1507+
1508+
set_source_files_properties(${HEADER_ONLY_LIKE} PROPERTIES
1509+
HEADER_FILE_ONLY ON
1510+
VS_TOOL_OVERRIDE None
1511+
)
1512+
1513+
set_source_files_properties("${TARGET_OUTPUT}" PROPERTIES
1514+
NBL_SPIRV_REGISTERED_INPUT "${TARGET_INPUT}"
1515+
NBL_SPIRV_PERMUTATION_CONFIG "${CONFIG_FILE}"
1516+
NBL_SPIRV_BINARY_DIR "${IMPL_BINARY_DIR}"
1517+
NBL_SPIRV_ACCESS_KEY "${FINAL_KEY}"
1518+
)
1519+
1520+
set_property(TARGET ${IMPL_TARGET} APPEND PROPERTY NBL_SPIRV_OUTPUTS "${TARGET_OUTPUT}")
1521+
endforeach()
14871522
return()
14881523
endif()
14891524

0 commit comments

Comments
 (0)