diff --git a/CMakeLists.txt b/CMakeLists.txt
index f69f4e79a51c963f81016b6d922ba911c04be31a..e3a8d930f061b25631dff84ba8ed425d780f9055 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,28 @@
 cmake_minimum_required(VERSION 3.16)
 project(vkcv)
 
+# cmake options
+option(BUILD_MODULES "Enables building VkCV as shared libraries" ON)
+option(BUILD_PROJECTS "Enables building the VkCV projects" ON)
+option(BUILD_DOXYGEN_DOCS "Enables building the VkCV doxygen documentation" OFF)
+option(BUILD_SHARED "Enables building VkCV as shared libraries" OFF)
+
+if (BUILD_PROJECTS)
+	set(BUILD_MODULES ${BUILD_PROJECTS})
+endif()
+
+message(STATUS "Options:")
+message(" - BUILD_MODULES: ${BUILD_MODULES}")
+message(" - BUILD_PROJECTS: ${BUILD_PROJECTS}")
+message(" - BUILD_DOXYGEN_DOCS: ${BUILD_DOXYGEN_DOCS}")
+message(" - BUILD_SHARED: ${BUILD_SHARED}")
+
+if (BUILD_SHARED)
+	set(vkcv_build_attribute SHARED)
+else()
+	set(vkcv_build_attribute STATIC)
+endif()
+
 # settings c++ standard for the framework
 set(CMAKE_CXX_STANDARD 20)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -11,8 +33,8 @@ if (CMAKE_BUILD_TYPE)
 	set(vkcv_build_${_vkcv_build_type} 1)
 endif()
 
-message("-- Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]")
-message("-- Compiler: [ " ${CMAKE_CXX_COMPILER_ID} " " ${CMAKE_CXX_COMPILER_VERSION} " ]")
+message(STATUS "Language: [ C++ " ${CMAKE_CXX_STANDARD} " ]")
+message(STATUS "Compiler: [ " ${CMAKE_CXX_COMPILER_ID} " " ${CMAKE_CXX_COMPILER_VERSION} " ]")
 
 if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0.0"))
 	message(FATAL_ERROR "Upgrade your compiler! GCC 9.0+ is required!")
@@ -57,20 +79,30 @@ list(APPEND vkcv_definitions VULKAN_DEBUG_LABELS)
 # set the compile definitions aka preprocessor variables
 add_compile_definitions(${vkcv_definitions})
 
-# add modules as targets
-add_subdirectory(modules)
+# check if the framework is used from a parent scope
+get_directory_property(vkcv_parent_scope PARENT_DIRECTORY)
+
+if (BUILD_MODULES)
+	message(STATUS "Modules: ON")
+	
+	# add modules as targets
+	add_subdirectory(modules)
+else()
+	message(STATUS "Modules: OFF")
+endif()
 
 # add source files for compilation
 include(${vkcv_config}/Sources.cmake)
 
-message("-- Libraries: [ ${vkcv_libraries} ]")
-message("-- Flags: [ ${vkcv_flags} ]")
+message(STATUS "Framework:")
+message(" - Libraries: [ ${vkcv_libraries} ]")
+message(" - Flags: [ ${vkcv_flags} ]")
 
 # set the compiler flags for the framework
 set(CMAKE_CXX_FLAGS ${vkcv_flags})
 
-# create VkCV framework as static library using all source files
-add_library(vkcv STATIC ${vkcv_sources})
+# create VkCV framework as library using all source files
+add_library(vkcv ${vkcv_build_attribute} ${vkcv_sources})
 
 if(MSVC)
   #enable multicore compilation on visual studio
@@ -82,20 +114,40 @@ endif()
 
 # add include directories from dependencies as system includes
 target_include_directories(vkcv SYSTEM BEFORE PRIVATE ${vkcv_includes})
-message(STATUS ${vkcv_includes})
 
 # add the own include directory for public headers
 target_include_directories(vkcv BEFORE PUBLIC ${vkcv_include})
-message(STATUS ${vkcv_include})
 
 # link the framework using all required libraries
 target_link_libraries(vkcv ${vkcv_libraries})
-message(STATUS ${vkcv_libraries})
 
-# add sub-projects/examples as targets
-add_subdirectory(projects)
+if (BUILD_PROJECTS)
+	message(STATUS "Projects: ON")
+	
+	# add sub-projects/examples as targets
+	add_subdirectory(projects)
+else()
+	message(STATUS "Projects: OFF")
+endif()
 
-if (NOT WIN32)
+if (BUILD_DOXYGEN_DOCS)
+	message(STATUS "Doxygen: ON")
+	
 	# add doxygen as target if installed
 	include(${vkcv_config}/ext/Doxygen.cmake)
+else()
+	message(STATUS "Doxygen: OFF")
+endif()
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_includes ${vkcv_include})
+	list(APPEND vkcv_libraries vkcv)
+	
+	if (BUILD_MODULES)
+		list(APPEND vkcv_includes ${vkcv_modules_includes})
+		list(APPEND vkcv_libraries ${vkcv_modules_libraries})
+	endif()
+	
+	set(vkcv_includes ${vkcv_includes} PARENT_SCOPE)
+	set(vkcv_libraries ${vkcv_libraries} PARENT_SCOPE)
 endif()
\ No newline at end of file
diff --git a/README.md b/README.md
index 8510d57642033b114904c9d68e4bec9bd58ba89b..62efc4df4a929963f8581c1c2cc66796f4c6a80d 100644
--- a/README.md
+++ b/README.md
@@ -16,6 +16,11 @@ More information about Git LFS [here](https://git-lfs.github.com/).
 Git submodules are used for libraries. 
 To download the submodules either clone using `git clone --recurse-submodules` or after `git clone` use `git submodule init` and `git submodule update`.
 
+Detailed build process:
+ - [How to build on Windows](doc/BUILD_WINDOWS.md)
+ - [How to build on macOS](doc/BUILD_MACOS.md)
+ - [How to build on Linux](doc/BUILD_LINUX.md)
+
 ### Dependencies (required):
 
 Most dependencies will be used via submodules but for example Vulkan needs to be installed correctly depending on your platform. So please setup your environment properly.
diff --git a/config/ext/Doxygen.cmake b/config/ext/Doxygen.cmake
index b711ac4b24777642fc3202be8909ac405b84d92b..c5f6d7f88cbdb9ef7c119c4b5dd6ee7de1199bc9 100644
--- a/config/ext/Doxygen.cmake
+++ b/config/ext/Doxygen.cmake
@@ -1,6 +1,6 @@
 
 # check if Doxygen is installed
-find_package(Doxygen)
+find_package(Doxygen QUIET)
 
 if (DOXYGEN_FOUND)
 	# note the option ALL which allows to build the docs together with the application
diff --git a/doc/BUILD_LINUX.md b/doc/BUILD_LINUX.md
new file mode 100644
index 0000000000000000000000000000000000000000..ac37950ebe951f5c2ea40e4354d1f45a351b6e27
--- /dev/null
+++ b/doc/BUILD_LINUX.md
@@ -0,0 +1,30 @@
+# How to build on Linux
+
+## How to build with GCC on Archlinux by the way
+
+1. Install required and useful tools to develop:
+```
+sudo pacman -S cmake gcc vulkan-icd-loader vulkan-headers vulkan-validation-layers vulkan-tools
+```
+2. Install the matching Vulkan drivers for your system:
+```
+# For discrete Nvidia GPUs:
+sudo pacman -S nvidia
+
+# For integrated or discrete Radeon GPUs:
+sudo pacman -S vulkan-radeon
+
+# For integrated or discrete Intel GPUs:
+sudo pacman -S vulkan-intel
+```
+3. Clone the repository and run the following commands:
+```
+mkdir debug
+cd debug
+cmake -DCMAKE_C_COMPILER="/usr/bin/gcc" -DCMAKE_CXX_COMPILER="/usr/bin/g++" -DCMAKE_BUILD_TYPE=Debug ..
+cmake --build .
+```
+
+## How to build with Clang on Archlinux by the way
+
+Just follow the steps of "How to build with GCC on Archlinux by the way" but replace `gcc` with `clang` and `g++` with `clang++`.
diff --git a/doc/BUILD_MACOS.md b/doc/BUILD_MACOS.md
new file mode 100644
index 0000000000000000000000000000000000000000..c0b20bd1c59030492cea66d6b562b6204e2025db
--- /dev/null
+++ b/doc/BUILD_MACOS.md
@@ -0,0 +1,19 @@
+# How to build on macOS
+
+## How to build with Clang on macOS
+
+1. Install Homebrew
+2. Install required tools to compile:
+```
+brew install cmake llvm libomp
+```
+3. Download and install latest [vulkansdk-macos-*.dmg](https://vulkan.lunarg.com/doc/sdk/1.2.189.0/mac/getting_started.html) to ~/VulkanSDK
+4. Clone the repository and run the following commands:
+```
+mkdir debug
+cd debug
+export LDFLAGS="-L/usr/local/opt/llvm/lib"
+export CPPFLAGS="-I/usr/local/opt/llvm/include"
+cmake -DCMAKE_C_COMPILER="/usr/local/opt/llvm/bin/clang" -DCMAKE_CXX_COMPILER="/usr/local/opt/llvm/bin/clang++" -DCMAKE_BUILD_TYPE=Debug ..
+cmake --build .
+```
\ No newline at end of file
diff --git a/doc/BUILD_WINDOWS.md b/doc/BUILD_WINDOWS.md
new file mode 100644
index 0000000000000000000000000000000000000000..215d4a625ea549635aa7d06a03469486890eb6c0
--- /dev/null
+++ b/doc/BUILD_WINDOWS.md
@@ -0,0 +1,34 @@
+# How to build on Windows
+
+## How to build with MSVC on Windows
+
+1. Download and install [VulkanSDK](https://vulkan.lunarg.com/sdk/home#windows)
+2. Download and install [VisualStudio](https://visualstudio.microsoft.com/vs/features/cplusplus/) for MSVC
+3. (optional) Download and install [CLion](https://www.jetbrains.com/clion/) as IDE to develop
+4. Create and configure a project with the framework and build it
+
+## How to build with GCC on Windows
+
+1. Install [MSYS2](https://www.msys2.org/)
+2. Run "MSYS2 MSYS" from Start menu
+3. Enter the following commands into MSYS2 console:
+```
+pacman -Syu
+pacman -Su
+pacman -S --needed base-devel mingw-w64-x86_64-toolchain
+pacman -S cmake
+```
+4. Add to Path:
+```
+C:\msys64\usr\bin
+C:\msys64\usr\local\bin
+C:\msys64\mingw64\bin
+C:\msys64\mingw32\bin
+```
+5. Clone the repository and run the following commands:
+```
+mkdir debug
+cd debug
+cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=C:\msys64\mingw64\bin\x86_64-w64-mingw32-gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:\msys64\mingw64\bin\x86_64-w64-mingw32-g++.exe .. -G "Unix Makefiles"
+cmake --build .
+```
\ No newline at end of file
diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 4b576e7119ebe769eafd1b6abb033b4fb02a3ec1..4d89c52a039e9d5de9efb276396158e987f52118 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -1,4 +1,7 @@
 
+set(vkcv_modules_includes)
+set(vkcv_modules_libraries)
+
 # Add new modules here:
 add_subdirectory(asset_loader)
 add_subdirectory(camera)
@@ -9,3 +12,12 @@ add_subdirectory(scene)
 add_subdirectory(shader_compiler)
 add_subdirectory(testing)
 add_subdirectory(upscaling)
+
+message(STATUS "Modules:")
+message(" - Includes: [ ${vkcv_modules_includes} ]")
+message(" - Libraries: [ ${vkcv_modules_libraries} ]")
+
+if (vkcv_parent_scope)
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/asset_loader/CMakeLists.txt b/modules/asset_loader/CMakeLists.txt
index 151ae350f4afa0ed60612dcc67d0fb61bedc8bb3..0ef40da7bb7702de8eb9c61f8d2644adc78c4e4c 100644
--- a/modules/asset_loader/CMakeLists.txt
+++ b/modules/asset_loader/CMakeLists.txt
@@ -15,7 +15,7 @@ set(vkcv_asset_loader_sources
 )
 
 # adding source files to the module
-add_library(vkcv_asset_loader STATIC ${vkcv_asset_loader_sources})
+add_library(vkcv_asset_loader ${vkcv_build_attribute} ${vkcv_asset_loader_sources})
 
 # Setup some path variables to load libraries
 set(vkcv_asset_loader_lib lib)
@@ -40,3 +40,11 @@ target_include_directories(vkcv_asset_loader SYSTEM BEFORE PRIVATE ${vkcv_asset_
 target_include_directories(vkcv_asset_loader BEFORE PUBLIC ${vkcv_asset_loader_include})
 
 target_compile_definitions(vkcv_asset_loader PUBLIC ${vkcv_asset_loader_definitions})
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_asset_loader_include})
+	list(APPEND vkcv_modules_libraries vkcv_asset_loader)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/camera/CMakeLists.txt b/modules/camera/CMakeLists.txt
index 55d29aabe041d16d497cba5668d8468ab2053560..b76e2fd1a2cfb241c5c8a1e73706c5e1a538f0f9 100644
--- a/modules/camera/CMakeLists.txt
+++ b/modules/camera/CMakeLists.txt
@@ -21,7 +21,7 @@ set(vkcv_camera_sources
 )
 
 # adding source files to the project
-add_library(vkcv_camera STATIC ${vkcv_camera_sources})
+add_library(vkcv_camera ${vkcv_build_attribute} ${vkcv_camera_sources})
 
 # Setup some path variables to load libraries
 set(vkcv_camera_lib lib)
@@ -37,3 +37,11 @@ target_include_directories(vkcv_camera SYSTEM BEFORE PRIVATE ${vkcv_camera_inclu
 target_include_directories(vkcv_camera BEFORE PUBLIC ${vkcv_camera_include} ${vkcv_camera_includes})
 
 target_compile_definitions(vkcv_camera PUBLIC ${vkcv_camera_definitions})
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_camera_include})
+	list(APPEND vkcv_modules_libraries vkcv_camera)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/gui/CMakeLists.txt b/modules/gui/CMakeLists.txt
index 87724ff9b8e1924d054789f63fb0c4460444a362..34d80c934f0444e3afb02ae3a22ec3c4a49b8eff 100644
--- a/modules/gui/CMakeLists.txt
+++ b/modules/gui/CMakeLists.txt
@@ -22,7 +22,7 @@ set(vkcv_gui_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_gui_lib})
 include(config/ImGui.cmake)
 
 # adding source files to the module
-add_library(vkcv_gui STATIC ${vkcv_gui_sources} ${vkcv_imgui_sources})
+add_library(vkcv_gui ${vkcv_build_attribute} ${vkcv_gui_sources} ${vkcv_imgui_sources})
 
 # link the required libraries to the module
 target_link_libraries(vkcv_gui ${vkcv_gui_libraries} vkcv ${vkcv_libraries})
@@ -34,3 +34,11 @@ target_include_directories(vkcv_gui SYSTEM BEFORE PRIVATE ${vkcv_gui_includes} $
 target_include_directories(vkcv_gui BEFORE PUBLIC ${vkcv_gui_include} ${vkcv_imgui_includes})
 
 target_compile_definitions(vkcv_gui PUBLIC ${vkcv_gui_defines})
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_gui_include})
+	list(APPEND vkcv_modules_libraries vkcv_gui)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/material/CMakeLists.txt b/modules/material/CMakeLists.txt
index bbcb7c5a32324df8318ea5ed1cf1c228f50f068d..ee3b36e8f411f3d4d6d86a19e498f2faa0513f86 100644
--- a/modules/material/CMakeLists.txt
+++ b/modules/material/CMakeLists.txt
@@ -15,7 +15,7 @@ set(vkcv_material_sources
 )
 
 # adding source files to the module
-add_library(vkcv_material STATIC ${vkcv_material_sources})
+add_library(vkcv_material ${vkcv_build_attribute} ${vkcv_material_sources})
 
 # link the required libraries to the module
 target_link_libraries(vkcv_material vkcv ${vkcv_libraries})
@@ -25,3 +25,11 @@ target_include_directories(vkcv_material SYSTEM BEFORE PRIVATE ${vkcv_include} $
 
 # add the own include directory for public headers
 target_include_directories(vkcv_material BEFORE PUBLIC ${vkcv_material_include})
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_material_include})
+	list(APPEND vkcv_modules_libraries vkcv_material)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/meshlet/CMakeLists.txt b/modules/meshlet/CMakeLists.txt
index 05fdba47c7085eb320de5cb18447546749473b32..a3b232e56ec86f65e1114c6ee570f512e7d3b13b 100644
--- a/modules/meshlet/CMakeLists.txt
+++ b/modules/meshlet/CMakeLists.txt
@@ -20,7 +20,7 @@ set(vkcv_meshlet_sources
 		${vkcv_meshlet_source}/vkcv/meshlet/Forsyth.cpp)
 
 # adding source files to the module
-add_library(vkcv_meshlet STATIC ${vkcv_meshlet_sources})
+add_library(vkcv_meshlet ${vkcv_build_attribute} ${vkcv_meshlet_sources})
 
 
 # link the required libraries to the module
@@ -34,3 +34,11 @@ target_include_directories(vkcv_meshlet BEFORE PUBLIC ${vkcv_meshlet_include})
 
 # linking with libraries from all dependencies and the VkCV framework
 target_link_libraries(vkcv_meshlet vkcv vkcv_asset_loader vkcv_camera)
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_meshlet_include})
+	list(APPEND vkcv_modules_libraries vkcv_meshlet)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/scene/CMakeLists.txt b/modules/scene/CMakeLists.txt
index 2d81fde86b57666121f80083e04a7d53f0561940..08a7e59074728a6429949da2c39f2d9e169b6928 100644
--- a/modules/scene/CMakeLists.txt
+++ b/modules/scene/CMakeLists.txt
@@ -30,7 +30,7 @@ set(vkcv_scene_sources
 )
 
 # adding source files to the module
-add_library(vkcv_scene STATIC ${vkcv_scene_sources})
+add_library(vkcv_scene ${vkcv_build_attribute} ${vkcv_scene_sources})
 
 # link the required libraries to the module
 target_link_libraries(vkcv_scene vkcv)
@@ -43,3 +43,11 @@ target_include_directories(vkcv_scene BEFORE PUBLIC ${vkcv_scene_include})
 
 # linking with libraries from all dependencies and the VkCV framework
 target_link_libraries(vkcv_scene vkcv vkcv_asset_loader vkcv_material vkcv_camera)
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_scene_include})
+	list(APPEND vkcv_modules_libraries vkcv_scene)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/shader_compiler/CMakeLists.txt b/modules/shader_compiler/CMakeLists.txt
index a9181ccdb0a7ea1d117b58ce26b94390d9cdd305..63182aaf34ad9d09d3f9a3dca7360cbed1875c04 100644
--- a/modules/shader_compiler/CMakeLists.txt
+++ b/modules/shader_compiler/CMakeLists.txt
@@ -18,7 +18,7 @@ set(vkcv_shader_compiler_sources
 )
 
 # adding source files to the module
-add_library(vkcv_shader_compiler STATIC ${vkcv_shader_compiler_sources})
+add_library(vkcv_shader_compiler ${vkcv_build_attribute} ${vkcv_shader_compiler_sources})
 
 # Setup some path variables to load libraries
 set(vkcv_shader_compiler_lib lib)
@@ -35,3 +35,11 @@ target_include_directories(vkcv_shader_compiler SYSTEM BEFORE PRIVATE ${vkcv_sha
 
 # add the own include directory for public headers
 target_include_directories(vkcv_shader_compiler BEFORE PUBLIC ${vkcv_shader_compiler_include})
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_shader_compiler_include})
+	list(APPEND vkcv_modules_libraries vkcv_shader_compiler)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/testing/CMakeLists.txt b/modules/testing/CMakeLists.txt
index 26814f3a138d573e217b4d77966533343f85cf2a..60f5a82732b9e095f05b0d6a551b825a6d05f3dd 100644
--- a/modules/testing/CMakeLists.txt
+++ b/modules/testing/CMakeLists.txt
@@ -14,8 +14,15 @@ set(vkcv_testing_sources
 )
 
 # adding source files to the project
-add_library(vkcv_testing STATIC ${vkcv_testing_sources})
+add_library(vkcv_testing ${vkcv_build_attribute} ${vkcv_testing_sources})
 
 # add the own include directory for public headers
 target_include_directories(vkcv_testing BEFORE PUBLIC ${vkcv_testing_include})
 
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_testing_include})
+	list(APPEND vkcv_modules_libraries vkcv_testing)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/modules/upscaling/CMakeLists.txt b/modules/upscaling/CMakeLists.txt
index dcab962919434a875e9384f649fbde7ccb9b0725..dec392573d31a7348f8440162410b4fc91757b51 100644
--- a/modules/upscaling/CMakeLists.txt
+++ b/modules/upscaling/CMakeLists.txt
@@ -27,7 +27,7 @@ set(vkcv_upscaling_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_upscaling_lib})
 include(config/FidelityFX_FSR.cmake)
 
 # adding source files to the project
-add_library(vkcv_upscaling STATIC ${vkcv_upscaling_sources})
+add_library(vkcv_upscaling ${vkcv_build_attribute} ${vkcv_upscaling_sources})
 
 # link the required libraries to the module
 target_link_libraries(vkcv_upscaling ${vkcv_upscaling_libraries} vkcv vkcv_shader_compiler)
@@ -37,3 +37,11 @@ target_include_directories(vkcv_upscaling SYSTEM BEFORE PRIVATE ${vkcv_upscaling
 
 # add the own include directory for public headers
 target_include_directories(vkcv_upscaling BEFORE PUBLIC ${vkcv_upscaling_include})
+
+if (vkcv_parent_scope)
+	list(APPEND vkcv_modules_includes ${vkcv_upscaling_include})
+	list(APPEND vkcv_modules_libraries vkcv_upscaling)
+	
+	set(vkcv_modules_includes ${vkcv_modules_includes} PARENT_SCOPE)
+	set(vkcv_modules_libraries ${vkcv_modules_libraries} PARENT_SCOPE)
+endif()
diff --git a/src/vkcv/GraphicsPipelineManager.cpp b/src/vkcv/GraphicsPipelineManager.cpp
index 870220f45b52c022f7c2d445a40e99ab4a6a4a2f..a461051f9784e7d95de7c15c965caa633d3bb35c 100644
--- a/src/vkcv/GraphicsPipelineManager.cpp
+++ b/src/vkcv/GraphicsPipelineManager.cpp
@@ -274,10 +274,13 @@ namespace vkcv
 		static vk::PipelineRasterizationConservativeStateCreateInfoEXT conservativeRasterization;
 		
 		if (config.m_UseConservativeRasterization) {
+            const float overestimationSize = 1.0f - conservativeRasterProperties.primitiveOverestimationSize;
+            const float maxOverestimationSize = conservativeRasterProperties.maxExtraPrimitiveOverestimationSize;
+
 			conservativeRasterization = vk::PipelineRasterizationConservativeStateCreateInfoEXT(
 					{},
 					vk::ConservativeRasterizationModeEXT::eOverestimate,
-					std::max(1 - conservativeRasterProperties.primitiveOverestimationSize, 0.f)
+					std::min(std::max(overestimationSize, 0.f), maxOverestimationSize)
 			);
 			
 			pipelineRasterizationStateCreateInfo.pNext = &conservativeRasterization;