5 changed files with 13 additions and 159 deletions
@ -1,3 +1,3 @@ |
|||||
[submodule "3rdparty/nvpro_core"] |
[submodule "3rdparty/nvpro_core"] |
||||
path = 3rdparty/nvpro_core |
path = 3rdparty/nvpro_core |
||||
url = https://github.com/nvpro-samples/nvpro_core.git |
url = https://gitee.com/ZC__Wang/nvpro_core.git |
||||
|
@ -1 +1 @@ |
|||||
Subproject commit e15f6038b54c39b4ad756c9e14a8354b56b4d82f |
Subproject commit c4547527036daa1dea26de7f83c03dad77495fc3 |
@ -1,135 +0,0 @@ |
|||||
function(compile_glsl_by_shaderc) |
|
||||
set(oneValueArgs DST VULKAN_TARGET DEPENDENCY) |
|
||||
set(multiValueArgs SOURCE_FILES HEADER_FILES FLAGS) |
|
||||
cmake_parse_arguments(COMPILE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) |
|
||||
|
|
||||
# Check if the GLSL compiler is present |
|
||||
if(NOT GLSLC) |
|
||||
message(ERROR "Could not find GLSLC to compile shaders") |
|
||||
return() |
|
||||
endif() |
|
||||
|
|
||||
# By default use Vulkan 1.1 |
|
||||
if(NOT DEFINED COMPILE_VULKAN_TARGET) |
|
||||
set(COMPILE_VULKAN_TARGET vulkan1.1) |
|
||||
endif() |
|
||||
|
|
||||
# If destination is not present, same as source |
|
||||
if(NOT DEFINED COMPILE_DST) |
|
||||
message(ERROR " --- DST not defined") |
|
||||
return() |
|
||||
endif() |
|
||||
|
|
||||
# Make the output directory if needed |
|
||||
file(MAKE_DIRECTORY ${COMPILE_DST}) |
|
||||
|
|
||||
# If no flag set -g (debug) |
|
||||
if(NOT DEFINED COMPILE_FLAGS) |
|
||||
set(COMPILE_FLAGS -g) |
|
||||
endif() |
|
||||
|
|
||||
# Compiling all GLSL sources |
|
||||
foreach(GLSL_SRC ${COMPILE_SOURCE_FILES}) |
|
||||
|
|
||||
# Find the dependency files for the GLSL source |
|
||||
# or use all headers as dependencies. |
|
||||
if(COMPILE_DEPENDENCY) |
|
||||
get_glsl_dependencies(SRC ${GLSL_SRC} FLAGS ${COMPILE_FLAGS}) |
|
||||
else() |
|
||||
set(GLSL_DEPENDENCY ${HEADER_FILES}) |
|
||||
endif() |
|
||||
|
|
||||
# Default compiler command, always adding debug information (Add and option to opt-out?) |
|
||||
set(COMPILE_CMD ${COMPILE_FLAGS} --target-env=${COMPILE_VULKAN_TARGET}) |
|
||||
|
|
||||
# Compilation to headers need a variable name, the output will be a .h |
|
||||
get_filename_component(FILE_NAME ${GLSL_SRC} NAME) |
|
||||
set(GLSL_OUT "${COMPILE_DST}/${FILE_NAME}.spv") |
|
||||
list(APPEND _SPVS ${GLSL_OUT}) |
|
||||
|
|
||||
|
|
||||
# Appending the output name and the file source |
|
||||
list(APPEND COMPILE_CMD -o ${GLSL_OUT} ${GLSL_SRC} ) |
|
||||
|
|
||||
# The custom command is added to the build system, check for the presence of the output |
|
||||
# but also for changes done in GLSL headers |
|
||||
add_custom_command( |
|
||||
PRE_BUILD |
|
||||
OUTPUT ${GLSL_OUT} |
|
||||
COMMAND echo ${GLSLC} ${COMPILE_CMD} |
|
||||
COMMAND ${GLSLC} ${COMPILE_CMD} |
|
||||
MAIN_DEPENDENCY ${GLSL_SRC} |
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
|
||||
DEPENDS ${GLSL_DEPENDENCY} |
|
||||
) |
|
||||
endforeach() |
|
||||
|
|
||||
# Setting OUT variables |
|
||||
set(GLSL_SOURCES ${COMPILE_SOURCE_FILES} PARENT_SCOPE) |
|
||||
set(GLSL_HEADERS ${COMPILE_HEADER_FILES} PARENT_SCOPE) |
|
||||
set(SPV_OUTPUT ${_SPVS} PARENT_SCOPE) |
|
||||
|
|
||||
endfunction() |
|
||||
|
|
||||
# ------------------------------------------------------------------------ |
|
||||
# ------------------------------------------------------------------------ |
|
||||
# ------------------------------------------------------------------------ |
|
||||
|
|
||||
function(compile_glsl_directory_by_shaderc) |
|
||||
set(oneValueArgs SRC DST VULKAN_TARGET DEPENDENCY) |
|
||||
set(multiValueArgs FLAGS) |
|
||||
cmake_parse_arguments(COMPILE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) |
|
||||
|
|
||||
# Collecting all source files |
|
||||
file(GLOB_RECURSE GLSL_SOURCE_FILES |
|
||||
"${COMPILE_SRC}/*.comp" # Compute |
|
||||
"${COMPILE_SRC}/*.frag" # Fragment |
|
||||
"${COMPILE_SRC}/*.geom" # Geometry |
|
||||
"${COMPILE_SRC}/*.mesh" # Mesh |
|
||||
"${COMPILE_SRC}/*.rahit" # Ray any hit |
|
||||
"${COMPILE_SRC}/*.rcall" # Ray callable |
|
||||
"${COMPILE_SRC}/*.rchit" # Ray closest hit |
|
||||
"${COMPILE_SRC}/*.rgen" # Ray generation |
|
||||
"${COMPILE_SRC}/*.rint" # Ray intersection |
|
||||
"${COMPILE_SRC}/*.rmiss" # Ray miss |
|
||||
"${COMPILE_SRC}/*.task" # Task |
|
||||
"${COMPILE_SRC}/*.tesc" # Tessellation control |
|
||||
"${COMPILE_SRC}/*.tese" # Tessellation evaluation |
|
||||
"${COMPILE_SRC}/*.vert" # Vertex |
|
||||
) |
|
||||
|
|
||||
# Collecting headers for dependencies |
|
||||
file(GLOB_RECURSE GLSL_HEADER_FILES |
|
||||
"${COMPILE_SRC}/*.glsl" # Auto detect - used for header |
|
||||
"${COMPILE_SRC}/*.h" |
|
||||
) |
|
||||
|
|
||||
# By default use Vulkan 1.1 |
|
||||
if(NOT DEFINED COMPILE_VULKAN_TARGET) |
|
||||
set(COMPILE_VULKAN_TARGET vulkan1.1) |
|
||||
endif() |
|
||||
|
|
||||
# If destination is not present, same as source |
|
||||
if(NOT DEFINED COMPILE_DST) |
|
||||
set(COMPILE_DST ${COMPILE_SRC}) |
|
||||
endif() |
|
||||
|
|
||||
# If no flag set -g (debug) |
|
||||
if(NOT DEFINED COMPILE_FLAGS) |
|
||||
set(COMPILE_FLAGS -g) |
|
||||
endif() |
|
||||
|
|
||||
# Compiling all GLSL |
|
||||
compile_glsl_by_shaderc(SOURCE_FILES ${GLSL_SOURCE_FILES} |
|
||||
HEADER_FILES ${GLSL_HEADER_FILES} |
|
||||
DST ${COMPILE_DST} |
|
||||
VULKAN_TARGET ${COMPILE_VULKAN_TARGET} |
|
||||
DEPENDENCY ${COMPILE_DEPENDENCY} |
|
||||
FLAGS ${COMPILE_FLAGS} |
|
||||
) |
|
||||
|
|
||||
# Setting OUT variables |
|
||||
set(GLSL_SOURCES ${GLSL_SOURCE_FILES} PARENT_SCOPE) |
|
||||
set(GLSL_HEADERS ${GLSL_HEADER_FILES} PARENT_SCOPE) |
|
||||
set(SPV_OUTPUT ${SPV_OUTPUT} PARENT_SCOPE) # propagate value set in compile_glsl |
|
||||
endfunction() |
|
Loading…
Reference in new issue