This patch ports the GLSL SMAA library to the CPU compositor in order to unify the anti-aliasing behavior between the CPU and GPU compositor. Additionally, the SMAA texture generator was removed since it is now unused. Previously, we used an external C++ library for SMAA anti-aliasing, which is itself a port of the GLSL SMAA library. However, the code structure and results of the library were different, which made it quite difficult to match results between CPU and GPU, hence the decision to port the library ourselves. The port was performed through a complete copy of the library to C++, retaining the same function and variable names, even if they are different from Blender's naming conversions. The necessary code changes were done to make it work in C++, including manually doing swizzling which changes the code structure a bit. Even after porting the library, there were still major differences between CPU and GPU, due to different arithmetic precision. To fix this some of the bilinear samplers used in branches and selections were carefully changed to use point samplers to avoid discontinuities around branches, also resulting in a nice performance improvement. Some slight differences still exist due to different bilinear interpolation, but they shall be looked into later once we have a baseline implementation. The new implementation is slower than the existing implementation, most likely due to the liberal use of bilinear interpolation, since it is quite cheap on GPUs and the code even does more work to use bilinear interpolation to avoid multiple texture fetches, except this causes a slow down on CPUs. Some of those were alleviated as mentioned in the previous section, but we can probably look into optimizing it further. Pull Request: https://projects.blender.org/blender/blender/pulls/119414
110 lines
2.5 KiB
CMake
110 lines
2.5 KiB
CMake
# SPDX-FileCopyrightText: 2006 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
# Libs that adhere to strict flags
|
|
add_subdirectory(curve_fit_nd)
|
|
add_subdirectory(fmtlib)
|
|
|
|
# Otherwise we get warnings here that we cant fix in external projects
|
|
remove_strict_flags()
|
|
|
|
# Not a strict flag, but noisy for code we don't maintain
|
|
if(CMAKE_COMPILER_IS_GNUCC)
|
|
remove_cc_flag(
|
|
"-Wmisleading-indentation"
|
|
)
|
|
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
remove_cc_flag(
|
|
"-Weverything"
|
|
)
|
|
endif()
|
|
|
|
if(WITH_COMPILER_ASAN AND NOT WITH_COMPILER_ASAN_EXTERN)
|
|
# Disable ASAN for extern dependencies, as it can lead to linking issues due to too large binaries.
|
|
string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO " -fno-sanitize=all")
|
|
string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO " -fno-sanitize=all")
|
|
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fno-sanitize=all")
|
|
string(APPEND CMAKE_C_FLAGS_DEBUG " -fno-sanitize=all")
|
|
endif()
|
|
|
|
|
|
add_subdirectory(rangetree)
|
|
add_subdirectory(nanosvg)
|
|
add_subdirectory(wcwidth)
|
|
|
|
if(WITH_BULLET)
|
|
if(NOT WITH_SYSTEM_BULLET)
|
|
add_subdirectory(bullet2)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_DRACO)
|
|
add_subdirectory(draco)
|
|
endif()
|
|
|
|
if(WITH_BINRELOC)
|
|
add_subdirectory(binreloc)
|
|
endif()
|
|
|
|
if(WITH_LZO AND NOT WITH_SYSTEM_LZO)
|
|
add_subdirectory(lzo)
|
|
endif()
|
|
|
|
if(WITH_LZMA)
|
|
add_subdirectory(lzma)
|
|
endif()
|
|
|
|
if(WITH_CYCLES OR WITH_OPENSUBDIV)
|
|
if((WITH_CYCLES_DEVICE_CUDA OR WITH_CYCLES_DEVICE_OPTIX) AND WITH_CUDA_DYNLOAD)
|
|
add_subdirectory(cuew)
|
|
endif()
|
|
if(WITH_CYCLES_DEVICE_HIP AND WITH_HIP_DYNLOAD)
|
|
add_subdirectory(hipew)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_GHOST_X11 AND WITH_GHOST_XDND)
|
|
add_subdirectory(xdnd)
|
|
endif()
|
|
|
|
if(WITH_LIBMV)
|
|
add_subdirectory(ceres)
|
|
endif()
|
|
|
|
if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING))
|
|
if(NOT WITH_SYSTEM_GFLAGS)
|
|
add_subdirectory(gflags)
|
|
endif()
|
|
add_subdirectory(glog)
|
|
endif()
|
|
|
|
if(WITH_GTESTS)
|
|
add_subdirectory(gtest)
|
|
add_subdirectory(gmock)
|
|
endif()
|
|
|
|
if(WITH_SDL AND WITH_SDL_DYNLOAD)
|
|
add_subdirectory(sdlew)
|
|
endif()
|
|
|
|
if(WITH_AUDASPACE AND NOT WITH_SYSTEM_AUDASPACE)
|
|
set(AUDASPACE_CMAKE_CFG ${CMAKE_CURRENT_SOURCE_DIR}/audaspace/blender_config.cmake)
|
|
set(LIB_SUFFIX "") # Quiet uninitialized warning.
|
|
add_subdirectory(audaspace)
|
|
unset(LIB_SUFFIX)
|
|
endif()
|
|
|
|
if(WITH_QUADRIFLOW)
|
|
set(QUADRIFLOW_CMAKE_CFG ${CMAKE_CURRENT_SOURCE_DIR}/quadriflow/blender_config.cmake)
|
|
add_subdirectory(quadriflow)
|
|
endif()
|
|
|
|
if(WITH_MOD_FLUID)
|
|
add_subdirectory(mantaflow)
|
|
endif()
|
|
|
|
if(WITH_VULKAN_BACKEND)
|
|
add_subdirectory(vulkan_memory_allocator)
|
|
endif()
|