Skip to content

Commit a54a290

Browse files
committed
Add NSC preprocess mode
1 parent c640685 commit a54a290

1 file changed

Lines changed: 41 additions & 12 deletions

File tree

cmake/common.cmake

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,6 +1395,24 @@ namespace @IMPL_NAMESPACE@ {
13951395
list(APPEND DEPENDS_ON ${IMPL_DEPENDS})
13961396
endif()
13971397

1398+
function(ERROR_WHILE_PARSING_ITEM)
1399+
string(JSON ITEM GET "${IMPL_INPUTS}" ${INDEX})
1400+
message(FATAL_ERROR
1401+
"While parsing ${IMPL_TARGET}'s NSC compile rule\n${ITEM}\n"
1402+
${ARGV}
1403+
)
1404+
endfunction()
1405+
1406+
set(RULE_MODE compile)
1407+
string(JSON MODE_TYPE ERROR_VARIABLE MODE_ERROR TYPE "${IMPL_INPUTS}" ${INDEX} MODE)
1408+
if(NOT MODE_ERROR)
1409+
if(NOT MODE_TYPE STREQUAL "STRING")
1410+
ERROR_WHILE_PARSING_ITEM("MODE must be a string when present")
1411+
endif()
1412+
string(JSON RULE_MODE GET "${IMPL_INPUTS}" ${INDEX} MODE)
1413+
string(TOLOWER "${RULE_MODE}" RULE_MODE)
1414+
endif()
1415+
13981416
set(HAS_CAPS FALSE)
13991417
set(CAPS_LENGTH 0)
14001418
string(JSON CAPS_TYPE ERROR_VARIABLE ERROR_VAR TYPE "${IMPL_INPUTS}" ${INDEX} CAPS)
@@ -1405,13 +1423,12 @@ namespace @IMPL_NAMESPACE@ {
14051423
endif()
14061424
endif()
14071425

1408-
function(ERROR_WHILE_PARSING_ITEM)
1409-
string(JSON ITEM GET "${IMPL_INPUTS}" ${INDEX})
1410-
message(FATAL_ERROR
1411-
"While parsing ${IMPL_TARGET}'s NSC compile rule\n${ITEM}\n"
1412-
${ARGV}
1413-
)
1414-
endfunction()
1426+
if(NOT RULE_MODE MATCHES "^(compile|preprocess)$")
1427+
ERROR_WHILE_PARSING_ITEM(
1428+
"Invalid MODE \"${RULE_MODE}\"\n"
1429+
"Allowed modes are: compile, preprocess"
1430+
)
1431+
endif()
14151432

14161433
set(CAP_NAMES "")
14171434
set(CAP_TYPES "")
@@ -1498,6 +1515,17 @@ namespace @IMPL_NAMESPACE@ {
14981515

14991516
set_property(TARGET ${IMPL_TARGET} APPEND PROPERTY NBL_CANONICAL_IDENTIFIERS "${NEW_CANONICAL_IDENTIFIER}")
15001517

1518+
set(OUTPUT_EXT ".spv")
1519+
set(OUTPUT_PREFIX "$<CONFIG>/")
1520+
set(OUTPUT_GROUP_BY_CONFIG TRUE)
1521+
set(MODE_ARGS "")
1522+
if(RULE_MODE STREQUAL "preprocess")
1523+
set(OUTPUT_EXT ".preprocessed.hlsl")
1524+
set(OUTPUT_PREFIX "")
1525+
set(OUTPUT_GROUP_BY_CONFIG FALSE)
1526+
list(APPEND MODE_ARGS -P)
1527+
endif()
1528+
15011529
set(HEADER_ITEM_VIEW [=[
15021530
namespace @IMPL_NAMESPACE@ {
15031531
template<>
@@ -1506,8 +1534,8 @@ namespace @IMPL_NAMESPACE@ {
15061534
{
15071535
nbl::core::string retval = "@BASE_KEY@";
15081536
@RETVAL_EVAL@
1509-
retval += ".spv";
1510-
return "$<CONFIG>/" + retval;
1537+
retval += "@OUTPUT_EXT@";
1538+
return "@OUTPUT_PREFIX@" + retval;
15111539
}
15121540
}
15131541
@@ -1532,15 +1560,15 @@ namespace @IMPL_NAMESPACE@ {
15321560
function(GENERATE_KEYS PREFIX CAP_INDEX CAPS_EVAL_PART)
15331561
if(NUM_CAPS EQUAL 0 OR CAP_INDEX EQUAL ${NUM_CAPS})
15341562
# generate .config file
1535-
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
1563+
set(FINAL_KEY "${BASE_KEY}${PREFIX}${OUTPUT_EXT}")
15361564
set(CONFIG_FILE_TARGET_OUTPUT "${IMPL_BINARY_DIR}/${FINAL_KEY}")
15371565
set(CONFIG_FILE "${CONFIG_FILE_TARGET_OUTPUT}.config")
15381566
set(CAPS_EVAL "${CAPS_EVAL_PART}")
15391567
string(CONFIGURE "${DEVICE_CONFIG_VIEW}" CONFIG_CONTENT @ONLY)
15401568
file(WRITE "${CONFIG_FILE}" "${CONFIG_CONTENT}")
15411569

15421570
# generate keys and commands for compiling shaders
1543-
set(FINAL_KEY_REL_PATH "$<CONFIG>/${FINAL_KEY}")
1571+
set(FINAL_KEY_REL_PATH "${OUTPUT_PREFIX}${FINAL_KEY}")
15441572
set(TARGET_OUTPUT "${IMPL_BINARY_DIR}/${FINAL_KEY_REL_PATH}")
15451573
set(DEPFILE_PATH "${TARGET_OUTPUT}.d")
15461574
set(NBL_NSC_LOG_PATH "${TARGET_OUTPUT}.log")
@@ -1553,6 +1581,7 @@ namespace @IMPL_NAMESPACE@ {
15531581
set(NBL_NSC_COMPILE_COMMAND
15541582
"$<TARGET_FILE:Nabla::nsc>"
15551583
${NBL_NSC_EXTRA_ARGS}
1584+
${MODE_ARGS}
15561585
-Fc "${TARGET_OUTPUT}"
15571586
${COMPILE_OPTIONS} ${REQUIRED_OPTIONS} ${IMPL_COMMON_OPTIONS}
15581587
${NBL_NSC_DEPFILE_ARGS}
@@ -1600,7 +1629,7 @@ namespace @IMPL_NAMESPACE@ {
16001629
HEADER_FILE_ONLY ON
16011630
VS_TOOL_OVERRIDE None
16021631
)
1603-
if(CMAKE_CONFIGURATION_TYPES)
1632+
if(CMAKE_CONFIGURATION_TYPES AND OUTPUT_GROUP_BY_CONFIG)
16041633
foreach(_CFG IN LISTS CMAKE_CONFIGURATION_TYPES)
16051634
set(TARGET_OUTPUT_IDE "${IMPL_BINARY_DIR}/${_CFG}/${FINAL_KEY}")
16061635
set(NBL_NSC_OUT_FILES_IDE "${TARGET_OUTPUT_IDE}" "${TARGET_OUTPUT_IDE}.log")

0 commit comments

Comments
 (0)