Files
test2/source/blender/blenlib/BLI_compiler_compat.h
Omar Emara d5c662a305 Fix #134436: Compositor is much slower on Windows
The new CPU compositor in v4.4 is much slower than the old CPU
compositor in v4.3 on Windows. This is because MSVC does not inline many
of the core methods in the Result class of the compositor. To fix this,
we force inline those methods, adding a new macro for inlining methods
in the process, since the existing macro has the static keyword, which
only works for functions, not methods.

Pull Request: https://projects.blender.org/blender/blender/pulls/134748
2025-02-19 13:56:06 +01:00

53 lines
1.2 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/* `#define typeof()` triggers a bug in some clang-format versions,
* disable format for entire file to keep results consistent. */
/* clang-format off */
#pragma once
/** \file
* \ingroup bli
*
* Use to help with cross platform portability.
*/
#if defined(_MSC_VER)
# define alloca _alloca
#endif
#if (defined(__GNUC__) || defined(__clang__)) && defined(__cplusplus)
extern "C++" {
/** Some magic to be sure we don't have reference in the type. */
template<typename T> static inline T decltype_helper(T x)
{
return x;
}
#define typeof(x) decltype(decltype_helper(x))
}
#endif
/* little macro so inline keyword works */
#if defined(_MSC_VER)
# define BLI_INLINE static __forceinline
#else
# define BLI_INLINE static inline __attribute__((always_inline)) __attribute__((__unused__))
#endif
#if defined(_MSC_VER)
# define BLI_INLINE_METHOD __forceinline
#else
# define BLI_INLINE_METHOD inline __attribute__((always_inline)) __attribute__((__unused__))
#endif
#if defined(__GNUC__)
# define BLI_NOINLINE __attribute__((noinline))
#elif defined(_MSC_VER)
# define BLI_NOINLINE __declspec(noinline)
#else
# define BLI_NOINLINE
#endif