diff --git a/CMakeLists.txt b/CMakeLists.txt index 6781c03..d939178 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,8 +65,6 @@ if ( NOT DEFINED CRG_UNITY_BUILD ) option( CRG_UNITY_BUILD "Build RenderGraph using Unity (Jumbo) build method" OFF ) endif () -set( PROJECTS_UNITY_BUILD ${CRG_UNITY_BUILD} ) - if ( MSVC OR NOT "${CMAKE_BUILD_TYPE}" STREQUAL "" ) configure_file( ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Version.hpp.in @@ -180,7 +178,7 @@ if ( MSVC OR NOT "${CMAKE_BUILD_TYPE}" STREQUAL "" ) ) source_group( "Header Files\\RunnablePasses" FILES ${${PROJECT_NAME}_FOLDER_HDR_FILES} ) source_group( "Source Files\\RunnablePasses" FILES ${${PROJECT_NAME}_FOLDER_SRC_FILES} ) - if ( ${PROJECTS_UNITY_BUILD} ) + if ( ${CRG_UNITY_BUILD} ) file( GLOB ${PROJECT_NAME}_FOLDER_SRC_FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${PROJECT_NAME}.dir/Unity/*.cxx ) @@ -258,7 +256,7 @@ if ( MSVC OR NOT "${CMAKE_BUILD_TYPE}" STREQUAL "" ) CXX_STANDARD 20 FOLDER "${CRG_BASE_DIR}/Core" DEBUG_POSTFIX "d" - UNITY_BUILD "${PROJECTS_UNITY_BUILD}" + UNITY_BUILD "${CRG_UNITY_BUILD}" ) install( TARGETS ${PROJECT_NAME} diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt new file mode 100644 index 0000000..9405965 --- /dev/null +++ b/source/CMakeLists.txt @@ -0,0 +1,298 @@ +cmake_minimum_required( VERSION 3.10 ) +cmake_policy( VERSION 3.10 ) + +#-------------------------------------------------------------------------------------------------- +# Initial configurations +#-------------------------------------------------------------------------------------------------- +# Set project name, used in folders and in workspace creation +set( MAIN_PROJECT_NAME "RenderGraph" ) + +# Set project version numbers +set( VERSION_MAJOR 2 ) +set( VERSION_MINOR 1 ) +set( VERSION_BUILD 0 ) +set( VERSION_YEAR 2025 ) + +set( _PROJECT_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}" ) +set( _PROJECT_SOVERSION "${VERSION_BUILD}" ) + +# Used to look for external modules +if ( NOT CMAKE_MODULE_PATH ) + set( CMAKE_MODULE_PATH + ${CMAKE_SOURCE_DIR}/CMake + ${CMAKE_SOURCE_DIR}/CMake/Modules + ${CMAKE_SOURCE_DIR}/CMake/Toolchains + ) + set( CMAKE_TEMPLATES_DIR ${CMAKE_SOURCE_DIR}/CMake/Templates ) +endif () + +set( CMAKE_POSITION_INDEPENDENT_CODE ON ) +set( CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "The configuration types" FORCE ) + +# Experimental Precompiled headers support for GCC +include( PCHSupport ) + +# Declare the project +project( ${MAIN_PROJECT_NAME} ) + +include( Setup ) +include( Project ) +include( CompilerVersion ) +include( UnitTest ) +include( CompilationFlags ) +include( AStyleUtils ) +include( ExternalDependencies ) +include( Coverage ) + +# Organize projects into folders +set_property( GLOBAL PROPERTY USE_FOLDERS ON ) + +#-------------------------------------------------------------------------------------------------- +# Adding include dirs to include search path +#-------------------------------------------------------------------------------------------------- +set( CRG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} ) +set( CRG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} ) + +set( CRG_EDITORCONFIG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/.editorconfig ) + +if ( NOT DEFINED CRG_BUILD_STATIC ) + option( CRG_BUILD_STATIC "Build as a static library" ON ) +endif () +if ( NOT DEFINED CRG_BUILD_TESTS ) + option( CRG_BUILD_TESTS "Build RenderGraph test applications" OFF ) +endif () +if ( NOT DEFINED CRG_UNITY_BUILD ) + option( CRG_UNITY_BUILD "Build RenderGraph using Unity (Jumbo) build method" OFF ) +endif () + +set( PROJECTS_UNITY_BUILD ${CRG_UNITY_BUILD} ) + +if ( MSVC OR NOT "${CMAKE_BUILD_TYPE}" STREQUAL "" ) + configure_file( + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Version.hpp.in + ${CRG_BINARY_DIR}/include/${PROJECT_NAME}/Version.hpp + NEWLINE_STYLE LF + ) + # RenderGraph library + project( RenderGraph ) + set( ${PROJECT_NAME}_HDR_FILES + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Attachment.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/AttachmentTransition.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/BufferData.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/BufferViewData.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/DotExport.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Exception.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FrameGraph.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FrameGraphBase.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FrameGraphEnums.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FrameGraphFunctions.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FrameGraphPrerequisites.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FrameGraphStructs.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FramePass.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FramePassGroup.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/FramePassTimer.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/GraphContext.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/GraphNode.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/GraphVisitor.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Hash.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Id.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/ImageData.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/ImageViewData.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/LayerLayoutStatesHandler.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Log.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/PixelFormat.inl + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RecordContext.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/ResourceHandler.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnableGraph.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePass.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/Signal.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/WriteDescriptorSet.hpp + ${CRG_BINARY_DIR}/include/${PROJECT_NAME}/Version.hpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/GraphBuilder.hpp + ) + set( ${PROJECT_NAME}_SRC_FILES + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/Attachment.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/AttachmentTransition.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/DotExport.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/FrameGraph.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/FrameGraphPrerequisites.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/FramePass.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/FramePassGroup.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/FramePassTimer.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/GraphBuilder.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/GraphContext.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/GraphNode.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/LayerLayoutStatesHandler.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/Log.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RecordContext.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/ResourceHandler.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnableGraph.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePass.cpp + ) + set( ${PROJECT_NAME}_NVS_FILES + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/FrameGraph.natvis + ) + source_group( "Header Files" FILES ${${PROJECT_NAME}_HDR_FILES} ) + source_group( "Source Files" FILES ${${PROJECT_NAME}_SRC_FILES} ) + source_group( "Visualisation Files" FILES ${${PROJECT_NAME}_NVS_FILES} ) + set( ${PROJECT_NAME}_FOLDER_HDR_FILES + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/BufferCopy.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/BufferToImageCopy.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/ComputePass.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/GenerateMipmaps.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/ImageBlit.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/ImageCopy.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/ImageToBufferCopy.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/PipelineConfig.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/PipelineHolder.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderPass.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderPassHolder.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderMesh.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderMeshConfig.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderMeshHolder.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderQuad.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderQuadConfig.hpp + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME}/RunnablePasses/RenderQuadHolder.hpp + ) + set( ${PROJECT_NAME}_FOLDER_SRC_FILES + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/BufferCopy.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/BufferToImageCopy.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/ComputePass.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/GenerateMipmaps.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/ImageBlit.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/ImageCopy.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/ImageToBufferCopy.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/PipelineHolder.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/RenderPass.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/RenderPassHolder.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/RenderMesh.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/RenderMeshHolder.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/RenderQuad.cpp + ${CRG_SOURCE_DIR}/source/${PROJECT_NAME}/RunnablePasses/RenderQuadHolder.cpp + ) + set( ${PROJECT_NAME}_SRC_FILES + ${${PROJECT_NAME}_SRC_FILES} + ${${PROJECT_NAME}_FOLDER_SRC_FILES} + ) + set( ${PROJECT_NAME}_HDR_FILES + ${${PROJECT_NAME}_HDR_FILES} + ${${PROJECT_NAME}_FOLDER_HDR_FILES} + ) + source_group( "Header Files\\RunnablePasses" FILES ${${PROJECT_NAME}_FOLDER_HDR_FILES} ) + source_group( "Source Files\\RunnablePasses" FILES ${${PROJECT_NAME}_FOLDER_SRC_FILES} ) + if ( ${PROJECTS_UNITY_BUILD} ) + file( GLOB ${PROJECT_NAME}_FOLDER_SRC_FILES + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${PROJECT_NAME}.dir/Unity/*.cxx + ) + source_group( "Source Files\\Unity" FILES ${${PROJECT_NAME}_FOLDER_SRC_FILES} ) + endif () + if ( CRG_BUILD_STATIC ) + add_library( ${PROJECT_NAME} STATIC + ${${PROJECT_NAME}_HDR_FILES} + ${${PROJECT_NAME}_SRC_FILES} + ${${PROJECT_NAME}_NVS_FILES} + ) + target_compile_definitions( ${PROJECT_NAME} + PUBLIC + CRG_BUILD_STATIC + ) + else () + add_library( ${PROJECT_NAME} SHARED + ${${PROJECT_NAME}_HDR_FILES} + ${${PROJECT_NAME}_SRC_FILES} + ${${PROJECT_NAME}_NVS_FILES} + ) + set_target_properties( ${PROJECT_NAME} + PROPERTIES + VERSION ${_PROJECT_VERSION} + SOVERSION ${_PROJECT_SOVERSION} + ) + if ( WIN32 ) + target_link_libraries( ${PROJECT_NAME} + PUBLIC + Dbghelp + ) + else () + target_link_libraries( ${PROJECT_NAME} + PRIVATE + dl + ) + endif () + endif () + add_library( crg::${PROJECT_NAME} + ALIAS + ${PROJECT_NAME} + ) + target_add_coverage_flags( ${PROJECT_NAME} ) + target_sources( ${PROJECT_NAME} + PRIVATE + ${CRG_EDITORCONFIG_FILE} + ) + target_add_compilation_flags( ${PROJECT_NAME} ) + target_compile_options( ${PROJECT_NAME} + PUBLIC + $<$:/Zm300> + $<$:-Wno-poison-system-directories> + $<$:-Wno-poison-system-directories> + ) + target_compile_definitions( ${PROJECT_NAME} + PUBLIC + CRG_VERSION_MAJOR=${VERSION_MAJOR} + CRG_VERSION_MINOR=${VERSION_MINOR} + CRG_VERSION_BUILD=${VERSION_BUILD} + ) + target_include_directories( ${PROJECT_NAME} + PUBLIC + $ + $ + $ + $ + ) + find_package( VulkanHeaders CONFIG ) + target_link_libraries( ${PROJECT_NAME} + PRIVATE + Vulkan::Headers + ) + message( STATUS "PROJECTS_UNITY_BUILD [${PROJECTS_UNITY_BUILD}]" ) + set_target_properties( ${PROJECT_NAME} + PROPERTIES + CXX_STANDARD 20 + FOLDER "${CRG_BASE_DIR}/Core" + DEBUG_POSTFIX "d" + UNITY_BUILD "${PROJECTS_UNITY_BUILD}" + ) + install( + TARGETS ${PROJECT_NAME} + COMPONENT ${PROJECT_NAME} + EXPORT ${PROJECT_NAME} + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + ) + install( + FILES ${CRG_BINARY_DIR}/include/${PROJECT_NAME}/Version.hpp + DESTINATION include/${PROJECT_NAME} + COMPONENT ${PROJECT_NAME} + CONFIGURATIONS Release + ) + target_install_headers( ${PROJECT_NAME} + ${CRG_SOURCE_DIR}/include/${PROJECT_NAME} + ) + install( EXPORT ${PROJECT_NAME} + COMPONENT ${PROJECT_NAME} + FILE ${PROJECT_NAME}Config.cmake + NAMESPACE crg:: + DESTINATION share/${PROJECT_NAME} + ) + include(CMakePackageConfigHelpers) + write_basic_package_version_file( ${PROJECT_NAME}ConfigVersion.cmake + VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD} + COMPATIBILITY AnyNewerVersion + ) + + if ( CRG_BUILD_TESTS ) + add_subdirectory( test ) + endif () +else() + message( SEND_ERROR "Please select a build type (Debug or Release)" ) +endif() diff --git a/source/RenderGraph/FrameGraph.natvis b/source/RenderGraph/FrameGraph.natvis index b6a5c6c..c01a624 100644 --- a/source/RenderGraph/FrameGraph.natvis +++ b/source/RenderGraph/FrameGraph.natvis @@ -119,30 +119,33 @@ - {group}/{id} {m_name,sb} + {m_group}/{m_id} {m_name,sb} - group - id + m_group + m_id m_name - uniforms - sampled - inputs - inouts - outputs - targets + m_uniforms + m_sampled + m_inputs + m_inouts + m_outputs + m_targets + m_ownAttaches - {m_name,sb} - {*parent}/{m_name,sb} + {m_name,sb} + {*m_parent}/{m_name,sb} - id + m_id m_name - passes - groups - parent + m_passes + m_groups + m_parent m_graph + m_inputs + m_outputs