commit:     4ea6c0fe3f6b06b55fa389d11a49fcb6c7028dc3
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Thu Nov 20 15:12:05 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Nov 28 02:53:04 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4ea6c0fe

media-gfx/blender: add 4.5.5 4.5.9999, update 9999

Closes: https://bugs.gentoo.org/964984
Closes: https://bugs.gentoo.org/963487
Closes: https://bugs.gentoo.org/963109
Closes: https://bugs.gentoo.org/960390
Closes: https://bugs.gentoo.org/960371
Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/44694
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-gfx/blender/Manifest                         |   2 +
 .../{blender-9999.ebuild => blender-4.5.5.ebuild}  | 256 +++++++++++++--------
 ...blender-9999.ebuild => blender-4.5.9999.ebuild} | 255 ++++++++++++--------
 media-gfx/blender/blender-9999.ebuild              | 253 ++++++++++++--------
 .../blender/files/blender-4.5.0-ffmpeg-8.0.patch   |  40 ++++
 .../files/blender-4.5.3-cmake-policy-3.10.patch    |  68 ++++++
 .../blender-9999-don-t-show-variable-names.patch   |  25 ++
 media-gfx/blender/metadata.xml                     |   1 -
 8 files changed, 627 insertions(+), 273 deletions(-)

diff --git a/media-gfx/blender/Manifest b/media-gfx/blender/Manifest
index 088325664bcb..ac2b451f1578 100644
--- a/media-gfx/blender/Manifest
+++ b/media-gfx/blender/Manifest
@@ -4,5 +4,7 @@ DIST blender-4.2.9.tar.xz 72811408 BLAKE2B 
b33227a3d2ab97578d919d37419b5486e049d
 DIST blender-4.3.2.tar.xz 74473996 BLAKE2B 
9a5c8973561f3296b0ec35990ab4951e34f7c0dd5bee3dd120a49989dc8ca7ebfc9610654e8be9d14463af2197626f490324cdd03118db755f5d0b1f7acce375
 SHA512 
44697faf9acc2c1e75783d432a1a0040339c3445834961a995e95974d4088e75ee5cb647a3908125259d1910d180910e5bc50d34d40d35f33e03197893581477
 DIST blender-4.4.1.tar.xz 85518840 BLAKE2B 
a482a2d246222b5395f5e1c5cfa9fd2dbab0d5dc33145ec5cfaae3e7d7083e65034e1f5b54bc4605ab45905d08c2938c97ab488659d822997ee853c9e34fcc55
 SHA512 
db6b117b841890b172f4d13c6f38b73f36aae5648ed74f5233eb311328d467644005bd24fb4f9c7ea9b2dad7ff584fc7b3831f5ab34f3f900555c68f4af5b901
 DIST blender-4.4.3.tar.xz 85519376 BLAKE2B 
bb2f93d96b98e4104f1e49f3bd9be8992e37d2005665ad913ccd7e9097fba4823567d0aba3cd6487097d52043c5681fde4489c040e24ae4df6014337eb97f9f5
 SHA512 
0a500a7abee2e2dea7cdc925539c3f906271525ec88877e12920315552a057072c68806d6cdf7a6eb43b2b7d611e8697c5ad093b22f2402f96a11718538012e6
+DIST blender-4.5.5.tar.xz 85095244 BLAKE2B 
5578a45300622f71bb7dd679dcaa85f2de0a3db2ddc9e21a6890ed96b83d14f8b617058e8fc648ae0e02b70e5706c05427f9d1cf44848995ca95b5fd074d616f
 SHA512 
14f340e44ee0f2971a9367f35a150bec61d7c378d1a5d60060e16c2e60f8fdffe71d2252e679698aa0a7a6b77e9b353c67d7494e8ba9990f479b834bb6d9b1de
 DIST blender-assets-4.3.2.tar.xz 8763844 BLAKE2B 
0eca4a7bfb630096dfe9dd5f8c8071d9ca8c1aaab560a8694df4add507c3e8a641a4e0ad197f110b639d2d399a23c5c25af6fb060ca3316e1a44d286f6b23f7e
 SHA512 
ce9483b3e5b83d1b29bdfa3a14f7be7176e85ec50a414213a67badcce3c24cd8da349fee22b08cc95d6e5906420bbcd5c5f15855445da6364e6054f968c20678
 DIST blender-test-data-4.4.0.tar.xz 386262908 BLAKE2B 
4b7f16f5d19d9569ae19a8e9feeb134841801c89ea64a787c1caa6a4bddce700ebe2a9a15cb2053701c404743dc0749643a1b03fc45f523f792e3729de11f0e8
 SHA512 
babd235aeb5cf87764b48000dc7776b5e8121d60d930f4aa92ea27cf275608cfc6c3ed47e59d499c85c670dc1ee329e26882e76d8a9a2567b42d3de551a5a9a0
+DIST blender-test-data-4.5.0-1.tar.xz 408765680 BLAKE2B 
b09840a18a78f8972424a58ad6b36c9e30019862c8217211ef09b9f910eb1ca9facc2ad14fb9bbb49dcf7c0ed7e082e7dcfc57c08daad9bf18fed4bfb2588b86
 SHA512 
09fcbb76a673a1e0c53f35bf60a74f09b5123ea37c99f5f0d027043caad184a16e3eea407c81027229e4a3a5c1ad8e66b4432ed90a9c8980e466e8b4575fa34b

diff --git a/media-gfx/blender/blender-9999.ebuild 
b/media-gfx/blender/blender-4.5.5.ebuild
similarity index 81%
copy from media-gfx/blender/blender-9999.ebuild
copy to media-gfx/blender/blender-4.5.5.ebuild
index a8dfb518e25c..7673d182c357 100644
--- a/media-gfx/blender/blender-9999.ebuild
+++ b/media-gfx/blender/blender-4.5.5.ebuild
@@ -20,12 +20,12 @@ EAPI=8
 
 PYTHON_COMPAT=( python3_{11..13} )
 # NOTE must match media-libs/osl
-LLVM_COMPAT=( {18..19} )
+LLVM_COMPAT=( {18..20} )
 LLVM_OPTIONAL=1
 
 ROCM_SKIP_GLOBALS=1
 
-inherit cuda rocm llvm-r1
+inherit cuda rocm llvm-r2 edo
 inherit eapi9-pipestatus check-reqs flag-o-matic multiprocessing pax-utils 
python-single-r1 toolchain-funcs virtualx
 inherit cmake xdg-utils
 
@@ -52,10 +52,10 @@ else
        SRC_URI="
                https://download.blender.org/source/${P}.tar.xz
                test? (
-                       
https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0.tar.xz
+                       
https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0-1.tar.xz
                )
        "
-       KEYWORDS="~amd64 ~arm ~arm64"
+       KEYWORDS="~amd64 ~arm64"
 fi
 
 # assets is CC0-1.0
@@ -67,7 +67,7 @@ SLOT="${BLENDER_BRANCH}"
 IUSE="
        alembic +bullet collada +color-management cuda +cycles 
+cycles-bin-kernels
        debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip hiprt jack
-       +jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn oneapi openal 
+openexr +opengl +openpgl
+       jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn openal +openexr 
+opengl +openpgl
        +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml 
pulseaudio
        renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan 
wayland +webp X
 "
@@ -106,21 +106,22 @@ RDEPEND="${PYTHON_DEPS}
        dev-libs/boost:=[nls?]
        dev-libs/lzo:2=
        $(python_gen_cond_dep '
+               dev-python/cattrs[${PYTHON_USEDEP}]
                dev-python/cython[${PYTHON_USEDEP}]
                dev-python/numpy[${PYTHON_USEDEP}]
-               dev-python/zstandard[${PYTHON_USEDEP}]
                dev-python/requests[${PYTHON_USEDEP}]
+               dev-python/zstandard[${PYTHON_USEDEP}]
        ')
        media-libs/freetype:=[brotli]
        media-libs/libepoxy:=
        media-libs/libjpeg-turbo:=
        media-libs/libpng:=
        media-libs/libsamplerate
-       >=media-libs/openimageio-2.5.6.0:=
-       virtual/zlib:=
+       >=media-libs/openimageio-3.0.6.1:=
        virtual/glu
        virtual/libintl
        virtual/opengl[X?]
+       virtual/zlib:=
        alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] )
        bullet? ( sci-physics/bullet:=[double-precision] )
        collada? ( >=media-libs/opencollada-1.6.68 )
@@ -129,7 +130,7 @@ RDEPEND="${PYTHON_DEPS}
        embree? ( media-libs/embree:=[raymask] )
        ffmpeg? ( 
media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid]
 )
        fftw? ( sci-libs/fftw:3.0=[threads] )
-       gmp? ( dev-libs/gmp[cxx] )
+       gmp? ( dev-libs/gmp:=[cxx] )
        gnome? ( gui-libs/libdecor )
        hip? (
                >=dev-util/hip-5.7:=
@@ -147,24 +148,29 @@ RDEPEND="${PYTHON_DEPS}
        )
        nls? ( virtual/libiconv )
        openal? ( media-libs/openal )
-       oidn? ( >=media-libs/oidn-2.1.0 )
-       oneapi? ( dev-libs/intel-compute-runtime:=[l0] )
+       oidn? ( >=media-libs/oidn-2.1.0:= )
        openexr? (
                >=dev-libs/imath-3.1.7:=
                >=media-libs/openexr-3.2.1:0=
        )
        openpgl? ( media-libs/openpgl:= )
-       opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,tbb?] )
+       opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2:=[opengl,cuda?,tbb?] )
        openvdb? (
                >=media-gfx/openvdb-11.0.0:=[nanovdb?]
                dev-libs/c-blosc:=
        )
-       optix? ( <dev-libs/optix-9:= )
+       optix? (
+               >=dev-libs/optix-8:=
+               osl? (
+                       >=media-libs/osl-1.14[clang-cuda]
+               )
+       )
        osl? (
-               >=media-libs/osl-1.13:=[${LLVM_USEDEP}]
+               >=media-libs/osl-1.14:=[${LLVM_USEDEP}]
                media-libs/mesa[${LLVM_USEDEP}]
        )
-       pdf? ( media-libs/libharu )
+       pdf? ( media-libs/libharu:= )
+       pipewire? ( >=media-video/pipewire-1.1.0:= )
        potrace? ( media-gfx/potrace )
        pugixml? ( dev-libs/pugixml )
        pulseaudio? ( media-libs/libpulse )
@@ -181,6 +187,7 @@ RDEPEND="${PYTHON_DEPS}
                media-libs/mesa[wayland]
                sys-apps/dbus
        )
+       webp? ( media-libs/libwebp:= )
        vulkan? (
                media-libs/shaderc
                dev-util/spirv-tools
@@ -195,6 +202,7 @@ RDEPEND="${PYTHON_DEPS}
        )
        X? (
                x11-libs/libX11
+               x11-libs/libXfixes
                x11-libs/libXi
                x11-libs/libXxf86vm
        )
@@ -202,6 +210,11 @@ RDEPEND="${PYTHON_DEPS}
 
 DEPEND="${RDEPEND}
        dev-cpp/eigen:=
+       test? (
+               $(python_gen_cond_dep '
+                       
media-libs/openimageio[jpeg2k,python,${PYTHON_SINGLE_USEDEP},tools]
+               ')
+       )
 "
 
 if [[ "${PV}" == *9999* ]]; then
@@ -245,7 +258,9 @@ PATCHES=(
        "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch"
        "${FILESDIR}/${PN}-4.1.1-numpy.patch"
        "${FILESDIR}/${PN}-4.3.2-system-glog.patch"
-       "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch"
+       "${FILESDIR}/${PN}-4.5.0-ffmpeg-8.0.patch"
+       "${FILESDIR}/${PN}-4.5.3-cmake-policy-3.10.patch"
+       "${FILESDIR}/${PN}-9999-don-t-show-variable-names.patch"
 )
 
 blender_check_requirements() {
@@ -279,18 +294,6 @@ blender_get_version() {
 
 pkg_pretend() {
        blender_check_requirements
-
-       if use oneapi; then
-               einfo "The Intel oneAPI support is rudimentary."
-               einfo ""
-               einfo "Please report any bugs you find to 
https://bugs.gentoo.org/";
-               if ! command -v icpx &>/dev/null && ! command -v dpcpp 
&>/dev/null; then
-                       eerror "Could not find icpx or dpcpp."
-                       eerror "You need SYCL/DCP++ to enable oneapi support."
-                       eerror "Try sys-devel/DPC++::science"
-                       die "FindSYCL would fail. Aborting."
-               fi
-       fi
 }
 
 pkg_setup() {
@@ -298,7 +301,7 @@ pkg_setup() {
        python-single-r1_pkg_setup
 
        if use osl; then
-               llvm-r1_pkg_setup
+               llvm-r2_pkg_setup
        fi
 }
 
@@ -314,8 +317,12 @@ src_unpack() {
                # TODO
                if use test && [[ ${PV} != ${SLOT}.0 ]] ; then
                        mv "blender-${BLENDER_BRANCH}.0/tests/"* "${S}/tests" 
|| die
+                       rmdir -p "blender-${BLENDER_BRANCH}.0/tests/" || die
                fi
        fi
+
+       # clear cmake_minimum_required
+       rm -R "${S}/build_files/build_environment/patches" || die
 }
 
 src_prepare() {
@@ -340,7 +347,7 @@ src_prepare() {
                -i release/freedesktop/blender.desktop || die
 
        sed \
-               -e 
"/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}"
 \
+               -e 
"/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T%/}\${CMAKE_INSTALL_PREFIX}|g}"
 \
                -i CMakeLists.txt \
                || die CMAKE_INSTALL_PREFIX_WITH_CONFIG
 
@@ -400,7 +407,7 @@ src_prepare() {
 
        # Use slotted libhiprt64
        sed \
-               -e 
"s|\"libhiprt64.so\"|\"/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \
+               -e 
"s|\"libhiprt64.so\"|\"${ESYSROOT}/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|"
 \
                -i extern/hipew/src/hiprtew.cc || die
 }
 
@@ -476,11 +483,10 @@ src_configure() {
 
                # GHOST Options:
                -DWITH_GHOST_WAYLAND="$(usex wayland)"
-               # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}"
+               # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" # only visible 
with use wayland. see below
                -DWITH_GHOST_WAYLAND_DYNLOAD="no"
                -DWITH_GHOST_X11="$(usex X)"
                # -DWITH_GHOST_XDND=ON
-               # -DWITH_X11_XF86VMODE=ON
                # -DWITH_X11_XFIXES=ON
                # -DWITH_X11_XINPUT=ON
                # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland?
@@ -514,7 +520,6 @@ src_configure() {
                -DWITH_PYTHON_INSTALL_NUMPY="no"
                -DWITH_PYTHON_INSTALL_ZSTANDARD="no"
                # -DWITH_PYTHON_MODULE="no"
-               -DWITH_PYTHON_SAFETY="OFF"
                -DWITH_PYTHON_SECURITY="yes"
                -DPYTHON_INCLUDE_DIR="$(python_get_includedir)"
                -DPYTHON_LIBRARY="$(python_get_library_path)"
@@ -523,8 +528,8 @@ src_configure() {
 
                # Modifiers:
                -DWITH_MOD_FLUID="$(usex fluid)"
-               # -DWITH_MOD_REMESH=ON
                -DWITH_MOD_OCEANSIM="$(usex fftw)"
+               # -DWITH_MOD_REMESH=ON
 
                # Rendering:
                -DWITH_HYDRA="no" # TODO: Package Hydra
@@ -533,13 +538,12 @@ src_configure() {
                -DWITH_CYCLES_OSL="$(usex osl)"
                -DWITH_CYCLES_EMBREE="$(usex embree)"
                -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)"
+               -DWITH_CYCLES_LOGGING="ON" # "$(usex debug)"
 
                -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)"
                -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)"
                -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex 
cycles-bin-kernels)")"
 
-               -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)"
-               -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi "$(usex 
cycles-bin-kernels)")"
                -DWITH_CYCLES_DEVICE_HIP="$(usex hip)"
                -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex 
cycles-bin-kernels)")"
                -DWITH_CYCLES_DEVICE_HIPRT="$(usex hip "$(usex hiprt)")"
@@ -550,6 +554,22 @@ src_configure() {
                # -DWITH_CYCLES_STANDALONE_GUI=OFF
 
                -DWITH_BLENDER_THUMBNAILER="yes"
+
+               -DWITH_ASSERT_ABORT="$(usex debug)"
+               -DWITH_ASSERT_RELEASE="no" # "$(usex debug)"
+
+               # -DWITH_FREESTYLE=ON
+               # -DWITH_IK_ITASC=ON
+               # -DWITH_IK_SOLVER=ON
+               # -DWITH_INPUT_IME=ON
+               # -DWITH_LIBMV=ON
+               # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS=ON
+               # -DWITH_LZMA=ON
+               # -DWITH_LZO=ON
+               # -DWITH_UV_SLIM=ON
+               -DWITH_NINJA_POOL_JOBS="no"
+               # -DPOSTINSTALL_SCRIPT:PATH=""
+               # -DPOSTCONFIGURE_SCRIPT:PATH=""
        )
 
        if has_version ">=dev-python/numpy-2"; then
@@ -564,10 +584,18 @@ src_configure() {
                mycmakeargs+=(
                        # -DWITH_BUILDINFO="no"
                        -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)"
+                       # -DWITH_COMPILER_ASAN="yes"
+                       # -DWITH_STRSIZE_DEBUG="yes"
+                       # -DWITH_CYCLES_NATIVE_ONLY="yes"
+                       # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS="no"
+                       # -DWITH_PYTHON_SAFETY="ON" # dev option
+
                )
        else
                mycmakeargs+=(
-                       -DWITH_EXPERIMENTAL_FEATURES="no"
+                       -DWITH_BUILDINFO="yes"
+                       -DWITH_EXPERIMENTAL_FEATURES="OFF"
+                       -DWITH_PYTHON_SAFETY="OFF"
                )
        fi
 
@@ -589,6 +617,10 @@ src_configure() {
                mycmakeargs+=(
                        -DHIP_ROOT_DIR="$(hipconfig -p)"
 
+                       -DHIP_HIPCC_FLAGS="-fcf-protection=none"
+
+                       
-DCMAKE_HIP_LINK_EXECUTABLE="$(get_llvm_prefix)/bin/clang++"
+
                        -DCYCLES_HIP_BINARIES_ARCH="$(get_amdgpu_flags)"
                )
 
@@ -617,6 +649,7 @@ src_configure() {
        # This is currently needed on arm64 to get the NEON SIMD wrapper to 
compile the code successfully
        use arm64 && append-flags -flax-vector-conversions
 
+       # WITH_ASSERT_RELEASE filters this
        append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
        append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
 
@@ -641,10 +674,9 @@ src_configure() {
                        use optix && CYCLES_TEST_DEVICES+=( "OPTIX" )
                        use hip && CYCLES_TEST_DEVICES+=( "HIP" )
                        use hiprt && CYCLES_TEST_DEVICES+=( "HIP-RT" )
-                       use oneapi && CYCLES_TEST_DEVICES+=( "ONEAPI" )
                fi
                mycmakeargs+=(
-                       -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr"
+                       -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T%/}/usr"
                        -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo 
"${CYCLES_TEST_DEVICES[*]}")"
                )
 
@@ -659,20 +691,31 @@ src_configure() {
 
                                -DWITH_GPU_DRAW_TESTS="yes"
 
-                               -DWITH_GPU_RENDER_TESTS="no"
-                               -DWITH_GPU_RENDER_TESTS_HEADED="no"
-                               -DWITH_GPU_RENDER_TESTS_SILENT="yes"
+                               -DWITH_GPU_RENDER_TESTS="yes"
+                               -DWITH_GPU_RENDER_TESTS_HEADED="yes"
+                               # -DWITH_GPU_RENDER_TESTS_SILENT="yes"
                                -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)"
 
+                               # Run Python script outside Blender, using 
system default Python3 interpreter,
+                               # NOT the one specified in `TEST_PYTHON_EXE`.
                                -DWITH_SYSTEM_PYTHON_TESTS="yes"
                                -DTEST_SYSTEM_PYTHON_EXE="${PYTHON}"
+
+                               # 
-DTEST_PYTHON_EXE="${T%/}/${EPYTHON}/bin/python"
+
+                               # -DWITH_LINUX_OFFICIAL_RELEASE_TESTS="yes" # 
Not needed?
                        )
 
                        if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && 
use experimental; then
                                mycmakeargs+=(
+                                       -DWITH_GPU_MESH_PAINT_TESTS="yes"
+                                       # -DWITH_UI_TESTS="$(usex wayland)"
+                                       -DWITH_UI_TESTS="yes"
+                                       -DWITH_TESTS_EXPERIMENTAL="yes"
+
                                        # Enable user-interface tests using a 
headless display server.
                                        # Currently this depends on 
WITH_GHOST_WAYLAND and the weston compositor (Experimental)
-                                       -DWITH_UI_TESTS="$(usex wayland)"
+                                       -DWITH_UI_TESTS_HEADLESS="$(usex !X 
"$(usex wayland)")"
                                        
-DWESTON_BIN="${ESYSROOT}/usr/bin/weston"
                                )
                        fi
@@ -689,7 +732,7 @@ src_configure() {
 src_test() {
        # A lot of tests need to have access to the installed data files.
        # So install them into the image directory now.
-       DESTDIR="${T}" cmake_build install
+       DESTDIR="${T%/}" cmake_build install
 
        blender_get_version
        # Define custom blender data/script file paths, or we won't be able to 
find them otherwise during testing.
@@ -703,7 +746,8 @@ src_test() {
        # TODO only picks first card
        addwrite "/dev/dri/card0"
        addwrite "/dev/dri/renderD128"
-       addwrite "/dev/udmabuf"
+
+       [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
 
        if use cuda; then
                cuda_add_sandbox -w
@@ -712,20 +756,15 @@ src_test() {
        fi
 
        local -x CMAKE_SKIP_TESTS=(
-               "^compositor_cpu_color$"
-               "^compositor_cpu_filter$"
-               "^cycles_image_colorspace_cpu$"
                "^script_pyapi_bpy_driver_secure_eval$"
        )
 
        if [[ "${RUN_FAILING_TESTS:-0}" -eq 0 ]]; then
                einfo "not running failing tests 
RUN_FAILING_TESTS=${RUN_FAILING_TESTS}"
                CMAKE_SKIP_TESTS+=(
-                       "^cycles_bsdf_cuda$"
-                       "^cycles_image_data_types_cpu$"
-                       "^cycles_image_data_types_optix$"
-                       "^cycles_image_mapping_cpu$"
-                       "^cycles_osl_cpu$"
+                       # Needs testfiles update
+                       "^io_fbx_import$"
+                       "^cycles_camera_cpu$"
                )
        fi
 
@@ -736,20 +775,20 @@ src_test() {
                )
        fi
 
-       if ! has_version "media-libs/openimageio[python]"; then
+       if has_version ">=media-video/ffmpeg-8"; then
                CMAKE_SKIP_TESTS+=(
-                       # import OpenImageIO as oiio # ModuleNotFoundError: No 
module named 'OpenImageIO'
-                       "^compositor_cpu_file_output$"
+                       # output change TODO
+                       "^sequencer_render_video_output$"
                )
        fi
 
-       # oiio can't find webp due to missing cmake files # 937031
-       sed -e "s/ WEBP//g" -i "${BUILD_DIR}/tests/python/CTestTestfile.cmake" 
|| die
-
        # For debugging, print out all information.
        local -x VERBOSE="$(usex debug "true" "false")"
        "${VERBOSE}" && einfo "VERBOSE=${VERBOSE}"
 
+       local -x DEBUG="$(usex debug "true" "false")"
+       "${DEBUG}" && einfo "DEBUG=${DEBUG}"
+
        # Show the window in the foreground.
        # local -x USE_WINDOW="true" # non-zero
        [[ -v USE_WINDOW ]] && einfo "USE_WINDOW=${USE_WINDOW}"
@@ -757,32 +796,43 @@ src_test() {
        # local -x USE_DEBUG="true" # non-zero
        [[ -v USE_DEBUG ]] && einfo "USE_DEBUG=${USE_DEBUG}"
 
+       # Environment OPENIMAGEIO_CUDA=0 trumps everything else, turns off
+       # Cuda functionality. We don't even initialize in this case.
+       local -x OPENIMAGEIO_CUDA=0
+
+       # Needed if openimageio wasn't build with -DNDEBUG
+       local -x OPENIMAGEIO_DEBUG=0
+
+       local -x CYCLESTEST_ARGS="-t 0"
+
        if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then
                einfo "running expensive tests 
EXPENSIVE_TESTS=${EXPENSIVE_TESTS}"
-               # if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] &&
-               #       use experimental && use wayland; then
-               #               # This runs weston
-               #               xdg_environment_reset
-               # fi
-
-               xdg_environment_reset
-               # WITH_GPU_RENDER_TESTS_HEADED
-               if use wayland; then
-                       local compositor exit_code
-                       local logfile=${T}/weston.log
-                       weston --xwayland --backend=headless --socket=wayland-5 
--idle-time=0 2>"${logfile}" &
-                       compositor=$!
-                       local -x WAYLAND_DISPLAY=wayland-5
-                       sleep 1 # wait for xwayland to be up
-                       # TODO use eapi9-pipestatus
-                       local -x DISPLAY="$(grep "xserver listening on display" 
"${logfile}" | cut -d ' ' -f 5)"
-
-                       cmake_src_test
+               if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] &&
+                       use experimental && use wayland; then
+                               # This runs weston
+                               xdg_environment_reset
+               fi
 
-                       exit_code=$?
-                       kill "${compositor}"
-               elif use X; then
-                       virtx cmake_src_test
+               if [[ "${USE_WINDOW}" == "true" ]]; then
+                       xdg_environment_reset
+                       # WITH_GPU_RENDER_TESTS_HEADED
+                       if use wayland; then
+                               local compositor exit_code
+                               local logfile=${T}/weston.log
+                               weston --xwayland --backend=headless 
--width=800 --height=600 --socket=wayland-5 --idle-time=0 2>"${logfile}" &
+                               compositor=$!
+                               local -x WAYLAND_DISPLAY=wayland-5
+                               sleep 1 # wait for xwayland to be up
+                               # TODO use eapi9-pipestatus
+                               local -x DISPLAY="$(grep "xserver listening on 
display" "${logfile}" | cut -d ' ' -f 5)"
+
+                               cmake_src_test
+
+                               exit_code=$?
+                               kill "${compositor}"
+                       elif use X; then
+                               virtx cmake_src_test
+                       fi
                else
                        cmake_src_test
                fi
@@ -817,23 +867,23 @@ src_install() {
                addpredict /dev/dri
                addpredict /dev/nvidiactl
 
-               einfo "Generating Blender C/C++ API docs ..."
                cd "${CMAKE_USE_DIR}/doc/doxygen" || die
-               doxygen -u Doxyfile || die
-               doxygen || die "doxygen failed to build API docs."
+               sed -e "/^NUM_PROC_THREADS/s/1/$(makeopts_jobs)/" -i Doxyfile 
|| die
+               edob -m "Generating Blender C/C++ API docs ..." doxygen -u 
Doxyfile
+               edob -m "Building API docs" doxygen
 
                cd "${CMAKE_USE_DIR}" || die
                einfo "Generating (BPY) Blender Python API docs ..."
-               "${BUILD_DIR}"/bin/blender --background --python 
"doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed."
+               edo "${BUILD_DIR}"/bin/blender --background --python 
"doc/python_api/sphinx_doc_gen.py" -noaudio
 
-               cd "${CMAKE_USE_DIR}/doc/python_api" || die
-               sphinx-build sphinx-in BPY_API || die "sphinx failed."
+               edo sphinx-build -j "$(makeopts_jobs)" doc/python_api/sphinx-in 
doc/python_api/BPY_API
 
+               cd "${CMAKE_USE_DIR}" || die
                docinto "html/API/python"
-               dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/"
+               dodoc -r "doc/python_api/BPY_API/"
 
                docinto "html/API/blender"
-               dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/"
+               dodoc -r "doc/doxygen/html/"
        fi
 
        # Fix doc installdir
@@ -896,3 +946,27 @@ pkg_postrm() {
                ewarn
        fi
 }
+
+pkg_info () {
+       debugvars () {
+               local var
+               for var in "${@}"; do
+                       [[ -v "${var}" ]] && echo "${var}: ${!var}"
+               done
+       }
+
+       local blender_info_vars=(
+               CUDACXX
+               CUDAHOSTCXX
+               CUDAHOSTLD
+               CUDAARCHS
+               CUDAFLAGS
+               CUDA_PATH
+               CUDA_VERBOSE
+               NVCCFLAGS
+               NVCC_PREPEND_FLAGS
+               NVCC_APPPEND_FLAGS
+       )
+
+       debugvars "${blender_info_vars[@]}"
+}

diff --git a/media-gfx/blender/blender-9999.ebuild 
b/media-gfx/blender/blender-4.5.9999.ebuild
similarity index 81%
copy from media-gfx/blender/blender-9999.ebuild
copy to media-gfx/blender/blender-4.5.9999.ebuild
index a8dfb518e25c..eb94627db7db 100644
--- a/media-gfx/blender/blender-9999.ebuild
+++ b/media-gfx/blender/blender-4.5.9999.ebuild
@@ -20,12 +20,12 @@ EAPI=8
 
 PYTHON_COMPAT=( python3_{11..13} )
 # NOTE must match media-libs/osl
-LLVM_COMPAT=( {18..19} )
+LLVM_COMPAT=( {18..20} )
 LLVM_OPTIONAL=1
 
 ROCM_SKIP_GLOBALS=1
 
-inherit cuda rocm llvm-r1
+inherit cuda rocm llvm-r2 edo
 inherit eapi9-pipestatus check-reqs flag-o-matic multiprocessing pax-utils 
python-single-r1 toolchain-funcs virtualx
 inherit cmake xdg-utils
 
@@ -52,10 +52,10 @@ else
        SRC_URI="
                https://download.blender.org/source/${P}.tar.xz
                test? (
-                       
https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0.tar.xz
+                       
https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0-1.tar.xz
                )
        "
-       KEYWORDS="~amd64 ~arm ~arm64"
+       KEYWORDS="~amd64 ~arm64"
 fi
 
 # assets is CC0-1.0
@@ -67,7 +67,7 @@ SLOT="${BLENDER_BRANCH}"
 IUSE="
        alembic +bullet collada +color-management cuda +cycles 
+cycles-bin-kernels
        debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip hiprt jack
-       +jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn oneapi openal 
+openexr +opengl +openpgl
+       jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn openal +openexr 
+opengl +openpgl
        +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml 
pulseaudio
        renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan 
wayland +webp X
 "
@@ -106,21 +106,22 @@ RDEPEND="${PYTHON_DEPS}
        dev-libs/boost:=[nls?]
        dev-libs/lzo:2=
        $(python_gen_cond_dep '
+               dev-python/cattrs[${PYTHON_USEDEP}]
                dev-python/cython[${PYTHON_USEDEP}]
                dev-python/numpy[${PYTHON_USEDEP}]
-               dev-python/zstandard[${PYTHON_USEDEP}]
                dev-python/requests[${PYTHON_USEDEP}]
+               dev-python/zstandard[${PYTHON_USEDEP}]
        ')
        media-libs/freetype:=[brotli]
        media-libs/libepoxy:=
        media-libs/libjpeg-turbo:=
        media-libs/libpng:=
        media-libs/libsamplerate
-       >=media-libs/openimageio-2.5.6.0:=
-       virtual/zlib:=
+       >=media-libs/openimageio-3.0.6.1:=
        virtual/glu
        virtual/libintl
        virtual/opengl[X?]
+       virtual/zlib:=
        alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] )
        bullet? ( sci-physics/bullet:=[double-precision] )
        collada? ( >=media-libs/opencollada-1.6.68 )
@@ -129,7 +130,7 @@ RDEPEND="${PYTHON_DEPS}
        embree? ( media-libs/embree:=[raymask] )
        ffmpeg? ( 
media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid]
 )
        fftw? ( sci-libs/fftw:3.0=[threads] )
-       gmp? ( dev-libs/gmp[cxx] )
+       gmp? ( dev-libs/gmp:=[cxx] )
        gnome? ( gui-libs/libdecor )
        hip? (
                >=dev-util/hip-5.7:=
@@ -147,24 +148,29 @@ RDEPEND="${PYTHON_DEPS}
        )
        nls? ( virtual/libiconv )
        openal? ( media-libs/openal )
-       oidn? ( >=media-libs/oidn-2.1.0 )
-       oneapi? ( dev-libs/intel-compute-runtime:=[l0] )
+       oidn? ( >=media-libs/oidn-2.1.0:= )
        openexr? (
                >=dev-libs/imath-3.1.7:=
                >=media-libs/openexr-3.2.1:0=
        )
        openpgl? ( media-libs/openpgl:= )
-       opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,tbb?] )
+       opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2:=[opengl,cuda?,tbb?] )
        openvdb? (
                >=media-gfx/openvdb-11.0.0:=[nanovdb?]
                dev-libs/c-blosc:=
        )
-       optix? ( <dev-libs/optix-9:= )
+       optix? (
+               >=dev-libs/optix-8:=
+               osl? (
+                       >=media-libs/osl-1.14[clang-cuda]
+               )
+       )
        osl? (
-               >=media-libs/osl-1.13:=[${LLVM_USEDEP}]
+               >=media-libs/osl-1.14:=[${LLVM_USEDEP}]
                media-libs/mesa[${LLVM_USEDEP}]
        )
-       pdf? ( media-libs/libharu )
+       pdf? ( media-libs/libharu:= )
+       pipewire? ( >=media-video/pipewire-1.1.0:= )
        potrace? ( media-gfx/potrace )
        pugixml? ( dev-libs/pugixml )
        pulseaudio? ( media-libs/libpulse )
@@ -181,6 +187,7 @@ RDEPEND="${PYTHON_DEPS}
                media-libs/mesa[wayland]
                sys-apps/dbus
        )
+       webp? ( media-libs/libwebp:= )
        vulkan? (
                media-libs/shaderc
                dev-util/spirv-tools
@@ -195,6 +202,7 @@ RDEPEND="${PYTHON_DEPS}
        )
        X? (
                x11-libs/libX11
+               x11-libs/libXfixes
                x11-libs/libXi
                x11-libs/libXxf86vm
        )
@@ -202,6 +210,11 @@ RDEPEND="${PYTHON_DEPS}
 
 DEPEND="${RDEPEND}
        dev-cpp/eigen:=
+       test? (
+               $(python_gen_cond_dep '
+                       
media-libs/openimageio[jpeg2k,python,${PYTHON_SINGLE_USEDEP},tools]
+               ')
+       )
 "
 
 if [[ "${PV}" == *9999* ]]; then
@@ -245,7 +258,9 @@ PATCHES=(
        "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch"
        "${FILESDIR}/${PN}-4.1.1-numpy.patch"
        "${FILESDIR}/${PN}-4.3.2-system-glog.patch"
-       "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch"
+       "${FILESDIR}/${PN}-4.5.0-ffmpeg-8.0.patch"
+       "${FILESDIR}/${PN}-4.5.3-cmake-policy-3.10.patch"
+       "${FILESDIR}/${PN}-9999-don-t-show-variable-names.patch"
 )
 
 blender_check_requirements() {
@@ -279,18 +294,6 @@ blender_get_version() {
 
 pkg_pretend() {
        blender_check_requirements
-
-       if use oneapi; then
-               einfo "The Intel oneAPI support is rudimentary."
-               einfo ""
-               einfo "Please report any bugs you find to 
https://bugs.gentoo.org/";
-               if ! command -v icpx &>/dev/null && ! command -v dpcpp 
&>/dev/null; then
-                       eerror "Could not find icpx or dpcpp."
-                       eerror "You need SYCL/DCP++ to enable oneapi support."
-                       eerror "Try sys-devel/DPC++::science"
-                       die "FindSYCL would fail. Aborting."
-               fi
-       fi
 }
 
 pkg_setup() {
@@ -298,7 +301,7 @@ pkg_setup() {
        python-single-r1_pkg_setup
 
        if use osl; then
-               llvm-r1_pkg_setup
+               llvm-r2_pkg_setup
        fi
 }
 
@@ -314,8 +317,12 @@ src_unpack() {
                # TODO
                if use test && [[ ${PV} != ${SLOT}.0 ]] ; then
                        mv "blender-${BLENDER_BRANCH}.0/tests/"* "${S}/tests" 
|| die
+                       rmdir -p "blender-${BLENDER_BRANCH}.0/tests/" || die
                fi
        fi
+
+       # clear cmake_minimum_required
+       rm -R "${S}/build_files/build_environment/patches" || die
 }
 
 src_prepare() {
@@ -340,7 +347,7 @@ src_prepare() {
                -i release/freedesktop/blender.desktop || die
 
        sed \
-               -e 
"/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}"
 \
+               -e 
"/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T%/}\${CMAKE_INSTALL_PREFIX}|g}"
 \
                -i CMakeLists.txt \
                || die CMAKE_INSTALL_PREFIX_WITH_CONFIG
 
@@ -400,7 +407,7 @@ src_prepare() {
 
        # Use slotted libhiprt64
        sed \
-               -e 
"s|\"libhiprt64.so\"|\"/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \
+               -e 
"s|\"libhiprt64.so\"|\"${ESYSROOT}/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|"
 \
                -i extern/hipew/src/hiprtew.cc || die
 }
 
@@ -476,11 +483,10 @@ src_configure() {
 
                # GHOST Options:
                -DWITH_GHOST_WAYLAND="$(usex wayland)"
-               # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}"
+               # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" # only visible 
with use wayland. see below
                -DWITH_GHOST_WAYLAND_DYNLOAD="no"
                -DWITH_GHOST_X11="$(usex X)"
                # -DWITH_GHOST_XDND=ON
-               # -DWITH_X11_XF86VMODE=ON
                # -DWITH_X11_XFIXES=ON
                # -DWITH_X11_XINPUT=ON
                # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland?
@@ -514,7 +520,6 @@ src_configure() {
                -DWITH_PYTHON_INSTALL_NUMPY="no"
                -DWITH_PYTHON_INSTALL_ZSTANDARD="no"
                # -DWITH_PYTHON_MODULE="no"
-               -DWITH_PYTHON_SAFETY="OFF"
                -DWITH_PYTHON_SECURITY="yes"
                -DPYTHON_INCLUDE_DIR="$(python_get_includedir)"
                -DPYTHON_LIBRARY="$(python_get_library_path)"
@@ -523,8 +528,8 @@ src_configure() {
 
                # Modifiers:
                -DWITH_MOD_FLUID="$(usex fluid)"
-               # -DWITH_MOD_REMESH=ON
                -DWITH_MOD_OCEANSIM="$(usex fftw)"
+               # -DWITH_MOD_REMESH=ON
 
                # Rendering:
                -DWITH_HYDRA="no" # TODO: Package Hydra
@@ -533,13 +538,12 @@ src_configure() {
                -DWITH_CYCLES_OSL="$(usex osl)"
                -DWITH_CYCLES_EMBREE="$(usex embree)"
                -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)"
+               -DWITH_CYCLES_LOGGING="ON" # "$(usex debug)"
 
                -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)"
                -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)"
                -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex 
cycles-bin-kernels)")"
 
-               -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)"
-               -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi "$(usex 
cycles-bin-kernels)")"
                -DWITH_CYCLES_DEVICE_HIP="$(usex hip)"
                -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex 
cycles-bin-kernels)")"
                -DWITH_CYCLES_DEVICE_HIPRT="$(usex hip "$(usex hiprt)")"
@@ -550,6 +554,22 @@ src_configure() {
                # -DWITH_CYCLES_STANDALONE_GUI=OFF
 
                -DWITH_BLENDER_THUMBNAILER="yes"
+
+               -DWITH_ASSERT_ABORT="$(usex debug)"
+               -DWITH_ASSERT_RELEASE="no" # "$(usex debug)"
+
+               # -DWITH_FREESTYLE=ON
+               # -DWITH_IK_ITASC=ON
+               # -DWITH_IK_SOLVER=ON
+               # -DWITH_INPUT_IME=ON
+               # -DWITH_LIBMV=ON
+               # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS=ON
+               # -DWITH_LZMA=ON
+               # -DWITH_LZO=ON
+               # -DWITH_UV_SLIM=ON
+               -DWITH_NINJA_POOL_JOBS="no"
+               # -DPOSTINSTALL_SCRIPT:PATH=""
+               # -DPOSTCONFIGURE_SCRIPT:PATH=""
        )
 
        if has_version ">=dev-python/numpy-2"; then
@@ -564,10 +584,18 @@ src_configure() {
                mycmakeargs+=(
                        # -DWITH_BUILDINFO="no"
                        -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)"
+                       # -DWITH_COMPILER_ASAN="yes"
+                       # -DWITH_STRSIZE_DEBUG="yes"
+                       # -DWITH_CYCLES_NATIVE_ONLY="yes"
+                       # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS="no"
+                       # -DWITH_PYTHON_SAFETY="ON" # dev option
+
                )
        else
                mycmakeargs+=(
-                       -DWITH_EXPERIMENTAL_FEATURES="no"
+                       -DWITH_BUILDINFO="yes"
+                       -DWITH_EXPERIMENTAL_FEATURES="OFF"
+                       -DWITH_PYTHON_SAFETY="OFF"
                )
        fi
 
@@ -589,6 +617,10 @@ src_configure() {
                mycmakeargs+=(
                        -DHIP_ROOT_DIR="$(hipconfig -p)"
 
+                       -DHIP_HIPCC_FLAGS="-fcf-protection=none"
+
+                       
-DCMAKE_HIP_LINK_EXECUTABLE="$(get_llvm_prefix)/bin/clang++"
+
                        -DCYCLES_HIP_BINARIES_ARCH="$(get_amdgpu_flags)"
                )
 
@@ -617,6 +649,7 @@ src_configure() {
        # This is currently needed on arm64 to get the NEON SIMD wrapper to 
compile the code successfully
        use arm64 && append-flags -flax-vector-conversions
 
+       # WITH_ASSERT_RELEASE filters this
        append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
        append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
 
@@ -641,10 +674,9 @@ src_configure() {
                        use optix && CYCLES_TEST_DEVICES+=( "OPTIX" )
                        use hip && CYCLES_TEST_DEVICES+=( "HIP" )
                        use hiprt && CYCLES_TEST_DEVICES+=( "HIP-RT" )
-                       use oneapi && CYCLES_TEST_DEVICES+=( "ONEAPI" )
                fi
                mycmakeargs+=(
-                       -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr"
+                       -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T%/}/usr"
                        -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo 
"${CYCLES_TEST_DEVICES[*]}")"
                )
 
@@ -659,20 +691,31 @@ src_configure() {
 
                                -DWITH_GPU_DRAW_TESTS="yes"
 
-                               -DWITH_GPU_RENDER_TESTS="no"
-                               -DWITH_GPU_RENDER_TESTS_HEADED="no"
-                               -DWITH_GPU_RENDER_TESTS_SILENT="yes"
+                               -DWITH_GPU_RENDER_TESTS="yes"
+                               -DWITH_GPU_RENDER_TESTS_HEADED="yes"
+                               # -DWITH_GPU_RENDER_TESTS_SILENT="yes"
                                -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)"
 
+                               # Run Python script outside Blender, using 
system default Python3 interpreter,
+                               # NOT the one specified in `TEST_PYTHON_EXE`.
                                -DWITH_SYSTEM_PYTHON_TESTS="yes"
                                -DTEST_SYSTEM_PYTHON_EXE="${PYTHON}"
+
+                               # 
-DTEST_PYTHON_EXE="${T%/}/${EPYTHON}/bin/python"
+
+                               # -DWITH_LINUX_OFFICIAL_RELEASE_TESTS="yes" # 
Not needed?
                        )
 
                        if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && 
use experimental; then
                                mycmakeargs+=(
+                                       -DWITH_GPU_MESH_PAINT_TESTS="yes"
+                                       # -DWITH_UI_TESTS="$(usex wayland)"
+                                       -DWITH_UI_TESTS="yes"
+                                       -DWITH_TESTS_EXPERIMENTAL="yes"
+
                                        # Enable user-interface tests using a 
headless display server.
                                        # Currently this depends on 
WITH_GHOST_WAYLAND and the weston compositor (Experimental)
-                                       -DWITH_UI_TESTS="$(usex wayland)"
+                                       -DWITH_UI_TESTS_HEADLESS="$(usex !X 
"$(usex wayland)")"
                                        
-DWESTON_BIN="${ESYSROOT}/usr/bin/weston"
                                )
                        fi
@@ -689,7 +732,7 @@ src_configure() {
 src_test() {
        # A lot of tests need to have access to the installed data files.
        # So install them into the image directory now.
-       DESTDIR="${T}" cmake_build install
+       DESTDIR="${T%/}" cmake_build install
 
        blender_get_version
        # Define custom blender data/script file paths, or we won't be able to 
find them otherwise during testing.
@@ -703,7 +746,8 @@ src_test() {
        # TODO only picks first card
        addwrite "/dev/dri/card0"
        addwrite "/dev/dri/renderD128"
-       addwrite "/dev/udmabuf"
+
+       [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
 
        if use cuda; then
                cuda_add_sandbox -w
@@ -712,20 +756,14 @@ src_test() {
        fi
 
        local -x CMAKE_SKIP_TESTS=(
-               "^compositor_cpu_color$"
-               "^compositor_cpu_filter$"
-               "^cycles_image_colorspace_cpu$"
                "^script_pyapi_bpy_driver_secure_eval$"
        )
 
        if [[ "${RUN_FAILING_TESTS:-0}" -eq 0 ]]; then
                einfo "not running failing tests 
RUN_FAILING_TESTS=${RUN_FAILING_TESTS}"
                CMAKE_SKIP_TESTS+=(
-                       "^cycles_bsdf_cuda$"
-                       "^cycles_image_data_types_cpu$"
-                       "^cycles_image_data_types_optix$"
-                       "^cycles_image_mapping_cpu$"
-                       "^cycles_osl_cpu$"
+                       # Does try to import from weird paths
+                       "^io_fbx_import$"
                )
        fi
 
@@ -736,20 +774,20 @@ src_test() {
                )
        fi
 
-       if ! has_version "media-libs/openimageio[python]"; then
+       if has_version ">=media-video/ffmpeg-8"; then
                CMAKE_SKIP_TESTS+=(
-                       # import OpenImageIO as oiio # ModuleNotFoundError: No 
module named 'OpenImageIO'
-                       "^compositor_cpu_file_output$"
+                       # output change TODO
+                       "^sequencer_render_video_output$"
                )
        fi
 
-       # oiio can't find webp due to missing cmake files # 937031
-       sed -e "s/ WEBP//g" -i "${BUILD_DIR}/tests/python/CTestTestfile.cmake" 
|| die
-
        # For debugging, print out all information.
        local -x VERBOSE="$(usex debug "true" "false")"
        "${VERBOSE}" && einfo "VERBOSE=${VERBOSE}"
 
+       local -x DEBUG="$(usex debug "true" "false")"
+       "${DEBUG}" && einfo "DEBUG=${DEBUG}"
+
        # Show the window in the foreground.
        # local -x USE_WINDOW="true" # non-zero
        [[ -v USE_WINDOW ]] && einfo "USE_WINDOW=${USE_WINDOW}"
@@ -757,32 +795,43 @@ src_test() {
        # local -x USE_DEBUG="true" # non-zero
        [[ -v USE_DEBUG ]] && einfo "USE_DEBUG=${USE_DEBUG}"
 
+       # Environment OPENIMAGEIO_CUDA=0 trumps everything else, turns off
+       # Cuda functionality. We don't even initialize in this case.
+       local -x OPENIMAGEIO_CUDA=0
+
+       # Needed if openimageio wasn't build with -DNDEBUG
+       local -x OPENIMAGEIO_DEBUG=0
+
+       local -x CYCLESTEST_ARGS="-t 0"
+
        if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then
                einfo "running expensive tests 
EXPENSIVE_TESTS=${EXPENSIVE_TESTS}"
-               # if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] &&
-               #       use experimental && use wayland; then
-               #               # This runs weston
-               #               xdg_environment_reset
-               # fi
-
-               xdg_environment_reset
-               # WITH_GPU_RENDER_TESTS_HEADED
-               if use wayland; then
-                       local compositor exit_code
-                       local logfile=${T}/weston.log
-                       weston --xwayland --backend=headless --socket=wayland-5 
--idle-time=0 2>"${logfile}" &
-                       compositor=$!
-                       local -x WAYLAND_DISPLAY=wayland-5
-                       sleep 1 # wait for xwayland to be up
-                       # TODO use eapi9-pipestatus
-                       local -x DISPLAY="$(grep "xserver listening on display" 
"${logfile}" | cut -d ' ' -f 5)"
-
-                       cmake_src_test
+               if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] &&
+                       use experimental && use wayland; then
+                               # This runs weston
+                               xdg_environment_reset
+               fi
 
-                       exit_code=$?
-                       kill "${compositor}"
-               elif use X; then
-                       virtx cmake_src_test
+               if [[ "${USE_WINDOW}" == "true" ]]; then
+                       xdg_environment_reset
+                       # WITH_GPU_RENDER_TESTS_HEADED
+                       if use wayland; then
+                               local compositor exit_code
+                               local logfile=${T}/weston.log
+                               weston --xwayland --backend=headless 
--width=800 --height=600 --socket=wayland-5 --idle-time=0 2>"${logfile}" &
+                               compositor=$!
+                               local -x WAYLAND_DISPLAY=wayland-5
+                               sleep 1 # wait for xwayland to be up
+                               # TODO use eapi9-pipestatus
+                               local -x DISPLAY="$(grep "xserver listening on 
display" "${logfile}" | cut -d ' ' -f 5)"
+
+                               cmake_src_test
+
+                               exit_code=$?
+                               kill "${compositor}"
+                       elif use X; then
+                               virtx cmake_src_test
+                       fi
                else
                        cmake_src_test
                fi
@@ -817,23 +866,23 @@ src_install() {
                addpredict /dev/dri
                addpredict /dev/nvidiactl
 
-               einfo "Generating Blender C/C++ API docs ..."
                cd "${CMAKE_USE_DIR}/doc/doxygen" || die
-               doxygen -u Doxyfile || die
-               doxygen || die "doxygen failed to build API docs."
+               sed -e "/^NUM_PROC_THREADS/s/1/$(makeopts_jobs)/" -i Doxyfile 
|| die
+               edob -m "Generating Blender C/C++ API docs ..." doxygen -u 
Doxyfile
+               edob -m "Building API docs" doxygen
 
                cd "${CMAKE_USE_DIR}" || die
                einfo "Generating (BPY) Blender Python API docs ..."
-               "${BUILD_DIR}"/bin/blender --background --python 
"doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed."
+               edo "${BUILD_DIR}"/bin/blender --background --python 
"doc/python_api/sphinx_doc_gen.py" -noaudio
 
-               cd "${CMAKE_USE_DIR}/doc/python_api" || die
-               sphinx-build sphinx-in BPY_API || die "sphinx failed."
+               edo sphinx-build -j "$(makeopts_jobs)" doc/python_api/sphinx-in 
doc/python_api/BPY_API
 
+               cd "${CMAKE_USE_DIR}" || die
                docinto "html/API/python"
-               dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/"
+               dodoc -r "doc/python_api/BPY_API/"
 
                docinto "html/API/blender"
-               dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/"
+               dodoc -r "doc/doxygen/html/"
        fi
 
        # Fix doc installdir
@@ -896,3 +945,27 @@ pkg_postrm() {
                ewarn
        fi
 }
+
+pkg_info () {
+       debugvars () {
+               local var
+               for var in "${@}"; do
+                       [[ -v "${var}" ]] && echo "${var}: ${!var}"
+               done
+       }
+
+       local blender_info_vars=(
+               CUDACXX
+               CUDAHOSTCXX
+               CUDAHOSTLD
+               CUDAARCHS
+               CUDAFLAGS
+               CUDA_PATH
+               CUDA_VERBOSE
+               NVCCFLAGS
+               NVCC_PREPEND_FLAGS
+               NVCC_APPPEND_FLAGS
+       )
+
+       debugvars "${blender_info_vars[@]}"
+}

diff --git a/media-gfx/blender/blender-9999.ebuild 
b/media-gfx/blender/blender-9999.ebuild
index a8dfb518e25c..467a83667254 100644
--- a/media-gfx/blender/blender-9999.ebuild
+++ b/media-gfx/blender/blender-9999.ebuild
@@ -20,12 +20,12 @@ EAPI=8
 
 PYTHON_COMPAT=( python3_{11..13} )
 # NOTE must match media-libs/osl
-LLVM_COMPAT=( {18..19} )
+LLVM_COMPAT=( {18..20} )
 LLVM_OPTIONAL=1
 
 ROCM_SKIP_GLOBALS=1
 
-inherit cuda rocm llvm-r1
+inherit cuda rocm llvm-r2 edo
 inherit eapi9-pipestatus check-reqs flag-o-matic multiprocessing pax-utils 
python-single-r1 toolchain-funcs virtualx
 inherit cmake xdg-utils
 
@@ -55,7 +55,7 @@ else
                        
https://download.blender.org/source/blender-test-data-${BLENDER_BRANCH}.0.tar.xz
                )
        "
-       KEYWORDS="~amd64 ~arm ~arm64"
+       KEYWORDS="~amd64 ~arm64"
 fi
 
 # assets is CC0-1.0
@@ -67,7 +67,7 @@ SLOT="${BLENDER_BRANCH}"
 IUSE="
        alembic +bullet collada +color-management cuda +cycles 
+cycles-bin-kernels
        debug doc +embree +ffmpeg +fftw +fluid +gmp gnome hip hiprt jack
-       +jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn oneapi openal 
+openexr +opengl +openpgl
+       jemalloc jpeg2k man +manifold +nanovdb ndof nls +oidn openal +openexr 
+opengl +openpgl
        +opensubdiv +openvdb optix osl pipewire +pdf +potrace +pugixml 
pulseaudio
        renderdoc sdl +sndfile +tbb test +tiff +truetype valgrind vulkan 
wayland +webp X
 "
@@ -106,21 +106,22 @@ RDEPEND="${PYTHON_DEPS}
        dev-libs/boost:=[nls?]
        dev-libs/lzo:2=
        $(python_gen_cond_dep '
+               dev-python/cattrs[${PYTHON_USEDEP}]
                dev-python/cython[${PYTHON_USEDEP}]
                dev-python/numpy[${PYTHON_USEDEP}]
-               dev-python/zstandard[${PYTHON_USEDEP}]
                dev-python/requests[${PYTHON_USEDEP}]
+               dev-python/zstandard[${PYTHON_USEDEP}]
        ')
        media-libs/freetype:=[brotli]
        media-libs/libepoxy:=
        media-libs/libjpeg-turbo:=
        media-libs/libpng:=
        media-libs/libsamplerate
-       >=media-libs/openimageio-2.5.6.0:=
-       virtual/zlib:=
+       >=media-libs/openimageio-3.0.6.1:=
        virtual/glu
        virtual/libintl
        virtual/opengl[X?]
+       virtual/zlib:=
        alembic? ( >=media-gfx/alembic-1.8.3-r2[boost(+),hdf(+)] )
        bullet? ( sci-physics/bullet:=[double-precision] )
        collada? ( >=media-libs/opencollada-1.6.68 )
@@ -129,7 +130,7 @@ RDEPEND="${PYTHON_DEPS}
        embree? ( media-libs/embree:=[raymask] )
        ffmpeg? ( 
media-video/ffmpeg:=[encode(+),lame(-),jpeg2k?,opus,theora,vorbis,vpx,x264,xvid]
 )
        fftw? ( sci-libs/fftw:3.0=[threads] )
-       gmp? ( dev-libs/gmp[cxx] )
+       gmp? ( dev-libs/gmp:=[cxx] )
        gnome? ( gui-libs/libdecor )
        hip? (
                >=dev-util/hip-5.7:=
@@ -147,24 +148,29 @@ RDEPEND="${PYTHON_DEPS}
        )
        nls? ( virtual/libiconv )
        openal? ( media-libs/openal )
-       oidn? ( >=media-libs/oidn-2.1.0 )
-       oneapi? ( dev-libs/intel-compute-runtime:=[l0] )
+       oidn? ( >=media-libs/oidn-2.1.0:= )
        openexr? (
                >=dev-libs/imath-3.1.7:=
                >=media-libs/openexr-3.2.1:0=
        )
        openpgl? ( media-libs/openpgl:= )
-       opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2[opengl,cuda?,tbb?] )
+       opensubdiv? ( >=media-libs/opensubdiv-3.6.0-r2:=[opengl,cuda?,tbb?] )
        openvdb? (
                >=media-gfx/openvdb-11.0.0:=[nanovdb?]
                dev-libs/c-blosc:=
        )
-       optix? ( <dev-libs/optix-9:= )
+       optix? (
+               >=dev-libs/optix-8:=
+               osl? (
+                       >=media-libs/osl-1.14[clang-cuda]
+               )
+       )
        osl? (
-               >=media-libs/osl-1.13:=[${LLVM_USEDEP}]
+               >=media-libs/osl-1.14:=[${LLVM_USEDEP}]
                media-libs/mesa[${LLVM_USEDEP}]
        )
-       pdf? ( media-libs/libharu )
+       pdf? ( media-libs/libharu:= )
+       pipewire? ( >=media-video/pipewire-1.1.0:= )
        potrace? ( media-gfx/potrace )
        pugixml? ( dev-libs/pugixml )
        pulseaudio? ( media-libs/libpulse )
@@ -181,6 +187,7 @@ RDEPEND="${PYTHON_DEPS}
                media-libs/mesa[wayland]
                sys-apps/dbus
        )
+       webp? ( media-libs/libwebp:= )
        vulkan? (
                media-libs/shaderc
                dev-util/spirv-tools
@@ -195,6 +202,7 @@ RDEPEND="${PYTHON_DEPS}
        )
        X? (
                x11-libs/libX11
+               x11-libs/libXfixes
                x11-libs/libXi
                x11-libs/libXxf86vm
        )
@@ -202,6 +210,11 @@ RDEPEND="${PYTHON_DEPS}
 
 DEPEND="${RDEPEND}
        dev-cpp/eigen:=
+       test? (
+               $(python_gen_cond_dep '
+                       
media-libs/openimageio[jpeg2k,python,${PYTHON_SINGLE_USEDEP},tools]
+               ')
+       )
 "
 
 if [[ "${PV}" == *9999* ]]; then
@@ -245,7 +258,9 @@ PATCHES=(
        "${FILESDIR}/${PN}-4.1.1-FindLLVM.patch"
        "${FILESDIR}/${PN}-4.1.1-numpy.patch"
        "${FILESDIR}/${PN}-4.3.2-system-glog.patch"
-       "${FILESDIR}/${PN}-4.4.0-optix-compile-flags.patch"
+       "${FILESDIR}/${PN}-4.5.0-ffmpeg-8.0.patch"
+       "${FILESDIR}/${PN}-4.5.3-cmake-policy-3.10.patch"
+       "${FILESDIR}/${PN}-9999-don-t-show-variable-names.patch"
 )
 
 blender_check_requirements() {
@@ -279,18 +294,6 @@ blender_get_version() {
 
 pkg_pretend() {
        blender_check_requirements
-
-       if use oneapi; then
-               einfo "The Intel oneAPI support is rudimentary."
-               einfo ""
-               einfo "Please report any bugs you find to 
https://bugs.gentoo.org/";
-               if ! command -v icpx &>/dev/null && ! command -v dpcpp 
&>/dev/null; then
-                       eerror "Could not find icpx or dpcpp."
-                       eerror "You need SYCL/DCP++ to enable oneapi support."
-                       eerror "Try sys-devel/DPC++::science"
-                       die "FindSYCL would fail. Aborting."
-               fi
-       fi
 }
 
 pkg_setup() {
@@ -298,7 +301,7 @@ pkg_setup() {
        python-single-r1_pkg_setup
 
        if use osl; then
-               llvm-r1_pkg_setup
+               llvm-r2_pkg_setup
        fi
 }
 
@@ -314,8 +317,12 @@ src_unpack() {
                # TODO
                if use test && [[ ${PV} != ${SLOT}.0 ]] ; then
                        mv "blender-${BLENDER_BRANCH}.0/tests/"* "${S}/tests" 
|| die
+                       rmdir -p "blender-${BLENDER_BRANCH}.0/tests/" || die
                fi
        fi
+
+       # clear cmake_minimum_required
+       rm -R "${S}/build_files/build_environment/patches" || die
 }
 
 src_prepare() {
@@ -340,7 +347,7 @@ src_prepare() {
                -i release/freedesktop/blender.desktop || die
 
        sed \
-               -e 
"/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T}\${CMAKE_INSTALL_PREFIX}|g}"
 \
+               -e 
"/CMAKE_INSTALL_PREFIX_WITH_CONFIG/{s|\${CMAKE_INSTALL_PREFIX}|${T%/}\${CMAKE_INSTALL_PREFIX}|g}"
 \
                -i CMakeLists.txt \
                || die CMAKE_INSTALL_PREFIX_WITH_CONFIG
 
@@ -400,7 +407,7 @@ src_prepare() {
 
        # Use slotted libhiprt64
        sed \
-               -e 
"s|\"libhiprt64.so\"|\"/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|" \
+               -e 
"s|\"libhiprt64.so\"|\"${ESYSROOT}/usr/lib/hiprt/2.5/$(get_libdir)/libhiprt64.so\"|"
 \
                -i extern/hipew/src/hiprtew.cc || die
 }
 
@@ -476,11 +483,10 @@ src_configure() {
 
                # GHOST Options:
                -DWITH_GHOST_WAYLAND="$(usex wayland)"
-               # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}"
+               # -DWITH_GHOST_WAYLAND_APP_ID="blender-${BV}" # only visible 
with use wayland. see below
                -DWITH_GHOST_WAYLAND_DYNLOAD="no"
                -DWITH_GHOST_X11="$(usex X)"
                # -DWITH_GHOST_XDND=ON
-               # -DWITH_X11_XF86VMODE=ON
                # -DWITH_X11_XFIXES=ON
                # -DWITH_X11_XINPUT=ON
                # -DWITH_GHOST_WAYLAND_DYNLOAD # visible wayland?
@@ -514,7 +520,6 @@ src_configure() {
                -DWITH_PYTHON_INSTALL_NUMPY="no"
                -DWITH_PYTHON_INSTALL_ZSTANDARD="no"
                # -DWITH_PYTHON_MODULE="no"
-               -DWITH_PYTHON_SAFETY="OFF"
                -DWITH_PYTHON_SECURITY="yes"
                -DPYTHON_INCLUDE_DIR="$(python_get_includedir)"
                -DPYTHON_LIBRARY="$(python_get_library_path)"
@@ -523,8 +528,8 @@ src_configure() {
 
                # Modifiers:
                -DWITH_MOD_FLUID="$(usex fluid)"
-               # -DWITH_MOD_REMESH=ON
                -DWITH_MOD_OCEANSIM="$(usex fftw)"
+               # -DWITH_MOD_REMESH=ON
 
                # Rendering:
                -DWITH_HYDRA="no" # TODO: Package Hydra
@@ -533,13 +538,12 @@ src_configure() {
                -DWITH_CYCLES_OSL="$(usex osl)"
                -DWITH_CYCLES_EMBREE="$(usex embree)"
                -DWITH_CYCLES_PATH_GUIDING="$(usex openpgl)"
+               -DWITH_CYCLES_LOGGING="ON" # "$(usex debug)"
 
                -DWITH_CYCLES_DEVICE_OPTIX="$(usex optix)"
                -DWITH_CYCLES_DEVICE_CUDA="$(usex cuda)"
                -DWITH_CYCLES_CUDA_BINARIES="$(usex cuda "$(usex 
cycles-bin-kernels)")"
 
-               -DWITH_CYCLES_DEVICE_ONEAPI="$(usex oneapi)"
-               -DWITH_CYCLES_ONEAPI_BINARIES="$(usex oneapi "$(usex 
cycles-bin-kernels)")"
                -DWITH_CYCLES_DEVICE_HIP="$(usex hip)"
                -DWITH_CYCLES_HIP_BINARIES="$(usex hip "$(usex 
cycles-bin-kernels)")"
                -DWITH_CYCLES_DEVICE_HIPRT="$(usex hip "$(usex hiprt)")"
@@ -550,6 +554,22 @@ src_configure() {
                # -DWITH_CYCLES_STANDALONE_GUI=OFF
 
                -DWITH_BLENDER_THUMBNAILER="yes"
+
+               -DWITH_ASSERT_ABORT="$(usex debug)"
+               -DWITH_ASSERT_RELEASE="no" # "$(usex debug)"
+
+               # -DWITH_FREESTYLE=ON
+               # -DWITH_IK_ITASC=ON
+               # -DWITH_IK_SOLVER=ON
+               # -DWITH_INPUT_IME=ON
+               # -DWITH_LIBMV=ON
+               # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS=ON
+               # -DWITH_LZMA=ON
+               # -DWITH_LZO=ON
+               # -DWITH_UV_SLIM=ON
+               -DWITH_NINJA_POOL_JOBS="no"
+               # -DPOSTINSTALL_SCRIPT:PATH=""
+               # -DPOSTCONFIGURE_SCRIPT:PATH=""
        )
 
        if has_version ">=dev-python/numpy-2"; then
@@ -564,10 +584,18 @@ src_configure() {
                mycmakeargs+=(
                        # -DWITH_BUILDINFO="no"
                        -DWITH_EXPERIMENTAL_FEATURES="$(usex experimental)"
+                       # -DWITH_COMPILER_ASAN="yes"
+                       # -DWITH_STRSIZE_DEBUG="yes"
+                       # -DWITH_CYCLES_NATIVE_ONLY="yes"
+                       # -DWITH_LIBMV_SCHUR_SPECIALIZATIONS="no"
+                       # -DWITH_PYTHON_SAFETY="ON" # dev option
+
                )
        else
                mycmakeargs+=(
-                       -DWITH_EXPERIMENTAL_FEATURES="no"
+                       -DWITH_BUILDINFO="yes"
+                       -DWITH_EXPERIMENTAL_FEATURES="OFF"
+                       -DWITH_PYTHON_SAFETY="OFF"
                )
        fi
 
@@ -589,6 +617,10 @@ src_configure() {
                mycmakeargs+=(
                        -DHIP_ROOT_DIR="$(hipconfig -p)"
 
+                       -DHIP_HIPCC_FLAGS="-fcf-protection=none"
+
+                       
-DCMAKE_HIP_LINK_EXECUTABLE="$(get_llvm_prefix)/bin/clang++"
+
                        -DCYCLES_HIP_BINARIES_ARCH="$(get_amdgpu_flags)"
                )
 
@@ -617,6 +649,7 @@ src_configure() {
        # This is currently needed on arm64 to get the NEON SIMD wrapper to 
compile the code successfully
        use arm64 && append-flags -flax-vector-conversions
 
+       # WITH_ASSERT_RELEASE filters this
        append-cflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
        append-cxxflags "$(usex debug '-DDEBUG' '-DNDEBUG')"
 
@@ -641,10 +674,9 @@ src_configure() {
                        use optix && CYCLES_TEST_DEVICES+=( "OPTIX" )
                        use hip && CYCLES_TEST_DEVICES+=( "HIP" )
                        use hiprt && CYCLES_TEST_DEVICES+=( "HIP-RT" )
-                       use oneapi && CYCLES_TEST_DEVICES+=( "ONEAPI" )
                fi
                mycmakeargs+=(
-                       -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T}/usr"
+                       -DCMAKE_INSTALL_PREFIX_WITH_CONFIG="${T%/}/usr"
                        -DCYCLES_TEST_DEVICES="$(local IFS=";"; echo 
"${CYCLES_TEST_DEVICES[*]}")"
                )
 
@@ -659,20 +691,31 @@ src_configure() {
 
                                -DWITH_GPU_DRAW_TESTS="yes"
 
-                               -DWITH_GPU_RENDER_TESTS="no"
-                               -DWITH_GPU_RENDER_TESTS_HEADED="no"
-                               -DWITH_GPU_RENDER_TESTS_SILENT="yes"
+                               -DWITH_GPU_RENDER_TESTS="yes"
+                               -DWITH_GPU_RENDER_TESTS_HEADED="yes"
+                               # -DWITH_GPU_RENDER_TESTS_SILENT="yes"
                                -DWITH_GPU_RENDER_TESTS_VULKAN="$(usex vulkan)"
 
+                               # Run Python script outside Blender, using 
system default Python3 interpreter,
+                               # NOT the one specified in `TEST_PYTHON_EXE`.
                                -DWITH_SYSTEM_PYTHON_TESTS="yes"
                                -DTEST_SYSTEM_PYTHON_EXE="${PYTHON}"
+
+                               # 
-DTEST_PYTHON_EXE="${T%/}/${EPYTHON}/bin/python"
+
+                               # -DWITH_LINUX_OFFICIAL_RELEASE_TESTS="yes" # 
Not needed?
                        )
 
                        if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] && 
use experimental; then
                                mycmakeargs+=(
+                                       -DWITH_GPU_MESH_PAINT_TESTS="yes"
+                                       # -DWITH_UI_TESTS="$(usex wayland)"
+                                       -DWITH_UI_TESTS="yes"
+                                       -DWITH_TESTS_EXPERIMENTAL="yes"
+
                                        # Enable user-interface tests using a 
headless display server.
                                        # Currently this depends on 
WITH_GHOST_WAYLAND and the weston compositor (Experimental)
-                                       -DWITH_UI_TESTS="$(usex wayland)"
+                                       -DWITH_UI_TESTS_HEADLESS="$(usex !X 
"$(usex wayland)")"
                                        
-DWESTON_BIN="${ESYSROOT}/usr/bin/weston"
                                )
                        fi
@@ -689,7 +732,7 @@ src_configure() {
 src_test() {
        # A lot of tests need to have access to the installed data files.
        # So install them into the image directory now.
-       DESTDIR="${T}" cmake_build install
+       DESTDIR="${T%/}" cmake_build install
 
        blender_get_version
        # Define custom blender data/script file paths, or we won't be able to 
find them otherwise during testing.
@@ -703,7 +746,8 @@ src_test() {
        # TODO only picks first card
        addwrite "/dev/dri/card0"
        addwrite "/dev/dri/renderD128"
-       addwrite "/dev/udmabuf"
+
+       [[ -c "/dev/udmabuf" ]] && addwrite "/dev/udmabuf"
 
        if use cuda; then
                cuda_add_sandbox -w
@@ -712,20 +756,14 @@ src_test() {
        fi
 
        local -x CMAKE_SKIP_TESTS=(
-               "^compositor_cpu_color$"
-               "^compositor_cpu_filter$"
-               "^cycles_image_colorspace_cpu$"
                "^script_pyapi_bpy_driver_secure_eval$"
        )
 
        if [[ "${RUN_FAILING_TESTS:-0}" -eq 0 ]]; then
                einfo "not running failing tests 
RUN_FAILING_TESTS=${RUN_FAILING_TESTS}"
                CMAKE_SKIP_TESTS+=(
-                       "^cycles_bsdf_cuda$"
-                       "^cycles_image_data_types_cpu$"
-                       "^cycles_image_data_types_optix$"
-                       "^cycles_image_mapping_cpu$"
-                       "^cycles_osl_cpu$"
+                       # Does try to import from weird paths
+                       "^io_fbx_import$"
                )
        fi
 
@@ -736,20 +774,20 @@ src_test() {
                )
        fi
 
-       if ! has_version "media-libs/openimageio[python]"; then
+       if has_version ">=media-video/ffmpeg-8"; then
                CMAKE_SKIP_TESTS+=(
-                       # import OpenImageIO as oiio # ModuleNotFoundError: No 
module named 'OpenImageIO'
-                       "^compositor_cpu_file_output$"
+                       # output change TODO
+                       "^sequencer_render_video_output$"
                )
        fi
 
-       # oiio can't find webp due to missing cmake files # 937031
-       sed -e "s/ WEBP//g" -i "${BUILD_DIR}/tests/python/CTestTestfile.cmake" 
|| die
-
        # For debugging, print out all information.
        local -x VERBOSE="$(usex debug "true" "false")"
        "${VERBOSE}" && einfo "VERBOSE=${VERBOSE}"
 
+       local -x DEBUG="$(usex debug "true" "false")"
+       "${DEBUG}" && einfo "DEBUG=${DEBUG}"
+
        # Show the window in the foreground.
        # local -x USE_WINDOW="true" # non-zero
        [[ -v USE_WINDOW ]] && einfo "USE_WINDOW=${USE_WINDOW}"
@@ -757,32 +795,43 @@ src_test() {
        # local -x USE_DEBUG="true" # non-zero
        [[ -v USE_DEBUG ]] && einfo "USE_DEBUG=${USE_DEBUG}"
 
+       # Environment OPENIMAGEIO_CUDA=0 trumps everything else, turns off
+       # Cuda functionality. We don't even initialize in this case.
+       local -x OPENIMAGEIO_CUDA=0
+
+       # Needed if openimageio wasn't build with -DNDEBUG
+       local -x OPENIMAGEIO_DEBUG=0
+
+       local -x CYCLESTEST_ARGS="-t 0"
+
        if [[ "${EXPENSIVE_TESTS:-0}" -gt 0 ]]; then
                einfo "running expensive tests 
EXPENSIVE_TESTS=${EXPENSIVE_TESTS}"
-               # if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] &&
-               #       use experimental && use wayland; then
-               #               # This runs weston
-               #               xdg_environment_reset
-               # fi
-
-               xdg_environment_reset
-               # WITH_GPU_RENDER_TESTS_HEADED
-               if use wayland; then
-                       local compositor exit_code
-                       local logfile=${T}/weston.log
-                       weston --xwayland --backend=headless --socket=wayland-5 
--idle-time=0 2>"${logfile}" &
-                       compositor=$!
-                       local -x WAYLAND_DISPLAY=wayland-5
-                       sleep 1 # wait for xwayland to be up
-                       # TODO use eapi9-pipestatus
-                       local -x DISPLAY="$(grep "xserver listening on display" 
"${logfile}" | cut -d ' ' -f 5)"
-
-                       cmake_src_test
+               if [[ "${PV}" == *9999* && "${BVC}" == "alpha" ]] &&
+                       use experimental && use wayland; then
+                               # This runs weston
+                               xdg_environment_reset
+               fi
 
-                       exit_code=$?
-                       kill "${compositor}"
-               elif use X; then
-                       virtx cmake_src_test
+               if [[ "${USE_WINDOW}" == "true" ]]; then
+                       xdg_environment_reset
+                       # WITH_GPU_RENDER_TESTS_HEADED
+                       if use wayland; then
+                               local compositor exit_code
+                               local logfile=${T}/weston.log
+                               weston --xwayland --backend=headless 
--width=800 --height=600 --socket=wayland-5 --idle-time=0 2>"${logfile}" &
+                               compositor=$!
+                               local -x WAYLAND_DISPLAY=wayland-5
+                               sleep 1 # wait for xwayland to be up
+                               # TODO use eapi9-pipestatus
+                               local -x DISPLAY="$(grep "xserver listening on 
display" "${logfile}" | cut -d ' ' -f 5)"
+
+                               cmake_src_test
+
+                               exit_code=$?
+                               kill "${compositor}"
+                       elif use X; then
+                               virtx cmake_src_test
+                       fi
                else
                        cmake_src_test
                fi
@@ -817,23 +866,23 @@ src_install() {
                addpredict /dev/dri
                addpredict /dev/nvidiactl
 
-               einfo "Generating Blender C/C++ API docs ..."
                cd "${CMAKE_USE_DIR}/doc/doxygen" || die
-               doxygen -u Doxyfile || die
-               doxygen || die "doxygen failed to build API docs."
+               sed -e "/^NUM_PROC_THREADS/s/1/$(makeopts_jobs)/" -i Doxyfile 
|| die
+               edob -m "Generating Blender C/C++ API docs ..." doxygen -u 
Doxyfile
+               edob -m "Building API docs" doxygen
 
                cd "${CMAKE_USE_DIR}" || die
                einfo "Generating (BPY) Blender Python API docs ..."
-               "${BUILD_DIR}"/bin/blender --background --python 
"doc/python_api/sphinx_doc_gen.py" -noaudio || die "sphinx failed."
+               edo "${BUILD_DIR}"/bin/blender --background --python 
"doc/python_api/sphinx_doc_gen.py" -noaudio
 
-               cd "${CMAKE_USE_DIR}/doc/python_api" || die
-               sphinx-build sphinx-in BPY_API || die "sphinx failed."
+               edo sphinx-build -j "$(makeopts_jobs)" doc/python_api/sphinx-in 
doc/python_api/BPY_API
 
+               cd "${CMAKE_USE_DIR}" || die
                docinto "html/API/python"
-               dodoc -r "${CMAKE_USE_DIR}/doc/python_api/BPY_API/"
+               dodoc -r "doc/python_api/BPY_API/"
 
                docinto "html/API/blender"
-               dodoc -r "${CMAKE_USE_DIR}/doc/doxygen/html/"
+               dodoc -r "doc/doxygen/html/"
        fi
 
        # Fix doc installdir
@@ -896,3 +945,27 @@ pkg_postrm() {
                ewarn
        fi
 }
+
+pkg_info () {
+       debugvars () {
+               local var
+               for var in "${@}"; do
+                       [[ -v "${var}" ]] && echo "${var}: ${!var}"
+               done
+       }
+
+       local blender_info_vars=(
+               CUDACXX
+               CUDAHOSTCXX
+               CUDAHOSTLD
+               CUDAARCHS
+               CUDAFLAGS
+               CUDA_PATH
+               CUDA_VERBOSE
+               NVCCFLAGS
+               NVCC_PREPEND_FLAGS
+               NVCC_APPPEND_FLAGS
+       )
+
+       debugvars "${blender_info_vars[@]}"
+}

diff --git a/media-gfx/blender/files/blender-4.5.0-ffmpeg-8.0.patch 
b/media-gfx/blender/files/blender-4.5.0-ffmpeg-8.0.patch
new file mode 100644
index 000000000000..89c8689d51c0
--- /dev/null
+++ b/media-gfx/blender/files/blender-4.5.0-ffmpeg-8.0.patch
@@ -0,0 +1,40 @@
+diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp 
b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
+index efe36df4204..2a4dcd45f07 100644
+--- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
++++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp
+@@ -285,9 +285,11 @@ FFMPEGReader::FFMPEGReader(std::shared_ptr<Buffer> 
buffer, int stream) :
+               m_membuffer(buffer),
+               m_membufferpos(0)
+ {
+-      m_membuf = reinterpret_cast<data_t*>(av_malloc(AV_INPUT_BUFFER_MIN_SIZE 
+ AV_INPUT_BUFFER_PADDING_SIZE));
++      // Default buffer size (aligns with the x86 page size), taken from 
FFmpeg's "doc/examples/avio_read_callback.c" example
++      size_t avio_ctx_buffer_size = 4096;
++      m_membuf = reinterpret_cast<data_t*>(av_malloc(avio_ctx_buffer_size));
+ 
+-      m_aviocontext = avio_alloc_context(m_membuf, AV_INPUT_BUFFER_MIN_SIZE, 
0, this, read_packet, nullptr, seek_packet);
++      m_aviocontext = avio_alloc_context(m_membuf, avio_ctx_buffer_size, 0, 
this, read_packet, nullptr, seek_packet);
+ 
+       if(!m_aviocontext)
+       {
+diff --git a/source/blender/imbuf/movie/intern/movie_write_audio.cc 
b/source/blender/imbuf/movie/intern/movie_write_audio.cc
+index 16d01359a60..2af40944c2e 100644
+--- a/source/blender/imbuf/movie/intern/movie_write_audio.cc
++++ b/source/blender/imbuf/movie/intern/movie_write_audio.cc
+@@ -334,12 +334,11 @@ AVStream *alloc_audio_stream(MovieWriter *context,
+   c->time_base.num = 1;
+   c->time_base.den = c->sample_rate;
+ 
+-  if (c->frame_size == 0) {
+-    /* Used to be if ((c->codec_id >= CODEC_ID_PCM_S16LE) && (c->codec_id <= 
CODEC_ID_PCM_DVD))
+-     * not sure if that is needed anymore, so let's try out if there are any
+-     * complaints regarding some FFMPEG versions users might have. */
+-    context->audio_input_samples = AV_INPUT_BUFFER_MIN_SIZE * 8 / 
c->bits_per_coded_sample /
+-                                   audio_channels;
++  if (c->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE) {
++    /* If the audio format has a variable frame size, default to 10000.
++     * This logic is taken from the FFmpeg "doc/examples/mux.c" example
++     */
++    context->audio_input_samples = 10000;
+   }
+   else {
+     context->audio_input_samples = c->frame_size;

diff --git a/media-gfx/blender/files/blender-4.5.3-cmake-policy-3.10.patch 
b/media-gfx/blender/files/blender-4.5.3-cmake-policy-3.10.patch
new file mode 100644
index 000000000000..f23f96e38ad4
--- /dev/null
+++ b/media-gfx/blender/files/blender-4.5.3-cmake-policy-3.10.patch
@@ -0,0 +1,68 @@
+From 16b2913ada2929608b6a1ad4b75a9be036cf506e Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Thu, 30 Oct 2025 12:05:29 +0100
+Subject: [PATCH 1/3] build_files: allow cmake policy 3.10
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/build_files/build_environment/CMakeLists.txt 
b/build_files/build_environment/CMakeLists.txt
+index af93de4..94fbca8 100644
+--- a/build_files/build_environment/CMakeLists.txt
++++ b/build_files/build_environment/CMakeLists.txt
+@@ -14,7 +14,7 @@
+ #
+ 
##################################################################################################
+ 
+-cmake_minimum_required(VERSION 3.5)
++cmake_minimum_required(VERSION 3.5...3.10)
+ project("BlenderDependencies")
+ if(POLICY CMP0135)
+   cmake_policy(SET CMP0135 NEW) # CMake 3.24+ Set the date/time for extracted 
files to time of extraction
+-- 
+2.51.2
+
+
+From 756762326790f95bff3fb1f9c92805be92029fcb Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Thu, 30 Oct 2025 12:05:49 +0100
+Subject: [PATCH 2/3] extern/quadriflow/lemon: allow cmake policy 3.10
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt 
b/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt
+index a56dbc5..459aff4 100644
+--- a/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt
++++ b/extern/quadriflow/3rd/lemon-1.3.1/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
++CMAKE_MINIMUM_REQUIRED(VERSION 3.1...3.10)
+ 
+ SET(PROJECT_NAME "LEMON")
+ PROJECT(${PROJECT_NAME})
+-- 
+2.51.2
+
+
+From 6512020264db7523123aa26dabba621783484815 Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Thu, 30 Oct 2025 12:05:56 +0100
+Subject: [PATCH 3/3] intern/ghost: allow cmake policy 3.10
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/intern/ghost/test/CMakeLists.txt 
b/intern/ghost/test/CMakeLists.txt
+index 60fab05..ff95da2 100644
+--- a/intern/ghost/test/CMakeLists.txt
++++ b/intern/ghost/test/CMakeLists.txt
+@@ -15,7 +15,7 @@ cmake_policy(SET CMP0010 NEW)
+ # Input directories must have `CMakeLists.txt`.
+ cmake_policy(SET CMP0014 NEW)
+ 
+-cmake_minimum_required(VERSION 3.5)
++cmake_minimum_required(VERSION 3.5...3.10)
+ 
+ project(GhostMultiTest)
+ 
+-- 
+2.51.2
+

diff --git 
a/media-gfx/blender/files/blender-9999-don-t-show-variable-names.patch 
b/media-gfx/blender/files/blender-9999-don-t-show-variable-names.patch
new file mode 100644
index 000000000000..98ee4403c8e8
--- /dev/null
+++ b/media-gfx/blender/files/blender-9999-don-t-show-variable-names.patch
@@ -0,0 +1,25 @@
+From b15763a8a1dca3e8feb7852e14c5cb84f9aacca5 Mon Sep 17 00:00:00 2001
+From: Paul Zander <[email protected]>
+Date: Sun, 17 Aug 2025 17:43:48 +0200
+Subject: [PATCH] don't show variable names
+
+Signed-off-by: Paul Zander <[email protected]>
+
+diff --git a/source/blender/nodes/composite/nodes/node_composite_pixelate.cc 
b/source/blender/nodes/composite/nodes/node_composite_pixelate.cc
+index 1315312c612..e2cdbabcc31 100644
+--- a/source/blender/nodes/composite/nodes/node_composite_pixelate.cc
++++ b/source/blender/nodes/composite/nodes/node_composite_pixelate.cc
+@@ -99,8 +99,8 @@ class PixelateOperation : public NodeOperation {
+         }
+       }
+ 
+-      int2 size = end - start;
+-      int count = size.x * size.y;
++      int2 pixel = end - start;
++      int count = pixel.x * pixel.y;
+       output.store_pixel(texel, accumulated_color / count);
+     });
+   }
+-- 
+2.50.1
+

diff --git a/media-gfx/blender/metadata.xml b/media-gfx/blender/metadata.xml
index dfbf4a93c976..f4e8a4fed5e8 100644
--- a/media-gfx/blender/metadata.xml
+++ b/media-gfx/blender/metadata.xml
@@ -66,7 +66,6 @@
                        Enable NDOF input devices (SpaceNavigator and friends).
                </flag>
                <flag name="oidn">Enable OpenImageDenoiser Support</flag>
-               <flag name="oneapi">Build cycles renderer with Intel oneAPI 
SyCL support</flag>
                <flag name="openpgl">Enable path guiding support in 
Cycles</flag>
                <flag name="opensubdiv">
                        Add rendering support form OpenSubdiv from Dreamworks 
Animation

Reply via email to