Compare commits
275 Commits
blender-pr
...
blender-v3
Author | SHA1 | Date | |
---|---|---|---|
948f8298b9 | |||
533e8ac3f3 | |||
c2b517950a | |||
9b86f9c32e | |||
b5144f7ec0 | |||
140f6a7a75 | |||
312f954a22 | |||
a9e4c62b41 | |||
4bb3baddbd | |||
5ff9180890 | |||
9301513a43 | |||
72a8bab04e | |||
8dd3498b2b | |||
dd0cd1df1d | |||
c86cda24a3 | |||
88dcc0b176 | |||
a274713f6c | |||
0e8080419d | |||
cb9cd06f06 | |||
04da7c1153 | |||
![]() |
23f6baf45b | ||
02498e8f13 | |||
28cb5a3a04 | |||
f4b095c872 | |||
b9d242797b | |||
6494fbbdc5 | |||
0c79ec15f4 | |||
743389a99c | |||
2f16323ff0 | |||
5429ce1e0a | |||
d9ff1fb519 | |||
867bee6125 | |||
6cb3145d6c | |||
3f3067c70c | |||
581d1f396b | |||
1e16e55f7d | |||
4fec780a9f | |||
608916b0e1 | |||
a3c0ff9b74 | |||
bc9a6c858e | |||
![]() |
92213e052b | ||
555eb1e46c | |||
0364607a69 | |||
06bfceeda7 | |||
786286111d | |||
a1015d2d23 | |||
aa2571b8e7 | |||
90f06aa48f | |||
3a0eb79ed0 | |||
fc61f24f63 | |||
4eab596c3d | |||
46293e3f97 | |||
225f9c9528 | |||
86a41f8c34 | |||
2cec5d8139 | |||
8c7cca66f0 | |||
e636c4e4c4 | |||
09febafb97 | |||
8d94aeb604 | |||
faca2c614b | |||
d290b8b2b9 | |||
c3a5a0becf | |||
47868c8a4f | |||
4ffbc6175e | |||
d6d0643265 | |||
405dd143cf | |||
095b363899 | |||
6191b726aa | |||
6aacbdd716 | |||
442ce8610d | |||
158752cee6 | |||
9137a4f03c | |||
8529458cc7 | |||
3029bd2b0c | |||
427b0a0ab2 | |||
eca95d35ba | |||
849c76a10b | |||
6fbb4d7051 | |||
ae5b912f78 | |||
d2050c7c36 | |||
746af98b00 | |||
17fd81fb9b | |||
77e66d630a | |||
b3e0eadbdc | |||
a86f32d219 | |||
2bbabbc739 | |||
7a4b3d2287 | |||
5940e9b792 | |||
f3a10a1543 | |||
e981a187e5 | |||
15b36dc4e6 | |||
a274718e7d | |||
fff29e1bd6 | |||
![]() |
9d3d9019ab | ||
f32939af53 | |||
cdfb21c7e2 | |||
4107e04c45 | |||
4d25c6b86e | |||
934af61134 | |||
bd3a7b41e2 | |||
bf24652e38 | |||
86abbf7176 | |||
![]() |
f9f834068e | ||
3e247f0f76 | |||
![]() |
021c8c7cd0 | ||
8dfe5b236e | |||
24c416c302 | |||
dd7a10e5a5 | |||
2eabe0a320 | |||
![]() |
3e41332798 | ||
![]() |
e968b4197b | ||
4d58a1c657 | |||
6008c67859 | |||
4a7ace4a78 | |||
5a03d212a9 | |||
f0cd1fed18 | |||
![]() |
e257e2e075 | ||
981245fc6f | |||
c024d6f47d | |||
92680674d0 | |||
4f22e6178e | |||
d0e9a8c46a | |||
331de028ef | |||
![]() |
29bc410c8a | ||
be34354500 | |||
198fd56a5e | |||
ee8d32b1d9 | |||
036c60a27d | |||
7a21a49ac5 | |||
19a13a8b8b | |||
1fd35126c4 | |||
af7dd99588 | |||
6810deb521 | |||
9676cb6d8d | |||
b43cfae49c | |||
7ce6750234 | |||
d2b74943ce | |||
c5ec667b69 | |||
a49a960a58 | |||
90055a1f2c | |||
0c3a52d571 | |||
f07f55582a | |||
be38344de0 | |||
d5acb2b2fe | |||
832157cb02 | |||
2124bfb211 | |||
b7b9e670ce | |||
15b2b53b87 | |||
5bbef85bc8 | |||
![]() |
19202736d5 | ||
e86b5230ca | |||
953eda6bfd | |||
49b7a7efca | |||
05d09dcb81 | |||
c76c8ee3a0 | |||
f6294c437f | |||
da0d699d92 | |||
2fb0640740 | |||
20679ca25c | |||
5b27e6f24b | |||
ad6f5117ad | |||
8daad7dab5 | |||
2bdc9908a9 | |||
2db9bfb6d8 | |||
9f5a2d8788 | |||
2b2fc6d759 | |||
2a7b8e78e1 | |||
514f4e8b47 | |||
94ec66c2f2 | |||
5916e73b28 | |||
30774f01cd | |||
5ff62df238 | |||
1492f566c8 | |||
e5af9a12d7 | |||
9f8ece70ee | |||
bb95609fce | |||
0386737097 | |||
f9c6e0c814 | |||
7881a797a0 | |||
07ba515b21 | |||
3d7f298e9a | |||
7e942b2a1e | |||
e1e9c83889 | |||
![]() |
bfc9d7cadf | ||
fcc291bbf9 | |||
567e3f6508 | |||
0b45d3e386 | |||
6004e9d62b | |||
c98268d3f5 | |||
86f8898ccd | |||
85fb4708f4 | |||
2a78941d2c | |||
8725bb5108 | |||
e2beed6ae2 | |||
7e5db850dc | |||
cb2fb570f1 | |||
a18b8ba1be | |||
5d820393af | |||
295eb04ba3 | |||
72a34ab1b9 | |||
197f3d75d1 | |||
8f8eac78cf | |||
b292cfe5a9 | |||
28e09980a2 | |||
5a1ef2dc78 | |||
2653775c66 | |||
8d97ecde02 | |||
fb499916bb | |||
1bdb5542ff | |||
3f30c1c042 | |||
86538e31f5 | |||
25cc656003 | |||
cc8df686ad | |||
5041666321 | |||
93bbaad2f8 | |||
662ba67210 | |||
![]() |
6c3364052b | ||
24814a03b7 | |||
ede6c26222 | |||
b4e8d03e5c | |||
1c8374978d | |||
a6c27ea49d | |||
b266eedb24 | |||
803d9f9748 | |||
740b501d8b | |||
0ecc1d788c | |||
4b0243dae4 | |||
5faaaf0982 | |||
aa7449e691 | |||
753dea79a3 | |||
6012deddfe | |||
cc1105f01b | |||
58e78c1ffe | |||
81ec5ec366 | |||
07b547ef96 | |||
345cdf71e9 | |||
dba599c806 | |||
243e28b73b | |||
![]() |
a920f32ccd | ||
609422c0a1 | |||
03fbfb3092 | |||
5fddc4a3b1 | |||
cab2ca7a24 | |||
fe15766f46 | |||
3a880b820b | |||
![]() |
9b591a104b | ||
55177b40f3 | |||
c1f2cd4871 | |||
41527ea89c | |||
b50c1ca8fe | |||
![]() |
52f7d4bbab | ||
2a43bb5ed7 | |||
440c29f65b | |||
42937493d8 | |||
6143b3ab38 | |||
ec2938c71a | |||
bf6a9d705f | |||
22c73b36af | |||
0a3b6b134c | |||
568265964e | |||
faccd88038 | |||
761da576b0 | |||
6133434478 | |||
bcdb90b961 | |||
c25181be4d | |||
![]() |
8004214356 | ||
5e372fca7c | |||
![]() |
c0640ddff9 | ||
50069fb2a1 | |||
765f987fee | |||
b5ff47667d | |||
40194f7219 | |||
cb9b6cefb3 | |||
19ae71c113 | |||
a6c0d0a0e3 |
@@ -447,7 +447,7 @@ endif()
|
|||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" ON)
|
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" ON)
|
||||||
option(WITH_CYCLES_HIP_BINARIES "Build Cycles AMD HIP binaries" OFF)
|
option(WITH_CYCLES_HIP_BINARIES "Build Cycles AMD HIP binaries" OFF)
|
||||||
set(CYCLES_HIP_BINARIES_ARCH gfx900 gfx906 gfx90c gfx902 gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 gfx1034 gfx1035 CACHE STRING "AMD HIP architectures to build binaries for")
|
set(CYCLES_HIP_BINARIES_ARCH gfx900 gfx906 gfx90c gfx902 gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 gfx1034 gfx1035 gfx1100 gfx1101 gfx1102 CACHE STRING "AMD HIP architectures to build binaries for")
|
||||||
mark_as_advanced(WITH_CYCLES_DEVICE_HIP)
|
mark_as_advanced(WITH_CYCLES_DEVICE_HIP)
|
||||||
mark_as_advanced(CYCLES_HIP_BINARIES_ARCH)
|
mark_as_advanced(CYCLES_HIP_BINARIES_ARCH)
|
||||||
endif()
|
endif()
|
||||||
@@ -956,8 +956,8 @@ if(WITH_PYTHON)
|
|||||||
# Do this before main 'platform_*' checks,
|
# Do this before main 'platform_*' checks,
|
||||||
# because UNIX will search for the old Python paths which may not exist.
|
# because UNIX will search for the old Python paths which may not exist.
|
||||||
# giving errors about missing paths before this case is met.
|
# giving errors about missing paths before this case is met.
|
||||||
if(DEFINED PYTHON_VERSION AND "${PYTHON_VERSION}" VERSION_LESS "3.10")
|
if(DEFINED PYTHON_VERSION AND "${PYTHON_VERSION}" VERSION_LESS "3.9")
|
||||||
message(FATAL_ERROR "At least Python 3.10 is required to build, but found Python ${PYTHON_VERSION}")
|
message(FATAL_ERROR "At least Python 3.9 is required to build, but found Python ${PYTHON_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
|
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
|
||||||
|
@@ -96,6 +96,8 @@ include(cmake/openimagedenoise.cmake)
|
|||||||
include(cmake/embree.cmake)
|
include(cmake/embree.cmake)
|
||||||
include(cmake/fmt.cmake)
|
include(cmake/fmt.cmake)
|
||||||
include(cmake/robinmap.cmake)
|
include(cmake/robinmap.cmake)
|
||||||
|
include(cmake/xml2.cmake)
|
||||||
|
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
include(cmake/xr_openxr.cmake)
|
include(cmake/xr_openxr.cmake)
|
||||||
if(NOT WIN32 OR BUILD_MODE STREQUAL Release)
|
if(NOT WIN32 OR BUILD_MODE STREQUAL Release)
|
||||||
@@ -148,7 +150,6 @@ if(NOT WIN32 OR ENABLE_MINGW64)
|
|||||||
endif()
|
endif()
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
include(cmake/flac.cmake)
|
include(cmake/flac.cmake)
|
||||||
include(cmake/xml2.cmake)
|
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
include(cmake/spnav.cmake)
|
include(cmake/spnav.cmake)
|
||||||
include(cmake/jemalloc.cmake)
|
include(cmake/jemalloc.cmake)
|
||||||
@@ -172,3 +173,4 @@ if(UNIX AND NOT APPLE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/harvest.cmake)
|
include(cmake/harvest.cmake)
|
||||||
|
include(cmake/cve_check.cmake)
|
||||||
|
@@ -8,11 +8,6 @@ if(WIN32)
|
|||||||
# building with mingw, it'll have an unhappy time with that and
|
# building with mingw, it'll have an unhappy time with that and
|
||||||
# we need to clear them out.
|
# we need to clear them out.
|
||||||
set(AOM_CMAKE_FLAGS )
|
set(AOM_CMAKE_FLAGS )
|
||||||
# CMake will correctly identify phreads being available, however
|
|
||||||
# we do not want to use them, as that gains a dependency on
|
|
||||||
# libpthreadswin.dll which we do not want. when pthreads is not
|
|
||||||
# available oam will use a pthreads emulation layer using win32 threads
|
|
||||||
set(AOM_EXTRA_ARGS_WIN32 -DCMAKE_HAVE_PTHREAD_H=OFF)
|
|
||||||
else()
|
else()
|
||||||
set(AOM_GENERATOR "Unix Makefiles")
|
set(AOM_GENERATOR "Unix Makefiles")
|
||||||
set(AOM_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS})
|
set(AOM_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS})
|
||||||
@@ -36,6 +31,7 @@ ExternalProject_Add(external_aom
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${AOM_HASH_TYPE}=${AOM_HASH}
|
URL_HASH ${AOM_HASH_TYPE}=${AOM_HASH}
|
||||||
PREFIX ${BUILD_DIR}/aom
|
PREFIX ${BUILD_DIR}/aom
|
||||||
|
PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/aom/src/external_aom < ${PATCH_DIR}/aom.diff
|
||||||
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
|
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
|
||||||
cd ${BUILD_DIR}/aom/src/external_aom-build/ &&
|
cd ${BUILD_DIR}/aom/src/external_aom-build/ &&
|
||||||
${CMAKE_COMMAND} -G "${AOM_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${LIBDIR}/aom ${AOM_CMAKE_FLAGS} ${AOM_EXTRA_ARGS} ${BUILD_DIR}/aom/src/external_aom/
|
${CMAKE_COMMAND} -G "${AOM_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${LIBDIR}/aom ${AOM_CMAKE_FLAGS} ${AOM_EXTRA_ARGS} ${BUILD_DIR}/aom/src/external_aom/
|
||||||
|
75
build_files/build_environment/cmake/cve_check.cmake
Normal file
75
build_files/build_environment/cmake/cve_check.cmake
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
# CVE Check requirements
|
||||||
|
#
|
||||||
|
# - A working installation of intels cve-bin-tool [1] has to be available in
|
||||||
|
# your path
|
||||||
|
#
|
||||||
|
# - Not strictly required, but highly recommended is obtaining a NVD key from
|
||||||
|
# nist since it significantly speeds up downloading/updating the required
|
||||||
|
# databases one can request a key on the following website:
|
||||||
|
# https://nvd.nist.gov/developers/request-an-api-key
|
||||||
|
|
||||||
|
# Bill of Materials construction
|
||||||
|
#
|
||||||
|
# This constructs a CSV cve-bin-tool [1] can read and process. Sadly
|
||||||
|
# cve-bin-tool at this point does not take a list of CPE's and output a check
|
||||||
|
# based on that list. so we need to pick apart the CPE retrieve the vendor,
|
||||||
|
# product and version tokens and generate a CSV.
|
||||||
|
#
|
||||||
|
# [1] https://github.com/intel/cve-bin-tool
|
||||||
|
|
||||||
|
# Because not all deps are downloaded (ie python packages) but can still have a
|
||||||
|
# xxx_CPE declared loop over all variables and look for variables ending in CPE.
|
||||||
|
|
||||||
|
set(SBOMCONTENTS)
|
||||||
|
get_cmake_property(_variableNames VARIABLES)
|
||||||
|
foreach (_variableName ${_variableNames})
|
||||||
|
if(_variableName MATCHES "CPE$")
|
||||||
|
string(REPLACE ":" ";" CPE_LIST ${${_variableName}})
|
||||||
|
string(REPLACE "_CPE" "_ID" CPE_DEPNAME ${_variableName})
|
||||||
|
list(GET CPE_LIST 3 CPE_VENDOR)
|
||||||
|
list(GET CPE_LIST 4 CPE_NAME)
|
||||||
|
list(GET CPE_LIST 5 CPE_VERSION)
|
||||||
|
set(${CPE_DEPNAME} "${CPE_VENDOR},${CPE_NAME},${CPE_VERSION}")
|
||||||
|
set(SBOMCONTENTS "${SBOMCONTENTS}${CPE_VENDOR},${CPE_NAME},${CPE_VERSION},,,\n")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
configure_file(${CMAKE_SOURCE_DIR}/cmake/cve_check.csv.in ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv @ONLY)
|
||||||
|
|
||||||
|
# Custom Targets
|
||||||
|
#
|
||||||
|
# This defines two new custom targets one could run in the build folder
|
||||||
|
# `cve_check` which will output the report to the console, and `cve_check_html`
|
||||||
|
# which will write out blender_dependencies.html in the build folder that one
|
||||||
|
# could share with other people or be used to get more information on the
|
||||||
|
# reported CVE's.
|
||||||
|
#
|
||||||
|
# cve-bin-tool takes data from the nist nvd database which rate limits
|
||||||
|
# unauthenticated requests to 1 requests per 6 seconds making the database
|
||||||
|
# download take "quite a bit" of time.
|
||||||
|
#
|
||||||
|
# When adding -DCVE_CHECK_NVD_KEY=your_api_key_here to your cmake invocation
|
||||||
|
# this key will be passed on to cve-bin-tool speeding up the process.
|
||||||
|
#
|
||||||
|
if(DEFINED CVE_CHECK_NVD_KEY)
|
||||||
|
set(NVD_ARGS --nvd-api-key ${CVE_CHECK_NVD_KEY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# This will just report to the console
|
||||||
|
add_custom_target(cve_check
|
||||||
|
COMMAND cve-bin-tool
|
||||||
|
${NVD_ARGS}
|
||||||
|
-i ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
||||||
|
--affected-versions
|
||||||
|
SOURCES ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
||||||
|
)
|
||||||
|
|
||||||
|
# This will write out blender_dependencies.html
|
||||||
|
add_custom_target(cve_check_html
|
||||||
|
COMMAND cve-bin-tool
|
||||||
|
${NVD_ARGS}
|
||||||
|
-i ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
||||||
|
-f html
|
||||||
|
SOURCES ${CMAKE_CURRENT_BINARY_DIR}/cve_check.csv
|
||||||
|
)
|
40
build_files/build_environment/cmake/cve_check.csv.in
Normal file
40
build_files/build_environment/cmake/cve_check.csv.in
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
vendor,product,version,cve_number,remarks,comment
|
||||||
|
@FMT_ID@,OSV-2021-991,Ignored,CVE marked as invalid but OSV not updated
|
||||||
|
@FREETYPE_ID@,CVE-2022-27404,Ignored,does not affect blender usage of freetype
|
||||||
|
@FREETYPE_ID@,CVE-2022-27405,Ignored,does not affect blender usage of freetype
|
||||||
|
@FREETYPE_ID@,CVE-2022-27406,Ignored,does not affect blender usage of freetype
|
||||||
|
@OPENJPEG_ID@,CVE-2016-9675,Ignored,issue in convert command line tool not used by blender
|
||||||
|
@OPENJPEG_ID@,OSV-2022-416,Mitigated,using newer git revision with fix included
|
||||||
|
@PYTHON_ID@,CVE-2009-2940,Ignored,issue in pygresql not used by blender
|
||||||
|
@PYTHON_ID@,CVE-2020-29396,Ignored,issue in odoo not used by blender
|
||||||
|
@PYTHON_ID@,CVE-2021-32052,Ignored,issue in django not used by blender
|
||||||
|
@PYTHON_ID@,CVE-2009-3720,Ignored,already fixed in libexpat version used
|
||||||
|
@SSL_ID@,CVE-2009-1390,Ignored,issue in mutt not used by blender
|
||||||
|
@SSL_ID@,CVE-2009-3765,Ignored,issue in mutt not used by blender
|
||||||
|
@SSL_ID@,CVE-2009-3766,Ignored,issue in mutt not used by blender
|
||||||
|
@SSL_ID@,CVE-2009-3767,Ignored,issue in ldap not used by blender
|
||||||
|
@SSL_ID@,CVE-2019-0190,Ignored,issue in apache not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-2056,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-2057,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-2058,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-2519,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-2520,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-2521,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-2953,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-34526,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-3570,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-3597,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-3598,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-3599,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-3626,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-3627,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@TIFF_ID@,CVE-2022-48281,Ignored,issue in tiff command line tool not used by blender
|
||||||
|
@XML2_ID@,CVE-2016-3709,Ignored,not affecting blender and not considered a security issue upstream
|
||||||
|
@XML2_ID@,OSV-2021-777,Ignored,already fixed in version used so OSV invalid
|
||||||
|
@XML2_ID@,CVE-2022-40303,Ignored,fixed and cve_check version comparison is wrong
|
||||||
|
@XML2_ID@,CVE-2022-40304,Ignored,fixed and cve_check version comparison is wrong
|
||||||
|
@GMP_ID@,CVE-2021-43618,Mitigated,patched using upstream commit 561a9c25298e
|
||||||
|
@SQLITE_ID@,CVE-2022-35737,Ignored,only affects SQLITE_ENABLE_STAT4 compile option not used by blender or python
|
||||||
|
@SQLITE_ID@,CVE-2022-46908,Ignored,only affects CLI tools not used by blender or python
|
||||||
|
@BROTLI_ID@,CVE-2020-8927,Ignored,fixed and cve_check version comparison is wrong
|
||||||
|
@SBOMCONTENTS@
|
@@ -14,6 +14,20 @@ function(download_source dep)
|
|||||||
else()
|
else()
|
||||||
set(TARGET_URI https://svn.blender.org/svnroot/bf-blender/trunk/lib/packages/${TARGET_FILE})
|
set(TARGET_URI https://svn.blender.org/svnroot/bf-blender/trunk/lib/packages/${TARGET_FILE})
|
||||||
endif()
|
endif()
|
||||||
|
# Validate all required variables are set and give an explicit error message
|
||||||
|
# rather than CMake erroring out later on with a more ambigious error.
|
||||||
|
if (NOT DEFINED TARGET_FILE)
|
||||||
|
message(FATAL_ERROR "${dep}_FILE variable not set")
|
||||||
|
endif()
|
||||||
|
if (NOT DEFINED TARGET_HASH)
|
||||||
|
message(FATAL_ERROR "${dep}_HASH variable not set")
|
||||||
|
endif()
|
||||||
|
if (NOT DEFINED TARGET_HASH_TYPE)
|
||||||
|
message(FATAL_ERROR "${dep}_HASH_TYPE variable not set")
|
||||||
|
endif()
|
||||||
|
if (NOT DEFINED TARGET_URI)
|
||||||
|
message(FATAL_ERROR "${dep}_URI variable not set")
|
||||||
|
endif()
|
||||||
set(TARGET_FILE ${PACKAGE_DIR}/${TARGET_FILE})
|
set(TARGET_FILE ${PACKAGE_DIR}/${TARGET_FILE})
|
||||||
message("Checking source : ${dep} (${TARGET_FILE})")
|
message("Checking source : ${dep} (${TARGET_FILE})")
|
||||||
if(NOT EXISTS ${TARGET_FILE})
|
if(NOT EXISTS ${TARGET_FILE})
|
||||||
@@ -25,6 +39,36 @@ function(download_source dep)
|
|||||||
SHOW_PROGRESS
|
SHOW_PROGRESS
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
if(EXISTS ${TARGET_FILE})
|
||||||
|
# Sometimes the download fails, but that is not a
|
||||||
|
# fail condition for "file(DOWNLOAD" it will warn about
|
||||||
|
# a crc mismatch and just carry on, we need to explicitly
|
||||||
|
# catch this and remove the bogus 0 byte file so we can
|
||||||
|
# retry without having to go find the file and manually
|
||||||
|
# delete it.
|
||||||
|
file (SIZE ${TARGET_FILE} TARGET_SIZE)
|
||||||
|
if(${TARGET_SIZE} EQUAL 0)
|
||||||
|
file(REMOVE ${TARGET_FILE})
|
||||||
|
message(FATAL_ERROR "for ${TARGET_FILE} file size 0, download likely failed, deleted...")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# If we are using sources from the blender repo also
|
||||||
|
# validate that the hashes match, this takes a
|
||||||
|
# little more time, but protects us when we are
|
||||||
|
# building a release package and one of the packages
|
||||||
|
# is missing or incorrect.
|
||||||
|
#
|
||||||
|
# For regular platform maintenaince this is not needed
|
||||||
|
# since the actual build of the dep will notify the
|
||||||
|
# platform maintainer if there is a problem with the
|
||||||
|
# source package and refuse to build.
|
||||||
|
if(NOT PACKAGE_USE_UPSTREAM_SOURCES OR FORCE_CHECK_HASH)
|
||||||
|
file(${TARGET_HASH_TYPE} ${TARGET_FILE} LOCAL_HASH)
|
||||||
|
if(NOT ${TARGET_HASH} STREQUAL ${LOCAL_HASH})
|
||||||
|
message(FATAL_ERROR "${TARGET_FILE} ${TARGET_HASH_TYPE} mismatch\nExpected\t: ${TARGET_HASH}\nActual\t: ${LOCAL_HASH}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endfunction(download_source)
|
endfunction(download_source)
|
||||||
|
|
||||||
download_source(ZLIB)
|
download_source(ZLIB)
|
||||||
@@ -51,7 +95,6 @@ download_source(OSL)
|
|||||||
download_source(PYTHON)
|
download_source(PYTHON)
|
||||||
download_source(TBB)
|
download_source(TBB)
|
||||||
download_source(OPENVDB)
|
download_source(OPENVDB)
|
||||||
download_source(NANOVDB)
|
|
||||||
download_source(NUMPY)
|
download_source(NUMPY)
|
||||||
download_source(LAME)
|
download_source(LAME)
|
||||||
download_source(OGG)
|
download_source(OGG)
|
||||||
@@ -71,7 +114,6 @@ download_source(WEBP)
|
|||||||
download_source(SPNAV)
|
download_source(SPNAV)
|
||||||
download_source(JEMALLOC)
|
download_source(JEMALLOC)
|
||||||
download_source(XML2)
|
download_source(XML2)
|
||||||
download_source(TINYXML)
|
|
||||||
download_source(YAMLCPP)
|
download_source(YAMLCPP)
|
||||||
download_source(EXPAT)
|
download_source(EXPAT)
|
||||||
download_source(PUGIXML)
|
download_source(PUGIXML)
|
||||||
|
@@ -16,12 +16,6 @@ if(WIN32)
|
|||||||
--enable-libopenjpeg
|
--enable-libopenjpeg
|
||||||
--disable-mediafoundation
|
--disable-mediafoundation
|
||||||
)
|
)
|
||||||
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
|
||||||
set(FFMPEG_EXTRA_FLAGS
|
|
||||||
${FFMPEG_EXTRA_FLAGS}
|
|
||||||
--x86asmexe=yasm
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
set(FFMPEG_EXTRA_FLAGS
|
set(FFMPEG_EXTRA_FLAGS
|
||||||
${FFMPEG_EXTRA_FLAGS}
|
${FFMPEG_EXTRA_FLAGS}
|
||||||
|
@@ -7,8 +7,11 @@ set(FREETYPE_EXTRA_ARGS
|
|||||||
-DFT_DISABLE_HARFBUZZ=ON
|
-DFT_DISABLE_HARFBUZZ=ON
|
||||||
-DFT_DISABLE_PNG=ON
|
-DFT_DISABLE_PNG=ON
|
||||||
-DFT_REQUIRE_BROTLI=ON
|
-DFT_REQUIRE_BROTLI=ON
|
||||||
|
-DFT_REQUIRE_ZLIB=ON
|
||||||
-DPC_BROTLIDEC_INCLUDEDIR=${LIBDIR}/brotli/include
|
-DPC_BROTLIDEC_INCLUDEDIR=${LIBDIR}/brotli/include
|
||||||
-DPC_BROTLIDEC_LIBDIR=${LIBDIR}/brotli/lib
|
-DPC_BROTLIDEC_LIBDIR=${LIBDIR}/brotli/lib
|
||||||
|
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
|
||||||
|
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include
|
||||||
)
|
)
|
||||||
|
|
||||||
ExternalProject_Add(external_freetype
|
ExternalProject_Add(external_freetype
|
||||||
@@ -23,6 +26,7 @@ ExternalProject_Add(external_freetype
|
|||||||
add_dependencies(
|
add_dependencies(
|
||||||
external_freetype
|
external_freetype
|
||||||
external_brotli
|
external_brotli
|
||||||
|
external_zlib
|
||||||
)
|
)
|
||||||
|
|
||||||
if(BUILD_MODE STREQUAL Release AND WIN32)
|
if(BUILD_MODE STREQUAL Release AND WIN32)
|
||||||
|
@@ -22,11 +22,20 @@ elseif(UNIX AND NOT APPLE)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Boolean crashes with Arm assembly, see T103423.
|
||||||
|
if(BLENDER_PLATFORM_ARM)
|
||||||
|
set(GMP_OPTIONS
|
||||||
|
${GMP_OPTIONS}
|
||||||
|
--disable-assembly
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_gmp
|
ExternalProject_Add(external_gmp
|
||||||
URL file://${PACKAGE_DIR}/${GMP_FILE}
|
URL file://${PACKAGE_DIR}/${GMP_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${GMP_HASH_TYPE}=${GMP_HASH}
|
URL_HASH ${GMP_HASH_TYPE}=${GMP_HASH}
|
||||||
PREFIX ${BUILD_DIR}/gmp
|
PREFIX ${BUILD_DIR}/gmp
|
||||||
|
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/gmp/src/external_gmp < ${PATCH_DIR}/gmp.diff
|
||||||
CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/gmp ${GMP_OPTIONS} ${GMP_EXTRA_ARGS}
|
CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/gmp ${GMP_OPTIONS} ${GMP_EXTRA_ARGS}
|
||||||
BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make -j${MAKE_THREADS}
|
BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make -j${MAKE_THREADS}
|
||||||
INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make install
|
INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && make install
|
||||||
|
@@ -11,189 +11,191 @@ message("HARVEST_TARGET = ${HARVEST_TARGET}")
|
|||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
|
|
||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
add_custom_target(Harvest_Release_Results
|
add_custom_target(Harvest_Release_Results
|
||||||
COMMAND # jpeg rename libfile + copy include
|
COMMAND # jpeg rename libfile + copy include
|
||||||
${CMAKE_COMMAND} -E copy ${LIBDIR}/jpeg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib &&
|
${CMAKE_COMMAND} -E copy ${LIBDIR}/jpeg/lib/jpeg-static.lib ${HARVEST_TARGET}/jpeg/lib/libjpeg.lib &&
|
||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpeg/include/ ${HARVEST_TARGET}/jpeg/include/ &&
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/jpeg/include/ ${HARVEST_TARGET}/jpeg/include/ &&
|
||||||
# png
|
# png
|
||||||
${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib &&
|
${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static.lib ${HARVEST_TARGET}/png/lib/libpng.lib &&
|
||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ &&
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/ &&
|
||||||
# freeglut-> opengl
|
# freeglut-> opengl
|
||||||
${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib &&
|
${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib &&
|
||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ &&
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ &&
|
||||||
# glew-> opengl
|
# glew-> opengl
|
||||||
${CMAKE_COMMAND} -E copy ${LIBDIR}/glew/lib/libglew32.lib ${HARVEST_TARGET}/opengl/lib/glew.lib &&
|
${CMAKE_COMMAND} -E copy ${LIBDIR}/glew/lib/libglew32.lib ${HARVEST_TARGET}/opengl/lib/glew.lib &&
|
||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/glew/include/ ${HARVEST_TARGET}/opengl/include/ &&
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/glew/include/ ${HARVEST_TARGET}/opengl/include/ &&
|
||||||
DEPENDS
|
DEPENDS
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
else(WIN32)
|
|
||||||
|
|
||||||
function(harvest from to)
|
|
||||||
set(pattern "")
|
|
||||||
foreach(f ${ARGN})
|
|
||||||
set(pattern ${f})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
if(pattern STREQUAL "")
|
|
||||||
get_filename_component(dirpath ${to} DIRECTORY)
|
|
||||||
get_filename_component(filename ${to} NAME)
|
|
||||||
install(
|
|
||||||
FILES ${LIBDIR}/${from}
|
|
||||||
DESTINATION ${HARVEST_TARGET}/${dirpath}
|
|
||||||
RENAME ${filename})
|
|
||||||
else()
|
|
||||||
install(
|
|
||||||
DIRECTORY ${LIBDIR}/${from}/
|
|
||||||
DESTINATION ${HARVEST_TARGET}/${to}
|
|
||||||
USE_SOURCE_PERMISSIONS
|
|
||||||
FILES_MATCHING PATTERN ${pattern}
|
|
||||||
PATTERN "pkgconfig" EXCLUDE
|
|
||||||
PATTERN "cmake" EXCLUDE
|
|
||||||
PATTERN "__pycache__" EXCLUDE
|
|
||||||
PATTERN "tests" EXCLUDE)
|
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
|
||||||
|
|
||||||
harvest(alembic/include alembic/include "*.h")
|
|
||||||
harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
|
|
||||||
harvest(alembic/bin alembic/bin "*")
|
|
||||||
harvest(brotli/include brotli/include "*.h")
|
|
||||||
harvest(brotli/lib brotli/lib "*.a")
|
|
||||||
harvest(boost/include boost/include "*")
|
|
||||||
harvest(boost/lib boost/lib "*.a")
|
|
||||||
harvest(imath/include imath/include "*.h")
|
|
||||||
harvest(imath/lib imath/lib "*.a")
|
|
||||||
harvest(ffmpeg/include ffmpeg/include "*.h")
|
|
||||||
harvest(ffmpeg/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(fftw3/include fftw3/include "*.h")
|
|
||||||
harvest(fftw3/lib fftw3/lib "*.a")
|
|
||||||
harvest(flac/lib sndfile/lib "libFLAC.a")
|
|
||||||
harvest(freetype/include freetype/include "*.h")
|
|
||||||
harvest(freetype/lib/libfreetype2ST.a freetype/lib/libfreetype.a)
|
|
||||||
harvest(glew/include glew/include "*.h")
|
|
||||||
harvest(glew/lib glew/lib "*.a")
|
|
||||||
harvest(gmp/include gmp/include "*.h")
|
|
||||||
harvest(gmp/lib gmp/lib "*.a")
|
|
||||||
harvest(jemalloc/include jemalloc/include "*.h")
|
|
||||||
harvest(jemalloc/lib jemalloc/lib "*.a")
|
|
||||||
harvest(jpeg/include jpeg/include "*.h")
|
|
||||||
harvest(jpeg/lib jpeg/lib "libjpeg.a")
|
|
||||||
harvest(lame/lib ffmpeg/lib "*.a")
|
|
||||||
if(NOT APPLE)
|
|
||||||
harvest(level-zero/include/level_zero level-zero/include/level_zero "*.h")
|
|
||||||
harvest(level-zero/lib level-zero/lib "*.so*")
|
|
||||||
endif()
|
|
||||||
harvest(llvm/bin llvm/bin "clang-format")
|
|
||||||
if(BUILD_CLANG_TOOLS)
|
|
||||||
harvest(llvm/bin llvm/bin "clang-tidy")
|
|
||||||
harvest(llvm/share/clang llvm/share "run-clang-tidy.py")
|
|
||||||
endif()
|
|
||||||
harvest(llvm/include llvm/include "*")
|
|
||||||
harvest(llvm/bin llvm/bin "llvm-config")
|
|
||||||
harvest(llvm/lib llvm/lib "libLLVM*.a")
|
|
||||||
harvest(llvm/lib llvm/lib "libclang*.a")
|
|
||||||
harvest(llvm/lib/clang llvm/lib/clang "*.h")
|
|
||||||
if(APPLE)
|
|
||||||
harvest(openmp/lib openmp/lib "*")
|
|
||||||
harvest(openmp/include openmp/include "*.h")
|
|
||||||
endif()
|
|
||||||
if(BLENDER_PLATFORM_ARM)
|
|
||||||
harvest(sse2neon sse2neon "*.h")
|
|
||||||
endif()
|
|
||||||
harvest(ogg/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(openal/include openal/include "*.h")
|
|
||||||
if(UNIX AND NOT APPLE)
|
|
||||||
harvest(openal/lib openal/lib "*.a")
|
|
||||||
|
|
||||||
harvest(blosc/include blosc/include "*.h")
|
|
||||||
harvest(blosc/lib blosc/lib "*.a")
|
|
||||||
|
|
||||||
harvest(zlib/include zlib/include "*.h")
|
|
||||||
harvest(zlib/lib zlib/lib "*.a")
|
|
||||||
|
|
||||||
harvest(xml2/include xml2/include "*.h")
|
|
||||||
harvest(xml2/lib xml2/lib "*.a")
|
|
||||||
|
|
||||||
harvest(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml")
|
|
||||||
else()
|
else()
|
||||||
harvest(blosc/lib openvdb/lib "*.a")
|
|
||||||
harvest(xml2/lib opencollada/lib "*.a")
|
|
||||||
endif()
|
|
||||||
harvest(opencollada/include/opencollada opencollada/include "*.h")
|
|
||||||
harvest(opencollada/lib/opencollada opencollada/lib "*.a")
|
|
||||||
harvest(opencolorio/include opencolorio/include "*.h")
|
|
||||||
harvest(opencolorio/lib opencolorio/lib "*.a")
|
|
||||||
harvest(opencolorio/lib/static opencolorio/lib "*.a")
|
|
||||||
harvest(openexr/include openexr/include "*.h")
|
|
||||||
harvest(openexr/lib openexr/lib "*.a")
|
|
||||||
harvest(openimageio/bin openimageio/bin "idiff")
|
|
||||||
harvest(openimageio/bin openimageio/bin "maketx")
|
|
||||||
harvest(openimageio/bin openimageio/bin "oiiotool")
|
|
||||||
harvest(openimageio/include openimageio/include "*")
|
|
||||||
harvest(openimageio/lib openimageio/lib "*.a")
|
|
||||||
harvest(openimagedenoise/include openimagedenoise/include "*")
|
|
||||||
harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
|
|
||||||
harvest(embree/include embree/include "*.h")
|
|
||||||
harvest(embree/lib embree/lib "*.a")
|
|
||||||
harvest(openjpeg/include/openjpeg-${OPENJPEG_SHORT_VERSION} openjpeg/include "*.h")
|
|
||||||
harvest(openjpeg/lib openjpeg/lib "*.a")
|
|
||||||
harvest(opensubdiv/include opensubdiv/include "*.h")
|
|
||||||
harvest(opensubdiv/lib opensubdiv/lib "*.a")
|
|
||||||
harvest(openvdb/include/openvdb openvdb/include/openvdb "*.h")
|
|
||||||
harvest(openvdb/include/nanovdb openvdb/include/nanovdb "*.h")
|
|
||||||
harvest(openvdb/lib openvdb/lib "*.a")
|
|
||||||
harvest(xr_openxr_sdk/include/openxr xr_openxr_sdk/include/openxr "*.h")
|
|
||||||
harvest(xr_openxr_sdk/lib xr_openxr_sdk/lib "*.a")
|
|
||||||
harvest(osl/bin osl/bin "oslc")
|
|
||||||
harvest(osl/include osl/include "*.h")
|
|
||||||
harvest(osl/lib osl/lib "*.a")
|
|
||||||
harvest(osl/share/OSL/shaders osl/share/OSL/shaders "*.h")
|
|
||||||
harvest(png/include png/include "*.h")
|
|
||||||
harvest(png/lib png/lib "*.a")
|
|
||||||
harvest(pugixml/include pugixml/include "*.hpp")
|
|
||||||
harvest(pugixml/lib pugixml/lib "*.a")
|
|
||||||
harvest(python/bin python/bin "python${PYTHON_SHORT_VERSION}")
|
|
||||||
harvest(python/include python/include "*h")
|
|
||||||
harvest(python/lib python/lib "*")
|
|
||||||
harvest(sdl/include/SDL2 sdl/include "*.h")
|
|
||||||
harvest(sdl/lib sdl/lib "libSDL2.a")
|
|
||||||
harvest(sndfile/include sndfile/include "*.h")
|
|
||||||
harvest(sndfile/lib sndfile/lib "*.a")
|
|
||||||
harvest(spnav/include spnav/include "*.h")
|
|
||||||
harvest(spnav/lib spnav/lib "*.a")
|
|
||||||
harvest(tbb/include tbb/include "*.h")
|
|
||||||
harvest(tbb/lib/libtbb_static.a tbb/lib/libtbb.a)
|
|
||||||
harvest(theora/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(tiff/include tiff/include "*.h")
|
|
||||||
harvest(tiff/lib tiff/lib "*.a")
|
|
||||||
harvest(vorbis/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(opus/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(vpx/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(x264/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(xvidcore/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(aom/lib ffmpeg/lib "*.a")
|
|
||||||
harvest(webp/lib webp/lib "*.a")
|
|
||||||
harvest(webp/include webp/include "*.h")
|
|
||||||
harvest(usd/include usd/include "*.h")
|
|
||||||
harvest(usd/lib/usd usd/lib/usd "*")
|
|
||||||
harvest(usd/plugin usd/plugin "*")
|
|
||||||
harvest(potrace/include potrace/include "*.h")
|
|
||||||
harvest(potrace/lib potrace/lib "*.a")
|
|
||||||
harvest(haru/include haru/include "*.h")
|
|
||||||
harvest(haru/lib haru/lib "*.a")
|
|
||||||
harvest(zstd/include zstd/include "*.h")
|
|
||||||
harvest(zstd/lib zstd/lib "*.a")
|
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
function(harvest from to)
|
||||||
harvest(libglu/lib mesa/lib "*.so*")
|
set(pattern "")
|
||||||
harvest(mesa/lib64 mesa/lib "*.so*")
|
foreach(f ${ARGN})
|
||||||
|
set(pattern ${f})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
harvest(dpcpp dpcpp "*")
|
if(pattern STREQUAL "")
|
||||||
harvest(igc dpcpp/lib/igc "*")
|
get_filename_component(dirpath ${to} DIRECTORY)
|
||||||
harvest(ocloc dpcpp/lib/ocloc "*")
|
get_filename_component(filename ${to} NAME)
|
||||||
endif()
|
install(
|
||||||
|
FILES ${LIBDIR}/${from}
|
||||||
|
DESTINATION ${HARVEST_TARGET}/${dirpath}
|
||||||
|
RENAME ${filename}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
install(
|
||||||
|
DIRECTORY ${LIBDIR}/${from}/
|
||||||
|
DESTINATION ${HARVEST_TARGET}/${to}
|
||||||
|
USE_SOURCE_PERMISSIONS
|
||||||
|
FILES_MATCHING PATTERN ${pattern}
|
||||||
|
PATTERN "pkgconfig" EXCLUDE
|
||||||
|
PATTERN "cmake" EXCLUDE
|
||||||
|
PATTERN "__pycache__" EXCLUDE
|
||||||
|
PATTERN "tests" EXCLUDE
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
harvest(alembic/include alembic/include "*.h")
|
||||||
|
harvest(alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
|
||||||
|
harvest(alembic/bin alembic/bin "*")
|
||||||
|
harvest(brotli/include brotli/include "*.h")
|
||||||
|
harvest(brotli/lib brotli/lib "*.a")
|
||||||
|
harvest(boost/include boost/include "*")
|
||||||
|
harvest(boost/lib boost/lib "*.a")
|
||||||
|
harvest(imath/include imath/include "*.h")
|
||||||
|
harvest(imath/lib imath/lib "*.a")
|
||||||
|
harvest(ffmpeg/include ffmpeg/include "*.h")
|
||||||
|
harvest(ffmpeg/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(fftw3/include fftw3/include "*.h")
|
||||||
|
harvest(fftw3/lib fftw3/lib "*.a")
|
||||||
|
harvest(flac/lib sndfile/lib "libFLAC.a")
|
||||||
|
harvest(freetype/include freetype/include "*.h")
|
||||||
|
harvest(freetype/lib/libfreetype2ST.a freetype/lib/libfreetype.a)
|
||||||
|
harvest(glew/include glew/include "*.h")
|
||||||
|
harvest(glew/lib glew/lib "*.a")
|
||||||
|
harvest(gmp/include gmp/include "*.h")
|
||||||
|
harvest(gmp/lib gmp/lib "*.a")
|
||||||
|
harvest(jemalloc/include jemalloc/include "*.h")
|
||||||
|
harvest(jemalloc/lib jemalloc/lib "*.a")
|
||||||
|
harvest(jpeg/include jpeg/include "*.h")
|
||||||
|
harvest(jpeg/lib jpeg/lib "libjpeg.a")
|
||||||
|
harvest(lame/lib ffmpeg/lib "*.a")
|
||||||
|
if(NOT APPLE)
|
||||||
|
harvest(level-zero/include/level_zero level-zero/include/level_zero "*.h")
|
||||||
|
harvest(level-zero/lib level-zero/lib "*.so*")
|
||||||
|
endif()
|
||||||
|
harvest(llvm/bin llvm/bin "clang-format")
|
||||||
|
if(BUILD_CLANG_TOOLS)
|
||||||
|
harvest(llvm/bin llvm/bin "clang-tidy")
|
||||||
|
harvest(llvm/share/clang llvm/share "run-clang-tidy.py")
|
||||||
|
endif()
|
||||||
|
harvest(llvm/include llvm/include "*")
|
||||||
|
harvest(llvm/bin llvm/bin "llvm-config")
|
||||||
|
harvest(llvm/lib llvm/lib "libLLVM*.a")
|
||||||
|
harvest(llvm/lib llvm/lib "libclang*.a")
|
||||||
|
harvest(llvm/lib/clang llvm/lib/clang "*.h")
|
||||||
|
if(APPLE)
|
||||||
|
harvest(openmp/lib openmp/lib "*")
|
||||||
|
harvest(openmp/include openmp/include "*.h")
|
||||||
|
endif()
|
||||||
|
if(BLENDER_PLATFORM_ARM)
|
||||||
|
harvest(sse2neon sse2neon "*.h")
|
||||||
|
endif()
|
||||||
|
harvest(ogg/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(openal/include openal/include "*.h")
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
harvest(openal/lib openal/lib "*.a")
|
||||||
|
|
||||||
|
harvest(blosc/include blosc/include "*.h")
|
||||||
|
harvest(blosc/lib blosc/lib "*.a")
|
||||||
|
|
||||||
|
harvest(zlib/include zlib/include "*.h")
|
||||||
|
harvest(zlib/lib zlib/lib "*.a")
|
||||||
|
|
||||||
|
harvest(xml2/include xml2/include "*.h")
|
||||||
|
harvest(xml2/lib xml2/lib "*.a")
|
||||||
|
|
||||||
|
harvest(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml")
|
||||||
|
else()
|
||||||
|
harvest(blosc/lib openvdb/lib "*.a")
|
||||||
|
harvest(xml2/lib opencollada/lib "*.a")
|
||||||
|
endif()
|
||||||
|
harvest(opencollada/include/opencollada opencollada/include "*.h")
|
||||||
|
harvest(opencollada/lib/opencollada opencollada/lib "*.a")
|
||||||
|
harvest(opencolorio/include opencolorio/include "*.h")
|
||||||
|
harvest(opencolorio/lib opencolorio/lib "*.a")
|
||||||
|
harvest(opencolorio/lib/static opencolorio/lib "*.a")
|
||||||
|
harvest(openexr/include openexr/include "*.h")
|
||||||
|
harvest(openexr/lib openexr/lib "*.a")
|
||||||
|
harvest(openimageio/bin openimageio/bin "idiff")
|
||||||
|
harvest(openimageio/bin openimageio/bin "maketx")
|
||||||
|
harvest(openimageio/bin openimageio/bin "oiiotool")
|
||||||
|
harvest(openimageio/include openimageio/include "*")
|
||||||
|
harvest(openimageio/lib openimageio/lib "*.a")
|
||||||
|
harvest(openimagedenoise/include openimagedenoise/include "*")
|
||||||
|
harvest(openimagedenoise/lib openimagedenoise/lib "*.a")
|
||||||
|
harvest(embree/include embree/include "*.h")
|
||||||
|
harvest(embree/lib embree/lib "*.a")
|
||||||
|
harvest(openjpeg/include/openjpeg-${OPENJPEG_SHORT_VERSION} openjpeg/include "*.h")
|
||||||
|
harvest(openjpeg/lib openjpeg/lib "*.a")
|
||||||
|
harvest(opensubdiv/include opensubdiv/include "*.h")
|
||||||
|
harvest(opensubdiv/lib opensubdiv/lib "*.a")
|
||||||
|
harvest(openvdb/include/openvdb openvdb/include/openvdb "*.h")
|
||||||
|
harvest(openvdb/include/nanovdb openvdb/include/nanovdb "*.h")
|
||||||
|
harvest(openvdb/lib openvdb/lib "*.a")
|
||||||
|
harvest(xr_openxr_sdk/include/openxr xr_openxr_sdk/include/openxr "*.h")
|
||||||
|
harvest(xr_openxr_sdk/lib xr_openxr_sdk/lib "*.a")
|
||||||
|
harvest(osl/bin osl/bin "oslc")
|
||||||
|
harvest(osl/include osl/include "*.h")
|
||||||
|
harvest(osl/lib osl/lib "*.a")
|
||||||
|
harvest(osl/share/OSL/shaders osl/share/OSL/shaders "*.h")
|
||||||
|
harvest(png/include png/include "*.h")
|
||||||
|
harvest(png/lib png/lib "*.a")
|
||||||
|
harvest(pugixml/include pugixml/include "*.hpp")
|
||||||
|
harvest(pugixml/lib pugixml/lib "*.a")
|
||||||
|
harvest(python/bin python/bin "python${PYTHON_SHORT_VERSION}")
|
||||||
|
harvest(python/include python/include "*h")
|
||||||
|
harvest(python/lib python/lib "*")
|
||||||
|
harvest(sdl/include/SDL2 sdl/include "*.h")
|
||||||
|
harvest(sdl/lib sdl/lib "libSDL2.a")
|
||||||
|
harvest(sndfile/include sndfile/include "*.h")
|
||||||
|
harvest(sndfile/lib sndfile/lib "*.a")
|
||||||
|
harvest(spnav/include spnav/include "*.h")
|
||||||
|
harvest(spnav/lib spnav/lib "*.a")
|
||||||
|
harvest(tbb/include tbb/include "*.h")
|
||||||
|
harvest(tbb/lib/libtbb_static.a tbb/lib/libtbb.a)
|
||||||
|
harvest(theora/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(tiff/include tiff/include "*.h")
|
||||||
|
harvest(tiff/lib tiff/lib "*.a")
|
||||||
|
harvest(vorbis/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(opus/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(vpx/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(x264/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(xvidcore/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(aom/lib ffmpeg/lib "*.a")
|
||||||
|
harvest(webp/lib webp/lib "*.a")
|
||||||
|
harvest(webp/include webp/include "*.h")
|
||||||
|
harvest(usd/include usd/include "*.h")
|
||||||
|
harvest(usd/lib/usd usd/lib/usd "*")
|
||||||
|
harvest(usd/plugin usd/plugin "*")
|
||||||
|
harvest(potrace/include potrace/include "*.h")
|
||||||
|
harvest(potrace/lib potrace/lib "*.a")
|
||||||
|
harvest(haru/include haru/include "*.h")
|
||||||
|
harvest(haru/lib haru/lib "*.a")
|
||||||
|
harvest(zstd/include zstd/include "*.h")
|
||||||
|
harvest(zstd/lib zstd/lib "*.a")
|
||||||
|
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
harvest(libglu/lib mesa/lib "*.so*")
|
||||||
|
harvest(mesa/lib64 mesa/lib "*.so*")
|
||||||
|
|
||||||
|
harvest(dpcpp dpcpp "*")
|
||||||
|
harvest(igc dpcpp/lib/igc "*")
|
||||||
|
harvest(ocloc dpcpp/lib/ocloc "*")
|
||||||
|
endif()
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# cmake for windows
|
# CMAKE for MS-Windows.
|
||||||
set(JPEG_EXTRA_ARGS
|
set(JPEG_EXTRA_ARGS
|
||||||
-DNASM=${NASM_PATH}
|
-DNASM=${NASM_PATH}
|
||||||
-DWITH_JPEG8=ON
|
-DWITH_JPEG8=ON
|
||||||
@@ -33,8 +33,8 @@ if(WIN32)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
else(WIN32)
|
else()
|
||||||
# cmake for unix
|
# CMAKE for UNIX.
|
||||||
set(JPEG_EXTRA_ARGS
|
set(JPEG_EXTRA_ARGS
|
||||||
-DWITH_JPEG8=ON
|
-DWITH_JPEG8=ON
|
||||||
-DENABLE_STATIC=ON
|
-DENABLE_STATIC=ON
|
||||||
|
@@ -9,6 +9,7 @@ endif()
|
|||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(LLVM_XML2_ARGS
|
set(LLVM_XML2_ARGS
|
||||||
-DLIBXML2_LIBRARY=${LIBDIR}/xml2/lib/libxml2.a
|
-DLIBXML2_LIBRARY=${LIBDIR}/xml2/lib/libxml2.a
|
||||||
|
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
||||||
)
|
)
|
||||||
set(LLVM_BUILD_CLANG_TOOLS_EXTRA ^^clang-tools-extra)
|
set(LLVM_BUILD_CLANG_TOOLS_EXTRA ^^clang-tools-extra)
|
||||||
set(BUILD_CLANG_TOOLS ON)
|
set(BUILD_CLANG_TOOLS ON)
|
||||||
|
@@ -4,6 +4,29 @@ if(UNIX)
|
|||||||
set(OPENCOLLADA_EXTRA_ARGS
|
set(OPENCOLLADA_EXTRA_ARGS
|
||||||
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
||||||
-DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2.a)
|
-DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2.a)
|
||||||
|
|
||||||
|
# WARNING: the patch contains mixed UNIX and DOS line endings
|
||||||
|
# as does the OPENCOLLADA package, if this can be corrected upstream that would be better.
|
||||||
|
# For now use `sed` to force UNIX line endings so the patch applies.
|
||||||
|
# Needed as neither ignoring white-space or applying as a binary resolve this problem.
|
||||||
|
set(PATCH_MAYBE_DOS2UNIX_CMD
|
||||||
|
sed -i "s/\\r//"
|
||||||
|
${PATCH_DIR}/opencollada.diff
|
||||||
|
${BUILD_DIR}/opencollada/src/external_opencollada/CMakeLists.txt
|
||||||
|
${BUILD_DIR}/opencollada/src/external_opencollada/Externals/LibXML/CMakeLists.txt &&
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
set(OPENCOLLADA_EXTRA_ARGS
|
||||||
|
-DCMAKE_DEBUG_POSTFIX=_d
|
||||||
|
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
|
||||||
|
)
|
||||||
|
if(BUILD_MODE STREQUAL Release)
|
||||||
|
list(APPEND OPENCOLLADA_EXTRA_ARGS -DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2s.lib)
|
||||||
|
else()
|
||||||
|
list(APPEND OPENCOLLADA_EXTRA_ARGS -DLIBXML2_LIBRARIES=${LIBDIR}/xml2/lib/libxml2sd.lib)
|
||||||
|
endif()
|
||||||
|
set(PATCH_MAYBE_DOS2UNIX_CMD)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_opencollada
|
ExternalProject_Add(external_opencollada
|
||||||
@@ -11,17 +34,19 @@ ExternalProject_Add(external_opencollada
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${OPENCOLLADA_HASH_TYPE}=${OPENCOLLADA_HASH}
|
URL_HASH ${OPENCOLLADA_HASH_TYPE}=${OPENCOLLADA_HASH}
|
||||||
PREFIX ${BUILD_DIR}/opencollada
|
PREFIX ${BUILD_DIR}/opencollada
|
||||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/opencollada/src/external_opencollada < ${PATCH_DIR}/opencollada.diff
|
PATCH_COMMAND
|
||||||
|
${PATCH_MAYBE_DOS2UNIX_CMD}
|
||||||
|
${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/opencollada/src/external_opencollada < ${PATCH_DIR}/opencollada.diff
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/opencollada ${DEFAULT_CMAKE_FLAGS} ${OPENCOLLADA_EXTRA_ARGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/opencollada ${DEFAULT_CMAKE_FLAGS} ${OPENCOLLADA_EXTRA_ARGS}
|
||||||
INSTALL_DIR ${LIBDIR}/opencollada
|
INSTALL_DIR ${LIBDIR}/opencollada
|
||||||
)
|
)
|
||||||
|
|
||||||
if(UNIX)
|
unset(PATCH_MAYBE_DOS2UNIX_CMD)
|
||||||
add_dependencies(
|
|
||||||
external_opencollada
|
add_dependencies(
|
||||||
external_xml2
|
external_opencollada
|
||||||
)
|
external_xml2
|
||||||
endif()
|
)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
@@ -32,17 +57,7 @@ if(WIN32)
|
|||||||
endif()
|
endif()
|
||||||
if(BUILD_MODE STREQUAL Debug)
|
if(BUILD_MODE STREQUAL Debug)
|
||||||
ExternalProject_Add_Step(external_opencollada after_install
|
ExternalProject_Add_Step(external_opencollada after_install
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/buffer.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/buffer_d.lib
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/opencollada/lib ${HARVEST_TARGET}/opencollada/lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/ftoa.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/ftoa_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/GeneratedSaxParser.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/GeneratedSaxParser_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/MathMLSolver.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/MathMLSolver_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADABaseUtils.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADABaseUtils_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADAFramework.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADAFramework_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADASaxFrameworkLoader_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/OpenCOLLADAStreamWriter.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/OpenCOLLADAStreamWriter_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/pcre.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/pcre_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/UTF.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/UTF_d.lib
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/opencollada/lib/opencollada/xml.lib ${HARVEST_TARGET}/opencollada/lib/opencollada/xml_d.lib
|
|
||||||
DEPENDEES install
|
DEPENDEES install
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -15,7 +15,7 @@ message("BuildMode = ${BUILD_MODE}")
|
|||||||
|
|
||||||
if(BUILD_MODE STREQUAL "Debug")
|
if(BUILD_MODE STREQUAL "Debug")
|
||||||
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Debug)
|
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Debug)
|
||||||
else(BUILD_MODE STREQUAL "Debug")
|
else()
|
||||||
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Release)
|
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Release)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -101,34 +101,16 @@ else()
|
|||||||
set(LIBPREFIX "lib")
|
set(LIBPREFIX "lib")
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
# Let's get the current Xcode dir, to support xcode-select
|
# Use same Xcode detection as Blender itself.
|
||||||
execute_process(
|
include(../cmake/platform/platform_apple_xcode.cmake)
|
||||||
COMMAND xcode-select --print-path
|
|
||||||
OUTPUT_VARIABLE XCODE_DEV_PATH OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
execute_process(
|
|
||||||
COMMAND xcodebuild -version -sdk macosx SDKVersion
|
|
||||||
OUTPUT_VARIABLE MACOSX_SDK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
|
|
||||||
if(NOT CMAKE_OSX_ARCHITECTURES)
|
|
||||||
execute_process(COMMAND uname -m OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
message(STATUS "Detected native architecture ${ARCHITECTURE}.")
|
|
||||||
set(CMAKE_OSX_ARCHITECTURES "${ARCHITECTURE}")
|
|
||||||
endif()
|
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
|
|
||||||
set(OSX_DEPLOYMENT_TARGET 10.13)
|
|
||||||
else()
|
|
||||||
set(OSX_DEPLOYMENT_TARGET 11.00)
|
|
||||||
endif()
|
|
||||||
set(OSX_SYSROOT ${XCODE_DEV_PATH}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
|
|
||||||
|
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
||||||
set(BLENDER_PLATFORM_ARM ON)
|
set(BLENDER_PLATFORM_ARM ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(PLATFORM_CFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
set(PLATFORM_CFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
||||||
set(PLATFORM_CXXFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}")
|
set(PLATFORM_CXXFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -std=c++11 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}")
|
||||||
set(PLATFORM_LDFLAGS "-isysroot ${OSX_SYSROOT} -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
set(PLATFORM_LDFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
|
||||||
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
|
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
|
||||||
set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin17.0.0) # OS X 10.13
|
set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin17.0.0) # OS X 10.13
|
||||||
else()
|
else()
|
||||||
@@ -136,8 +118,8 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
set(PLATFORM_CMAKE_FLAGS
|
set(PLATFORM_CMAKE_FLAGS
|
||||||
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
|
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
|
||||||
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${OSX_DEPLOYMENT_TARGET}
|
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
|
||||||
-DCMAKE_OSX_SYSROOT:PATH=${OSX_SYSROOT}
|
-DCMAKE_OSX_SYSROOT:PATH=${CMAKE_OSX_SYSROOT}
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
|
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
|
||||||
@@ -171,8 +153,8 @@ else()
|
|||||||
set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${PLATFORM_CXXFLAGS}")
|
set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${PLATFORM_CXXFLAGS}")
|
||||||
|
|
||||||
set(CONFIGURE_ENV
|
set(CONFIGURE_ENV
|
||||||
export MACOSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET} &&
|
export MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} &&
|
||||||
export MACOSX_SDK_VERSION=${OSX_DEPLOYMENT_TARGET} &&
|
export MACOSX_SDK_VERSION=${CMAKE_OSX_DEPLOYMENT_TARGET} &&
|
||||||
export CFLAGS=${PLATFORM_CFLAGS} &&
|
export CFLAGS=${PLATFORM_CFLAGS} &&
|
||||||
export CXXFLAGS=${PLATFORM_CXXFLAGS} &&
|
export CXXFLAGS=${PLATFORM_CXXFLAGS} &&
|
||||||
export LDFLAGS=${PLATFORM_LDFLAGS}
|
export LDFLAGS=${PLATFORM_LDFLAGS}
|
||||||
|
@@ -32,6 +32,8 @@ set(OSL_EXTRA_ARGS
|
|||||||
-DUSE_Qt5=OFF
|
-DUSE_Qt5=OFF
|
||||||
-DINSTALL_DOCS=OFF
|
-DINSTALL_DOCS=OFF
|
||||||
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
||||||
|
-DTIFF_ROOT=${LIBDIR}/tiff
|
||||||
|
-DJPEG_ROOT=${LIBDIR}/jpeg
|
||||||
-DUSE_PYTHON=OFF
|
-DUSE_PYTHON=OFF
|
||||||
-DCMAKE_CXX_STANDARD=14
|
-DCMAKE_CXX_STANDARD=14
|
||||||
-DImath_ROOT=${LIBDIR}/imath
|
-DImath_ROOT=${LIBDIR}/imath
|
||||||
|
@@ -24,6 +24,14 @@ add_dependencies(
|
|||||||
external_zlib
|
external_zlib
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(WIN32 AND BUILD_MODE STREQUAL Release)
|
||||||
|
ExternalProject_Add_Step(external_png after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/png/include/ ${HARVEST_TARGET}/png/include/
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_static${LIBEXT} ${HARVEST_TARGET}/png/lib/libpng${LIBEXT}
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
||||||
ExternalProject_Add_Step(external_png after_install
|
ExternalProject_Add_Step(external_png after_install
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_staticd${LIBEXT} ${LIBDIR}/png/lib/libpng16${LIBEXT}
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/png/lib/libpng16_staticd${LIBEXT} ${LIBDIR}/png/lib/libpng16${LIBEXT}
|
||||||
|
@@ -15,9 +15,11 @@ if(WIN32)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
set(PYTHON_EXTERNALS_FOLDER ${BUILD_DIR}/python/src/external_python/externals)
|
set(PYTHON_EXTERNALS_FOLDER ${BUILD_DIR}/python/src/external_python/externals)
|
||||||
|
set(ZLIB_SOURCE_FOLDER ${BUILD_DIR}/zlib/src/external_zlib)
|
||||||
set(DOWNLOADS_EXTERNALS_FOLDER ${DOWNLOAD_DIR}/externals)
|
set(DOWNLOADS_EXTERNALS_FOLDER ${DOWNLOAD_DIR}/externals)
|
||||||
|
|
||||||
cmake_to_dos_path(${PYTHON_EXTERNALS_FOLDER} PYTHON_EXTERNALS_FOLDER_DOS)
|
cmake_to_dos_path(${PYTHON_EXTERNALS_FOLDER} PYTHON_EXTERNALS_FOLDER_DOS)
|
||||||
|
cmake_to_dos_path(${ZLIB_SOURCE_FOLDER} ZLIB_SOURCE_FOLDER_DOS)
|
||||||
cmake_to_dos_path(${DOWNLOADS_EXTERNALS_FOLDER} DOWNLOADS_EXTERNALS_FOLDER_DOS)
|
cmake_to_dos_path(${DOWNLOADS_EXTERNALS_FOLDER} DOWNLOADS_EXTERNALS_FOLDER_DOS)
|
||||||
|
|
||||||
ExternalProject_Add(external_python
|
ExternalProject_Add(external_python
|
||||||
@@ -25,12 +27,21 @@ if(WIN32)
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${PYTHON_HASH_TYPE}=${PYTHON_HASH}
|
URL_HASH ${PYTHON_HASH_TYPE}=${PYTHON_HASH}
|
||||||
PREFIX ${BUILD_DIR}/python
|
PREFIX ${BUILD_DIR}/python
|
||||||
CONFIGURE_COMMAND ""
|
# Python will download its own deps and there's very little we can do about
|
||||||
|
# that beyond placing some code in their externals dir before it tries.
|
||||||
|
# the foldernames *HAVE* to match the ones inside pythons get_externals.cmd.
|
||||||
|
# python 3.10.8 still ships zlib 1.2.12, replace it with our 1.2.13
|
||||||
|
# copy until they update.
|
||||||
|
CONFIGURE_COMMAND mkdir ${PYTHON_EXTERNALS_FOLDER_DOS} &&
|
||||||
|
mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\zlib-1.2.12 ${ZLIB_SOURCE_FOLDER_DOS} &&
|
||||||
|
${CMAKE_COMMAND} -E copy ${ZLIB_SOURCE_FOLDER}/../external_zlib-build/zconf.h ${PYTHON_EXTERNALS_FOLDER}/zlib-1.2.12/zconf.h
|
||||||
BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE}
|
BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE}
|
||||||
PATCH_COMMAND ${PATCH_CMD} --verbose -p1 -d ${BUILD_DIR}/python/src/external_python < ${PATCH_DIR}/python_windows.diff
|
|
||||||
INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py -b ${PYTHON_SRC}/PCbuild/amd64 -s ${PYTHON_SRC} -t ${PYTHON_SRC}/tmp/ --include-stable --include-pip --include-dev --include-launchers --include-venv --include-symbols ${PYTHON_EXTRA_INSTLAL_FLAGS} --copy ${LIBDIR}/python
|
INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py -b ${PYTHON_SRC}/PCbuild/amd64 -s ${PYTHON_SRC} -t ${PYTHON_SRC}/tmp/ --include-stable --include-pip --include-dev --include-launchers --include-venv --include-symbols ${PYTHON_EXTRA_INSTLAL_FLAGS} --copy ${LIBDIR}/python
|
||||||
)
|
)
|
||||||
|
add_dependencies(
|
||||||
|
external_python
|
||||||
|
external_zlib
|
||||||
|
)
|
||||||
else()
|
else()
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
# Disable functions that can be in 10.13 sdk but aren't available on 10.9 target.
|
# Disable functions that can be in 10.13 sdk but aren't available on 10.9 target.
|
||||||
|
@@ -15,7 +15,21 @@ ExternalProject_Add(external_python_site_packages
|
|||||||
CONFIGURE_COMMAND ${PIP_CONFIGURE_COMMAND}
|
CONFIGURE_COMMAND ${PIP_CONFIGURE_COMMAND}
|
||||||
BUILD_COMMAND ""
|
BUILD_COMMAND ""
|
||||||
PREFIX ${BUILD_DIR}/site_packages
|
PREFIX ${BUILD_DIR}/site_packages
|
||||||
INSTALL_COMMAND ${PYTHON_BINARY} -m pip install --no-cache-dir ${SITE_PACKAGES_EXTRA} cython==${CYTHON_VERSION} idna==${IDNA_VERSION} charset-normalizer==${CHARSET_NORMALIZER_VERSION} urllib3==${URLLIB3_VERSION} certifi==${CERTIFI_VERSION} requests==${REQUESTS_VERSION} zstandard==${ZSTANDARD_VERSION} autopep8==${AUTOPEP8_VERSION} pycodestyle==${PYCODESTYLE_VERSION} toml==${TOML_VERSION} --no-binary :all:
|
# setuptools is downgraded to 63.2.0 (same as python 3.10.8) since numpy 1.23.x seemingly has
|
||||||
|
# issues building on windows with the newer versions that ships with python 3.10.9+
|
||||||
|
INSTALL_COMMAND ${PYTHON_BINARY} -m pip install --no-cache-dir ${SITE_PACKAGES_EXTRA}
|
||||||
|
setuptools==63.2.0
|
||||||
|
cython==${CYTHON_VERSION}
|
||||||
|
idna==${IDNA_VERSION}
|
||||||
|
charset-normalizer==${CHARSET_NORMALIZER_VERSION}
|
||||||
|
urllib3==${URLLIB3_VERSION}
|
||||||
|
certifi==${CERTIFI_VERSION}
|
||||||
|
requests==${REQUESTS_VERSION}
|
||||||
|
zstandard==${ZSTANDARD_VERSION}
|
||||||
|
autopep8==${AUTOPEP8_VERSION}
|
||||||
|
pycodestyle==${PYCODESTYLE_VERSION}
|
||||||
|
toml==${TOML_VERSION}
|
||||||
|
--no-binary :all:
|
||||||
)
|
)
|
||||||
|
|
||||||
if(USE_PIP_NUMPY)
|
if(USE_PIP_NUMPY)
|
||||||
|
@@ -11,18 +11,11 @@ else()
|
|||||||
set(SNDFILE_OPTIONS --enable-static --disable-shared )
|
set(SNDFILE_OPTIONS --enable-static --disable-shared )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(UNIX)
|
|
||||||
set(SNDFILE_PATCH_CMD ${PATCH_CMD} --verbose -p 0 -d ${BUILD_DIR}/sndfile/src/external_sndfile < ${PATCH_DIR}/sndfile.diff)
|
|
||||||
else()
|
|
||||||
set(SNDFILE_PATCH_CMD)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ExternalProject_Add(external_sndfile
|
ExternalProject_Add(external_sndfile
|
||||||
URL file://${PACKAGE_DIR}/${SNDFILE_FILE}
|
URL file://${PACKAGE_DIR}/${SNDFILE_FILE}
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${SNDFILE_HASH_TYPE}=${SNDFILE_HASH}
|
URL_HASH ${SNDFILE_HASH_TYPE}=${SNDFILE_HASH}
|
||||||
PREFIX ${BUILD_DIR}/sndfile
|
PREFIX ${BUILD_DIR}/sndfile
|
||||||
PATCH_COMMAND ${SNDFILE_PATCH_CMD}
|
|
||||||
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && ${SNDFILE_ENV} ${CONFIGURE_COMMAND} ${SNDFILE_OPTIONS} --prefix=${mingw_LIBDIR}/sndfile
|
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && ${SNDFILE_ENV} ${CONFIGURE_COMMAND} ${SNDFILE_OPTIONS} --prefix=${mingw_LIBDIR}/sndfile
|
||||||
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make -j${MAKE_THREADS}
|
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make -j${MAKE_THREADS}
|
||||||
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make install
|
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make install
|
||||||
|
@@ -48,7 +48,6 @@ ExternalProject_Add(external_sqlite
|
|||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
URL_HASH ${SQLITE_HASH_TYPE}=${SQLITE_HASH}
|
URL_HASH ${SQLITE_HASH_TYPE}=${SQLITE_HASH}
|
||||||
PREFIX ${BUILD_DIR}/sqlite
|
PREFIX ${BUILD_DIR}/sqlite
|
||||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/sqlite/src/external_sqlite < ${PATCH_DIR}/sqlite.diff
|
|
||||||
CONFIGURE_COMMAND ${SQLITE_CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/sqlite ${SQLITE_CONFIGURATION_ARGS}
|
CONFIGURE_COMMAND ${SQLITE_CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/sqlite ${SQLITE_CONFIGURATION_ARGS}
|
||||||
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make -j${MAKE_THREADS}
|
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make -j${MAKE_THREADS}
|
||||||
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make install
|
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sqlite/src/external_sqlite/ && make install
|
||||||
|
@@ -5,6 +5,7 @@ set(SSL_PATCH_CMD echo .)
|
|||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}")
|
set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}")
|
||||||
|
set(SSL_PATCH_CMD ${PATCH_CMD} --verbose -p 0 -d ${BUILD_DIR}/ssl/src/external_ssl < ${PATCH_DIR}/ssl.diff)
|
||||||
else()
|
else()
|
||||||
if(BLENDER_PLATFORM_ARM)
|
if(BLENDER_PLATFORM_ARM)
|
||||||
set(SSL_OS_COMPILER "blender-linux-aarch64")
|
set(SSL_OS_COMPILER "blender-linux-aarch64")
|
||||||
|
@@ -25,6 +25,7 @@ ExternalProject_Add(external_tiff
|
|||||||
add_dependencies(
|
add_dependencies(
|
||||||
external_tiff
|
external_tiff
|
||||||
external_zlib
|
external_zlib
|
||||||
|
external_jpeg
|
||||||
)
|
)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
if(BUILD_MODE STREQUAL Release)
|
if(BUILD_MODE STREQUAL Release)
|
||||||
|
@@ -1,10 +1,19 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
set(ZLIB_VERSION 1.2.12)
|
# CPE's are used to identify dependencies, for more information on what they
|
||||||
|
# are please see https://nvd.nist.gov/products/cpe
|
||||||
|
#
|
||||||
|
# We use them in combination with cve-bin-tool to scan for known security issues.
|
||||||
|
#
|
||||||
|
# Not all of our dependencies are currently in the nvd database so not all
|
||||||
|
# dependencies have one assigned.
|
||||||
|
|
||||||
|
set(ZLIB_VERSION 1.2.13)
|
||||||
set(ZLIB_URI https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz)
|
set(ZLIB_URI https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz)
|
||||||
set(ZLIB_HASH 5fc414a9726be31427b440b434d05f78)
|
set(ZLIB_HASH 9b8aa094c4e5765dabf4da391f00d15c)
|
||||||
set(ZLIB_HASH_TYPE MD5)
|
set(ZLIB_HASH_TYPE MD5)
|
||||||
set(ZLIB_FILE zlib-${ZLIB_VERSION}.tar.gz)
|
set(ZLIB_FILE zlib-${ZLIB_VERSION}.tar.gz)
|
||||||
|
set(ZLIB_CPE "cpe:2.3:a:zlib:zlib:${ZLIB_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(OPENAL_VERSION 1.21.1)
|
set(OPENAL_VERSION 1.21.1)
|
||||||
set(OPENAL_URI http://openal-soft.org/openal-releases/openal-soft-${OPENAL_VERSION}.tar.bz2)
|
set(OPENAL_URI http://openal-soft.org/openal-releases/openal-soft-${OPENAL_VERSION}.tar.bz2)
|
||||||
@@ -17,12 +26,14 @@ set(PNG_URI http://prdownloads.sourceforge.net/libpng/libpng-${PNG_VERSION}.tar.
|
|||||||
set(PNG_HASH 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca)
|
set(PNG_HASH 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca)
|
||||||
set(PNG_HASH_TYPE SHA256)
|
set(PNG_HASH_TYPE SHA256)
|
||||||
set(PNG_FILE libpng-${PNG_VERSION}.tar.xz)
|
set(PNG_FILE libpng-${PNG_VERSION}.tar.xz)
|
||||||
|
set(PNG_CPE "cpe:2.3:a:libpng:libpng:${PNG_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(JPEG_VERSION 2.1.3)
|
set(JPEG_VERSION 2.1.3)
|
||||||
set(JPEG_URI https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_VERSION}.tar.gz)
|
set(JPEG_URI https://github.com/libjpeg-turbo/libjpeg-turbo/archive/${JPEG_VERSION}.tar.gz)
|
||||||
set(JPEG_HASH 627b980fad0573e08e4c3b80b290fc91)
|
set(JPEG_HASH 627b980fad0573e08e4c3b80b290fc91)
|
||||||
set(JPEG_HASH_TYPE MD5)
|
set(JPEG_HASH_TYPE MD5)
|
||||||
set(JPEG_FILE libjpeg-turbo-${JPEG_VERSION}.tar.gz)
|
set(JPEG_FILE libjpeg-turbo-${JPEG_VERSION}.tar.gz)
|
||||||
|
set(JPEG_CPE "cpe:2.3:a:d.r.commander:libjpeg-turbo:${JPEG_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(BOOST_VERSION 1.78.0)
|
set(BOOST_VERSION 1.78.0)
|
||||||
set(BOOST_VERSION_SHORT 1.78)
|
set(BOOST_VERSION_SHORT 1.78)
|
||||||
@@ -32,12 +43,14 @@ set(BOOST_URI https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION
|
|||||||
set(BOOST_HASH c2f6428ac52b0e5a3c9b2e1d8cc832b5)
|
set(BOOST_HASH c2f6428ac52b0e5a3c9b2e1d8cc832b5)
|
||||||
set(BOOST_HASH_TYPE MD5)
|
set(BOOST_HASH_TYPE MD5)
|
||||||
set(BOOST_FILE boost_${BOOST_VERSION_NODOTS}.tar.gz)
|
set(BOOST_FILE boost_${BOOST_VERSION_NODOTS}.tar.gz)
|
||||||
|
set(BOOST_CPE "cpe:2.3:a:boost:boost:${BOOST_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(BLOSC_VERSION 1.21.1)
|
set(BLOSC_VERSION 1.21.1)
|
||||||
set(BLOSC_URI https://github.com/Blosc/c-blosc/archive/v${BLOSC_VERSION}.tar.gz)
|
set(BLOSC_URI https://github.com/Blosc/c-blosc/archive/v${BLOSC_VERSION}.tar.gz)
|
||||||
set(BLOSC_HASH 134b55813b1dca57019d2a2dc1f7a923)
|
set(BLOSC_HASH 134b55813b1dca57019d2a2dc1f7a923)
|
||||||
set(BLOSC_HASH_TYPE MD5)
|
set(BLOSC_HASH_TYPE MD5)
|
||||||
set(BLOSC_FILE blosc-${BLOSC_VERSION}.tar.gz)
|
set(BLOSC_FILE blosc-${BLOSC_VERSION}.tar.gz)
|
||||||
|
set(BLOSC_CPE "cpe:2.3:a:c-blosc2_project:c-blosc2:${BLOSC_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(PTHREADS_VERSION 3.0.0)
|
set(PTHREADS_VERSION 3.0.0)
|
||||||
set(PTHREADS_URI http://prdownloads.sourceforge.net/pthreads4w/pthreads4w-code-v${PTHREADS_VERSION}.zip)
|
set(PTHREADS_URI http://prdownloads.sourceforge.net/pthreads4w/pthreads4w-code-v${PTHREADS_VERSION}.zip)
|
||||||
@@ -50,6 +63,7 @@ set(OPENEXR_URI https://github.com/AcademySoftwareFoundation/openexr/archive/v${
|
|||||||
set(OPENEXR_HASH a92f38eedd43e56c0af56d4852506886)
|
set(OPENEXR_HASH a92f38eedd43e56c0af56d4852506886)
|
||||||
set(OPENEXR_HASH_TYPE MD5)
|
set(OPENEXR_HASH_TYPE MD5)
|
||||||
set(OPENEXR_FILE openexr-${OPENEXR_VERSION}.tar.gz)
|
set(OPENEXR_FILE openexr-${OPENEXR_VERSION}.tar.gz)
|
||||||
|
set(OPENEXR_CPE "cpe:2.3:a:openexr:openexr:${OPENEXR_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(IMATH_VERSION 3.1.5)
|
set(IMATH_VERSION 3.1.5)
|
||||||
set(IMATH_URI https://github.com/AcademySoftwareFoundation/Imath/archive/v${OPENEXR_VERSION}.tar.gz)
|
set(IMATH_URI https://github.com/AcademySoftwareFoundation/Imath/archive/v${OPENEXR_VERSION}.tar.gz)
|
||||||
@@ -74,11 +88,12 @@ else()
|
|||||||
set(OPENEXR_VERSION_POSTFIX)
|
set(OPENEXR_VERSION_POSTFIX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(FREETYPE_VERSION 2.11.1)
|
set(FREETYPE_VERSION 2.12.1)
|
||||||
set(FREETYPE_URI http://prdownloads.sourceforge.net/freetype/freetype-${FREETYPE_VERSION}.tar.gz)
|
set(FREETYPE_URI http://prdownloads.sourceforge.net/freetype/freetype-${FREETYPE_VERSION}.tar.gz)
|
||||||
set(FREETYPE_HASH bd4e3b007474319909a6b79d50908e85)
|
set(FREETYPE_HASH 8bc5c9c9df7ac12c504f8918552a7cf2)
|
||||||
set(FREETYPE_HASH_TYPE MD5)
|
set(FREETYPE_HASH_TYPE MD5)
|
||||||
set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz)
|
set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz)
|
||||||
|
SET(FREETYPE_CPE "cpe:2.3:a:freetype:freetype:${FREETYPE_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(GLEW_VERSION 1.13.0)
|
set(GLEW_VERSION 1.13.0)
|
||||||
set(GLEW_URI http://prdownloads.sourceforge.net/glew/glew/${GLEW_VERSION}/glew-${GLEW_VERSION}.tgz)
|
set(GLEW_URI http://prdownloads.sourceforge.net/glew/glew/${GLEW_VERSION}/glew-${GLEW_VERSION}.tgz)
|
||||||
@@ -97,6 +112,7 @@ set(ALEMBIC_URI https://github.com/alembic/alembic/archive/${ALEMBIC_VERSION}.ta
|
|||||||
set(ALEMBIC_HASH 2cd8d6e5a3ac4a014e24a4b04f4fadf9)
|
set(ALEMBIC_HASH 2cd8d6e5a3ac4a014e24a4b04f4fadf9)
|
||||||
set(ALEMBIC_HASH_TYPE MD5)
|
set(ALEMBIC_HASH_TYPE MD5)
|
||||||
set(ALEMBIC_FILE alembic-${ALEMBIC_VERSION}.tar.gz)
|
set(ALEMBIC_FILE alembic-${ALEMBIC_VERSION}.tar.gz)
|
||||||
|
SET(FREETYPE_CPE "cpe:2.3:a:freetype:freetype:${FREETYPE_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(OPENSUBDIV_VERSION v3_4_4)
|
set(OPENSUBDIV_VERSION v3_4_4)
|
||||||
set(OPENSUBDIV_URI https://github.com/PixarAnimationStudios/OpenSubdiv/archive/${OPENSUBDIV_VERSION}.tar.gz)
|
set(OPENSUBDIV_URI https://github.com/PixarAnimationStudios/OpenSubdiv/archive/${OPENSUBDIV_VERSION}.tar.gz)
|
||||||
@@ -109,6 +125,7 @@ set(SDL_URI https://www.libsdl.org/release/SDL2-${SDL_VERSION}.tar.gz)
|
|||||||
set(SDL_HASH a53acc02e1cca98c4123229069b67c9e)
|
set(SDL_HASH a53acc02e1cca98c4123229069b67c9e)
|
||||||
set(SDL_HASH_TYPE MD5)
|
set(SDL_HASH_TYPE MD5)
|
||||||
set(SDL_FILE SDL2-${SDL_VERSION}.tar.gz)
|
set(SDL_FILE SDL2-${SDL_VERSION}.tar.gz)
|
||||||
|
set(SDL_CPE "cpe:2.3:a:libsdl:sdl:${SDL_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(OPENCOLLADA_VERSION v1.6.68)
|
set(OPENCOLLADA_VERSION v1.6.68)
|
||||||
set(OPENCOLLADA_URI https://github.com/KhronosGroup/OpenCOLLADA/archive/${OPENCOLLADA_VERSION}.tar.gz)
|
set(OPENCOLLADA_URI https://github.com/KhronosGroup/OpenCOLLADA/archive/${OPENCOLLADA_VERSION}.tar.gz)
|
||||||
@@ -127,6 +144,7 @@ set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LL
|
|||||||
set(LLVM_HASH 5a4fab4d7fc84aefffb118ac2c8a4fc0)
|
set(LLVM_HASH 5a4fab4d7fc84aefffb118ac2c8a4fc0)
|
||||||
set(LLVM_HASH_TYPE MD5)
|
set(LLVM_HASH_TYPE MD5)
|
||||||
set(LLVM_FILE llvm-project-${LLVM_VERSION}.src.tar.xz)
|
set(LLVM_FILE llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||||
|
set(LLVM_CPE "cpe:2.3:a:llvm:compiler:${LLVM_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
# Cloth physics test is crashing due to this bug:
|
# Cloth physics test is crashing due to this bug:
|
||||||
@@ -141,9 +159,9 @@ set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${
|
|||||||
set(OPENMP_HASH_TYPE MD5)
|
set(OPENMP_HASH_TYPE MD5)
|
||||||
set(OPENMP_FILE openmp-${OPENMP_VERSION}.src.tar.xz)
|
set(OPENMP_FILE openmp-${OPENMP_VERSION}.src.tar.xz)
|
||||||
|
|
||||||
set(OPENIMAGEIO_VERSION v2.3.13.0)
|
set(OPENIMAGEIO_VERSION v2.3.20.0)
|
||||||
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/refs/tags/${OPENIMAGEIO_VERSION}.tar.gz)
|
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/refs/tags/${OPENIMAGEIO_VERSION}.tar.gz)
|
||||||
set(OPENIMAGEIO_HASH de45fb38501c4581062b522b53b6141c)
|
set(OPENIMAGEIO_HASH defb1fe7c8e64bac60eb3cacaf5c3736)
|
||||||
set(OPENIMAGEIO_HASH_TYPE MD5)
|
set(OPENIMAGEIO_HASH_TYPE MD5)
|
||||||
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||||
|
|
||||||
@@ -154,6 +172,7 @@ set(FMT_URI https://github.com/fmtlib/fmt/archive/refs/tags/${FMT_VERSION}.tar.g
|
|||||||
set(FMT_HASH 7bce0e9e022e586b178b150002e7c2339994e3c2bbe44027e9abb0d60f9cce83)
|
set(FMT_HASH 7bce0e9e022e586b178b150002e7c2339994e3c2bbe44027e9abb0d60f9cce83)
|
||||||
set(FMT_HASH_TYPE SHA256)
|
set(FMT_HASH_TYPE SHA256)
|
||||||
set(FMT_FILE fmt-${FMT_VERSION}.tar.gz)
|
set(FMT_FILE fmt-${FMT_VERSION}.tar.gz)
|
||||||
|
set(FMT_CPE "cpe:2.3:a:fmt:fmt:${FMT_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
# 0.6.2 is currently oiio's preferred version although never versions may be available.
|
# 0.6.2 is currently oiio's preferred version although never versions may be available.
|
||||||
# the preferred version can be found in oiio's externalpackages.cmake
|
# the preferred version can be found in oiio's externalpackages.cmake
|
||||||
@@ -163,11 +182,12 @@ set(ROBINMAP_HASH c08ec4b1bf1c85eb0d6432244a6a89862229da1cb834f3f90fba8dc35d8c8e
|
|||||||
set(ROBINMAP_HASH_TYPE SHA256)
|
set(ROBINMAP_HASH_TYPE SHA256)
|
||||||
set(ROBINMAP_FILE robinmap-${ROBINMAP_VERSION}.tar.gz)
|
set(ROBINMAP_FILE robinmap-${ROBINMAP_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(TIFF_VERSION 4.4.0)
|
set(TIFF_VERSION 4.5.0)
|
||||||
set(TIFF_URI http://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz)
|
set(TIFF_URI http://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz)
|
||||||
set(TIFF_HASH 376f17f189e9d02280dfe709b2b2bbea)
|
set(TIFF_HASH db9e220a1971acc64487f1d51a20dcaa)
|
||||||
set(TIFF_HASH_TYPE MD5)
|
set(TIFF_HASH_TYPE MD5)
|
||||||
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
||||||
|
set(TIFF_CPE "cpe:2.3:a:libtiff:libtiff:${TIFF_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(OSL_VERSION 1.11.17.0)
|
set(OSL_VERSION 1.11.17.0)
|
||||||
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
||||||
@@ -175,19 +195,22 @@ set(OSL_HASH 63265472ce14548839ace2e21e401544)
|
|||||||
set(OSL_HASH_TYPE MD5)
|
set(OSL_HASH_TYPE MD5)
|
||||||
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(PYTHON_VERSION 3.10.2)
|
set(PYTHON_VERSION 3.10.9)
|
||||||
set(PYTHON_SHORT_VERSION 3.10)
|
set(PYTHON_SHORT_VERSION 3.10)
|
||||||
set(PYTHON_SHORT_VERSION_NO_DOTS 310)
|
set(PYTHON_SHORT_VERSION_NO_DOTS 310)
|
||||||
set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz)
|
set(PYTHON_URI https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz)
|
||||||
set(PYTHON_HASH 14e8c22458ed7779a1957b26cde01db9)
|
set(PYTHON_HASH dc8c0f274b28ee9e95923d20cfc364c9)
|
||||||
set(PYTHON_HASH_TYPE MD5)
|
set(PYTHON_HASH_TYPE MD5)
|
||||||
set(PYTHON_FILE Python-${PYTHON_VERSION}.tar.xz)
|
set(PYTHON_FILE Python-${PYTHON_VERSION}.tar.xz)
|
||||||
|
set(PYTHON_CPE "cpe:2.3:a:python:python:${PYTHON_VERSION}:-:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(TBB_VERSION 2020_U3)
|
set(TBB_YEAR 2020)
|
||||||
|
set(TBB_VERSION ${TBB_YEAR}_U3)
|
||||||
set(TBB_URI https://github.com/oneapi-src/oneTBB/archive/${TBB_VERSION}.tar.gz)
|
set(TBB_URI https://github.com/oneapi-src/oneTBB/archive/${TBB_VERSION}.tar.gz)
|
||||||
set(TBB_HASH 55ec8df6eae5ed6364a47f0e671e460c)
|
set(TBB_HASH 55ec8df6eae5ed6364a47f0e671e460c)
|
||||||
set(TBB_HASH_TYPE MD5)
|
set(TBB_HASH_TYPE MD5)
|
||||||
set(TBB_FILE oneTBB-${TBB_VERSION}.tar.gz)
|
set(TBB_FILE oneTBB-${TBB_VERSION}.tar.gz)
|
||||||
|
set(TBB_CPE "cpe:2.3:a:intel:threading_building_blocks:${TBB_YEAR}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(OPENVDB_VERSION 9.0.0)
|
set(OPENVDB_VERSION 9.0.0)
|
||||||
set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)
|
set(OPENVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/v${OPENVDB_VERSION}.tar.gz)
|
||||||
@@ -198,6 +221,7 @@ set(OPENVDB_FILE openvdb-${OPENVDB_VERSION}.tar.gz)
|
|||||||
set(IDNA_VERSION 3.3)
|
set(IDNA_VERSION 3.3)
|
||||||
set(CHARSET_NORMALIZER_VERSION 2.0.10)
|
set(CHARSET_NORMALIZER_VERSION 2.0.10)
|
||||||
set(URLLIB3_VERSION 1.26.8)
|
set(URLLIB3_VERSION 1.26.8)
|
||||||
|
set(URLLIB3_CPE "cpe:2.3:a:urllib3:urllib3:${URLLIB3_VERSION}:*:*:*:*:*:*:*")
|
||||||
set(CERTIFI_VERSION 2021.10.8)
|
set(CERTIFI_VERSION 2021.10.8)
|
||||||
set(REQUESTS_VERSION 2.27.1)
|
set(REQUESTS_VERSION 2.27.1)
|
||||||
set(CYTHON_VERSION 0.29.26)
|
set(CYTHON_VERSION 0.29.26)
|
||||||
@@ -214,12 +238,14 @@ set(NUMPY_URI https://github.com/numpy/numpy/releases/download/v${NUMPY_VERSION}
|
|||||||
set(NUMPY_HASH 252de134862a27bd66705d29622edbfe)
|
set(NUMPY_HASH 252de134862a27bd66705d29622edbfe)
|
||||||
set(NUMPY_HASH_TYPE MD5)
|
set(NUMPY_HASH_TYPE MD5)
|
||||||
set(NUMPY_FILE numpy-${NUMPY_VERSION}.zip)
|
set(NUMPY_FILE numpy-${NUMPY_VERSION}.zip)
|
||||||
|
set(NUMPY_CPE "cpe:2.3:a:numpy:numpy:${NUMPY_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(LAME_VERSION 3.100)
|
set(LAME_VERSION 3.100)
|
||||||
set(LAME_URI http://downloads.sourceforge.net/project/lame/lame/3.100/lame-${LAME_VERSION}.tar.gz)
|
set(LAME_URI http://downloads.sourceforge.net/project/lame/lame/3.100/lame-${LAME_VERSION}.tar.gz)
|
||||||
set(LAME_HASH 83e260acbe4389b54fe08e0bdbf7cddb)
|
set(LAME_HASH 83e260acbe4389b54fe08e0bdbf7cddb)
|
||||||
set(LAME_HASH_TYPE MD5)
|
set(LAME_HASH_TYPE MD5)
|
||||||
set(LAME_FILE lame-${LAME_VERSION}.tar.gz)
|
set(LAME_FILE lame-${LAME_VERSION}.tar.gz)
|
||||||
|
set(LAME_CPE "cpe:2.3:a:lame_project:lame:${LAME_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(OGG_VERSION 1.3.5)
|
set(OGG_VERSION 1.3.5)
|
||||||
set(OGG_URI http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz)
|
set(OGG_URI http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz)
|
||||||
@@ -232,6 +258,7 @@ set(VORBIS_URI http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERS
|
|||||||
set(VORBIS_HASH 0e982409a9c3fc82ee06e08205b1355e5c6aa4c36bca58146ef399621b0ce5ab)
|
set(VORBIS_HASH 0e982409a9c3fc82ee06e08205b1355e5c6aa4c36bca58146ef399621b0ce5ab)
|
||||||
set(VORBIS_HASH_TYPE SHA256)
|
set(VORBIS_HASH_TYPE SHA256)
|
||||||
set(VORBIS_FILE libvorbis-${VORBIS_VERSION}.tar.gz)
|
set(VORBIS_FILE libvorbis-${VORBIS_VERSION}.tar.gz)
|
||||||
|
set(VORBIS_CPE "cpe:2.3:a:xiph.org:libvorbis:${VORBIS_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(THEORA_VERSION 1.1.1)
|
set(THEORA_VERSION 1.1.1)
|
||||||
set(THEORA_URI http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.bz2)
|
set(THEORA_URI http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.bz2)
|
||||||
@@ -239,17 +266,19 @@ set(THEORA_HASH b6ae1ee2fa3d42ac489287d3ec34c5885730b1296f0801ae577a35193d3affbc
|
|||||||
set(THEORA_HASH_TYPE SHA256)
|
set(THEORA_HASH_TYPE SHA256)
|
||||||
set(THEORA_FILE libtheora-${THEORA_VERSION}.tar.bz2)
|
set(THEORA_FILE libtheora-${THEORA_VERSION}.tar.bz2)
|
||||||
|
|
||||||
set(FLAC_VERSION 1.3.4)
|
set(FLAC_VERSION 1.4.2)
|
||||||
set(FLAC_URI http://downloads.xiph.org/releases/flac/flac-${FLAC_VERSION}.tar.xz)
|
set(FLAC_URI http://downloads.xiph.org/releases/flac/flac-${FLAC_VERSION}.tar.xz)
|
||||||
set(FLAC_HASH 8ff0607e75a322dd7cd6ec48f4f225471404ae2730d0ea945127b1355155e737 )
|
set(FLAC_HASH e322d58a1f48d23d9dd38f432672865f6f79e73a6f9cc5a5f57fcaa83eb5a8e4 )
|
||||||
set(FLAC_HASH_TYPE SHA256)
|
set(FLAC_HASH_TYPE SHA256)
|
||||||
set(FLAC_FILE flac-${FLAC_VERSION}.tar.xz)
|
set(FLAC_FILE flac-${FLAC_VERSION}.tar.xz)
|
||||||
|
set(FLAC_CPE "cpe:2.3:a:flac_project:flac:${FLAC_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(VPX_VERSION 1.11.0)
|
set(VPX_VERSION 1.11.0)
|
||||||
set(VPX_URI https://github.com/webmproject/libvpx/archive/v${VPX_VERSION}/libvpx-v${VPX_VERSION}.tar.gz)
|
set(VPX_URI https://github.com/webmproject/libvpx/archive/v${VPX_VERSION}/libvpx-v${VPX_VERSION}.tar.gz)
|
||||||
set(VPX_HASH 965e51c91ad9851e2337aebcc0f517440c637c506f3a03948062e3d5ea129a83)
|
set(VPX_HASH 965e51c91ad9851e2337aebcc0f517440c637c506f3a03948062e3d5ea129a83)
|
||||||
set(VPX_HASH_TYPE SHA256)
|
set(VPX_HASH_TYPE SHA256)
|
||||||
set(VPX_FILE libvpx-v${VPX_VERSION}.tar.gz)
|
set(VPX_FILE libvpx-v${VPX_VERSION}.tar.gz)
|
||||||
|
set(VPX_CPE "cpe:2.3:a:webmproject:libvpx:${VPX_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(OPUS_VERSION 1.3.1)
|
set(OPUS_VERSION 1.3.1)
|
||||||
set(OPUS_URI https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz)
|
set(OPUS_URI https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz)
|
||||||
@@ -269,18 +298,21 @@ set(XVIDCORE_HASH abbdcbd39555691dd1c9b4d08f0a031376a3b211652c0d8b3b8aa9be1303ce
|
|||||||
set(XVIDCORE_HASH_TYPE SHA256)
|
set(XVIDCORE_HASH_TYPE SHA256)
|
||||||
set(XVIDCORE_FILE xvidcore-${XVIDCORE_VERSION}.tar.gz)
|
set(XVIDCORE_FILE xvidcore-${XVIDCORE_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(OPENJPEG_VERSION 2.4.0)
|
set(OPENJPEG_VERSION 2.5.0)
|
||||||
set(OPENJPEG_SHORT_VERSION 2.4)
|
set(OPENJPEG_SHORT_VERSION 2.5)
|
||||||
set(OPENJPEG_URI https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz)
|
set(OPENJPEG_GIT_HASH 2d606701e8b7aa83f657d113c3367508e99bd12b)
|
||||||
set(OPENJPEG_HASH 8702ba68b442657f11aaeb2b338443ca8d5fb95b0d845757968a7be31ef7f16d)
|
set(OPENJPEG_URI https://github.com/uclouvain/openjpeg/archive/${OPENJPEG_GIT_HASH}.tar.gz)
|
||||||
|
set(OPENJPEG_HASH f90941955eb66a81762df5e989f13ade48d753d3182e7f9a82d2bfce3fb5cef2)
|
||||||
set(OPENJPEG_HASH_TYPE SHA256)
|
set(OPENJPEG_HASH_TYPE SHA256)
|
||||||
set(OPENJPEG_FILE openjpeg-v${OPENJPEG_VERSION}.tar.gz)
|
set(OPENJPEG_FILE openjpeg-v${OPENJPEG_GIT_HASH}.tar.gz)
|
||||||
|
set(OPENJPEG_CPE "cpe:2.3:a:uclouvain:openjpeg:${OPENJPEG_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(FFMPEG_VERSION 5.0)
|
set(FFMPEG_VERSION 5.1.2)
|
||||||
set(FFMPEG_URI http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
set(FFMPEG_URI http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
||||||
set(FFMPEG_HASH c0130b8db2c763430fd1c6905288d61bc44ee0548ad5fcd2dfd650b88432bed9)
|
set(FFMPEG_HASH 39a0bcc8d98549f16c570624678246a6ac736c066cebdb409f9502e915b22f2b)
|
||||||
set(FFMPEG_HASH_TYPE SHA256)
|
set(FFMPEG_HASH_TYPE SHA256)
|
||||||
set(FFMPEG_FILE ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
set(FFMPEG_FILE ffmpeg-${FFMPEG_VERSION}.tar.bz2)
|
||||||
|
set(FFMPEG_CPE "cpe:2.3:a:ffmpeg:ffmpeg:${FFMPEG_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(FFTW_VERSION 3.3.10)
|
set(FFTW_VERSION 3.3.10)
|
||||||
set(FFTW_URI http://www.fftw.org/fftw-${FFTW_VERSION}.tar.gz)
|
set(FFTW_URI http://www.fftw.org/fftw-${FFTW_VERSION}.tar.gz)
|
||||||
@@ -294,17 +326,19 @@ set(ICONV_HASH 7d2a800b952942bb2880efb00cfd524c)
|
|||||||
set(ICONV_HASH_TYPE MD5)
|
set(ICONV_HASH_TYPE MD5)
|
||||||
set(ICONV_FILE libiconv-${ICONV_VERSION}.tar.gz)
|
set(ICONV_FILE libiconv-${ICONV_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(SNDFILE_VERSION 1.0.28)
|
set(SNDFILE_VERSION 1.1.0)
|
||||||
set(SNDFILE_URI http://www.mega-nerd.com/libsndfile/files/libsndfile-${SNDFILE_VERSION}.tar.gz)
|
set(SNDFILE_URI https://github.com/libsndfile/libsndfile/releases/download/1.1.0/libsndfile-${SNDFILE_VERSION}.tar.xz)
|
||||||
set(SNDFILE_HASH 646b5f98ce89ac60cdb060fcd398247c)
|
set(SNDFILE_HASH e63dead2b4f0aaf323687619d007ee6a)
|
||||||
set(SNDFILE_HASH_TYPE MD5)
|
set(SNDFILE_HASH_TYPE MD5)
|
||||||
set(SNDFILE_FILE libsndfile-${SNDFILE_VERSION}.tar.gz)
|
set(SNDFILE_FILE libsndfile-${SNDFILE_VERSION}.tar.gz)
|
||||||
|
set(SNDFILE_CPE "cpe:2.3:a:libsndfile_project:libsndfile:${SNDFILE_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(WEBP_VERSION 1.2.2)
|
set(WEBP_VERSION 1.2.2)
|
||||||
set(WEBP_URI https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz)
|
set(WEBP_URI https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz)
|
||||||
set(WEBP_HASH b5e2e414a8adee4c25fe56b18dd9c549)
|
set(WEBP_HASH b5e2e414a8adee4c25fe56b18dd9c549)
|
||||||
set(WEBP_HASH_TYPE MD5)
|
set(WEBP_HASH_TYPE MD5)
|
||||||
set(WEBP_FILE libwebp-${WEBP_VERSION}.tar.gz)
|
set(WEBP_FILE libwebp-${WEBP_VERSION}.tar.gz)
|
||||||
|
set(WEBP_CPE "cpe:2.3:a:webmproject:libwebp:${WEBP_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(SPNAV_VERSION 0.2.3)
|
set(SPNAV_VERSION 0.2.3)
|
||||||
set(SPNAV_URI http://downloads.sourceforge.net/project/spacenav/spacenav%20library%20%28SDK%29/libspnav%20${SPNAV_VERSION}/libspnav-${SPNAV_VERSION}.tar.gz)
|
set(SPNAV_URI http://downloads.sourceforge.net/project/spacenav/spacenav%20library%20%28SDK%29/libspnav%20${SPNAV_VERSION}/libspnav-${SPNAV_VERSION}.tar.gz)
|
||||||
@@ -318,24 +352,19 @@ set(JEMALLOC_HASH 3d41fbf006e6ebffd489bdb304d009ae)
|
|||||||
set(JEMALLOC_HASH_TYPE MD5)
|
set(JEMALLOC_HASH_TYPE MD5)
|
||||||
set(JEMALLOC_FILE jemalloc-${JEMALLOC_VERSION}.tar.bz2)
|
set(JEMALLOC_FILE jemalloc-${JEMALLOC_VERSION}.tar.bz2)
|
||||||
|
|
||||||
set(XML2_VERSION 2.9.10)
|
set(XML2_VERSION 2.10.3)
|
||||||
set(XML2_URI http://xmlsoft.org/sources/libxml2-${XML2_VERSION}.tar.gz)
|
set(XML2_URI https://download.gnome.org/sources/libxml2/2.10/libxml2-${XML2_VERSION}.tar.xz)
|
||||||
set(XML2_HASH 10942a1dc23137a8aa07f0639cbfece5)
|
set(XML2_HASH f9edac7fac232b3657a003fd9a5bbe42)
|
||||||
set(XML2_HASH_TYPE MD5)
|
set(XML2_HASH_TYPE MD5)
|
||||||
set(XML2_FILE libxml2-${XML2_VERSION}.tar.gz)
|
set(XML2_FILE libxml2-${XML2_VERSION}.tar.xz)
|
||||||
|
set(XML2_CPE "cpe:2.3:a:xmlsoft:libxml2:${XML2_VERSION}:*:*:*:*:*:*:*")
|
||||||
set(TINYXML_VERSION 2_6_2)
|
|
||||||
set(TINYXML_VERSION_DOTS 2.6.2)
|
|
||||||
set(TINYXML_URI https://nchc.dl.sourceforge.net/project/tinyxml/tinyxml/${TINYXML_VERSION_DOTS}/tinyxml_${TINYXML_VERSION}.tar.gz)
|
|
||||||
set(TINYXML_HASH c1b864c96804a10526540c664ade67f0)
|
|
||||||
set(TINYXML_HASH_TYPE MD5)
|
|
||||||
set(TINYXML_FILE tinyxml_${TINYXML_VERSION}.tar.gz)
|
|
||||||
|
|
||||||
set(YAMLCPP_VERSION 0.6.3)
|
set(YAMLCPP_VERSION 0.6.3)
|
||||||
set(YAMLCPP_URI https://codeload.github.com/jbeder/yaml-cpp/tar.gz/yaml-cpp-${YAMLCPP_VERSION})
|
set(YAMLCPP_URI https://codeload.github.com/jbeder/yaml-cpp/tar.gz/yaml-cpp-${YAMLCPP_VERSION})
|
||||||
set(YAMLCPP_HASH b45bf1089a382e81f6b661062c10d0c2)
|
set(YAMLCPP_HASH b45bf1089a382e81f6b661062c10d0c2)
|
||||||
set(YAMLCPP_HASH_TYPE MD5)
|
set(YAMLCPP_HASH_TYPE MD5)
|
||||||
set(YAMLCPP_FILE yaml-cpp-${YAMLCPP_VERSION}.tar.gz)
|
set(YAMLCPP_FILE yaml-cpp-${YAMLCPP_VERSION}.tar.gz)
|
||||||
|
set(YAMLCPP "cpe:2.3:a:yaml-cpp_project:yaml-cpp:${YAMLCPP_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(PYSTRING_VERSION v1.1.3)
|
set(PYSTRING_VERSION v1.1.3)
|
||||||
set(PYSTRING_URI https://codeload.github.com/imageworks/pystring/tar.gz/refs/tags/${PYSTRING_VERSION})
|
set(PYSTRING_URI https://codeload.github.com/imageworks/pystring/tar.gz/refs/tags/${PYSTRING_VERSION})
|
||||||
@@ -343,17 +372,20 @@ set(PYSTRING_HASH f2c68786b359f5e4e62bed53bc4fb86d)
|
|||||||
set(PYSTRING_HASH_TYPE MD5)
|
set(PYSTRING_HASH_TYPE MD5)
|
||||||
set(PYSTRING_FILE pystring-${PYSTRING_VERSION}.tar.gz)
|
set(PYSTRING_FILE pystring-${PYSTRING_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(EXPAT_VERSION 2_4_4)
|
set(EXPAT_VERSION 2_5_0)
|
||||||
|
set(EXPAT_VERSION_DOTS 2.5.0)
|
||||||
set(EXPAT_URI https://github.com/libexpat/libexpat/archive/R_${EXPAT_VERSION}.tar.gz)
|
set(EXPAT_URI https://github.com/libexpat/libexpat/archive/R_${EXPAT_VERSION}.tar.gz)
|
||||||
set(EXPAT_HASH 2d3e81dee94b452369dc6394ff0f8f98)
|
set(EXPAT_HASH d375fa3571c0abb945873f5061a8f2e2)
|
||||||
set(EXPAT_HASH_TYPE MD5)
|
set(EXPAT_HASH_TYPE MD5)
|
||||||
set(EXPAT_FILE libexpat-${EXPAT_VERSION}.tar.gz)
|
set(EXPAT_FILE libexpat-${EXPAT_VERSION}.tar.gz)
|
||||||
|
set(EXPAT_CPE "cpe:2.3:a:libexpat_project:libexpat:${EXPAT_VERSION_DOTS}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(PUGIXML_VERSION 1.10)
|
set(PUGIXML_VERSION 1.10)
|
||||||
set(PUGIXML_URI https://github.com/zeux/pugixml/archive/v${PUGIXML_VERSION}.tar.gz)
|
set(PUGIXML_URI https://github.com/zeux/pugixml/archive/v${PUGIXML_VERSION}.tar.gz)
|
||||||
set(PUGIXML_HASH 0c208b0664c7fb822bf1b49ad035e8fd)
|
set(PUGIXML_HASH 0c208b0664c7fb822bf1b49ad035e8fd)
|
||||||
set(PUGIXML_HASH_TYPE MD5)
|
set(PUGIXML_HASH_TYPE MD5)
|
||||||
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
||||||
|
set(PUGIXML_CPE "cpe:2.3:a:pugixml_project:pugixml:${PUGIXML_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(FLEXBISON_VERSION 2.5.24)
|
set(FLEXBISON_VERSION 2.5.24)
|
||||||
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
||||||
@@ -371,17 +403,26 @@ set(FLEX_FILE flex-${FLEX_VERSION}.tar.gz)
|
|||||||
|
|
||||||
# NOTE: bzip.org domain does no longer belong to BZip 2 project, so we download
|
# NOTE: bzip.org domain does no longer belong to BZip 2 project, so we download
|
||||||
# sources from Debian packaging.
|
# sources from Debian packaging.
|
||||||
|
#
|
||||||
|
# NOTE 2: This will *HAVE* to match the version python ships on windows which
|
||||||
|
# is hardcoded in pythons PCbuild/get_externals.bat. For compliance reasons there
|
||||||
|
# can be no exceptions to this.
|
||||||
set(BZIP2_VERSION 1.0.8)
|
set(BZIP2_VERSION 1.0.8)
|
||||||
set(BZIP2_URI http://http.debian.net/debian/pool/main/b/bzip2/bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
set(BZIP2_URI http://http.debian.net/debian/pool/main/b/bzip2/bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
||||||
set(BZIP2_HASH ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269)
|
set(BZIP2_HASH ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269)
|
||||||
set(BZIP2_HASH_TYPE SHA256)
|
set(BZIP2_HASH_TYPE SHA256)
|
||||||
set(BZIP2_FILE bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
set(BZIP2_FILE bzip2_${BZIP2_VERSION}.orig.tar.gz)
|
||||||
|
set(BZIP2_CPE "cpe:2.3:a:bzip:bzip2:${BZIP2_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
|
# NOTE: This will *HAVE* to match the version python ships on windows which
|
||||||
|
# is hardcoded in pythons PCbuild/get_externals.bat. For compliance reasons there
|
||||||
|
# can be no exceptions to this.
|
||||||
set(FFI_VERSION 3.3)
|
set(FFI_VERSION 3.3)
|
||||||
set(FFI_URI https://sourceware.org/pub/libffi/libffi-${FFI_VERSION}.tar.gz)
|
set(FFI_URI https://sourceware.org/pub/libffi/libffi-${FFI_VERSION}.tar.gz)
|
||||||
set(FFI_HASH 72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056)
|
set(FFI_HASH 72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056)
|
||||||
set(FFI_HASH_TYPE SHA256)
|
set(FFI_HASH_TYPE SHA256)
|
||||||
set(FFI_FILE libffi-${FFI_VERSION}.tar.gz)
|
set(FFI_FILE libffi-${FFI_VERSION}.tar.gz)
|
||||||
|
set(FFI_CPE "cpe:2.3:a:libffi_project:libffi:${FFI_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(LZMA_VERSION 5.2.5)
|
set(LZMA_VERSION 5.2.5)
|
||||||
set(LZMA_URI https://tukaani.org/xz/xz-${LZMA_VERSION}.tar.bz2)
|
set(LZMA_URI https://tukaani.org/xz/xz-${LZMA_VERSION}.tar.bz2)
|
||||||
@@ -389,26 +430,26 @@ set(LZMA_HASH 5117f930900b341493827d63aa910ff5e011e0b994197c3b71c08a20228a42df)
|
|||||||
set(LZMA_HASH_TYPE SHA256)
|
set(LZMA_HASH_TYPE SHA256)
|
||||||
set(LZMA_FILE xz-${LZMA_VERSION}.tar.bz2)
|
set(LZMA_FILE xz-${LZMA_VERSION}.tar.bz2)
|
||||||
|
|
||||||
if(BLENDER_PLATFORM_ARM)
|
# NOTE: This will *HAVE* to match the version python ships on windows which
|
||||||
# Need at least 1.1.1i for aarch64 support (https://github.com/openssl/openssl/pull/13218)
|
# is hardcoded in pythons PCbuild/get_externals.bat. For compliance reasons there
|
||||||
set(SSL_VERSION 1.1.1i)
|
# can be no exceptions to this.
|
||||||
set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz)
|
set(SSL_VERSION 1.1.1q)
|
||||||
set(SSL_HASH e8be6a35fe41d10603c3cc635e93289ed00bf34b79671a3a4de64fcee00d5242)
|
set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz)
|
||||||
set(SSL_HASH_TYPE SHA256)
|
set(SSL_HASH d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca)
|
||||||
set(SSL_FILE openssl-${SSL_VERSION}.tar.gz)
|
set(SSL_HASH_TYPE SHA256)
|
||||||
else()
|
set(SSL_FILE openssl-${SSL_VERSION}.tar.gz)
|
||||||
set(SSL_VERSION 1.1.1g)
|
set(SSL_CPE "cpe:2.3:a:openssl:openssl:${SSL_VERSION}:*:*:*:*:*:*:*")
|
||||||
set(SSL_URI https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz)
|
|
||||||
set(SSL_HASH ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46)
|
|
||||||
set(SSL_HASH_TYPE SHA256)
|
|
||||||
set(SSL_FILE openssl-${SSL_VERSION}.tar.gz)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(SQLITE_VERSION 3.31.1)
|
# Note: This will *HAVE* to match the version python ships on windows which
|
||||||
set(SQLITE_URI https://www.sqlite.org/2018/sqlite-src-3240000.zip)
|
# is hardcoded in pythons PCbuild/get_externals.bat for compliance reasons there
|
||||||
set(SQLITE_HASH fb558c49ee21a837713c4f1e7e413309aabdd9c7)
|
# can be no exceptions to this.
|
||||||
|
set(SQLITE_VERSION 3.37.2)
|
||||||
|
set(SQLLITE_LONG_VERSION 3370200)
|
||||||
|
set(SQLITE_URI https://www.sqlite.org/2022/sqlite-autoconf-${SQLLITE_LONG_VERSION}.tar.gz)
|
||||||
|
set(SQLITE_HASH e56faacadfb4154f8fbd0f2a3f827d13706b70a1)
|
||||||
set(SQLITE_HASH_TYPE SHA1)
|
set(SQLITE_HASH_TYPE SHA1)
|
||||||
set(SQLITE_FILE sqlite-src-3240000.zip)
|
set(SQLITE_FILE sqlite-autoconf-${SQLLITE_LONG_VERSION}.tar.gz)
|
||||||
|
set(SQLITE_CPE "cpe:2.3:a:sqlite:sqlite:${SQLITE_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(EMBREE_VERSION 3.13.4)
|
set(EMBREE_VERSION 3.13.4)
|
||||||
set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip)
|
set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip)
|
||||||
@@ -439,12 +480,14 @@ set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa/mesa-${MESA_VERSION}.tar.xz)
|
|||||||
set(MESA_HASH 022c7293074aeeced2278c872db4fa693147c70f8595b076cf3f1ef81520766d)
|
set(MESA_HASH 022c7293074aeeced2278c872db4fa693147c70f8595b076cf3f1ef81520766d)
|
||||||
set(MESA_HASH_TYPE SHA256)
|
set(MESA_HASH_TYPE SHA256)
|
||||||
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
||||||
|
set(MESA_CPE "cpe:2.3:a:mesa3d:mesa:${MESA_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(NASM_VERSION 2.15.02)
|
set(NASM_VERSION 2.15.02)
|
||||||
set(NASM_URI https://github.com/netwide-assembler/nasm/archive/nasm-${NASM_VERSION}.tar.gz)
|
set(NASM_URI https://github.com/netwide-assembler/nasm/archive/nasm-${NASM_VERSION}.tar.gz)
|
||||||
set(NASM_HASH aded8b796c996a486a56e0515c83e414116decc3b184d88043480b32eb0a8589)
|
set(NASM_HASH aded8b796c996a486a56e0515c83e414116decc3b184d88043480b32eb0a8589)
|
||||||
set(NASM_HASH_TYPE SHA256)
|
set(NASM_HASH_TYPE SHA256)
|
||||||
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
||||||
|
set(NASM_PCE "cpe:2.3:a:nasm:nasm:${NASM_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(XR_OPENXR_SDK_VERSION 1.0.22)
|
set(XR_OPENXR_SDK_VERSION 1.0.22)
|
||||||
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
||||||
@@ -469,12 +512,14 @@ set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
|
|||||||
set(GMP_HASH 0b82665c4a92fd2ade7440c13fcaa42b)
|
set(GMP_HASH 0b82665c4a92fd2ade7440c13fcaa42b)
|
||||||
set(GMP_HASH_TYPE MD5)
|
set(GMP_HASH_TYPE MD5)
|
||||||
set(GMP_FILE gmp-${GMP_VERSION}.tar.xz)
|
set(GMP_FILE gmp-${GMP_VERSION}.tar.xz)
|
||||||
|
set(GMP_CPE "cpe:2.3:a:gmplib:gmp:${GMP_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(POTRACE_VERSION 1.16)
|
set(POTRACE_VERSION 1.16)
|
||||||
set(POTRACE_URI http://potrace.sourceforge.net/download/${POTRACE_VERSION}/potrace-${POTRACE_VERSION}.tar.gz)
|
set(POTRACE_URI http://potrace.sourceforge.net/download/${POTRACE_VERSION}/potrace-${POTRACE_VERSION}.tar.gz)
|
||||||
set(POTRACE_HASH 5f0bd87ddd9a620b0c4e65652ef93d69)
|
set(POTRACE_HASH 5f0bd87ddd9a620b0c4e65652ef93d69)
|
||||||
set(POTRACE_HASH_TYPE MD5)
|
set(POTRACE_HASH_TYPE MD5)
|
||||||
set(POTRACE_FILE potrace-${POTRACE_VERSION}.tar.gz)
|
set(POTRACE_FILE potrace-${POTRACE_VERSION}.tar.gz)
|
||||||
|
set(POTRACE_CPE "cpe:2.3:a:icoasoft:potrace:${POTRACE_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(HARU_VERSION 2_3_0)
|
set(HARU_VERSION 2_3_0)
|
||||||
set(HARU_URI https://github.com/libharu/libharu/archive/RELEASE_${HARU_VERSION}.tar.gz)
|
set(HARU_URI https://github.com/libharu/libharu/archive/RELEASE_${HARU_VERSION}.tar.gz)
|
||||||
@@ -487,15 +532,17 @@ set(ZSTD_URI https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}
|
|||||||
set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94)
|
set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94)
|
||||||
set(ZSTD_HASH_TYPE SHA256)
|
set(ZSTD_HASH_TYPE SHA256)
|
||||||
set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz)
|
set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz)
|
||||||
|
set(ZSTD_CPE "cpe:2.3:a:facebook:zstandard:${ZSTD_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
||||||
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
||||||
|
|
||||||
set(BROTLI_VERSION v1.0.9)
|
set(BROTLI_VERSION 1.0.9)
|
||||||
set(BROTLI_URI https://github.com/google/brotli/archive/refs/tags/${BROTLI_VERSION}.tar.gz)
|
set(BROTLI_URI https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz)
|
||||||
set(BROTLI_HASH f9e8d81d0405ba66d181529af42a3354f838c939095ff99930da6aa9cdf6fe46)
|
set(BROTLI_HASH f9e8d81d0405ba66d181529af42a3354f838c939095ff99930da6aa9cdf6fe46)
|
||||||
set(BROTLI_HASH_TYPE SHA256)
|
set(BROTLI_HASH_TYPE SHA256)
|
||||||
set(BROTLI_FILE brotli-${BROTLI_VERSION}.tar.gz)
|
set(BROTLI_FILE brotli-v${BROTLI_VERSION}.tar.gz)
|
||||||
|
set(BROTLI_CPE "cpe:2.3:a:google:brotli:${BROTLI_VERSION}:*:*:*:*:*:*:*")
|
||||||
|
|
||||||
set(LEVEL_ZERO_VERSION v1.7.15)
|
set(LEVEL_ZERO_VERSION v1.7.15)
|
||||||
set(LEVEL_ZERO_URI https://github.com/oneapi-src/level-zero/archive/refs/tags/${LEVEL_ZERO_VERSION}.tar.gz)
|
set(LEVEL_ZERO_URI https://github.com/oneapi-src/level-zero/archive/refs/tags/${LEVEL_ZERO_VERSION}.tar.gz)
|
||||||
|
@@ -1,20 +1,48 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
ExternalProject_Add(external_xml2
|
if(WIN32)
|
||||||
URL file://${PACKAGE_DIR}/${XML2_FILE}
|
set(XML2_EXTRA_ARGS
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
-DLIBXML2_WITH_ZLIB=OFF
|
||||||
URL_HASH ${XML2_HASH_TYPE}=${XML2_HASH}
|
-DLIBXML2_WITH_LZMA=OFF
|
||||||
PREFIX ${BUILD_DIR}/xml2
|
-DLIBXML2_WITH_PYTHON=OFF
|
||||||
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && ${CONFIGURE_COMMAND}
|
-DLIBXML2_WITH_ICONV=OFF
|
||||||
--prefix=${LIBDIR}/xml2
|
-DLIBXML2_WITH_TESTS=OFF
|
||||||
--disable-shared
|
-DLIBXML2_WITH_PROGRAMS=OFF
|
||||||
--enable-static
|
-DBUILD_SHARED_LIBS=OFF
|
||||||
--with-pic
|
)
|
||||||
--with-python=no
|
ExternalProject_Add(external_xml2
|
||||||
--with-lzma=no
|
URL file://${PACKAGE_DIR}/${XML2_FILE}
|
||||||
--with-zlib=no
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
--with-iconv=no
|
URL_HASH ${XML2_HASH_TYPE}=${XML2_HASH}
|
||||||
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && make -j${MAKE_THREADS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/xml2 ${DEFAULT_CMAKE_FLAGS} ${XML2_EXTRA_ARGS}
|
||||||
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && make install
|
PREFIX ${BUILD_DIR}/xml2
|
||||||
INSTALL_DIR ${LIBDIR}/xml2
|
INSTALL_DIR ${LIBDIR}/xml2
|
||||||
)
|
)
|
||||||
|
else()
|
||||||
|
ExternalProject_Add(external_xml2
|
||||||
|
URL file://${PACKAGE_DIR}/${XML2_FILE}
|
||||||
|
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||||
|
URL_HASH ${XML2_HASH_TYPE}=${XML2_HASH}
|
||||||
|
PREFIX ${BUILD_DIR}/xml2
|
||||||
|
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && ${CONFIGURE_COMMAND}
|
||||||
|
--prefix=${LIBDIR}/xml2
|
||||||
|
--disable-shared
|
||||||
|
--enable-static
|
||||||
|
--with-pic
|
||||||
|
--with-python=no
|
||||||
|
--with-lzma=no
|
||||||
|
--with-zlib=no
|
||||||
|
--with-iconv=no
|
||||||
|
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && make -j${MAKE_THREADS}
|
||||||
|
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xml2/src/external_xml2/ && make install
|
||||||
|
INSTALL_DIR ${LIBDIR}/xml2
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WIN32 AND BUILD_MODE STREQUAL Release)
|
||||||
|
ExternalProject_Add_Step(external_xml2 after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/xml2/include ${HARVEST_TARGET}/xml2/include
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/xml2/lib/libxml2s.lib ${HARVEST_TARGET}/xml2/lib/libxml2s.lib
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
@@ -1,96 +1,114 @@
|
|||||||
strict graph {
|
strict graph {
|
||||||
graph[autosize = false, size = "25.7,8.3!", resolution = 300, overlap = false, splines = false, outputorder=edgesfirst ];
|
graph[autosize = false, size = "25.7,8.3!", resolution = 300];
|
||||||
node [style=filled fillcolor=white];
|
|
||||||
external_alembic -- external_boost;
|
|
||||||
external_alembic -- external_zlib;
|
|
||||||
external_alembic -- external_openexr;
|
external_alembic -- external_openexr;
|
||||||
|
external_alembic -- external_imath;
|
||||||
external_blosc -- external_zlib;
|
external_blosc -- external_zlib;
|
||||||
external_blosc -- external_pthreads;
|
external_blosc -- external_pthreads;
|
||||||
external_boost -- Make_Python_Environment;
|
external_boost -- external_python;
|
||||||
external_clang -- ll;
|
external_boost -- external_numpy;
|
||||||
|
external_dpcpp -- external_python;
|
||||||
|
external_dpcpp -- external_python_site_packages;
|
||||||
|
external_dpcpp -- external_vcintrinsics;
|
||||||
|
external_dpcpp -- external_openclheaders;
|
||||||
|
external_dpcpp -- external_icdloader;
|
||||||
|
external_dpcpp -- external_mp11;
|
||||||
|
external_dpcpp -- external_level_zero;
|
||||||
|
external_dpcpp -- external_spirvheaders;
|
||||||
|
external_embree -- external_tbb;
|
||||||
external_ffmpeg -- external_zlib;
|
external_ffmpeg -- external_zlib;
|
||||||
external_ffmpeg -- external_faad;
|
|
||||||
external_ffmpeg -- external_openjpeg;
|
external_ffmpeg -- external_openjpeg;
|
||||||
external_ffmpeg -- external_xvidcore;
|
external_ffmpeg -- external_xvidcore;
|
||||||
external_ffmpeg -- external_x264;
|
external_ffmpeg -- external_x264;
|
||||||
|
external_ffmpeg -- external_opus;
|
||||||
external_ffmpeg -- external_vpx;
|
external_ffmpeg -- external_vpx;
|
||||||
external_ffmpeg -- external_theora;
|
external_ffmpeg -- external_theora;
|
||||||
external_ffmpeg -- external_vorbis;
|
external_ffmpeg -- external_vorbis;
|
||||||
external_ffmpeg -- external_ogg;
|
external_ffmpeg -- external_ogg;
|
||||||
external_ffmpeg -- external_lame;
|
external_ffmpeg -- external_lame;
|
||||||
|
external_ffmpeg -- external_aom;
|
||||||
external_ffmpeg -- external_zlib_mingw;
|
external_ffmpeg -- external_zlib_mingw;
|
||||||
external_numpy -- Make_Python_Environment;
|
external_ffmpeg -- external_nasm;
|
||||||
|
external_freetype -- external_brotli;
|
||||||
|
external_freetype -- external_zlib;
|
||||||
|
external_gmpxx -- external_gmp;
|
||||||
|
external_igc_llvm -- external_igc_opencl_clang;
|
||||||
|
external_igc_spirv_translator -- external_igc_opencl_clang;
|
||||||
|
external_igc -- external_igc_vcintrinsics;
|
||||||
|
external_igc -- external_igc_llvm;
|
||||||
|
external_igc -- external_igc_opencl_clang;
|
||||||
|
external_igc -- external_igc_vcintrinsics;
|
||||||
|
external_igc -- external_igc_spirv_headers;
|
||||||
|
external_igc -- external_igc_spirv_tools;
|
||||||
|
external_igc -- external_igc_spirv_translator;
|
||||||
|
external_igc -- external_flex;
|
||||||
|
external_ispc -- ll;
|
||||||
|
external_ispc -- external_python;
|
||||||
|
external_ispc -- external_flexbison;
|
||||||
|
external_ispc -- external_flex;
|
||||||
|
ll -- external_xml2;
|
||||||
|
ll -- external_python;
|
||||||
|
external_mesa -- ll;
|
||||||
|
external_numpy -- external_python;
|
||||||
|
external_numpy -- external_python_site_packages;
|
||||||
|
external_ocloc -- external_igc;
|
||||||
|
external_ocloc -- external_gmmlib;
|
||||||
external_opencollada -- external_xml2;
|
external_opencollada -- external_xml2;
|
||||||
external_opencolorio -- external_boost;
|
|
||||||
external_opencolorio -- external_tinyxml;
|
|
||||||
external_opencolorio -- external_yamlcpp;
|
external_opencolorio -- external_yamlcpp;
|
||||||
|
external_opencolorio -- external_expat;
|
||||||
|
external_opencolorio -- external_imath;
|
||||||
|
external_opencolorio -- external_pystring;
|
||||||
external_openexr -- external_zlib;
|
external_openexr -- external_zlib;
|
||||||
|
external_openimagedenoise -- external_tbb;
|
||||||
|
external_openimagedenoise -- external_ispc;
|
||||||
|
external_openimagedenoise -- external_python;
|
||||||
external_openimageio -- external_png;
|
external_openimageio -- external_png;
|
||||||
external_openimageio -- external_zlib;
|
external_openimageio -- external_zlib;
|
||||||
external_openimageio -- external_openexr;
|
external_openimageio -- external_openexr;
|
||||||
external_openimageio -- external_openexr;
|
external_openimageio -- external_imath;
|
||||||
external_openimageio -- external_jpeg;
|
external_openimageio -- external_jpeg;
|
||||||
external_openimageio -- external_boost;
|
external_openimageio -- external_boost;
|
||||||
external_openimageio -- external_tiff;
|
external_openimageio -- external_tiff;
|
||||||
external_openimageio -- external_opencolorio;
|
external_openimageio -- external_pugixml;
|
||||||
|
external_openimageio -- external_fmt;
|
||||||
|
external_openimageio -- external_robinmap;
|
||||||
external_openimageio -- external_openjpeg;
|
external_openimageio -- external_openjpeg;
|
||||||
external_openimageio -- external_webp;
|
external_openimageio -- external_webp;
|
||||||
external_openimageio -- external_opencolorio_extra;
|
external_openmp -- ll;
|
||||||
external_openmp -- external_clang;
|
external_openpgl -- external_tbb;
|
||||||
external_opensubdiv -- external_tbb;
|
external_opensubdiv -- external_tbb;
|
||||||
openvdb -- external_tbb;
|
openvdb -- external_tbb;
|
||||||
openvdb -- external_boost;
|
openvdb -- external_boost;
|
||||||
openvdb -- external_openexr;
|
|
||||||
openvdb -- external_openexr;
|
|
||||||
openvdb -- external_zlib;
|
openvdb -- external_zlib;
|
||||||
openvdb -- external_blosc;
|
openvdb -- external_blosc;
|
||||||
external_osl -- external_boost;
|
external_osl -- external_boost;
|
||||||
external_osl -- ll;
|
external_osl -- ll;
|
||||||
external_osl -- external_clang;
|
|
||||||
external_osl -- external_openexr;
|
|
||||||
external_osl -- external_openexr;
|
external_osl -- external_openexr;
|
||||||
external_osl -- external_zlib;
|
external_osl -- external_zlib;
|
||||||
external_osl -- external_flexbison;
|
|
||||||
external_osl -- external_openimageio;
|
external_osl -- external_openimageio;
|
||||||
external_osl -- external_pugixml;
|
external_osl -- external_pugixml;
|
||||||
|
external_osl -- external_flexbison;
|
||||||
|
external_osl -- external_flex;
|
||||||
external_png -- external_zlib;
|
external_png -- external_zlib;
|
||||||
external_python_site_packages -- Make_Python_Environment;
|
external_python -- external_bzip2;
|
||||||
|
external_python -- external_ffi;
|
||||||
|
external_python -- external_lzma;
|
||||||
|
external_python -- external_ssl;
|
||||||
|
external_python -- external_sqlite;
|
||||||
|
external_python -- external_zlib;
|
||||||
|
external_python_site_packages -- external_python;
|
||||||
external_sndfile -- external_ogg;
|
external_sndfile -- external_ogg;
|
||||||
external_sndfile -- external_vorbis;
|
external_sndfile -- external_vorbis;
|
||||||
external_sndfile -- external_flac;
|
external_sndfile -- external_flac;
|
||||||
external_theora -- external_vorbis;
|
external_theora -- external_vorbis;
|
||||||
external_theora -- external_ogg;
|
external_theora -- external_ogg;
|
||||||
external_tiff -- external_zlib;
|
external_tiff -- external_zlib;
|
||||||
|
external_usd -- external_tbb;
|
||||||
|
external_usd -- external_boost;
|
||||||
|
external_usd -- external_opensubdiv;
|
||||||
external_vorbis -- external_ogg;
|
external_vorbis -- external_ogg;
|
||||||
blender-- external_ffmpeg;
|
external_wayland -- external_expat;
|
||||||
blender-- external_alembic;
|
external_wayland -- external_xml2;
|
||||||
blender-- external_openjpeg;
|
external_wayland -- external_ffi;
|
||||||
blender-- external_opencolorio;
|
external_wayland_protocols -- external_wayland;
|
||||||
blender-- external_openexr;
|
external_x264 -- external_nasm;
|
||||||
blender-- external_opensubdiv;
|
|
||||||
blender-- openvdb;
|
|
||||||
blender-- external_osl;
|
|
||||||
blender-- external_boost;
|
|
||||||
blender-- external_jpeg;
|
|
||||||
blender-- external_png;
|
|
||||||
blender-- external_python;
|
|
||||||
blender-- external_sndfile;
|
|
||||||
blender-- external_iconv;
|
|
||||||
blender-- external_fftw3;
|
|
||||||
external_python-- external_python_site_packages;
|
|
||||||
external_python_site_packages-- requests;
|
|
||||||
external_python_site_packages-- idna;
|
|
||||||
external_python_site_packages-- chardet;
|
|
||||||
external_python_site_packages-- urllib3;
|
|
||||||
external_python_site_packages-- certifi;
|
|
||||||
external_python-- external_numpy;
|
|
||||||
external_usd-- external_boost;
|
|
||||||
external_usd-- external_tbb;
|
|
||||||
blender-- external_opencollada;
|
|
||||||
blender-- external_sdl;
|
|
||||||
blender-- external_freetype;
|
|
||||||
blender-- external_pthreads;
|
|
||||||
blender-- external_zlib;
|
|
||||||
blender-- external_openal;
|
|
||||||
blender-- external_usd;
|
|
||||||
}
|
}
|
||||||
|
18
build_files/build_environment/patches/aom.diff
Normal file
18
build_files/build_environment/patches/aom.diff
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
diff -Naur libaom-3.4.0/build/cmake/aom_configure.cmake external_aom/build/cmake/aom_configure.cmake
|
||||||
|
--- libaom-3.4.0/build/cmake/aom_configure.cmake 2022-06-17 11:46:18 -0600
|
||||||
|
+++ external_aom/build/cmake/aom_configure.cmake 2022-10-16 15:35:54 -0600
|
||||||
|
@@ -15,8 +15,12 @@
|
||||||
|
|
||||||
|
include(FindGit)
|
||||||
|
include(FindPerl)
|
||||||
|
-include(FindThreads)
|
||||||
|
-
|
||||||
|
+# Blender: This will drag in a dep on libwinpthreads which we prefer
|
||||||
|
+# not to have, aom will fallback on a native win32 thread wrapper
|
||||||
|
+# if pthreads are not found.
|
||||||
|
+if(NOT WIN32)
|
||||||
|
+ include(FindThreads)
|
||||||
|
+endif()
|
||||||
|
include("${AOM_ROOT}/build/cmake/aom_config_defaults.cmake")
|
||||||
|
include("${AOM_ROOT}/build/cmake/aom_experiment_deps.cmake")
|
||||||
|
include("${AOM_ROOT}/build/cmake/aom_optimization.cmake")
|
@@ -68,34 +68,18 @@
|
|||||||
+
|
+
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
--- a/libavcodec/rl.c
|
diff --git a/libavcodec/x86/simple_idct.asm b/libavcodec/x86/simple_idct.asm
|
||||||
+++ b/libavcodec/rl.c
|
index dcf0da6df121..982b2f0bbba1 100644
|
||||||
@@ -71,17 +71,19 @@
|
--- a/libavcodec/x86/simple_idct.asm
|
||||||
av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
+++ b/libavcodec/x86/simple_idct.asm
|
||||||
{
|
@@ -25,9 +25,9 @@
|
||||||
int i, q;
|
|
||||||
- VLC_TYPE table[1500][2] = {{0}};
|
|
||||||
+ VLC_TYPE (*table)[2] = av_calloc(sizeof(VLC_TYPE), 1500 * 2);
|
|
||||||
VLC vlc = { .table = table, .table_allocated = static_size };
|
|
||||||
- av_assert0(static_size <= FF_ARRAY_ELEMS(table));
|
|
||||||
+ av_assert0(static_size < 1500);
|
|
||||||
init_vlc(&vlc, 9, rl->n + 1, &rl->table_vlc[0][1], 4, 2, &rl->table_vlc[0][0], 4, 2, INIT_VLC_USE_NEW_STATIC);
|
|
||||||
|
|
||||||
for (q = 0; q < 32; q++) {
|
%include "libavutil/x86/x86util.asm"
|
||||||
int qmul = q * 2;
|
|
||||||
int qadd = (q - 1) | 1;
|
|
||||||
|
|
||||||
- if (!rl->rl_vlc[q])
|
-%if ARCH_X86_32
|
||||||
+ if (!rl->rl_vlc[q]){
|
SECTION_RODATA
|
||||||
+ av_free(table);
|
|
||||||
return;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (q == 0) {
|
+%if ARCH_X86_32
|
||||||
qmul = 1;
|
cextern pb_80
|
||||||
@@ -113,4 +115,5 @@
|
|
||||||
rl->rl_vlc[q][i].run = run;
|
wm1010: dw 0, 0xffff, 0, 0xffff
|
||||||
}
|
|
||||||
}
|
|
||||||
+ av_free(table);
|
|
||||||
}
|
|
||||||
|
15
build_files/build_environment/patches/gmp.diff
Normal file
15
build_files/build_environment/patches/gmp.diff
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
--- a/mpz/inp_raw.c Tue Dec 22 23:49:51 2020 +0100
|
||||||
|
+++ b/mpz/inp_raw.c Thu Oct 21 19:06:49 2021 +0200
|
||||||
|
@@ -88,8 +88,11 @@
|
||||||
|
|
||||||
|
abs_csize = ABS (csize);
|
||||||
|
|
||||||
|
+ if (UNLIKELY (abs_csize > ~(mp_bitcnt_t) 0 / 8))
|
||||||
|
+ return 0; /* Bit size overflows */
|
||||||
|
+
|
||||||
|
/* round up to a multiple of limbs */
|
||||||
|
- abs_xsize = BITS_TO_LIMBS (abs_csize*8);
|
||||||
|
+ abs_xsize = BITS_TO_LIMBS ((mp_bitcnt_t) abs_csize * 8);
|
||||||
|
|
||||||
|
if (abs_xsize != 0)
|
||||||
|
{
|
@@ -130,3 +130,28 @@ index 715d903..24423ce 100644
|
|||||||
{
|
{
|
||||||
string id = node.attribute("id").value();
|
string id = node.attribute("id").value();
|
||||||
size_t line = node.line();
|
size_t line = node.line();
|
||||||
|
diff -Naur a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -274,7 +274,7 @@
|
||||||
|
add_subdirectory(${EXTERNAL_LIBRARIES}/UTF)
|
||||||
|
add_subdirectory(common/libBuffer)
|
||||||
|
add_subdirectory(${EXTERNAL_LIBRARIES}/MathMLSolver)
|
||||||
|
-add_subdirectory(${EXTERNAL_LIBRARIES}/zlib)
|
||||||
|
+#add_subdirectory(${EXTERNAL_LIBRARIES}/zlib)
|
||||||
|
|
||||||
|
# building OpenCOLLADA libs
|
||||||
|
add_subdirectory(COLLADABaseUtils)
|
||||||
|
@@ -284,10 +284,10 @@
|
||||||
|
add_subdirectory(COLLADAStreamWriter)
|
||||||
|
|
||||||
|
# building COLLADAValidator app
|
||||||
|
-add_subdirectory(COLLADAValidator)
|
||||||
|
+#add_subdirectory(COLLADAValidator)
|
||||||
|
|
||||||
|
# DAE validator app
|
||||||
|
-add_subdirectory(DAEValidator)
|
||||||
|
+#add_subdirectory(DAEValidator)
|
||||||
|
|
||||||
|
# Library export
|
||||||
|
install(EXPORT LibraryExport DESTINATION ${OPENCOLLADA_INST_CMAKECONFIG} FILE OpenCOLLADATargets.cmake)
|
||||||
|
@@ -14,3 +14,15 @@ index 7b894a45..92618215 100644
|
|||||||
)
|
)
|
||||||
if(CMAKE_TOOLCHAIN_FILE)
|
if(CMAKE_TOOLCHAIN_FILE)
|
||||||
set(pystring_CMAKE_ARGS
|
set(pystring_CMAKE_ARGS
|
||||||
|
--- a/src/OpenColorIO/FileRules.cpp
|
||||||
|
+++ b/src/OpenColorIO/FileRules.cpp
|
||||||
|
@@ -7,6 +7,9 @@
|
||||||
|
#include <regex>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
+/* NOTE: this has been applied up-stream, this edit can be removed after upgrading OpenColorIO. */
|
||||||
|
+#include <cstring>
|
||||||
|
+
|
||||||
|
#include <OpenColorIO/OpenColorIO.h>
|
||||||
|
|
||||||
|
#include "CustomKeys.h"
|
||||||
|
@@ -1,8 +1,34 @@
|
|||||||
diff -Naur OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h external_osl/src/include/OSL/llvm_util.h
|
diff -Naur OpenShadingLanguage-1.12.6.2/CMakeLists.txt external_osl/CMakeLists.txt
|
||||||
--- OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h 2018-05-01 16:39:02 -0600
|
--- OpenShadingLanguage-1.12.6.2/CMakeLists.txt 2022-09-30 17:43:53 -0600
|
||||||
+++ external_osl/src/include/OSL/llvm_util.h 2018-08-25 14:05:00 -0600
|
+++ external_osl/CMakeLists.txt 2022-10-15 14:49:26 -0600
|
||||||
@@ -33,6 +33,8 @@
|
@@ -101,6 +101,11 @@
|
||||||
|
CACHE STRING "Directory where OptiX PTX files will be installed")
|
||||||
|
set (CMAKE_DEBUG_POSTFIX "" CACHE STRING "Library naming postfix for Debug builds (e.g., '_debug')")
|
||||||
|
|
||||||
|
+set (USE_OIIO_STATIC ON CACHE BOOL "If OIIO is built static")
|
||||||
|
+if (USE_OIIO_STATIC)
|
||||||
|
+ add_definitions ("-DOIIO_STATIC_BUILD=1")
|
||||||
|
+ add_definitions ("-DOIIO_STATIC_DEFINE=1")
|
||||||
|
+endif ()
|
||||||
|
|
||||||
|
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
||||||
|
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
||||||
|
diff -Naur OpenShadingLanguage-1.12.6.2/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake
|
||||||
|
--- OpenShadingLanguage-1.12.6.2/src/cmake/externalpackages.cmake 2022-09-30 17:43:53 -0600
|
||||||
|
+++ external_osl/src/cmake/externalpackages.cmake 2022-10-15 14:49:26 -0600
|
||||||
|
@@ -77,6 +77,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
||||||
|
+checked_find_package (PNG REQUIRED) # Needed since OIIO needs it
|
||||||
|
|
||||||
|
# IlmBase & OpenEXR
|
||||||
|
checked_find_package (OpenEXR REQUIRED
|
||||||
|
diff -Naur OpenShadingLanguage-1.12.6.2/src/include/OSL/llvm_util.h external_osl/src/include/OSL/llvm_util.h
|
||||||
|
--- OpenShadingLanguage-1.12.6.2/src/include/OSL/llvm_util.h 2022-09-30 17:43:53 -0600
|
||||||
|
+++ external_osl/src/include/OSL/llvm_util.h 2022-10-15 15:37:24 -0600
|
||||||
|
@@ -9,6 +9,8 @@
|
||||||
|
#include <unordered_set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
+#define OSL_HAS_BLENDER_CLEANUP_FIX
|
+#define OSL_HAS_BLENDER_CLEANUP_FIX
|
||||||
@@ -10,58 +36,17 @@ diff -Naur OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h externa
|
|||||||
#ifdef LLVM_NAMESPACE
|
#ifdef LLVM_NAMESPACE
|
||||||
namespace llvm = LLVM_NAMESPACE;
|
namespace llvm = LLVM_NAMESPACE;
|
||||||
#endif
|
#endif
|
||||||
@@ -487,6 +489,7 @@
|
@@ -101,6 +103,6 @@
|
||||||
std::string func_name (llvm::Function *f);
|
ScopedJitMemoryUser();
|
||||||
|
~ScopedJitMemoryUser();
|
||||||
static size_t total_jit_memory_held ();
|
};
|
||||||
+ static void Cleanup ();
|
|
||||||
|
|
||||||
private:
|
|
||||||
class MemoryManager;
|
|
||||||
diff -Naur OpenShadingLanguage-Release-1.9.9/src/liboslexec/llvm_util.cpp external_osl/src/liboslexec/llvm_util.cpp
|
|
||||||
--- OpenShadingLanguage-Release-1.9.9/src/liboslexec/llvm_util.cpp 2018-05-01 16:39:02 -0600
|
|
||||||
+++ external_osl/src/liboslexec/llvm_util.cpp 2018-08-25 14:04:27 -0600
|
|
||||||
@@ -140,7 +140,10 @@
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
-
|
-
|
||||||
+void LLVM_Util::Cleanup ()
|
+ static void Cleanup ();
|
||||||
+{
|
/// Set debug level
|
||||||
+ if(jitmm_hold) jitmm_hold->clear();
|
void debug(int d) { m_debug = d; }
|
||||||
+}
|
diff -Naur OpenShadingLanguage-1.12.6.2/src/liboslcomp/oslcomp.cpp external_osl/src/liboslcomp/oslcomp.cpp
|
||||||
|
--- OpenShadingLanguage-1.12.6.2/src/liboslcomp/oslcomp.cpp 2022-09-30 17:43:53 -0600
|
||||||
size_t
|
+++ external_osl/src/liboslcomp/oslcomp.cpp 2022-10-15 14:49:26 -0600
|
||||||
LLVM_Util::total_jit_memory_held ()
|
|
||||||
diff -Naur org/CMakeLists.txt external_osl/CMakeLists.txt
|
|
||||||
--- org/CMakeLists.txt 2020-12-01 12:37:15 -0700
|
|
||||||
+++ external_osl/CMakeLists.txt 2021-01-20 13:26:50 -0700
|
|
||||||
@@ -84,6 +84,11 @@
|
|
||||||
CACHE STRING "Directory where OptiX PTX files will be installed")
|
|
||||||
set (CMAKE_DEBUG_POSTFIX "" CACHE STRING "Library naming postfix for Debug builds (e.g., '_debug')")
|
|
||||||
|
|
||||||
+set (USE_OIIO_STATIC ON CACHE BOOL "If OIIO is built static")
|
|
||||||
+if (USE_OIIO_STATIC)
|
|
||||||
+ add_definitions ("-DOIIO_STATIC_BUILD=1")
|
|
||||||
+ add_definitions ("-DOIIO_STATIC_DEFINE=1")
|
|
||||||
+endif ()
|
|
||||||
|
|
||||||
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
|
||||||
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
|
||||||
diff -Naur external_osl_orig/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake
|
|
||||||
--- external_osl_orig/src/cmake/externalpackages.cmake 2021-06-01 13:44:18 -0600
|
|
||||||
+++ external_osl/src/cmake/externalpackages.cmake 2021-06-28 07:44:32 -0600
|
|
||||||
@@ -80,6 +80,7 @@
|
|
||||||
|
|
||||||
|
|
||||||
checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
|
||||||
+checked_find_package (PNG REQUIRED) # Needed since OIIO needs it
|
|
||||||
|
|
||||||
# IlmBase & OpenEXR
|
|
||||||
checked_find_package (OpenEXR REQUIRED
|
|
||||||
diff -Naur external_osl_orig/src/liboslcomp/oslcomp.cpp external_osl/src/liboslcomp/oslcomp.cpp
|
|
||||||
--- external_osl_orig/src/liboslcomp/oslcomp.cpp 2021-06-01 13:44:18 -0600
|
|
||||||
+++ external_osl/src/liboslcomp/oslcomp.cpp 2021-06-28 09:11:06 -0600
|
|
||||||
@@ -21,6 +21,13 @@
|
@@ -21,6 +21,13 @@
|
||||||
#if !defined(__STDC_CONSTANT_MACROS)
|
#if !defined(__STDC_CONSTANT_MACROS)
|
||||||
# define __STDC_CONSTANT_MACROS 1
|
# define __STDC_CONSTANT_MACROS 1
|
||||||
@@ -76,3 +61,20 @@ diff -Naur external_osl_orig/src/liboslcomp/oslcomp.cpp external_osl/src/liboslc
|
|||||||
#include <clang/Basic/TargetInfo.h>
|
#include <clang/Basic/TargetInfo.h>
|
||||||
#include <clang/Frontend/CompilerInstance.h>
|
#include <clang/Frontend/CompilerInstance.h>
|
||||||
#include <clang/Frontend/TextDiagnosticPrinter.h>
|
#include <clang/Frontend/TextDiagnosticPrinter.h>
|
||||||
|
diff -Naur OpenShadingLanguage-1.12.6.2/src/liboslexec/llvm_util.cpp external_osl/src/liboslexec/llvm_util.cpp
|
||||||
|
--- OpenShadingLanguage-1.12.6.2/src/liboslexec/llvm_util.cpp 2022-09-30 17:43:53 -0600
|
||||||
|
+++ external_osl/src/liboslexec/llvm_util.cpp 2022-10-15 15:53:11 -0600
|
||||||
|
@@ -182,6 +180,13 @@
|
||||||
|
++jit_mem_hold_users;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void
|
||||||
|
+LLVM_Util::Cleanup()
|
||||||
|
+{
|
||||||
|
+ if (jitmm_hold)
|
||||||
|
+ jitmm_hold->clear();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
LLVM_Util::ScopedJitMemoryUser::~ScopedJitMemoryUser()
|
||||||
|
{
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
diff -Naur orig/PCbuild/get_externals.bat Python-3.10.2/PCbuild/get_externals.bat
|
|
||||||
--- orig/PCbuild/get_externals.bat 2022-01-13 11:52:14 -0700
|
|
||||||
+++ Python-3.10.2/PCbuild/get_externals.bat 2022-08-17 11:24:42 -0600
|
|
||||||
@@ -51,7 +51,7 @@
|
|
||||||
echo.Fetching external libraries...
|
|
||||||
|
|
||||||
set libraries=
|
|
||||||
-set libraries=%libraries% bzip2-1.0.6
|
|
||||||
+set libraries=%libraries% bzip2-1.0.8
|
|
||||||
if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.3.0
|
|
||||||
if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1m
|
|
||||||
set libraries=%libraries% sqlite-3.35.5.0
|
|
||||||
diff -Naur orig/PCbuild/python.props external_python/PCbuild/python.props
|
|
||||||
--- orig/PCbuild/python.props 2022-01-13 11:52:14 -0700
|
|
||||||
+++ external_python/PCbuild/python.props 2022-08-17 11:38:38 -0600
|
|
||||||
@@ -58,7 +58,7 @@
|
|
||||||
<ExternalsDir Condition="$(ExternalsDir) == ''">$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals`))</ExternalsDir>
|
|
||||||
<ExternalsDir Condition="!HasTrailingSlash($(ExternalsDir))">$(ExternalsDir)\</ExternalsDir>
|
|
||||||
<sqlite3Dir>$(ExternalsDir)sqlite-3.35.5.0\</sqlite3Dir>
|
|
||||||
- <bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir>
|
|
||||||
+ <bz2Dir>$(ExternalsDir)bzip2-1.0.8\</bz2Dir>
|
|
||||||
<lzmaDir>$(ExternalsDir)xz-5.2.2\</lzmaDir>
|
|
||||||
<libffiDir>$(ExternalsDir)libffi-3.3.0\</libffiDir>
|
|
||||||
<libffiOutDir>$(ExternalsDir)libffi-3.3.0\$(ArchName)\</libffiOutDir>
|
|
@@ -1,42 +0,0 @@
|
|||||||
--- src/Makefile.in 2017-09-26 01:28:47.000000000 +0300
|
|
||||||
+++ src/Makefile.in 2017-09-26 01:19:06.000000000 +0300
|
|
||||||
@@ -513,7 +513,7 @@
|
|
||||||
libcommon_la_SOURCES = common.c file_io.c command.c pcm.c ulaw.c alaw.c \
|
|
||||||
float32.c double64.c ima_adpcm.c ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c \
|
|
||||||
interleave.c strings.c dither.c cart.c broadcast.c audio_detect.c \
|
|
||||||
- ima_oki_adpcm.c ima_oki_adpcm.h alac.c chunk.c ogg.c chanmap.c \
|
|
||||||
+ ima_oki_adpcm.c ima_oki_adpcm.h alac.c chunk.c ogg.c chanmap.c \
|
|
||||||
windows.c id3.c $(WIN_VERSION_FILE)
|
|
||||||
|
|
||||||
|
|
||||||
@@ -719,10 +719,10 @@
|
|
||||||
$(AM_V_CCLD)$(LINK) $(GSM610_libgsm_la_OBJECTS) $(GSM610_libgsm_la_LIBADD) $(LIBS)
|
|
||||||
|
|
||||||
libcommon.la: $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) $(EXTRA_libcommon_la_DEPENDENCIES)
|
|
||||||
- $(AM_V_CCLD)$(LINK) $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS)
|
|
||||||
+ $(AM_V_CCLD)$(LINK) $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS) $(EXTERNAL_XIPH_LIBS)
|
|
||||||
|
|
||||||
libsndfile.la: $(libsndfile_la_OBJECTS) $(libsndfile_la_DEPENDENCIES) $(EXTRA_libsndfile_la_DEPENDENCIES)
|
|
||||||
- $(AM_V_CCLD)$(libsndfile_la_LINK) -rpath $(libdir) $(libsndfile_la_OBJECTS) $(libsndfile_la_LIBADD) $(LIBS)
|
|
||||||
+ $(AM_V_CCLD)$(libsndfile_la_LINK) -rpath $(libdir) $(libsndfile_la_OBJECTS) $(libsndfile_la_LIBADD) $(LIBS) $(EXTERNAL_XIPH_LIBS)
|
|
||||||
|
|
||||||
clean-checkPROGRAMS:
|
|
||||||
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
|
|
||||||
@@ -924,7 +924,7 @@
|
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -c -o libsndfile_la-dwd.lo `test -f 'dwd.c' || echo '$(srcdir)/'`dwd.c
|
|
||||||
|
|
||||||
libsndfile_la-flac.lo: flac.c
|
|
||||||
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -MT libsndfile_la-flac.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-flac.Tpo -c -o libsndfile_la-flac.lo `test -f 'flac.c' || echo '$(srcdir)/'`flac.c
|
|
||||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) $(EXTERNAL_XIPH_CFLAGS) -MT libsndfile_la-flac.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-flac.Tpo -c -o libsndfile_la-flac.lo `test -f 'flac.c' || echo '$(srcdir)/'`flac.c
|
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsndfile_la-flac.Tpo $(DEPDIR)/libsndfile_la-flac.Plo
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='flac.c' object='libsndfile_la-flac.lo' libtool=yes @AMDEPBACKSLASH@
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
||||||
@@ -1092,7 +1092,7 @@
|
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -c -o libsndfile_la-rf64.lo `test -f 'rf64.c' || echo '$(srcdir)/'`rf64.c
|
|
||||||
|
|
||||||
libsndfile_la-ogg_vorbis.lo: ogg_vorbis.c
|
|
||||||
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) -MT libsndfile_la-ogg_vorbis.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-ogg_vorbis.Tpo -c -o libsndfile_la-ogg_vorbis.lo `test -f 'ogg_vorbis.c' || echo '$(srcdir)/'`ogg_vorbis.c
|
|
||||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsndfile_la_CPPFLAGS) $(CPPFLAGS) $(libsndfile_la_CFLAGS) $(CFLAGS) $(EXTERNAL_XIPH_CFLAGS) -MT libsndfile_la-ogg_vorbis.lo -MD -MP -MF $(DEPDIR)/libsndfile_la-ogg_vorbis.Tpo -c -o libsndfile_la-ogg_vorbis.lo `test -f 'ogg_vorbis.c' || echo '$(srcdir)/'`ogg_vorbis.c
|
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libsndfile_la-ogg_vorbis.Tpo $(DEPDIR)/libsndfile_la-ogg_vorbis.Plo
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ogg_vorbis.c' object='libsndfile_la-ogg_vorbis.lo' libtool=yes @AMDEPBACKSLASH@
|
|
||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
|
@@ -1,14 +0,0 @@
|
|||||||
Only in external_sqlite_orig: config.log
|
|
||||||
diff -ru external_sqlite_orig/config.sub external_sqlite/config.sub
|
|
||||||
--- external_sqlite_orig/config.sub 2020-07-10 14:06:42.000000000 +0200
|
|
||||||
+++ external_sqlite/config.sub 2020-07-10 14:10:24.000000000 +0200
|
|
||||||
@@ -314,6 +314,7 @@
|
|
||||||
# Recognize the basic CPU types with company name.
|
|
||||||
580-* \
|
|
||||||
| a29k-* \
|
|
||||||
+ | aarch64-* \
|
|
||||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
|
||||||
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
|
||||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
|
||||||
Only in external_sqlite: mksourceid
|
|
||||||
Only in external_sqlite: sqlite3session.h
|
|
10
build_files/build_environment/patches/ssl.diff
Normal file
10
build_files/build_environment/patches/ssl.diff
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
--- ./test/v3ext.c 2022-07-05 11:08:33.000000000 +0200
|
||||||
|
+++ ./test/v3ext.c 2022-10-18 13:58:05.000000000 +0200
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
+#include <string.h>
|
||||||
|
#include <openssl/x509.h>
|
||||||
|
#include <openssl/x509v3.h>
|
||||||
|
#include <openssl/pem.h>
|
@@ -71,21 +71,6 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenSubdiv DEFAULT_MSG
|
|||||||
IF(OPENSUBDIV_FOUND)
|
IF(OPENSUBDIV_FOUND)
|
||||||
SET(OPENSUBDIV_LIBRARIES ${_opensubdiv_LIBRARIES})
|
SET(OPENSUBDIV_LIBRARIES ${_opensubdiv_LIBRARIES})
|
||||||
SET(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
|
SET(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
|
||||||
|
|
||||||
# Find available compute controllers.
|
|
||||||
|
|
||||||
FIND_PACKAGE(OpenMP)
|
|
||||||
IF(OPENMP_FOUND)
|
|
||||||
SET(OPENSUBDIV_HAS_OPENMP TRUE)
|
|
||||||
ELSE()
|
|
||||||
SET(OPENSUBDIV_HAS_OPENMP FALSE)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
OPENSUBDIV_CHECK_CONTROLLER("tbbEvaluator.h" OPENSUBDIV_HAS_TBB)
|
|
||||||
OPENSUBDIV_CHECK_CONTROLLER("clEvaluator.h" OPENSUBDIV_HAS_OPENCL)
|
|
||||||
OPENSUBDIV_CHECK_CONTROLLER("cudaEvaluator.h" OPENSUBDIV_HAS_CUDA)
|
|
||||||
OPENSUBDIV_CHECK_CONTROLLER("glXFBEvaluator.h" OPENSUBDIV_HAS_GLSL_TRANSFORM_FEEDBACK)
|
|
||||||
OPENSUBDIV_CHECK_CONTROLLER("glComputeEvaluator.h" OPENSUBDIV_HAS_GLSL_COMPUTE)
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
|
@@ -48,7 +48,7 @@ if(MSVC)
|
|||||||
else()
|
else()
|
||||||
set(PACKAGE_ARCH windows32)
|
set(PACKAGE_ARCH windows32)
|
||||||
endif()
|
endif()
|
||||||
else(MSVC)
|
else()
|
||||||
set(PACKAGE_ARCH ${CMAKE_SYSTEM_PROCESSOR})
|
set(PACKAGE_ARCH ${CMAKE_SYSTEM_PROCESSOR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@@ -113,7 +113,7 @@ endif()
|
|||||||
|
|
||||||
if(WITH_PYTHON)
|
if(WITH_PYTHON)
|
||||||
# Use precompiled libraries by default.
|
# Use precompiled libraries by default.
|
||||||
set(PYTHON_VERSION 3.10)
|
SET(PYTHON_VERSION 3.10 CACHE STRING "Python Version (major and minor only)")
|
||||||
if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
|
if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
|
||||||
# Normally cached but not since we include them with blender.
|
# Normally cached but not since we include them with blender.
|
||||||
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
||||||
|
@@ -16,9 +16,16 @@ if(NOT DEFINED LIBDIR)
|
|||||||
# Choose the best suitable libraries.
|
# Choose the best suitable libraries.
|
||||||
if(EXISTS ${LIBDIR_NATIVE_ABI})
|
if(EXISTS ${LIBDIR_NATIVE_ABI})
|
||||||
set(LIBDIR ${LIBDIR_NATIVE_ABI})
|
set(LIBDIR ${LIBDIR_NATIVE_ABI})
|
||||||
|
set(WITH_LIBC_MALLOC_HOOK_WORKAROUND True)
|
||||||
elseif(EXISTS ${LIBDIR_CENTOS7_ABI})
|
elseif(EXISTS ${LIBDIR_CENTOS7_ABI})
|
||||||
set(LIBDIR ${LIBDIR_CENTOS7_ABI})
|
set(LIBDIR ${LIBDIR_CENTOS7_ABI})
|
||||||
set(WITH_CXX11_ABI OFF)
|
set(WITH_CXX11_ABI OFF)
|
||||||
|
if(WITH_MEM_JEMALLOC)
|
||||||
|
# jemalloc provides malloc hooks.
|
||||||
|
set(WITH_LIBC_MALLOC_HOOK_WORKAROUND False)
|
||||||
|
else()
|
||||||
|
set(WITH_LIBC_MALLOC_HOOK_WORKAROUND True)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC AND
|
if(CMAKE_COMPILER_IS_GNUCC AND
|
||||||
CMAKE_C_COMPILER_VERSION VERSION_LESS 9.3)
|
CMAKE_C_COMPILER_VERSION VERSION_LESS 9.3)
|
||||||
|
@@ -378,7 +378,6 @@ if(WITH_OPENCOLLADA)
|
|||||||
optimized ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/xml.lib
|
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/buffer.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/buffer.lib
|
||||||
optimized ${OPENCOLLADA}/lib/opencollada/ftoa.lib
|
optimized ${OPENCOLLADA}/lib/opencollada/ftoa.lib
|
||||||
|
|
||||||
@@ -388,10 +387,14 @@ if(WITH_OPENCOLLADA)
|
|||||||
debug ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/MathMLSolver_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/MathMLSolver_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/xml_d.lib
|
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/buffer_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/buffer_d.lib
|
||||||
debug ${OPENCOLLADA}/lib/opencollada/ftoa_d.lib
|
debug ${OPENCOLLADA}/lib/opencollada/ftoa_d.lib
|
||||||
)
|
)
|
||||||
|
if(EXISTS ${LIBDIR}/xml2/lib/libxml2s.lib) # 3.4 libraries
|
||||||
|
list(APPEND OPENCOLLADA_LIBRARIES ${LIBDIR}/xml2/lib/libxml2s.lib)
|
||||||
|
else()
|
||||||
|
list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/xml.lib)
|
||||||
|
endif()
|
||||||
|
|
||||||
list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
|
list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
|
||||||
|
|
||||||
@@ -497,7 +500,7 @@ if(WITH_JACK)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_PYTHON)
|
if(WITH_PYTHON)
|
||||||
set(PYTHON_VERSION 3.10) # CACHE STRING)
|
SET(PYTHON_VERSION 3.10 CACHE STRING "Python Version (major and minor only)")
|
||||||
|
|
||||||
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
|
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
|
||||||
set(PYTHON_LIBRARY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}.lib)
|
set(PYTHON_LIBRARY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}.lib)
|
||||||
@@ -692,11 +695,11 @@ endif()
|
|||||||
|
|
||||||
if(WITH_IMAGE_OPENJPEG)
|
if(WITH_IMAGE_OPENJPEG)
|
||||||
set(OPENJPEG ${LIBDIR}/openjpeg)
|
set(OPENJPEG ${LIBDIR}/openjpeg)
|
||||||
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.4)
|
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.5)
|
||||||
if(NOT EXISTS "${OPENJPEG_INCLUDE_DIRS}")
|
if(NOT EXISTS "${OPENJPEG_INCLUDE_DIRS}")
|
||||||
# when not found, could be an older lib folder with openjpeg 2.3
|
# when not found, could be an older lib folder with openjpeg 2.4
|
||||||
# to ease the transition period, fall back if 2.4 is not found.
|
# to ease the transition period, fall back if 2.5 is not found.
|
||||||
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.3)
|
set(OPENJPEG_INCLUDE_DIRS ${OPENJPEG}/include/openjpeg-2.4)
|
||||||
endif()
|
endif()
|
||||||
set(OPENJPEG_LIBRARIES ${OPENJPEG}/lib/openjp2.lib)
|
set(OPENJPEG_LIBRARIES ${OPENJPEG}/lib/openjp2.lib)
|
||||||
endif()
|
endif()
|
||||||
@@ -713,12 +716,6 @@ if(WITH_OPENSUBDIV)
|
|||||||
debug ${OPENSUBDIV_LIBPATH}/osdCPU_d.lib
|
debug ${OPENSUBDIV_LIBPATH}/osdCPU_d.lib
|
||||||
debug ${OPENSUBDIV_LIBPATH}/osdGPU_d.lib
|
debug ${OPENSUBDIV_LIBPATH}/osdGPU_d.lib
|
||||||
)
|
)
|
||||||
set(OPENSUBDIV_HAS_OPENMP TRUE)
|
|
||||||
set(OPENSUBDIV_HAS_TBB FALSE)
|
|
||||||
set(OPENSUBDIV_HAS_OPENCL TRUE)
|
|
||||||
set(OPENSUBDIV_HAS_CUDA FALSE)
|
|
||||||
set(OPENSUBDIV_HAS_GLSL_TRANSFORM_FEEDBACK TRUE)
|
|
||||||
set(OPENSUBDIV_HAS_GLSL_COMPUTE TRUE)
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@@ -55,7 +55,7 @@ buildbot:
|
|||||||
cuda11:
|
cuda11:
|
||||||
version: '11.4.1'
|
version: '11.4.1'
|
||||||
hip:
|
hip:
|
||||||
version: '5.2.21440'
|
version: '5.3.22480'
|
||||||
optix:
|
optix:
|
||||||
version: '7.3.0'
|
version: '7.3.0'
|
||||||
cmake:
|
cmake:
|
||||||
|
@@ -36,7 +36,16 @@ def parse_arguments():
|
|||||||
parser.add_argument("--svn-command", default="svn")
|
parser.add_argument("--svn-command", default="svn")
|
||||||
parser.add_argument("--svn-branch", default=None)
|
parser.add_argument("--svn-branch", default=None)
|
||||||
parser.add_argument("--git-command", default="git")
|
parser.add_argument("--git-command", default="git")
|
||||||
|
|
||||||
|
# NOTE: Both old and new style command line flags, so that the Buildbot can use the new style.
|
||||||
|
# It is not possible to know from the Buildbot which style to use when building patches.
|
||||||
|
#
|
||||||
|
# Acts as an alias: `use_centos_libraries or use_linux_libraries`.
|
||||||
parser.add_argument("--use-centos-libraries", action="store_true")
|
parser.add_argument("--use-centos-libraries", action="store_true")
|
||||||
|
parser.add_argument("--use-linux-libraries", action="store_true")
|
||||||
|
|
||||||
|
parser.add_argument("--architecture", type=str, choices=("x86_64", "amd64", "arm64",))
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
@@ -45,6 +54,16 @@ def get_blender_git_root():
|
|||||||
|
|
||||||
# Setup for precompiled libraries and tests from svn.
|
# Setup for precompiled libraries and tests from svn.
|
||||||
|
|
||||||
|
def get_effective_architecture(args):
|
||||||
|
if args.architecture:
|
||||||
|
return args.architecture
|
||||||
|
|
||||||
|
# Check platform.version to detect arm64 with x86_64 python binary.
|
||||||
|
if "ARM64" in platform.version():
|
||||||
|
return "arm64"
|
||||||
|
|
||||||
|
return platform.machine().lower()
|
||||||
|
|
||||||
|
|
||||||
def svn_update(args, release_version):
|
def svn_update(args, release_version):
|
||||||
svn_non_interactive = [args.svn_command, '--non-interactive']
|
svn_non_interactive = [args.svn_command, '--non-interactive']
|
||||||
@@ -53,11 +72,12 @@ def svn_update(args, release_version):
|
|||||||
svn_url = make_utils.svn_libraries_base_url(release_version, args.svn_branch)
|
svn_url = make_utils.svn_libraries_base_url(release_version, args.svn_branch)
|
||||||
|
|
||||||
# Checkout precompiled libraries
|
# Checkout precompiled libraries
|
||||||
|
architecture = get_effective_architecture(args)
|
||||||
if sys.platform == 'darwin':
|
if sys.platform == 'darwin':
|
||||||
if platform.machine() == 'x86_64':
|
if architecture == 'arm64':
|
||||||
lib_platform = "darwin"
|
|
||||||
elif platform.machine() == 'arm64':
|
|
||||||
lib_platform = "darwin_arm64"
|
lib_platform = "darwin_arm64"
|
||||||
|
elif architecture == 'x86_64':
|
||||||
|
lib_platform = "darwin"
|
||||||
else:
|
else:
|
||||||
lib_platform = None
|
lib_platform = None
|
||||||
elif sys.platform == 'win32':
|
elif sys.platform == 'win32':
|
||||||
@@ -65,7 +85,7 @@ def svn_update(args, release_version):
|
|||||||
# this script is bundled as part of the precompiled libraries. However it
|
# this script is bundled as part of the precompiled libraries. However it
|
||||||
# is used by the buildbot.
|
# is used by the buildbot.
|
||||||
lib_platform = "win64_vc15"
|
lib_platform = "win64_vc15"
|
||||||
elif args.use_centos_libraries:
|
elif args.use_centos_libraries or args.use_linux_libraries:
|
||||||
lib_platform = "linux_centos7_x86_64"
|
lib_platform = "linux_centos7_x86_64"
|
||||||
else:
|
else:
|
||||||
# No precompiled libraries for Linux.
|
# No precompiled libraries for Linux.
|
||||||
@@ -229,14 +249,15 @@ if __name__ == "__main__":
|
|||||||
blender_skip_msg = ""
|
blender_skip_msg = ""
|
||||||
submodules_skip_msg = ""
|
submodules_skip_msg = ""
|
||||||
|
|
||||||
# Test if we are building a specific release version.
|
blender_version = make_utils. parse_blender_version()
|
||||||
branch = make_utils.git_branch(args.git_command)
|
if blender_version.cycle != 'alpha':
|
||||||
if branch == 'HEAD':
|
major = blender_version.version // 100
|
||||||
sys.stderr.write('Blender git repository is in detached HEAD state, must be in a branch\n')
|
minor = blender_version.version % 100
|
||||||
sys.exit(1)
|
branch = f"blender-v{major}.{minor}-release"
|
||||||
|
release_version = f"{major}.{minor}"
|
||||||
tag = make_utils.git_tag(args.git_command)
|
else:
|
||||||
release_version = make_utils.git_branch_release_version(branch, tag)
|
branch = 'main'
|
||||||
|
release_version = None
|
||||||
|
|
||||||
if not args.no_libraries:
|
if not args.no_libraries:
|
||||||
svn_update(args, release_version)
|
svn_update(args, release_version)
|
||||||
|
@@ -9,6 +9,7 @@ import re
|
|||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
def call(cmd, exit_on_error=True, silent=False):
|
def call(cmd, exit_on_error=True, silent=False):
|
||||||
@@ -101,3 +102,52 @@ def command_missing(command):
|
|||||||
return shutil.which(command) is None
|
return shutil.which(command) is None
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class BlenderVersion:
|
||||||
|
def __init__(self, version, patch, cycle):
|
||||||
|
# 293 for 2.93.1
|
||||||
|
self.version = version
|
||||||
|
# 1 for 2.93.1
|
||||||
|
self.patch = patch
|
||||||
|
# 'alpha', 'beta', 'release', maybe others.
|
||||||
|
self.cycle = cycle
|
||||||
|
|
||||||
|
def is_release(self) -> bool:
|
||||||
|
return self.cycle == "release"
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
"""Convert to version string.
|
||||||
|
|
||||||
|
>>> str(BlenderVersion(293, 1, "alpha"))
|
||||||
|
'2.93.1-alpha'
|
||||||
|
>>> str(BlenderVersion(327, 0, "release"))
|
||||||
|
'3.27.0'
|
||||||
|
"""
|
||||||
|
version_major = self.version // 100
|
||||||
|
version_minor = self.version % 100
|
||||||
|
as_string = f"{version_major}.{version_minor}.{self.patch}"
|
||||||
|
if self.is_release():
|
||||||
|
return as_string
|
||||||
|
return f"{as_string}-{self.cycle}"
|
||||||
|
|
||||||
|
|
||||||
|
def parse_blender_version() -> BlenderVersion:
|
||||||
|
blender_srcdir = Path(__file__).absolute().parent.parent.parent
|
||||||
|
version_path = blender_srcdir / "source/blender/blenkernel/BKE_blender_version.h"
|
||||||
|
|
||||||
|
version_info = {}
|
||||||
|
line_re = re.compile(r"^#define (BLENDER_VERSION[A-Z_]*)\s+([0-9a-z]+)$")
|
||||||
|
|
||||||
|
with version_path.open(encoding="utf-8") as version_file:
|
||||||
|
for line in version_file:
|
||||||
|
match = line_re.match(line.strip())
|
||||||
|
if not match:
|
||||||
|
continue
|
||||||
|
version_info[match.group(1)] = match.group(2)
|
||||||
|
|
||||||
|
return BlenderVersion(
|
||||||
|
int(version_info["BLENDER_VERSION"]),
|
||||||
|
int(version_info["BLENDER_VERSION_PATCH"]),
|
||||||
|
version_info["BLENDER_VERSION_CYCLE"],
|
||||||
|
)
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
AUD_NAMESPACE_BEGIN
|
AUD_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
2
extern/hipew/src/hipew.c
vendored
2
extern/hipew/src/hipew.c
vendored
@@ -253,7 +253,7 @@ static int hipewHipInit(void) {
|
|||||||
/* Default installation path. */
|
/* Default installation path. */
|
||||||
const char *hip_paths[] = {"", NULL};
|
const char *hip_paths[] = {"", NULL};
|
||||||
#else
|
#else
|
||||||
const char *hip_paths[] = {"/opt/rocm/hip/lib/libamdhip64.so", NULL};
|
const char *hip_paths[] = {"libamdhip64.so", "/opt/rocm/hip/lib/libamdhip64.so", NULL};
|
||||||
#endif
|
#endif
|
||||||
static int initialized = 0;
|
static int initialized = 0;
|
||||||
static int result = 0;
|
static int result = 0;
|
||||||
|
@@ -13,7 +13,7 @@ def _configure_argument_parser():
|
|||||||
action='store_true')
|
action='store_true')
|
||||||
parser.add_argument("--cycles-device",
|
parser.add_argument("--cycles-device",
|
||||||
help="Set the device to use for Cycles, overriding user preferences and the scene setting."
|
help="Set the device to use for Cycles, overriding user preferences and the scene setting."
|
||||||
"Valid options are 'CPU', 'CUDA', 'OPTIX', 'HIP' or 'METAL'."
|
"Valid options are 'CPU', 'CUDA', 'OPTIX', 'HIP', 'ONEAPI', or 'METAL'."
|
||||||
"Additionally, you can append '+CPU' to any GPU type for hybrid rendering.",
|
"Additionally, you can append '+CPU' to any GPU type for hybrid rendering.",
|
||||||
default=None)
|
default=None)
|
||||||
return parser
|
return parser
|
||||||
|
@@ -91,7 +91,7 @@ class AddPresetPerformance(AddPresetBase, Operator):
|
|||||||
preset_menu = "CYCLES_PT_performance_presets"
|
preset_menu = "CYCLES_PT_performance_presets"
|
||||||
|
|
||||||
preset_defines = [
|
preset_defines = [
|
||||||
"render = bpy.context.scene.render"
|
"render = bpy.context.scene.render",
|
||||||
"cycles = bpy.context.scene.cycles"
|
"cycles = bpy.context.scene.cycles"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@@ -1558,9 +1558,9 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
import sys
|
import sys
|
||||||
col.label(text="Requires Intel GPU with Xe-HPG architecture", icon='BLANK1')
|
col.label(text="Requires Intel GPU with Xe-HPG architecture", icon='BLANK1')
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
col.label(text="and Windows driver version 101.3268 or newer", icon='BLANK1')
|
col.label(text="and Windows driver version 101.3430 or newer", icon='BLANK1')
|
||||||
elif sys.platform.startswith("linux"):
|
elif sys.platform.startswith("linux"):
|
||||||
col.label(text="and Linux driver version xx.xx.23570 or newer", icon='BLANK1')
|
col.label(text="and Linux driver version xx.xx.23904 or newer", icon='BLANK1')
|
||||||
elif device_type == 'METAL':
|
elif device_type == 'METAL':
|
||||||
col.label(text="Requires Apple Silicon with macOS 12.2 or newer", icon='BLANK1')
|
col.label(text="Requires Apple Silicon with macOS 12.2 or newer", icon='BLANK1')
|
||||||
col.label(text="or AMD with macOS 12.3 or newer", icon='BLANK1')
|
col.label(text="or AMD with macOS 12.3 or newer", icon='BLANK1')
|
||||||
|
@@ -72,6 +72,11 @@ bool BlenderImageLoader::load_metadata(const ImageDeviceFeatures &, ImageMetaDat
|
|||||||
metadata.colorspace = u_colorspace_raw;
|
metadata.colorspace = u_colorspace_raw;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
/* In some cases (e.g. T94135), the colorspace setting in Blender gets updated as part of the
|
||||||
|
* metadata queries in this function, so update the colorspace setting here. */
|
||||||
|
PointerRNA colorspace_ptr = b_image.colorspace_settings().ptr;
|
||||||
|
metadata.colorspace = get_enum_identifier(colorspace_ptr, "name");
|
||||||
|
|
||||||
if (metadata.channels == 1) {
|
if (metadata.channels == 1) {
|
||||||
metadata.type = IMAGE_DATA_TYPE_BYTE;
|
metadata.type = IMAGE_DATA_TYPE_BYTE;
|
||||||
}
|
}
|
||||||
|
@@ -224,27 +224,24 @@ static void export_pointcloud_motion(PointCloud *pointcloud,
|
|||||||
const int num_points = pointcloud->num_points();
|
const int num_points = pointcloud->num_points();
|
||||||
float3 *mP = attr_mP->data_float3() + motion_step * num_points;
|
float3 *mP = attr_mP->data_float3() + motion_step * num_points;
|
||||||
bool have_motion = false;
|
bool have_motion = false;
|
||||||
int num_motion_points = 0;
|
|
||||||
const array<float3> &pointcloud_points = pointcloud->get_points();
|
const array<float3> &pointcloud_points = pointcloud->get_points();
|
||||||
|
|
||||||
|
const int b_points_num = b_pointcloud.points.length();
|
||||||
BL::FloatVectorAttribute b_attr_position = find_position_attribute(b_pointcloud);
|
BL::FloatVectorAttribute b_attr_position = find_position_attribute(b_pointcloud);
|
||||||
std::optional<BL::FloatAttribute> b_attr_radius = find_radius_attribute(b_pointcloud);
|
std::optional<BL::FloatAttribute> b_attr_radius = find_radius_attribute(b_pointcloud);
|
||||||
|
|
||||||
for (int i = 0; i < num_points; i++) {
|
for (int i = 0; i < std::min(num_points, b_points_num); i++) {
|
||||||
if (num_motion_points < num_points) {
|
const float3 co = get_float3(b_attr_position.data[i].vector());
|
||||||
const float3 co = get_float3(b_attr_position.data[i].vector());
|
const float radius = b_attr_radius ? b_attr_radius->data[i].value() : 0.0f;
|
||||||
const float radius = b_attr_radius ? b_attr_radius->data[i].value() : 0.0f;
|
float3 P = co;
|
||||||
float3 P = co;
|
P.w = radius;
|
||||||
P.w = radius;
|
mP[i] = P;
|
||||||
mP[num_motion_points] = P;
|
have_motion = have_motion || (P != pointcloud_points[i]);
|
||||||
have_motion = have_motion || (P != pointcloud_points[num_motion_points]);
|
|
||||||
num_motion_points++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In case of new attribute, we verify if there really was any motion. */
|
/* In case of new attribute, we verify if there really was any motion. */
|
||||||
if (new_attribute) {
|
if (new_attribute) {
|
||||||
if (num_motion_points != num_points || !have_motion) {
|
if (b_points_num != num_points || !have_motion) {
|
||||||
pointcloud->attributes.remove(ATTR_STD_MOTION_VERTEX_POSITION);
|
pointcloud->attributes.remove(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
}
|
}
|
||||||
else if (motion_step > 0) {
|
else if (motion_step > 0) {
|
||||||
|
@@ -657,6 +657,7 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_,
|
|||||||
|
|
||||||
session->set_display_driver(nullptr);
|
session->set_display_driver(nullptr);
|
||||||
session->set_output_driver(make_unique<BlenderOutputDriver>(b_engine));
|
session->set_output_driver(make_unique<BlenderOutputDriver>(b_engine));
|
||||||
|
session->full_buffer_written_cb = [&](string_view filename) { full_buffer_written(filename); };
|
||||||
|
|
||||||
/* Sync scene. */
|
/* Sync scene. */
|
||||||
BL::Object b_camera_override(b_engine.camera_override());
|
BL::Object b_camera_override(b_engine.camera_override());
|
||||||
@@ -698,6 +699,10 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_,
|
|||||||
BufferParams buffer_params;
|
BufferParams buffer_params;
|
||||||
buffer_params.width = bake_width;
|
buffer_params.width = bake_width;
|
||||||
buffer_params.height = bake_height;
|
buffer_params.height = bake_height;
|
||||||
|
buffer_params.window_width = bake_width;
|
||||||
|
buffer_params.window_height = bake_height;
|
||||||
|
/* Unique layer name for multi-image baking. */
|
||||||
|
buffer_params.layer = string_printf("bake_%d\n", bake_id++);
|
||||||
|
|
||||||
/* Update session. */
|
/* Update session. */
|
||||||
session->reset(session_params, buffer_params);
|
session->reset(session_params, buffer_params);
|
||||||
@@ -711,8 +716,6 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_,
|
|||||||
session->start();
|
session->start();
|
||||||
session->wait();
|
session->wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
session->set_output_driver(nullptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
|
void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
|
||||||
|
@@ -146,6 +146,8 @@ class BlenderSession {
|
|||||||
BlenderDisplayDriver *display_driver_ = nullptr;
|
BlenderDisplayDriver *display_driver_ = nullptr;
|
||||||
|
|
||||||
vector<string> full_buffer_files_;
|
vector<string> full_buffer_files_;
|
||||||
|
|
||||||
|
int bake_id = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
@@ -205,7 +205,9 @@ static void set_default_value(ShaderInput *input,
|
|||||||
}
|
}
|
||||||
case SocketType::INT: {
|
case SocketType::INT: {
|
||||||
if (b_sock.type() == BL::NodeSocket::type_BOOLEAN) {
|
if (b_sock.type() == BL::NodeSocket::type_BOOLEAN) {
|
||||||
node->set(socket, get_boolean(b_sock.ptr, "default_value"));
|
/* Make sure to call the int overload of set() since this is an integer socket as far as
|
||||||
|
* Cycles is concerned. */
|
||||||
|
node->set(socket, get_boolean(b_sock.ptr, "default_value") ? 1 : 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
node->set(socket, get_int(b_sock.ptr, "default_value"));
|
node->set(socket, get_int(b_sock.ptr, "default_value"));
|
||||||
|
@@ -679,14 +679,18 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Cryptomatte stores two ID/weight pairs per RGBA layer.
|
/* Cryptomatte stores two ID/weight pairs per RGBA layer.
|
||||||
* User facing parameter is the number of pairs. */
|
* User facing parameter is the number of pairs.
|
||||||
|
*
|
||||||
|
* NOTE: Name channels lowercase rgba so that compression rules check in OpenEXR DWA code uses
|
||||||
|
* loseless compression. Reportedly this naming is the only one which works good from the
|
||||||
|
* interoperability point of view. Using xyzw naming is not portable. */
|
||||||
int crypto_depth = divide_up(min(16, b_view_layer.pass_cryptomatte_depth()), 2);
|
int crypto_depth = divide_up(min(16, b_view_layer.pass_cryptomatte_depth()), 2);
|
||||||
scene->film->set_cryptomatte_depth(crypto_depth);
|
scene->film->set_cryptomatte_depth(crypto_depth);
|
||||||
CryptomatteType cryptomatte_passes = CRYPT_NONE;
|
CryptomatteType cryptomatte_passes = CRYPT_NONE;
|
||||||
if (b_view_layer.use_pass_cryptomatte_object()) {
|
if (b_view_layer.use_pass_cryptomatte_object()) {
|
||||||
for (int i = 0; i < crypto_depth; i++) {
|
for (int i = 0; i < crypto_depth; i++) {
|
||||||
string passname = cryptomatte_prefix + string_printf("Object%02d", i);
|
string passname = cryptomatte_prefix + string_printf("Object%02d", i);
|
||||||
b_engine.add_pass(passname.c_str(), 4, "RGBA", b_view_layer.name().c_str());
|
b_engine.add_pass(passname.c_str(), 4, "rgba", b_view_layer.name().c_str());
|
||||||
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
|
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
|
||||||
}
|
}
|
||||||
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_OBJECT);
|
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_OBJECT);
|
||||||
@@ -694,7 +698,7 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
|
|||||||
if (b_view_layer.use_pass_cryptomatte_material()) {
|
if (b_view_layer.use_pass_cryptomatte_material()) {
|
||||||
for (int i = 0; i < crypto_depth; i++) {
|
for (int i = 0; i < crypto_depth; i++) {
|
||||||
string passname = cryptomatte_prefix + string_printf("Material%02d", i);
|
string passname = cryptomatte_prefix + string_printf("Material%02d", i);
|
||||||
b_engine.add_pass(passname.c_str(), 4, "RGBA", b_view_layer.name().c_str());
|
b_engine.add_pass(passname.c_str(), 4, "rgba", b_view_layer.name().c_str());
|
||||||
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
|
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
|
||||||
}
|
}
|
||||||
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_MATERIAL);
|
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_MATERIAL);
|
||||||
@@ -702,7 +706,7 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
|
|||||||
if (b_view_layer.use_pass_cryptomatte_asset()) {
|
if (b_view_layer.use_pass_cryptomatte_asset()) {
|
||||||
for (int i = 0; i < crypto_depth; i++) {
|
for (int i = 0; i < crypto_depth; i++) {
|
||||||
string passname = cryptomatte_prefix + string_printf("Asset%02d", i);
|
string passname = cryptomatte_prefix + string_printf("Asset%02d", i);
|
||||||
b_engine.add_pass(passname.c_str(), 4, "RGBA", b_view_layer.name().c_str());
|
b_engine.add_pass(passname.c_str(), 4, "rgba", b_view_layer.name().c_str());
|
||||||
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
|
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
|
||||||
}
|
}
|
||||||
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_ASSET);
|
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_ASSET);
|
||||||
|
@@ -496,7 +496,7 @@ bool BVHMetal::build_BLAS_pointcloud(Progress &progress,
|
|||||||
num_motion_steps = pointcloud->get_motion_steps();
|
num_motion_steps = pointcloud->get_motion_steps();
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t num_aabbs = num_motion_steps;
|
const size_t num_aabbs = num_motion_steps * num_points;
|
||||||
|
|
||||||
MTLResourceOptions storage_mode;
|
MTLResourceOptions storage_mode;
|
||||||
if (device.hasUnifiedMemory) {
|
if (device.hasUnifiedMemory) {
|
||||||
@@ -757,6 +757,10 @@ bool BVHMetal::build_TLAS(Progress &progress,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (num_instances == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------*/
|
/*------------------------------------------------*/
|
||||||
BVH_status("Building TLAS | %7d instances", (int)num_instances);
|
BVH_status("Building TLAS | %7d instances", (int)num_instances);
|
||||||
/*------------------------------------------------*/
|
/*------------------------------------------------*/
|
||||||
|
@@ -301,6 +301,9 @@ void MetalDevice::make_source(MetalPipelineType pso_type, const uint kernel_feat
|
|||||||
MD5Hash md5;
|
MD5Hash md5;
|
||||||
md5.append(baked_constants);
|
md5.append(baked_constants);
|
||||||
md5.append(source);
|
md5.append(source);
|
||||||
|
if (use_metalrt) {
|
||||||
|
md5.append(std::to_string(kernel_features & METALRT_FEATURE_MASK));
|
||||||
|
}
|
||||||
source_md5[pso_type] = md5.get_hex();
|
source_md5[pso_type] = md5.get_hex();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,6 +338,14 @@ bool MetalDevice::compile_and_load(MetalPipelineType pso_type)
|
|||||||
|
|
||||||
MTLCompileOptions *options = [[MTLCompileOptions alloc] init];
|
MTLCompileOptions *options = [[MTLCompileOptions alloc] init];
|
||||||
|
|
||||||
|
#if defined(MAC_OS_VERSION_13_0)
|
||||||
|
if (@available(macos 13.0, *)) {
|
||||||
|
if (device_vendor == METAL_GPU_INTEL) {
|
||||||
|
[options setOptimizationLevel:MTLLibraryOptimizationLevelSize];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
options.fastMathEnabled = YES;
|
options.fastMathEnabled = YES;
|
||||||
if (@available(macOS 12.0, *)) {
|
if (@available(macOS 12.0, *)) {
|
||||||
options.languageVersion = MTLLanguageVersion2_4;
|
options.languageVersion = MTLLanguageVersion2_4;
|
||||||
|
@@ -54,6 +54,10 @@ enum MetalPipelineType {
|
|||||||
PSO_NUM
|
PSO_NUM
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# define METALRT_FEATURE_MASK \
|
||||||
|
(KERNEL_FEATURE_HAIR | KERNEL_FEATURE_HAIR_THICK | KERNEL_FEATURE_POINTCLOUD | \
|
||||||
|
KERNEL_FEATURE_OBJECT_MOTION)
|
||||||
|
|
||||||
const char *kernel_type_as_string(MetalPipelineType pso_type);
|
const char *kernel_type_as_string(MetalPipelineType pso_type);
|
||||||
|
|
||||||
struct MetalKernelPipeline {
|
struct MetalKernelPipeline {
|
||||||
@@ -67,9 +71,7 @@ struct MetalKernelPipeline {
|
|||||||
|
|
||||||
KernelData kernel_data_;
|
KernelData kernel_data_;
|
||||||
bool use_metalrt;
|
bool use_metalrt;
|
||||||
bool metalrt_hair;
|
uint32_t metalrt_features = 0;
|
||||||
bool metalrt_hair_thick;
|
|
||||||
bool metalrt_pointcloud;
|
|
||||||
|
|
||||||
int threads_per_threadgroup;
|
int threads_per_threadgroup;
|
||||||
|
|
||||||
|
@@ -225,12 +225,9 @@ void ShaderCache::load_kernel(DeviceKernel device_kernel,
|
|||||||
|
|
||||||
/* metalrt options */
|
/* metalrt options */
|
||||||
request.pipeline->use_metalrt = device->use_metalrt;
|
request.pipeline->use_metalrt = device->use_metalrt;
|
||||||
request.pipeline->metalrt_hair = device->use_metalrt &&
|
request.pipeline->metalrt_features = device->use_metalrt ?
|
||||||
(device->kernel_features & KERNEL_FEATURE_HAIR);
|
(device->kernel_features & METALRT_FEATURE_MASK) :
|
||||||
request.pipeline->metalrt_hair_thick = device->use_metalrt &&
|
0;
|
||||||
(device->kernel_features & KERNEL_FEATURE_HAIR_THICK);
|
|
||||||
request.pipeline->metalrt_pointcloud = device->use_metalrt &&
|
|
||||||
(device->kernel_features & KERNEL_FEATURE_POINTCLOUD);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
thread_scoped_lock lock(cache_mutex);
|
thread_scoped_lock lock(cache_mutex);
|
||||||
@@ -267,9 +264,13 @@ MetalKernelPipeline *ShaderCache::get_best_pipeline(DeviceKernel kernel, const M
|
|||||||
|
|
||||||
/* metalrt options */
|
/* metalrt options */
|
||||||
bool use_metalrt = device->use_metalrt;
|
bool use_metalrt = device->use_metalrt;
|
||||||
bool metalrt_hair = use_metalrt && (device->kernel_features & KERNEL_FEATURE_HAIR);
|
bool device_metalrt_hair = use_metalrt && device->kernel_features & KERNEL_FEATURE_HAIR;
|
||||||
bool metalrt_hair_thick = use_metalrt && (device->kernel_features & KERNEL_FEATURE_HAIR_THICK);
|
bool device_metalrt_hair_thick = use_metalrt &&
|
||||||
bool metalrt_pointcloud = use_metalrt && (device->kernel_features & KERNEL_FEATURE_POINTCLOUD);
|
device->kernel_features & KERNEL_FEATURE_HAIR_THICK;
|
||||||
|
bool device_metalrt_pointcloud = use_metalrt &&
|
||||||
|
device->kernel_features & KERNEL_FEATURE_POINTCLOUD;
|
||||||
|
bool device_metalrt_motion = use_metalrt &&
|
||||||
|
device->kernel_features & KERNEL_FEATURE_OBJECT_MOTION;
|
||||||
|
|
||||||
MetalKernelPipeline *best_pipeline = nullptr;
|
MetalKernelPipeline *best_pipeline = nullptr;
|
||||||
for (auto &pipeline : collection) {
|
for (auto &pipeline : collection) {
|
||||||
@@ -278,9 +279,16 @@ MetalKernelPipeline *ShaderCache::get_best_pipeline(DeviceKernel kernel, const M
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pipeline->use_metalrt != use_metalrt || pipeline->metalrt_hair != metalrt_hair ||
|
bool pipeline_metalrt_hair = pipeline->metalrt_features & KERNEL_FEATURE_HAIR;
|
||||||
pipeline->metalrt_hair_thick != metalrt_hair_thick ||
|
bool pipeline_metalrt_hair_thick = pipeline->metalrt_features & KERNEL_FEATURE_HAIR_THICK;
|
||||||
pipeline->metalrt_pointcloud != metalrt_pointcloud) {
|
bool pipeline_metalrt_pointcloud = pipeline->metalrt_features & KERNEL_FEATURE_POINTCLOUD;
|
||||||
|
bool pipeline_metalrt_motion = use_metalrt &&
|
||||||
|
pipeline->metalrt_features & KERNEL_FEATURE_OBJECT_MOTION;
|
||||||
|
|
||||||
|
if (pipeline->use_metalrt != use_metalrt || pipeline_metalrt_hair != device_metalrt_hair ||
|
||||||
|
pipeline_metalrt_hair_thick != device_metalrt_hair_thick ||
|
||||||
|
pipeline_metalrt_pointcloud != device_metalrt_pointcloud ||
|
||||||
|
pipeline_metalrt_motion != device_metalrt_motion) {
|
||||||
/* wrong combination of metalrt options */
|
/* wrong combination of metalrt options */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -308,22 +316,31 @@ MetalKernelPipeline *ShaderCache::get_best_pipeline(DeviceKernel kernel, const M
|
|||||||
|
|
||||||
bool MetalKernelPipeline::should_use_binary_archive() const
|
bool MetalKernelPipeline::should_use_binary_archive() const
|
||||||
{
|
{
|
||||||
if (auto str = getenv("CYCLES_METAL_DISABLE_BINARY_ARCHIVES")) {
|
/* Issues with binary archives in older macOS versions. */
|
||||||
if (atoi(str) != 0) {
|
if (@available(macOS 13.0, *)) {
|
||||||
/* Don't archive if we have opted out by env var. */
|
if (auto str = getenv("CYCLES_METAL_DISABLE_BINARY_ARCHIVES")) {
|
||||||
|
if (atoi(str) != 0) {
|
||||||
|
/* Don't archive if we have opted out by env var. */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Workaround for Intel GPU having issue using Binary Archives */
|
||||||
|
MetalGPUVendor gpu_vendor = MetalInfo::get_device_vendor(mtlDevice);
|
||||||
|
if (gpu_vendor == METAL_GPU_INTEL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (pso_type == PSO_GENERIC) {
|
if (pso_type == PSO_GENERIC) {
|
||||||
/* Archive the generic kernels. */
|
/* Archive the generic kernels. */
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device_kernel >= DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND &&
|
if (device_kernel >= DEVICE_KERNEL_INTEGRATOR_SHADE_BACKGROUND &&
|
||||||
device_kernel <= DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW) {
|
device_kernel <= DEVICE_KERNEL_INTEGRATOR_SHADE_SHADOW) {
|
||||||
/* Archive all shade kernels - they take a long time to compile. */
|
/* Archive all shade kernels - they take a long time to compile. */
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The remaining kernels are all fast to compile. They may get cached by the system shader cache,
|
/* The remaining kernels are all fast to compile. They may get cached by the system shader cache,
|
||||||
@@ -342,6 +359,8 @@ static MTLFunctionConstantValues *GetConstantValues(KernelData const *data = nul
|
|||||||
if (!data) {
|
if (!data) {
|
||||||
data = &zero_data;
|
data = &zero_data;
|
||||||
}
|
}
|
||||||
|
int zero_int = 0;
|
||||||
|
[constant_values setConstantValue:&zero_int type:MTLDataType_int atIndex:Kernel_DummyConstant];
|
||||||
|
|
||||||
# define KERNEL_STRUCT_MEMBER(parent, _type, name) \
|
# define KERNEL_STRUCT_MEMBER(parent, _type, name) \
|
||||||
[constant_values setConstantValue:&data->parent.name \
|
[constant_values setConstantValue:&data->parent.name \
|
||||||
@@ -372,10 +391,7 @@ void MetalKernelPipeline::compile()
|
|||||||
MTLFunctionDescriptor *func_desc = [MTLIntersectionFunctionDescriptor functionDescriptor];
|
MTLFunctionDescriptor *func_desc = [MTLIntersectionFunctionDescriptor functionDescriptor];
|
||||||
func_desc.name = entryPoint;
|
func_desc.name = entryPoint;
|
||||||
|
|
||||||
if (pso_type == PSO_SPECIALIZED_SHADE) {
|
if (pso_type != PSO_GENERIC) {
|
||||||
func_desc.constantValues = GetConstantValues(&kernel_data_);
|
|
||||||
}
|
|
||||||
else if (pso_type == PSO_SPECIALIZED_INTERSECT) {
|
|
||||||
func_desc.constantValues = GetConstantValues(&kernel_data_);
|
func_desc.constantValues = GetConstantValues(&kernel_data_);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -420,6 +436,13 @@ void MetalKernelPipeline::compile()
|
|||||||
const char *function_name = function_names[i];
|
const char *function_name = function_names[i];
|
||||||
desc.name = [@(function_name) copy];
|
desc.name = [@(function_name) copy];
|
||||||
|
|
||||||
|
if (pso_type != PSO_GENERIC) {
|
||||||
|
desc.constantValues = GetConstantValues(&kernel_data_);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
desc.constantValues = GetConstantValues();
|
||||||
|
}
|
||||||
|
|
||||||
NSError *error = NULL;
|
NSError *error = NULL;
|
||||||
rt_intersection_function[i] = [mtlLibrary newFunctionWithDescriptor:desc error:&error];
|
rt_intersection_function[i] = [mtlLibrary newFunctionWithDescriptor:desc error:&error];
|
||||||
|
|
||||||
@@ -440,6 +463,10 @@ void MetalKernelPipeline::compile()
|
|||||||
NSArray *table_functions[METALRT_TABLE_NUM] = {nil};
|
NSArray *table_functions[METALRT_TABLE_NUM] = {nil};
|
||||||
NSArray *linked_functions = nil;
|
NSArray *linked_functions = nil;
|
||||||
|
|
||||||
|
bool metalrt_hair = use_metalrt && (metalrt_features & KERNEL_FEATURE_HAIR);
|
||||||
|
bool metalrt_hair_thick = use_metalrt && (metalrt_features & KERNEL_FEATURE_HAIR_THICK);
|
||||||
|
bool metalrt_pointcloud = use_metalrt && (metalrt_features & KERNEL_FEATURE_POINTCLOUD);
|
||||||
|
|
||||||
if (use_metalrt) {
|
if (use_metalrt) {
|
||||||
id<MTLFunction> curve_intersect_default = nil;
|
id<MTLFunction> curve_intersect_default = nil;
|
||||||
id<MTLFunction> curve_intersect_shadow = nil;
|
id<MTLFunction> curve_intersect_shadow = nil;
|
||||||
@@ -677,7 +704,8 @@ void MetalKernelPipeline::compile()
|
|||||||
newIntersectionFunctionTableWithDescriptor:ift_desc];
|
newIntersectionFunctionTableWithDescriptor:ift_desc];
|
||||||
|
|
||||||
/* Finally write the function handles into this pipeline's table */
|
/* Finally write the function handles into this pipeline's table */
|
||||||
for (int i = 0; i < 2; i++) {
|
int size = (int)[table_functions[table] count];
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
id<MTLFunctionHandle> handle = [pipeline
|
id<MTLFunctionHandle> handle = [pipeline
|
||||||
functionHandleWithFunction:table_functions[table][i]];
|
functionHandleWithFunction:table_functions[table][i]];
|
||||||
[intersection_func_table[table] setFunction:handle atIndex:i];
|
[intersection_func_table[table] setFunction:handle atIndex:i];
|
||||||
|
@@ -110,6 +110,12 @@ vector<id<MTLDevice>> const &MetalInfo::get_usable_devices()
|
|||||||
usable |= (vendor == METAL_GPU_AMD);
|
usable |= (vendor == METAL_GPU_AMD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(MAC_OS_VERSION_13_0)
|
||||||
|
if (@available(macos 13.0, *)) {
|
||||||
|
usable |= (vendor == METAL_GPU_INTEL);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (usable) {
|
if (usable) {
|
||||||
metal_printf("- %s\n", device_name.c_str());
|
metal_printf("- %s\n", device_name.c_str());
|
||||||
[device retain];
|
[device retain];
|
||||||
|
@@ -26,9 +26,12 @@ class HdCyclesVolumeLoader : public VDBImageLoader {
|
|||||||
HdCyclesVolumeLoader(const std::string &filePath, const std::string &gridName)
|
HdCyclesVolumeLoader(const std::string &filePath, const std::string &gridName)
|
||||||
: VDBImageLoader(gridName)
|
: VDBImageLoader(gridName)
|
||||||
{
|
{
|
||||||
|
/* Disably delay loading and file copying, this has poor performance
|
||||||
|
* on network drivers. */
|
||||||
|
const bool delay_load = false;
|
||||||
openvdb::io::File file(filePath);
|
openvdb::io::File file(filePath);
|
||||||
file.setCopyMaxBytes(0);
|
file.setCopyMaxBytes(0);
|
||||||
if (file.open()) {
|
if (file.open(delay_load)) {
|
||||||
grid = file.readGrid(gridName);
|
grid = file.readGrid(gridName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -191,6 +191,12 @@ bool PassAccessor::get_render_tile_pixels(const RenderBuffers *render_buffers,
|
|||||||
* had the computation done. */
|
* had the computation done. */
|
||||||
if (pass_info.num_components == 3) {
|
if (pass_info.num_components == 3) {
|
||||||
get_pass_float3(render_buffers, buffer_params, destination);
|
get_pass_float3(render_buffers, buffer_params, destination);
|
||||||
|
|
||||||
|
/* Use alpha for colors passes. */
|
||||||
|
if (type == PASS_DIFFUSE_COLOR || type == PASS_GLOSSY_COLOR ||
|
||||||
|
type == PASS_TRANSMISSION_COLOR) {
|
||||||
|
num_written_components = destination.num_components;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (pass_info.num_components == 4) {
|
else if (pass_info.num_components == 4) {
|
||||||
if (destination.num_components == 3) {
|
if (destination.num_components == 3) {
|
||||||
|
@@ -43,8 +43,11 @@ PathTrace::PathTrace(Device *device,
|
|||||||
/* Create path tracing work in advance, so that it can be reused by incremental sampling as much
|
/* Create path tracing work in advance, so that it can be reused by incremental sampling as much
|
||||||
* as possible. */
|
* as possible. */
|
||||||
device_->foreach_device([&](Device *path_trace_device) {
|
device_->foreach_device([&](Device *path_trace_device) {
|
||||||
path_trace_works_.emplace_back(PathTraceWork::create(
|
unique_ptr<PathTraceWork> work = PathTraceWork::create(
|
||||||
path_trace_device, film, device_scene, &render_cancel_.is_requested));
|
path_trace_device, film, device_scene, &render_cancel_.is_requested);
|
||||||
|
if (work) {
|
||||||
|
path_trace_works_.emplace_back(std::move(work));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
work_balance_infos_.resize(path_trace_works_.size());
|
work_balance_infos_.resize(path_trace_works_.size());
|
||||||
|
@@ -23,6 +23,10 @@ unique_ptr<PathTraceWork> PathTraceWork::create(Device *device,
|
|||||||
if (device->info.type == DEVICE_CPU) {
|
if (device->info.type == DEVICE_CPU) {
|
||||||
return make_unique<PathTraceWorkCPU>(device, film, device_scene, cancel_requested_flag);
|
return make_unique<PathTraceWorkCPU>(device, film, device_scene, cancel_requested_flag);
|
||||||
}
|
}
|
||||||
|
if (device->info.type == DEVICE_DUMMY) {
|
||||||
|
/* Dummy devices can't perform any work. */
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
return make_unique<PathTraceWorkGPU>(device, film, device_scene, cancel_requested_flag);
|
return make_unique<PathTraceWorkGPU>(device, film, device_scene, cancel_requested_flag);
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,9 @@ void work_balance_do_initial(vector<WorkBalanceInfo> &work_balance_infos)
|
|||||||
work_balance_infos[0].weight = 1.0;
|
work_balance_infos[0].weight = 1.0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (num_infos == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* There is no statistics available, so start with an equal distribution. */
|
/* There is no statistics available, so start with an equal distribution. */
|
||||||
const double weight = 1.0 / num_infos;
|
const double weight = 1.0 / num_infos;
|
||||||
|
@@ -563,13 +563,22 @@ if(WITH_CYCLES_HIP_BINARIES AND WITH_CYCLES_DEVICE_HIP)
|
|||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(hip_command ${CMAKE_COMMAND})
|
set(hip_command ${CMAKE_COMMAND})
|
||||||
set(hip_flags
|
set(hip_flags
|
||||||
-E env "HIP_PATH=${HIP_ROOT_DIR}" "PATH=${HIP_PERL_DIR}"
|
-E env "HIP_PATH=${HIP_ROOT_DIR}"
|
||||||
${HIP_HIPCC_EXECUTABLE}.bat)
|
${HIP_HIPCC_EXECUTABLE}.bat)
|
||||||
else()
|
else()
|
||||||
set(hip_command ${HIP_HIPCC_EXECUTABLE})
|
set(hip_command ${HIP_HIPCC_EXECUTABLE})
|
||||||
set(hip_flags)
|
set(hip_flags)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# There's a bug in the compiler causing some scenes to fail to render on Vega cards
|
||||||
|
# A workaround currently is to set -O1 opt level during kernel compilation for these
|
||||||
|
# cards Remove this when a newer compiler is available with fixes.
|
||||||
|
if(WIN32 AND (${arch} MATCHES "gfx90[a-z0-9]+"))
|
||||||
|
set(hip_opt_flags "-O1")
|
||||||
|
else()
|
||||||
|
set(hip_opt_flags)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(hip_flags
|
set(hip_flags
|
||||||
${hip_flags}
|
${hip_flags}
|
||||||
--amdgpu-target=${arch}
|
--amdgpu-target=${arch}
|
||||||
@@ -586,6 +595,7 @@ if(WITH_CYCLES_HIP_BINARIES AND WITH_CYCLES_DEVICE_HIP)
|
|||||||
-Wno-unused-value
|
-Wno-unused-value
|
||||||
--hipcc-func-supp
|
--hipcc-func-supp
|
||||||
-ffast-math
|
-ffast-math
|
||||||
|
${hip_opt_flags}
|
||||||
-o ${CMAKE_CURRENT_BINARY_DIR}/${hip_file})
|
-o ${CMAKE_CURRENT_BINARY_DIR}/${hip_file})
|
||||||
|
|
||||||
if(WITH_NANOVDB)
|
if(WITH_NANOVDB)
|
||||||
|
@@ -229,7 +229,7 @@ ccl_device_inline
|
|||||||
/* Always use baked shadow transparency for curves. */
|
/* Always use baked shadow transparency for curves. */
|
||||||
if (isect.type & PRIMITIVE_CURVE) {
|
if (isect.type & PRIMITIVE_CURVE) {
|
||||||
*r_throughput *= intersection_curve_shadow_transparency(
|
*r_throughput *= intersection_curve_shadow_transparency(
|
||||||
kg, isect.object, isect.prim, isect.u);
|
kg, isect.object, isect.prim, isect.type, isect.u);
|
||||||
|
|
||||||
if (*r_throughput < CURVE_SHADOW_TRANSPARENCY_CUTOFF) {
|
if (*r_throughput < CURVE_SHADOW_TRANSPARENCY_CUTOFF) {
|
||||||
return true;
|
return true;
|
||||||
|
@@ -190,10 +190,8 @@ ccl_device_inline int intersection_find_attribute(KernelGlobals kg,
|
|||||||
/* Cut-off value to stop transparent shadow tracing when practically opaque. */
|
/* Cut-off value to stop transparent shadow tracing when practically opaque. */
|
||||||
#define CURVE_SHADOW_TRANSPARENCY_CUTOFF 0.001f
|
#define CURVE_SHADOW_TRANSPARENCY_CUTOFF 0.001f
|
||||||
|
|
||||||
ccl_device_inline float intersection_curve_shadow_transparency(KernelGlobals kg,
|
ccl_device_inline float intersection_curve_shadow_transparency(
|
||||||
const int object,
|
KernelGlobals kg, const int object, const int prim, const int type, const float u)
|
||||||
const int prim,
|
|
||||||
const float u)
|
|
||||||
{
|
{
|
||||||
/* Find attribute. */
|
/* Find attribute. */
|
||||||
const int offset = intersection_find_attribute(kg, object, ATTR_STD_SHADOW_TRANSPARENCY);
|
const int offset = intersection_find_attribute(kg, object, ATTR_STD_SHADOW_TRANSPARENCY);
|
||||||
@@ -204,7 +202,7 @@ ccl_device_inline float intersection_curve_shadow_transparency(KernelGlobals kg,
|
|||||||
|
|
||||||
/* Interpolate transparency between curve keys. */
|
/* Interpolate transparency between curve keys. */
|
||||||
const KernelCurve kcurve = kernel_data_fetch(curves, prim);
|
const KernelCurve kcurve = kernel_data_fetch(curves, prim);
|
||||||
const int k0 = kcurve.first_key + PRIMITIVE_UNPACK_SEGMENT(kcurve.type);
|
const int k0 = kcurve.first_key + PRIMITIVE_UNPACK_SEGMENT(type);
|
||||||
const int k1 = k0 + 1;
|
const int k1 = k0 + 1;
|
||||||
|
|
||||||
const float f0 = kernel_data_fetch(attributes_float, offset + k0);
|
const float f0 = kernel_data_fetch(attributes_float, offset + k0);
|
||||||
|
@@ -49,11 +49,11 @@ KERNEL_STRUCT_BEGIN(KernelBVH, bvh)
|
|||||||
KERNEL_STRUCT_MEMBER(bvh, int, root)
|
KERNEL_STRUCT_MEMBER(bvh, int, root)
|
||||||
KERNEL_STRUCT_MEMBER(bvh, int, have_motion)
|
KERNEL_STRUCT_MEMBER(bvh, int, have_motion)
|
||||||
KERNEL_STRUCT_MEMBER(bvh, int, have_curves)
|
KERNEL_STRUCT_MEMBER(bvh, int, have_curves)
|
||||||
|
KERNEL_STRUCT_MEMBER(bvh, int, have_points)
|
||||||
|
KERNEL_STRUCT_MEMBER(bvh, int, have_volumes)
|
||||||
KERNEL_STRUCT_MEMBER(bvh, int, bvh_layout)
|
KERNEL_STRUCT_MEMBER(bvh, int, bvh_layout)
|
||||||
KERNEL_STRUCT_MEMBER(bvh, int, use_bvh_steps)
|
KERNEL_STRUCT_MEMBER(bvh, int, use_bvh_steps)
|
||||||
KERNEL_STRUCT_MEMBER(bvh, int, curve_subdivisions)
|
KERNEL_STRUCT_MEMBER(bvh, int, curve_subdivisions)
|
||||||
KERNEL_STRUCT_MEMBER(bvh, int, pad1)
|
|
||||||
KERNEL_STRUCT_MEMBER(bvh, int, pad2)
|
|
||||||
KERNEL_STRUCT_END(KernelBVH)
|
KERNEL_STRUCT_END(KernelBVH)
|
||||||
|
|
||||||
/* Film. */
|
/* Film. */
|
||||||
|
@@ -252,7 +252,7 @@ ccl_device void kernel_embree_filter_occluded_func(const RTCFilterFunctionNArgum
|
|||||||
/* Always use baked shadow transparency for curves. */
|
/* Always use baked shadow transparency for curves. */
|
||||||
if (current_isect.type & PRIMITIVE_CURVE) {
|
if (current_isect.type & PRIMITIVE_CURVE) {
|
||||||
ctx->throughput *= intersection_curve_shadow_transparency(
|
ctx->throughput *= intersection_curve_shadow_transparency(
|
||||||
kg, current_isect.object, current_isect.prim, current_isect.u);
|
kg, current_isect.object, current_isect.prim, current_isect.type, current_isect.u);
|
||||||
|
|
||||||
if (ctx->throughput < CURVE_SHADOW_TRANSPARENCY_CUTOFF) {
|
if (ctx->throughput < CURVE_SHADOW_TRANSPARENCY_CUTOFF) {
|
||||||
ctx->opaque_hit = true;
|
ctx->opaque_hit = true;
|
||||||
|
@@ -79,7 +79,8 @@ ccl_device_intersect bool scene_intersect(KernelGlobals kg,
|
|||||||
metal::raytracing::ray r(ray->P, ray->D, ray->tmin, ray->tmax);
|
metal::raytracing::ray r(ray->P, ray->D, ray->tmin, ray->tmax);
|
||||||
metalrt_intersector_type metalrt_intersect;
|
metalrt_intersector_type metalrt_intersect;
|
||||||
|
|
||||||
if (!kernel_data.bvh.have_curves) {
|
bool triangle_only = !kernel_data.bvh.have_curves && !kernel_data.bvh.have_points;
|
||||||
|
if (triangle_only) {
|
||||||
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +178,9 @@ ccl_device_intersect bool scene_intersect_local(KernelGlobals kg,
|
|||||||
metalrt_intersector_type metalrt_intersect;
|
metalrt_intersector_type metalrt_intersect;
|
||||||
|
|
||||||
metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
|
metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
|
||||||
if (!kernel_data.bvh.have_curves) {
|
|
||||||
|
bool triangle_only = !kernel_data.bvh.have_curves && !kernel_data.bvh.have_points;
|
||||||
|
if (triangle_only) {
|
||||||
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +208,9 @@ ccl_device_intersect bool scene_intersect_local(KernelGlobals kg,
|
|||||||
if (lcg_state) {
|
if (lcg_state) {
|
||||||
*lcg_state = payload.lcg_state;
|
*lcg_state = payload.lcg_state;
|
||||||
}
|
}
|
||||||
*local_isect = payload.local_isect;
|
if (local_isect) {
|
||||||
|
*local_isect = payload.local_isect;
|
||||||
|
}
|
||||||
|
|
||||||
return payload.result;
|
return payload.result;
|
||||||
}
|
}
|
||||||
@@ -240,7 +245,9 @@ ccl_device_intersect bool scene_intersect_shadow_all(KernelGlobals kg,
|
|||||||
metalrt_intersector_type metalrt_intersect;
|
metalrt_intersector_type metalrt_intersect;
|
||||||
|
|
||||||
metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
|
metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
|
||||||
if (!kernel_data.bvh.have_curves) {
|
|
||||||
|
bool triangle_only = !kernel_data.bvh.have_curves && !kernel_data.bvh.have_points;
|
||||||
|
if (triangle_only) {
|
||||||
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +314,9 @@ ccl_device_intersect bool scene_intersect_volume(KernelGlobals kg,
|
|||||||
metalrt_intersector_type metalrt_intersect;
|
metalrt_intersector_type metalrt_intersect;
|
||||||
|
|
||||||
metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
|
metalrt_intersect.force_opacity(metal::raytracing::forced_opacity::non_opaque);
|
||||||
if (!kernel_data.bvh.have_curves) {
|
|
||||||
|
bool triangle_only = !kernel_data.bvh.have_curves && !kernel_data.bvh.have_points;
|
||||||
|
if (triangle_only) {
|
||||||
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
metalrt_intersect.assume_geometry_type(metal::raytracing::geometry_type::triangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,28 +29,13 @@ using namespace metal::raytracing;
|
|||||||
|
|
||||||
/* Qualifiers */
|
/* Qualifiers */
|
||||||
|
|
||||||
/* Inline everything for Apple GPUs. This gives ~1.1x speedup and 10% spill
|
#define ccl_device
|
||||||
* reduction for integator_shade_surface. However it comes at the cost of
|
#define ccl_device_inline ccl_device __attribute__((always_inline))
|
||||||
* longer compile times (~4.5 minutes on M1 Max) and is disabled for that
|
#define ccl_device_forceinline ccl_device __attribute__((always_inline))
|
||||||
* reason, until there is a user option to manually enable it. */
|
#if defined(__KERNEL_METAL_APPLE__)
|
||||||
|
# define ccl_device_noinline ccl_device
|
||||||
#if 0 // defined(__KERNEL_METAL_APPLE__)
|
|
||||||
|
|
||||||
# define ccl_device __attribute__((always_inline))
|
|
||||||
# define ccl_device_inline __attribute__((always_inline))
|
|
||||||
# define ccl_device_forceinline __attribute__((always_inline))
|
|
||||||
# define ccl_device_noinline __attribute__((always_inline))
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
# define ccl_device_noinline ccl_device __attribute__((noinline))
|
||||||
# define ccl_device
|
|
||||||
# define ccl_device_inline ccl_device
|
|
||||||
# define ccl_device_forceinline ccl_device
|
|
||||||
# if defined(__KERNEL_METAL_APPLE__)
|
|
||||||
# define ccl_device_noinline ccl_device
|
|
||||||
# else
|
|
||||||
# define ccl_device_noinline ccl_device __attribute__((noinline))
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ccl_device_noinline_cpu ccl_device
|
#define ccl_device_noinline_cpu ccl_device
|
||||||
|
@@ -34,21 +34,48 @@ class MetalKernelContext {
|
|||||||
kernel_assert(0);
|
kernel_assert(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __KERNEL_METAL_INTEL__
|
||||||
|
template<typename TextureType, typename CoordsType>
|
||||||
|
inline __attribute__((__always_inline__))
|
||||||
|
auto ccl_gpu_tex_object_read_intel_workaround(TextureType texture_array,
|
||||||
|
const uint tid, const uint sid,
|
||||||
|
CoordsType coords) const
|
||||||
|
{
|
||||||
|
switch(sid) {
|
||||||
|
default:
|
||||||
|
case 0: return texture_array[tid].tex.sample(sampler(address::repeat, filter::nearest), coords);
|
||||||
|
case 1: return texture_array[tid].tex.sample(sampler(address::clamp_to_edge, filter::nearest), coords);
|
||||||
|
case 2: return texture_array[tid].tex.sample(sampler(address::clamp_to_zero, filter::nearest), coords);
|
||||||
|
case 3: return texture_array[tid].tex.sample(sampler(address::repeat, filter::linear), coords);
|
||||||
|
case 4: return texture_array[tid].tex.sample(sampler(address::clamp_to_edge, filter::linear), coords);
|
||||||
|
case 5: return texture_array[tid].tex.sample(sampler(address::clamp_to_zero, filter::linear), coords);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// texture2d
|
// texture2d
|
||||||
template<>
|
template<>
|
||||||
inline __attribute__((__always_inline__))
|
inline __attribute__((__always_inline__))
|
||||||
float4 ccl_gpu_tex_object_read_2D(ccl_gpu_tex_object_2D tex, float x, float y) const {
|
float4 ccl_gpu_tex_object_read_2D(ccl_gpu_tex_object_2D tex, float x, float y) const {
|
||||||
const uint tid(tex);
|
const uint tid(tex);
|
||||||
const uint sid(tex >> 32);
|
const uint sid(tex >> 32);
|
||||||
|
#ifndef __KERNEL_METAL_INTEL__
|
||||||
return metal_ancillaries->textures_2d[tid].tex.sample(metal_samplers[sid], float2(x, y));
|
return metal_ancillaries->textures_2d[tid].tex.sample(metal_samplers[sid], float2(x, y));
|
||||||
|
#else
|
||||||
|
return ccl_gpu_tex_object_read_intel_workaround(metal_ancillaries->textures_2d, tid, sid, float2(x, y));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
template<>
|
template<>
|
||||||
inline __attribute__((__always_inline__))
|
inline __attribute__((__always_inline__))
|
||||||
float ccl_gpu_tex_object_read_2D(ccl_gpu_tex_object_2D tex, float x, float y) const {
|
float ccl_gpu_tex_object_read_2D(ccl_gpu_tex_object_2D tex, float x, float y) const {
|
||||||
const uint tid(tex);
|
const uint tid(tex);
|
||||||
const uint sid(tex >> 32);
|
const uint sid(tex >> 32);
|
||||||
|
#ifndef __KERNEL_METAL_INTEL__
|
||||||
return metal_ancillaries->textures_2d[tid].tex.sample(metal_samplers[sid], float2(x, y)).x;
|
return metal_ancillaries->textures_2d[tid].tex.sample(metal_samplers[sid], float2(x, y)).x;
|
||||||
|
#else
|
||||||
|
return ccl_gpu_tex_object_read_intel_workaround(metal_ancillaries->textures_2d, tid, sid, float2(x, y)).x;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// texture3d
|
// texture3d
|
||||||
@@ -57,14 +84,22 @@ class MetalKernelContext {
|
|||||||
float4 ccl_gpu_tex_object_read_3D(ccl_gpu_tex_object_3D tex, float x, float y, float z) const {
|
float4 ccl_gpu_tex_object_read_3D(ccl_gpu_tex_object_3D tex, float x, float y, float z) const {
|
||||||
const uint tid(tex);
|
const uint tid(tex);
|
||||||
const uint sid(tex >> 32);
|
const uint sid(tex >> 32);
|
||||||
|
#ifndef __KERNEL_METAL_INTEL__
|
||||||
return metal_ancillaries->textures_3d[tid].tex.sample(metal_samplers[sid], float3(x, y, z));
|
return metal_ancillaries->textures_3d[tid].tex.sample(metal_samplers[sid], float3(x, y, z));
|
||||||
|
#else
|
||||||
|
return ccl_gpu_tex_object_read_intel_workaround(metal_ancillaries->textures_3d, tid, sid, float3(x, y, z));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
template<>
|
template<>
|
||||||
inline __attribute__((__always_inline__))
|
inline __attribute__((__always_inline__))
|
||||||
float ccl_gpu_tex_object_read_3D(ccl_gpu_tex_object_3D tex, float x, float y, float z) const {
|
float ccl_gpu_tex_object_read_3D(ccl_gpu_tex_object_3D tex, float x, float y, float z) const {
|
||||||
const uint tid(tex);
|
const uint tid(tex);
|
||||||
const uint sid(tex >> 32);
|
const uint sid(tex >> 32);
|
||||||
|
#ifndef __KERNEL_METAL_INTEL__
|
||||||
return metal_ancillaries->textures_3d[tid].tex.sample(metal_samplers[sid], float3(x, y, z)).x;
|
return metal_ancillaries->textures_3d[tid].tex.sample(metal_samplers[sid], float3(x, y, z)).x;
|
||||||
|
#else
|
||||||
|
return ccl_gpu_tex_object_read_intel_workaround(metal_ancillaries->textures_3d, tid, sid, float3(x, y, z)).x;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
# include "kernel/device/gpu/image.h"
|
# include "kernel/device/gpu/image.h"
|
||||||
|
|
||||||
|
@@ -182,20 +182,20 @@ bool metalrt_shadow_all_hit(constant KernelParamsMetal &launch_params_metal,
|
|||||||
|
|
||||||
const float u = barycentrics.x;
|
const float u = barycentrics.x;
|
||||||
const float v = barycentrics.y;
|
const float v = barycentrics.y;
|
||||||
int type = 0;
|
const int prim_type = kernel_data_fetch(objects, object).primitive_type;
|
||||||
if (intersection_type == METALRT_HIT_TRIANGLE) {
|
int type = prim_type;
|
||||||
type = kernel_data_fetch(objects, object).primitive_type;
|
|
||||||
}
|
|
||||||
# ifdef __HAIR__
|
# ifdef __HAIR__
|
||||||
else {
|
if (intersection_type != METALRT_HIT_TRIANGLE) {
|
||||||
const KernelCurveSegment segment = kernel_data_fetch(curve_segments, prim);
|
if ( (prim_type == PRIMITIVE_CURVE_THICK || prim_type == PRIMITIVE_CURVE_RIBBON)) {
|
||||||
type = segment.type;
|
const KernelCurveSegment segment = kernel_data_fetch(curve_segments, prim);
|
||||||
prim = segment.prim;
|
type = segment.type;
|
||||||
|
prim = segment.prim;
|
||||||
/* Filter out curve endcaps */
|
|
||||||
if (u == 0.0f || u == 1.0f) {
|
/* Filter out curve endcaps */
|
||||||
/* continue search */
|
if (u == 0.0f || u == 1.0f) {
|
||||||
return true;
|
/* continue search */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
@@ -228,7 +228,7 @@ bool metalrt_shadow_all_hit(constant KernelParamsMetal &launch_params_metal,
|
|||||||
/* Always use baked shadow transparency for curves. */
|
/* Always use baked shadow transparency for curves. */
|
||||||
if (type & PRIMITIVE_CURVE) {
|
if (type & PRIMITIVE_CURVE) {
|
||||||
float throughput = payload.throughput;
|
float throughput = payload.throughput;
|
||||||
throughput *= context.intersection_curve_shadow_transparency(nullptr, object, prim, u);
|
throughput *= context.intersection_curve_shadow_transparency(nullptr, object, prim, type, u);
|
||||||
payload.throughput = throughput;
|
payload.throughput = throughput;
|
||||||
payload.num_hits += 1;
|
payload.num_hits += 1;
|
||||||
|
|
||||||
@@ -279,7 +279,7 @@ bool metalrt_shadow_all_hit(constant KernelParamsMetal &launch_params_metal,
|
|||||||
INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, record_index, prim) = prim;
|
INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, record_index, prim) = prim;
|
||||||
INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, record_index, object) = object;
|
INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, record_index, object) = object;
|
||||||
INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, record_index, type) = type;
|
INTEGRATOR_STATE_ARRAY_WRITE(state, shadow_isect, record_index, type) = type;
|
||||||
|
|
||||||
/* Continue tracing. */
|
/* Continue tracing. */
|
||||||
# endif /* __TRANSPARENT_SHADOWS__ */
|
# endif /* __TRANSPARENT_SHADOWS__ */
|
||||||
#endif /* __SHADOW_RECORD_ALL__ */
|
#endif /* __SHADOW_RECORD_ALL__ */
|
||||||
@@ -327,7 +327,8 @@ inline TReturnType metalrt_visibility_test(
|
|||||||
TReturnType result;
|
TReturnType result;
|
||||||
|
|
||||||
#ifdef __HAIR__
|
#ifdef __HAIR__
|
||||||
if (intersection_type == METALRT_HIT_BOUNDING_BOX) {
|
const int type = kernel_data_fetch(objects, object).primitive_type;
|
||||||
|
if (intersection_type == METALRT_HIT_BOUNDING_BOX && (type == PRIMITIVE_CURVE_THICK || type == PRIMITIVE_CURVE_RIBBON)) {
|
||||||
/* Filter out curve endcaps. */
|
/* Filter out curve endcaps. */
|
||||||
if (u == 0.0f || u == 1.0f) {
|
if (u == 0.0f || u == 1.0f) {
|
||||||
result.accept = false;
|
result.accept = false;
|
||||||
@@ -463,7 +464,12 @@ ccl_device_inline void metalrt_intersection_curve_shadow(
|
|||||||
const float ray_tmax,
|
const float ray_tmax,
|
||||||
thread BoundingBoxIntersectionResult &result)
|
thread BoundingBoxIntersectionResult &result)
|
||||||
{
|
{
|
||||||
|
# ifdef __VISIBILITY_FLAG__
|
||||||
const uint visibility = payload.visibility;
|
const uint visibility = payload.visibility;
|
||||||
|
if ((kernel_data_fetch(objects, object).visibility & visibility) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
Intersection isect;
|
Intersection isect;
|
||||||
isect.t = ray_tmax;
|
isect.t = ray_tmax;
|
||||||
@@ -685,7 +691,12 @@ ccl_device_inline void metalrt_intersection_point_shadow(
|
|||||||
const float ray_tmax,
|
const float ray_tmax,
|
||||||
thread BoundingBoxIntersectionResult &result)
|
thread BoundingBoxIntersectionResult &result)
|
||||||
{
|
{
|
||||||
|
# ifdef __VISIBILITY_FLAG__
|
||||||
const uint visibility = payload.visibility;
|
const uint visibility = payload.visibility;
|
||||||
|
if ((kernel_data_fetch(objects, object).visibility & visibility) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
Intersection isect;
|
Intersection isect;
|
||||||
isect.t = ray_tmax;
|
isect.t = ray_tmax;
|
||||||
|
@@ -196,9 +196,15 @@ ccl_always_inline float3 make_float3(float x)
|
|||||||
* include oneAPI headers, which transitively include math.h headers which will cause redefinitions
|
* include oneAPI headers, which transitively include math.h headers which will cause redefinitions
|
||||||
* of the math defines because math.h also uses them and having them defined before math.h include
|
* of the math defines because math.h also uses them and having them defined before math.h include
|
||||||
* is actually UB. */
|
* is actually UB. */
|
||||||
/* Use fast math functions - get them from sycl::native namespace for native math function
|
/* sycl::native::cos precision is not sufficient and -ffast-math lets
|
||||||
* implementations */
|
* the current DPC++ compiler overload sycl::cos with it.
|
||||||
#define cosf(x) sycl::native::cos(((float)(x)))
|
* We work around this issue by directly calling the spirv implementation which
|
||||||
|
* provides greater precision. */
|
||||||
|
#if defined(__SYCL_DEVICE_ONLY__) && defined(__SPIR__)
|
||||||
|
# define cosf(x) __spirv_ocl_cos(((float)(x)))
|
||||||
|
#else
|
||||||
|
# define cosf(x) sycl::cos(((float)(x)))
|
||||||
|
#endif
|
||||||
#define sinf(x) sycl::native::sin(((float)(x)))
|
#define sinf(x) sycl::native::sin(((float)(x)))
|
||||||
#define powf(x, y) sycl::native::powr(((float)(x)), ((float)(y)))
|
#define powf(x, y) sycl::native::powr(((float)(x)), ((float)(y)))
|
||||||
#define tanf(x) sycl::native::tan(((float)(x)))
|
#define tanf(x) sycl::native::tan(((float)(x)))
|
||||||
|
@@ -668,9 +668,9 @@ bool oneapi_enqueue_kernel(KernelContext *kernel_context,
|
|||||||
/* Compute-runtime (ie. NEO) version is what gets returned by sycl/L0 on Windows
|
/* Compute-runtime (ie. NEO) version is what gets returned by sycl/L0 on Windows
|
||||||
* since Windows driver 101.3268. */
|
* since Windows driver 101.3268. */
|
||||||
/* The same min compute-runtime version is currently required across Windows and Linux.
|
/* The same min compute-runtime version is currently required across Windows and Linux.
|
||||||
* For Windows driver 101.3268, compute-runtime version is 23570. */
|
* For Windows driver 101.3430, compute-runtime version is 23904. */
|
||||||
static const int lowest_supported_driver_version_win = 1013268;
|
static const int lowest_supported_driver_version_win = 1013430;
|
||||||
static const int lowest_supported_driver_version_neo = 23570;
|
static const int lowest_supported_driver_version_neo = 23904;
|
||||||
|
|
||||||
static int parse_driver_build_version(const sycl::device &device)
|
static int parse_driver_build_version(const sycl::device &device)
|
||||||
{
|
{
|
||||||
|
@@ -202,7 +202,7 @@ extern "C" __global__ void __anyhit__kernel_optix_shadow_all_hit()
|
|||||||
/* Always use baked shadow transparency for curves. */
|
/* Always use baked shadow transparency for curves. */
|
||||||
if (type & PRIMITIVE_CURVE) {
|
if (type & PRIMITIVE_CURVE) {
|
||||||
float throughput = __uint_as_float(optixGetPayload_1());
|
float throughput = __uint_as_float(optixGetPayload_1());
|
||||||
throughput *= intersection_curve_shadow_transparency(nullptr, object, prim, u);
|
throughput *= intersection_curve_shadow_transparency(nullptr, object, prim, type, u);
|
||||||
optixSetPayload_1(__float_as_uint(throughput));
|
optixSetPayload_1(__float_as_uint(throughput));
|
||||||
optixSetPayload_2(uint16_pack_to_uint(num_recorded_hits, num_hits + 1));
|
optixSetPayload_2(uint16_pack_to_uint(num_recorded_hits, num_hits + 1));
|
||||||
|
|
||||||
|
@@ -348,7 +348,9 @@ ccl_device_inline void kernel_accum_emission_or_background_pass(
|
|||||||
}
|
}
|
||||||
# endif /* __DENOISING_FEATURES__ */
|
# endif /* __DENOISING_FEATURES__ */
|
||||||
|
|
||||||
if (lightgroup != LIGHTGROUP_NONE && kernel_data.film.pass_lightgroup != PASS_UNUSED) {
|
const bool is_shadowcatcher = (path_flag & PATH_RAY_SHADOW_CATCHER_HIT) != 0;
|
||||||
|
if (!is_shadowcatcher && lightgroup != LIGHTGROUP_NONE &&
|
||||||
|
kernel_data.film.pass_lightgroup != PASS_UNUSED) {
|
||||||
kernel_write_pass_float3(buffer + kernel_data.film.pass_lightgroup + 3 * lightgroup,
|
kernel_write_pass_float3(buffer + kernel_data.film.pass_lightgroup + 3 * lightgroup,
|
||||||
contribution);
|
contribution);
|
||||||
}
|
}
|
||||||
@@ -357,13 +359,12 @@ ccl_device_inline void kernel_accum_emission_or_background_pass(
|
|||||||
/* Directly visible, write to emission or background pass. */
|
/* Directly visible, write to emission or background pass. */
|
||||||
pass_offset = pass;
|
pass_offset = pass;
|
||||||
}
|
}
|
||||||
else if (kernel_data.kernel_features & KERNEL_FEATURE_LIGHT_PASSES) {
|
else if (is_shadowcatcher) {
|
||||||
/* Don't write any light passes for shadow catcher, for easier
|
/* Don't write any light passes for shadow catcher, for easier
|
||||||
* compositing back together of the combined pass. */
|
* compositing back together of the combined pass. */
|
||||||
if (path_flag & PATH_RAY_SHADOW_CATCHER_HIT) {
|
return;
|
||||||
return;
|
}
|
||||||
}
|
else if (kernel_data.kernel_features & KERNEL_FEATURE_LIGHT_PASSES) {
|
||||||
|
|
||||||
if (path_flag & PATH_RAY_SURFACE_PASS) {
|
if (path_flag & PATH_RAY_SURFACE_PASS) {
|
||||||
/* Indirectly visible through reflection. */
|
/* Indirectly visible through reflection. */
|
||||||
const float3 diffuse_weight = INTEGRATOR_STATE(state, path, pass_diffuse_weight);
|
const float3 diffuse_weight = INTEGRATOR_STATE(state, path, pass_diffuse_weight);
|
||||||
|
@@ -42,8 +42,8 @@ ccl_device_forceinline void kernel_write_denoising_features_surface(
|
|||||||
if (kernel_data.film.pass_denoising_depth != PASS_UNUSED) {
|
if (kernel_data.film.pass_denoising_depth != PASS_UNUSED) {
|
||||||
const float3 denoising_feature_throughput = INTEGRATOR_STATE(
|
const float3 denoising_feature_throughput = INTEGRATOR_STATE(
|
||||||
state, path, denoising_feature_throughput);
|
state, path, denoising_feature_throughput);
|
||||||
const float denoising_depth = ensure_finite(average(denoising_feature_throughput) *
|
const float depth = sd->ray_length - INTEGRATOR_STATE(state, ray, tmin);
|
||||||
sd->ray_length);
|
const float denoising_depth = ensure_finite(average(denoising_feature_throughput) * depth);
|
||||||
kernel_write_pass_float(buffer + kernel_data.film.pass_denoising_depth, denoising_depth);
|
kernel_write_pass_float(buffer + kernel_data.film.pass_denoising_depth, denoising_depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -235,6 +235,21 @@ ccl_device_inline void film_get_pass_pixel_float3(ccl_global const KernelFilmCon
|
|||||||
pixel[0] = f.x;
|
pixel[0] = f.x;
|
||||||
pixel[1] = f.y;
|
pixel[1] = f.y;
|
||||||
pixel[2] = f.z;
|
pixel[2] = f.z;
|
||||||
|
|
||||||
|
/* Optional alpha channel. */
|
||||||
|
if (kfilm_convert->num_components >= 4) {
|
||||||
|
if (kfilm_convert->pass_combined != PASS_UNUSED) {
|
||||||
|
float scale, scale_exposure;
|
||||||
|
film_get_scale_and_scale_exposure(kfilm_convert, buffer, &scale, &scale_exposure);
|
||||||
|
|
||||||
|
ccl_global const float *in_combined = buffer + kfilm_convert->pass_combined;
|
||||||
|
const float alpha = in_combined[3] * scale;
|
||||||
|
pixel[3] = film_transparency_to_alpha(alpha);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pixel[3] = 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------
|
/* --------------------------------------------------------------------
|
||||||
|
@@ -89,7 +89,7 @@ ccl_device_noinline void motion_triangle_shader_setup(KernelGlobals kg,
|
|||||||
float u = sd->u;
|
float u = sd->u;
|
||||||
float v = sd->v;
|
float v = sd->v;
|
||||||
float w = 1.0f - u - v;
|
float w = 1.0f - u - v;
|
||||||
sd->N = (w * normals[0] + u * normals[1] + v * normals[2]);
|
sd->N = safe_normalize(w * normals[0] + u * normals[1] + v * normals[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -113,7 +113,7 @@ ccl_device bool integrator_init_from_bake(KernelGlobals kg,
|
|||||||
if (prim == -1) {
|
if (prim == -1) {
|
||||||
/* Accumulate transparency for empty pixels. */
|
/* Accumulate transparency for empty pixels. */
|
||||||
kernel_accum_transparent(kg, state, 0, 1.0f, buffer);
|
kernel_accum_transparent(kg, state, 0, 1.0f, buffer);
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
prim += kernel_data.bake.tri_offset;
|
prim += kernel_data.bake.tri_offset;
|
||||||
@@ -160,6 +160,13 @@ ccl_device bool integrator_init_from_bake(KernelGlobals kg,
|
|||||||
u = v;
|
u = v;
|
||||||
v = 1.0f - tmp - v;
|
v = 1.0f - tmp - v;
|
||||||
|
|
||||||
|
const float tmpdx = dudx;
|
||||||
|
const float tmpdy = dudy;
|
||||||
|
dudx = dvdx;
|
||||||
|
dudy = dvdy;
|
||||||
|
dvdx = -tmpdx - dvdx;
|
||||||
|
dvdy = -tmpdy - dvdy;
|
||||||
|
|
||||||
/* Position and normal on triangle. */
|
/* Position and normal on triangle. */
|
||||||
const int object = kernel_data.bake.object_index;
|
const int object = kernel_data.bake.object_index;
|
||||||
float3 P, Ng;
|
float3 P, Ng;
|
||||||
|
@@ -185,8 +185,7 @@ ccl_device_inline void integrate_distant_lights(KernelGlobals kg,
|
|||||||
|
|
||||||
/* Write to render buffer. */
|
/* Write to render buffer. */
|
||||||
const float3 throughput = INTEGRATOR_STATE(state, path, throughput);
|
const float3 throughput = INTEGRATOR_STATE(state, path, throughput);
|
||||||
kernel_accum_emission(
|
kernel_accum_emission(kg, state, throughput * light_eval, render_buffer, ls.group);
|
||||||
kg, state, throughput * light_eval, render_buffer, kernel_data.background.lightgroup);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
#include "kernel/osl/globals.h"
|
#include "kernel/osl/globals.h"
|
||||||
#include "kernel/osl/services.h"
|
#include "kernel/osl/services.h"
|
||||||
#include "kernel/osl/shader.h"
|
#include "kernel/osl/shader.h"
|
||||||
|
|
||||||
|
#include "kernel/util/differential.h"
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
#include "scene/attribute.h"
|
#include "scene/attribute.h"
|
||||||
@@ -199,13 +201,20 @@ void OSLShader::eval_surface(const KernelGlobalsCPU *kg,
|
|||||||
(void)found;
|
(void)found;
|
||||||
assert(found);
|
assert(found);
|
||||||
|
|
||||||
|
differential3 dP;
|
||||||
memcpy(&sd->P, data, sizeof(float) * 3);
|
memcpy(&sd->P, data, sizeof(float) * 3);
|
||||||
memcpy(&sd->dP.dx, data + 3, sizeof(float) * 3);
|
memcpy(&dP.dx, data + 3, sizeof(float) * 3);
|
||||||
memcpy(&sd->dP.dy, data + 6, sizeof(float) * 3);
|
memcpy(&dP.dy, data + 6, sizeof(float) * 3);
|
||||||
|
|
||||||
object_position_transform(kg, sd, &sd->P);
|
object_position_transform(kg, sd, &sd->P);
|
||||||
object_dir_transform(kg, sd, &sd->dP.dx);
|
object_dir_transform(kg, sd, &dP.dx);
|
||||||
object_dir_transform(kg, sd, &sd->dP.dy);
|
object_dir_transform(kg, sd, &dP.dy);
|
||||||
|
|
||||||
|
const float dP_radius = differential_make_compact(dP);
|
||||||
|
|
||||||
|
make_orthonormals(sd->Ng, &sd->dP.dx, &sd->dP.dy);
|
||||||
|
sd->dP.dx *= dP_radius;
|
||||||
|
sd->dP.dy *= dP_radius;
|
||||||
|
|
||||||
globals->P = TO_VEC3(sd->P);
|
globals->P = TO_VEC3(sd->P);
|
||||||
globals->dPdx = TO_VEC3(sd->dP.dx);
|
globals->dPdx = TO_VEC3(sd->dP.dx);
|
||||||
|
@@ -122,6 +122,7 @@ shader node_image_texture(int use_mapping = 0,
|
|||||||
vector Nob = transform("world", "object", N);
|
vector Nob = transform("world", "object", N);
|
||||||
|
|
||||||
/* project from direction vector to barycentric coordinates in triangles */
|
/* project from direction vector to barycentric coordinates in triangles */
|
||||||
|
vector signed_Nob = Nob;
|
||||||
Nob = vector(fabs(Nob[0]), fabs(Nob[1]), fabs(Nob[2]));
|
Nob = vector(fabs(Nob[0]), fabs(Nob[1]), fabs(Nob[2]));
|
||||||
Nob /= (Nob[0] + Nob[1] + Nob[2]);
|
Nob /= (Nob[0] + Nob[1] + Nob[2]);
|
||||||
|
|
||||||
@@ -184,9 +185,10 @@ shader node_image_texture(int use_mapping = 0,
|
|||||||
float tmp_alpha;
|
float tmp_alpha;
|
||||||
|
|
||||||
if (weight[0] > 0.0) {
|
if (weight[0] > 0.0) {
|
||||||
|
point UV = point((signed_Nob[0] < 0.0) ? 1.0 - p[1] : p[1], p[2], 0.0);
|
||||||
Color += weight[0] * image_texture_lookup(filename,
|
Color += weight[0] * image_texture_lookup(filename,
|
||||||
p[1],
|
UV[0],
|
||||||
p[2],
|
UV[1],
|
||||||
tmp_alpha,
|
tmp_alpha,
|
||||||
compress_as_srgb,
|
compress_as_srgb,
|
||||||
ignore_alpha,
|
ignore_alpha,
|
||||||
@@ -198,9 +200,10 @@ shader node_image_texture(int use_mapping = 0,
|
|||||||
Alpha += weight[0] * tmp_alpha;
|
Alpha += weight[0] * tmp_alpha;
|
||||||
}
|
}
|
||||||
if (weight[1] > 0.0) {
|
if (weight[1] > 0.0) {
|
||||||
|
point UV = point((signed_Nob[1] > 0.0) ? 1.0 - p[0] : p[0], p[2], 0.0);
|
||||||
Color += weight[1] * image_texture_lookup(filename,
|
Color += weight[1] * image_texture_lookup(filename,
|
||||||
p[0],
|
UV[0],
|
||||||
p[2],
|
UV[1],
|
||||||
tmp_alpha,
|
tmp_alpha,
|
||||||
compress_as_srgb,
|
compress_as_srgb,
|
||||||
ignore_alpha,
|
ignore_alpha,
|
||||||
@@ -212,9 +215,10 @@ shader node_image_texture(int use_mapping = 0,
|
|||||||
Alpha += weight[1] * tmp_alpha;
|
Alpha += weight[1] * tmp_alpha;
|
||||||
}
|
}
|
||||||
if (weight[2] > 0.0) {
|
if (weight[2] > 0.0) {
|
||||||
|
point UV = point((signed_Nob[2] > 0.0) ? 1.0 - p[1] : p[1], p[0], 0.0);
|
||||||
Color += weight[2] * image_texture_lookup(filename,
|
Color += weight[2] * image_texture_lookup(filename,
|
||||||
p[1],
|
UV[0],
|
||||||
p[0],
|
UV[1],
|
||||||
tmp_alpha,
|
tmp_alpha,
|
||||||
compress_as_srgb,
|
compress_as_srgb,
|
||||||
ignore_alpha,
|
ignore_alpha,
|
||||||
|
@@ -21,16 +21,19 @@ ccl_device_noinline void svm_node_enter_bump_eval(KernelGlobals kg,
|
|||||||
const AttributeDescriptor desc = find_attribute(kg, sd, ATTR_STD_POSITION_UNDISPLACED);
|
const AttributeDescriptor desc = find_attribute(kg, sd, ATTR_STD_POSITION_UNDISPLACED);
|
||||||
|
|
||||||
if (desc.offset != ATTR_STD_NOT_FOUND) {
|
if (desc.offset != ATTR_STD_NOT_FOUND) {
|
||||||
float3 P, dPdx, dPdy;
|
differential3 dP;
|
||||||
P = primitive_surface_attribute_float3(kg, sd, desc, &dPdx, &dPdy);
|
float3 P = primitive_surface_attribute_float3(kg, sd, desc, &dP.dx, &dP.dy);
|
||||||
|
|
||||||
object_position_transform(kg, sd, &P);
|
object_position_transform(kg, sd, &P);
|
||||||
object_dir_transform(kg, sd, &dPdx);
|
object_dir_transform(kg, sd, &dP.dx);
|
||||||
object_dir_transform(kg, sd, &dPdy);
|
object_dir_transform(kg, sd, &dP.dy);
|
||||||
|
|
||||||
|
const float dP_radius = differential_make_compact(dP);
|
||||||
|
|
||||||
sd->P = P;
|
sd->P = P;
|
||||||
sd->dP.dx = dPdx;
|
make_orthonormals(sd->Ng, &sd->dP.dx, &sd->dP.dy);
|
||||||
sd->dP.dy = dPdy;
|
sd->dP.dx *= dP_radius;
|
||||||
|
sd->dP.dy *= dP_radius;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -193,8 +193,27 @@ bool OIIOImageLoader::load_pixels(const ImageMetaData &metadata,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool do_associate_alpha = associate_alpha &&
|
bool do_associate_alpha = false;
|
||||||
spec.get_int_attribute("oiio:UnassociatedAlpha", 0);
|
if (associate_alpha) {
|
||||||
|
do_associate_alpha = spec.get_int_attribute("oiio:UnassociatedAlpha", 0);
|
||||||
|
|
||||||
|
if (!do_associate_alpha && spec.alpha_channel != -1) {
|
||||||
|
/* Workaround OIIO not detecting TGA file alpha the same as Blender (since #3019).
|
||||||
|
* We want anything not marked as premultiplied alpha to get associated. */
|
||||||
|
if (strcmp(in->format_name(), "targa") == 0) {
|
||||||
|
do_associate_alpha = spec.get_int_attribute("targa:alpha_type", -1) != 4;
|
||||||
|
}
|
||||||
|
/* OIIO DDS reader never sets UnassociatedAlpha attribute. */
|
||||||
|
if (strcmp(in->format_name(), "dds") == 0) {
|
||||||
|
do_associate_alpha = true;
|
||||||
|
}
|
||||||
|
/* Workaround OIIO bug that sets oiio:UnassociatedAlpha on the last layer
|
||||||
|
* but not composite image that we read. */
|
||||||
|
if (strcmp(in->format_name(), "psd") == 0) {
|
||||||
|
do_associate_alpha = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (metadata.type) {
|
switch (metadata.type) {
|
||||||
case IMAGE_DATA_TYPE_BYTE:
|
case IMAGE_DATA_TYPE_BYTE:
|
||||||
|
@@ -57,7 +57,8 @@ struct UpdateObjectTransformState {
|
|||||||
/* Flags which will be synchronized to Integrator. */
|
/* Flags which will be synchronized to Integrator. */
|
||||||
bool have_motion;
|
bool have_motion;
|
||||||
bool have_curves;
|
bool have_curves;
|
||||||
// bool have_points;
|
bool have_points;
|
||||||
|
bool have_volumes;
|
||||||
|
|
||||||
/* ** Scheduling queue. ** */
|
/* ** Scheduling queue. ** */
|
||||||
Scene *scene;
|
Scene *scene;
|
||||||
@@ -545,6 +546,12 @@ void ObjectManager::device_update_object_transform(UpdateObjectTransformState *s
|
|||||||
if (geom->geometry_type == Geometry::HAIR) {
|
if (geom->geometry_type == Geometry::HAIR) {
|
||||||
state->have_curves = true;
|
state->have_curves = true;
|
||||||
}
|
}
|
||||||
|
if (geom->geometry_type == Geometry::POINTCLOUD) {
|
||||||
|
state->have_points = true;
|
||||||
|
}
|
||||||
|
if (geom->geometry_type == Geometry::VOLUME) {
|
||||||
|
state->have_volumes = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Light group. */
|
/* Light group. */
|
||||||
auto it = scene->lightgroups.find(ob->lightgroup);
|
auto it = scene->lightgroups.find(ob->lightgroup);
|
||||||
@@ -591,6 +598,8 @@ void ObjectManager::device_update_transforms(DeviceScene *dscene, Scene *scene,
|
|||||||
state.need_motion = scene->need_motion();
|
state.need_motion = scene->need_motion();
|
||||||
state.have_motion = false;
|
state.have_motion = false;
|
||||||
state.have_curves = false;
|
state.have_curves = false;
|
||||||
|
state.have_points = false;
|
||||||
|
state.have_volumes = false;
|
||||||
state.scene = scene;
|
state.scene = scene;
|
||||||
state.queue_start_object = 0;
|
state.queue_start_object = 0;
|
||||||
|
|
||||||
@@ -658,6 +667,8 @@ void ObjectManager::device_update_transforms(DeviceScene *dscene, Scene *scene,
|
|||||||
|
|
||||||
dscene->data.bvh.have_motion = state.have_motion;
|
dscene->data.bvh.have_motion = state.have_motion;
|
||||||
dscene->data.bvh.have_curves = state.have_curves;
|
dscene->data.bvh.have_curves = state.have_curves;
|
||||||
|
dscene->data.bvh.have_points = state.have_points;
|
||||||
|
dscene->data.bvh.have_volumes = state.have_volumes;
|
||||||
|
|
||||||
dscene->objects.clear_modified();
|
dscene->objects.clear_modified();
|
||||||
dscene->object_motion_pass.clear_modified();
|
dscene->object_motion_pass.clear_modified();
|
||||||
|
@@ -183,7 +183,7 @@ class VolumeMeshBuilder {
|
|||||||
typename GridType::ValueOnIter iter = copy->beginValueOn();
|
typename GridType::ValueOnIter iter = copy->beginValueOn();
|
||||||
|
|
||||||
for (; iter; ++iter) {
|
for (; iter; ++iter) {
|
||||||
if (iter.getValue() < ValueType(volume_clipping)) {
|
if (openvdb::math::Abs(iter.getValue()) < ValueType(volume_clipping)) {
|
||||||
iter.setValueOff();
|
iter.setValueOff();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,6 +294,14 @@ void VolumeMeshBuilder::create_mesh(vector<float3> &vertices,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_OPENVDB
|
||||||
|
static bool is_non_empty_leaf(const openvdb::MaskGrid::TreeType &tree, const openvdb::Coord coord)
|
||||||
|
{
|
||||||
|
auto *leaf_node = tree.probeLeaf(coord);
|
||||||
|
return (leaf_node && !leaf_node->isEmpty());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void VolumeMeshBuilder::generate_vertices_and_quads(vector<ccl::int3> &vertices_is,
|
void VolumeMeshBuilder::generate_vertices_and_quads(vector<ccl::int3> &vertices_is,
|
||||||
vector<QuadData> &quads)
|
vector<QuadData> &quads)
|
||||||
{
|
{
|
||||||
@@ -306,6 +314,10 @@ void VolumeMeshBuilder::generate_vertices_and_quads(vector<ccl::int3> &vertices_
|
|||||||
unordered_map<size_t, int> used_verts;
|
unordered_map<size_t, int> used_verts;
|
||||||
|
|
||||||
for (auto iter = tree.cbeginLeaf(); iter; ++iter) {
|
for (auto iter = tree.cbeginLeaf(); iter; ++iter) {
|
||||||
|
if (iter->isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
openvdb::CoordBBox leaf_bbox = iter->getNodeBoundingBox();
|
openvdb::CoordBBox leaf_bbox = iter->getNodeBoundingBox();
|
||||||
/* +1 to convert from exclusive to include bounds. */
|
/* +1 to convert from exclusive to include bounds. */
|
||||||
leaf_bbox.max() = leaf_bbox.max().offsetBy(1);
|
leaf_bbox.max() = leaf_bbox.max().offsetBy(1);
|
||||||
@@ -333,27 +345,27 @@ void VolumeMeshBuilder::generate_vertices_and_quads(vector<ccl::int3> &vertices_
|
|||||||
static const int LEAF_DIM = openvdb::MaskGrid::TreeType::LeafNodeType::DIM;
|
static const int LEAF_DIM = openvdb::MaskGrid::TreeType::LeafNodeType::DIM;
|
||||||
auto center = leaf_bbox.min() + openvdb::Coord(LEAF_DIM / 2);
|
auto center = leaf_bbox.min() + openvdb::Coord(LEAF_DIM / 2);
|
||||||
|
|
||||||
if (!tree.probeLeaf(openvdb::Coord(center.x() - LEAF_DIM, center.y(), center.z()))) {
|
if (!is_non_empty_leaf(tree, openvdb::Coord(center.x() - LEAF_DIM, center.y(), center.z()))) {
|
||||||
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_X_MIN);
|
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_X_MIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tree.probeLeaf(openvdb::Coord(center.x() + LEAF_DIM, center.y(), center.z()))) {
|
if (!is_non_empty_leaf(tree, openvdb::Coord(center.x() + LEAF_DIM, center.y(), center.z()))) {
|
||||||
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_X_MAX);
|
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_X_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y() - LEAF_DIM, center.z()))) {
|
if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y() - LEAF_DIM, center.z()))) {
|
||||||
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Y_MIN);
|
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Y_MIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y() + LEAF_DIM, center.z()))) {
|
if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y() + LEAF_DIM, center.z()))) {
|
||||||
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Y_MAX);
|
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Y_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y(), center.z() - LEAF_DIM))) {
|
if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y(), center.z() - LEAF_DIM))) {
|
||||||
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Z_MIN);
|
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Z_MIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tree.probeLeaf(openvdb::Coord(center.x(), center.y(), center.z() + LEAF_DIM))) {
|
if (!is_non_empty_leaf(tree, openvdb::Coord(center.x(), center.y(), center.z() + LEAF_DIM))) {
|
||||||
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Z_MAX);
|
create_quad(corners, vertices_is, quads, resolution, used_verts, QUAD_Z_MAX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -43,6 +43,10 @@ Session::Session(const SessionParams ¶ms_, const SceneParams &scene_params)
|
|||||||
|
|
||||||
device = Device::create(params.device, stats, profiler);
|
device = Device::create(params.device, stats, profiler);
|
||||||
|
|
||||||
|
if (device->have_error()) {
|
||||||
|
progress.set_error(device->error_message());
|
||||||
|
}
|
||||||
|
|
||||||
scene = new Scene(scene_params, device);
|
scene = new Scene(scene_params, device);
|
||||||
|
|
||||||
/* Configure path tracer. */
|
/* Configure path tracer. */
|
||||||
@@ -436,8 +440,7 @@ int2 Session::get_effective_tile_size() const
|
|||||||
const int image_width = buffer_params_.width;
|
const int image_width = buffer_params_.width;
|
||||||
const int image_height = buffer_params_.height;
|
const int image_height = buffer_params_.height;
|
||||||
|
|
||||||
/* No support yet for baking with tiles. */
|
if (!params.use_auto_tile) {
|
||||||
if (!params.use_auto_tile || scene->bake_manager->get_baking()) {
|
|
||||||
return make_int2(image_width, image_height);
|
return make_int2(image_width, image_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "graph/node.h"
|
#include "graph/node.h"
|
||||||
#include "scene/background.h"
|
#include "scene/background.h"
|
||||||
|
#include "scene/bake.h"
|
||||||
#include "scene/film.h"
|
#include "scene/film.h"
|
||||||
#include "scene/integrator.h"
|
#include "scene/integrator.h"
|
||||||
#include "scene/scene.h"
|
#include "scene/scene.h"
|
||||||
@@ -367,7 +368,9 @@ void TileManager::update(const BufferParams ¶ms, const Scene *scene)
|
|||||||
node_to_image_spec_atttributes(
|
node_to_image_spec_atttributes(
|
||||||
&write_state_.image_spec, &denoise_params, ATTR_DENOISE_SOCKET_PREFIX);
|
&write_state_.image_spec, &denoise_params, ATTR_DENOISE_SOCKET_PREFIX);
|
||||||
|
|
||||||
if (adaptive_sampling.use) {
|
/* Not adaptive sampling overscan yet for baking, would need overscan also
|
||||||
|
* for buffers read from the output driver. */
|
||||||
|
if (adaptive_sampling.use && !scene->bake_manager->get_baking()) {
|
||||||
overscan_ = 4;
|
overscan_ = 4;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@@ -417,15 +417,11 @@ ccl_device_inline int floor_to_int(float f)
|
|||||||
return float_to_int(floorf(f));
|
return float_to_int(floorf(f));
|
||||||
}
|
}
|
||||||
|
|
||||||
ccl_device_inline int quick_floor_to_int(float x)
|
|
||||||
{
|
|
||||||
return float_to_int(x) - ((x < 0) ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
ccl_device_inline float floorfrac(float x, ccl_private int *i)
|
ccl_device_inline float floorfrac(float x, ccl_private int *i)
|
||||||
{
|
{
|
||||||
*i = quick_floor_to_int(x);
|
float f = floorf(x);
|
||||||
return x - *i;
|
*i = float_to_int(f);
|
||||||
|
return x - f;
|
||||||
}
|
}
|
||||||
|
|
||||||
ccl_device_inline int ceil_to_int(float f)
|
ccl_device_inline int ceil_to_int(float f)
|
||||||
|
@@ -535,18 +535,6 @@ ccl_device_inline float3 pow(float3 v, float e)
|
|||||||
return make_float3(powf(v.x, e), powf(v.y, e), powf(v.z, e));
|
return make_float3(powf(v.x, e), powf(v.y, e), powf(v.z, e));
|
||||||
}
|
}
|
||||||
|
|
||||||
ccl_device_inline int3 quick_floor_to_int3(const float3 a)
|
|
||||||
{
|
|
||||||
#ifdef __KERNEL_SSE__
|
|
||||||
int3 b = int3(_mm_cvttps_epi32(a.m128));
|
|
||||||
int3 isneg = int3(_mm_castps_si128(_mm_cmplt_ps(a.m128, _mm_set_ps1(0.0f))));
|
|
||||||
/* Unsaturated add 0xffffffff is the same as subtract -1. */
|
|
||||||
return b + isneg;
|
|
||||||
#else
|
|
||||||
return make_int3(quick_floor_to_int(a.x), quick_floor_to_int(a.y), quick_floor_to_int(a.z));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
ccl_device_inline bool isfinite_safe(float3 v)
|
ccl_device_inline bool isfinite_safe(float3 v)
|
||||||
{
|
{
|
||||||
return isfinite_safe(v.x) && isfinite_safe(v.y) && isfinite_safe(v.z);
|
return isfinite_safe(v.x) && isfinite_safe(v.y) && isfinite_safe(v.z);
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
#ifndef __UTIL_SSEF_H__
|
#ifndef __UTIL_SSEF_H__
|
||||||
#define __UTIL_SSEF_H__
|
#define __UTIL_SSEF_H__
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "util/ssei.h"
|
#include "util/ssei.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
@@ -521,7 +523,7 @@ __forceinline const ssef round_zero(const ssef &a)
|
|||||||
__forceinline const ssef floor(const ssef &a)
|
__forceinline const ssef floor(const ssef &a)
|
||||||
{
|
{
|
||||||
# ifdef __KERNEL_NEON__
|
# ifdef __KERNEL_NEON__
|
||||||
return vrndnq_f32(a);
|
return vrndmq_f32(a);
|
||||||
# else
|
# else
|
||||||
return _mm_round_ps(a, _MM_FROUND_TO_NEG_INF);
|
return _mm_round_ps(a, _MM_FROUND_TO_NEG_INF);
|
||||||
# endif
|
# endif
|
||||||
@@ -534,6 +536,12 @@ __forceinline const ssef ceil(const ssef &a)
|
|||||||
return _mm_round_ps(a, _MM_FROUND_TO_POS_INF);
|
return _mm_round_ps(a, _MM_FROUND_TO_POS_INF);
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
# else
|
||||||
|
/* Non-SSE4.1 fallback, needed for floorfrac. */
|
||||||
|
__forceinline const ssef floor(const ssef &a)
|
||||||
|
{
|
||||||
|
return _mm_set_ps(floorf(a.f[3]), floorf(a.f[2]), floorf(a.f[1]), floorf(a.f[0]));
|
||||||
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
__forceinline ssei truncatei(const ssef &a)
|
__forceinline ssei truncatei(const ssef &a)
|
||||||
@@ -541,20 +549,11 @@ __forceinline ssei truncatei(const ssef &a)
|
|||||||
return _mm_cvttps_epi32(a.m128);
|
return _mm_cvttps_epi32(a.m128);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is about 25% faster than straightforward floor to integer conversion
|
|
||||||
* due to better pipelining.
|
|
||||||
*
|
|
||||||
* Unsaturated add 0xffffffff (a < 0) is the same as subtract -1.
|
|
||||||
*/
|
|
||||||
__forceinline ssei floori(const ssef &a)
|
|
||||||
{
|
|
||||||
return truncatei(a) + cast((a < 0.0f).m128);
|
|
||||||
}
|
|
||||||
|
|
||||||
__forceinline ssef floorfrac(const ssef &x, ssei *i)
|
__forceinline ssef floorfrac(const ssef &x, ssei *i)
|
||||||
{
|
{
|
||||||
*i = floori(x);
|
ssef f = floor(x);
|
||||||
return x - ssef(*i);
|
*i = truncatei(f);
|
||||||
|
return x - f;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@@ -11,7 +11,7 @@ CCL_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
ccl_device_forceinline float3 transform_inverse_cross(const float3 a, const float3 b)
|
ccl_device_forceinline float3 transform_inverse_cross(const float3 a, const float3 b)
|
||||||
{
|
{
|
||||||
#ifdef __AVX2__
|
#if defined(__AVX2__) && defined(__KERNEL_SSE2__)
|
||||||
const ssef sse_a = (const __m128 &)a;
|
const ssef sse_a = (const __m128 &)a;
|
||||||
const ssef sse_b = (const __m128 &)b;
|
const ssef sse_b = (const __m128 &)b;
|
||||||
const ssef r = shuffle<1, 2, 0, 3>(
|
const ssef r = shuffle<1, 2, 0, 3>(
|
||||||
|
@@ -739,6 +739,13 @@ extern unsigned int GHOST_GetContextDefaultOpenGLFramebuffer(GHOST_ContextHandle
|
|||||||
*/
|
*/
|
||||||
extern unsigned int GHOST_GetDefaultOpenGLFramebuffer(GHOST_WindowHandle windowhandle);
|
extern unsigned int GHOST_GetDefaultOpenGLFramebuffer(GHOST_WindowHandle windowhandle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use multitouch gestures if supported.
|
||||||
|
* \param systemhandle: The handle to the system.
|
||||||
|
* \param use: Enable or disable.
|
||||||
|
*/
|
||||||
|
extern void GHOST_SetMultitouchGestures(GHOST_SystemHandle systemhandle, const bool use);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set which tablet API to use. Only affects Windows, other platforms have a single API.
|
* Set which tablet API to use. Only affects Windows, other platforms have a single API.
|
||||||
* \param systemhandle: The handle to the system.
|
* \param systemhandle: The handle to the system.
|
||||||
|
@@ -420,6 +420,12 @@ class GHOST_ISystem {
|
|||||||
*/
|
*/
|
||||||
virtual GHOST_TSuccess getButtonState(GHOST_TButton mask, bool &isDown) const = 0;
|
virtual GHOST_TSuccess getButtonState(GHOST_TButton mask, bool &isDown) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable multitouch gestures if supported.
|
||||||
|
* \param use: Enable or disable.
|
||||||
|
*/
|
||||||
|
virtual void setMultitouchGestures(const bool use) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set which tablet API to use. Only affects Windows, other platforms have a single API.
|
* Set which tablet API to use. Only affects Windows, other platforms have a single API.
|
||||||
* \param api: Enum indicating which API to use.
|
* \param api: Enum indicating which API to use.
|
||||||
|
@@ -735,6 +735,12 @@ GHOST_TSuccess GHOST_InvalidateWindow(GHOST_WindowHandle windowhandle)
|
|||||||
return window->invalidate();
|
return window->invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GHOST_SetMultitouchGestures(GHOST_SystemHandle systemhandle, const bool use)
|
||||||
|
{
|
||||||
|
GHOST_ISystem *system = GHOST_ISystem::getSystem();
|
||||||
|
return system->setMultitouchGestures(use);
|
||||||
|
}
|
||||||
|
|
||||||
void GHOST_SetTabletAPI(GHOST_SystemHandle systemhandle, GHOST_TTabletAPI api)
|
void GHOST_SetTabletAPI(GHOST_SystemHandle systemhandle, GHOST_TTabletAPI api)
|
||||||
{
|
{
|
||||||
GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
|
GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
|
||||||
|
@@ -200,7 +200,8 @@ static void makeAttribList(std::vector<NSOpenGLPixelFormatAttribute> &attribs,
|
|||||||
bool coreProfile,
|
bool coreProfile,
|
||||||
bool stereoVisual,
|
bool stereoVisual,
|
||||||
bool needAlpha,
|
bool needAlpha,
|
||||||
bool softwareGL)
|
bool softwareGL,
|
||||||
|
bool increasedSamplerLimit)
|
||||||
{
|
{
|
||||||
attribs.clear();
|
attribs.clear();
|
||||||
|
|
||||||
@@ -217,6 +218,12 @@ static void makeAttribList(std::vector<NSOpenGLPixelFormatAttribute> &attribs,
|
|||||||
else {
|
else {
|
||||||
attribs.push_back(NSOpenGLPFAAccelerated);
|
attribs.push_back(NSOpenGLPFAAccelerated);
|
||||||
attribs.push_back(NSOpenGLPFANoRecovery);
|
attribs.push_back(NSOpenGLPFANoRecovery);
|
||||||
|
|
||||||
|
/* Attempt to initialise device with extended sampler limit.
|
||||||
|
* Resolves EEVEE purple rendering artifacts on macOS. */
|
||||||
|
if (increasedSamplerLimit) {
|
||||||
|
attribs.push_back((NSOpenGLPixelFormatAttribute)400);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stereoVisual)
|
if (stereoVisual)
|
||||||
@@ -232,82 +239,126 @@ static void makeAttribList(std::vector<NSOpenGLPixelFormatAttribute> &attribs,
|
|||||||
|
|
||||||
GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
||||||
{
|
{
|
||||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
@autoreleasepool {
|
||||||
|
|
||||||
#ifdef GHOST_OPENGL_ALPHA
|
#ifdef GHOST_OPENGL_ALPHA
|
||||||
static const bool needAlpha = true;
|
static const bool needAlpha = true;
|
||||||
#else
|
#else
|
||||||
static const bool needAlpha = false;
|
static const bool needAlpha = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Command-line argument would be better. */
|
/* Command-line argument would be better. */
|
||||||
static bool softwareGL = getenv("BLENDER_SOFTWAREGL");
|
static bool softwareGL = getenv("BLENDER_SOFTWAREGL");
|
||||||
|
|
||||||
std::vector<NSOpenGLPixelFormatAttribute> attribs;
|
NSOpenGLPixelFormat *pixelFormat = nil;
|
||||||
attribs.reserve(40);
|
std::vector<NSOpenGLPixelFormatAttribute> attribs;
|
||||||
makeAttribList(attribs, m_coreProfile, m_stereoVisual, needAlpha, softwareGL);
|
bool increasedSamplerLimit = false;
|
||||||
|
|
||||||
NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:&attribs[0]];
|
/* Attempt to initialize device with increased sampler limit.
|
||||||
if (pixelFormat == nil) {
|
* If this is unsupported and initialization fails, initialize GL Context as normal.
|
||||||
goto error;
|
*
|
||||||
}
|
* NOTE: This is not available when using the SoftwareGL path, or for Intel-based
|
||||||
|
* platforms. */
|
||||||
|
if (!softwareGL) {
|
||||||
|
if (@available(macos 11.0, *)) {
|
||||||
|
increasedSamplerLimit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const int max_ctx_attempts = increasedSamplerLimit ? 2 : 1;
|
||||||
|
for (int ctx_create_attempt = 0; ctx_create_attempt < max_ctx_attempts; ctx_create_attempt++) {
|
||||||
|
|
||||||
m_openGLContext = [[NSOpenGLContext alloc] initWithFormat:pixelFormat
|
attribs.clear();
|
||||||
shareContext:s_sharedOpenGLContext];
|
attribs.reserve(40);
|
||||||
[pixelFormat release];
|
makeAttribList(
|
||||||
|
attribs, m_coreProfile, m_stereoVisual, needAlpha, softwareGL, increasedSamplerLimit);
|
||||||
|
|
||||||
[m_openGLContext makeCurrentContext];
|
pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:&attribs[0]];
|
||||||
|
if (pixelFormat == nil) {
|
||||||
|
/* If pixel format creation fails when testing increased sampler limit,
|
||||||
|
* attempt intialisation again with feature disabled, otherwise, fail. */
|
||||||
|
if (increasedSamplerLimit) {
|
||||||
|
increasedSamplerLimit = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return GHOST_kFailure;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_debug) {
|
/* Attempt to create context. */
|
||||||
GLint major = 0, minor = 0;
|
m_openGLContext = [[NSOpenGLContext alloc] initWithFormat:pixelFormat
|
||||||
glGetIntegerv(GL_MAJOR_VERSION, &major);
|
shareContext:s_sharedOpenGLContext];
|
||||||
glGetIntegerv(GL_MINOR_VERSION, &minor);
|
[pixelFormat release];
|
||||||
fprintf(stderr, "OpenGL version %d.%d%s\n", major, minor, softwareGL ? " (software)" : "");
|
|
||||||
fprintf(stderr, "Renderer: %s\n", glGetString(GL_RENDERER));
|
if (m_openGLContext == nil) {
|
||||||
}
|
/* If context creation fails when testing increased sampler limit,
|
||||||
|
* attempt re-creation with feature disabled. Otherwise, error. */
|
||||||
|
if (increasedSamplerLimit) {
|
||||||
|
increasedSamplerLimit = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default context creation attempt failed. */
|
||||||
|
return GHOST_kFailure;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Created GL context successfully, activate. */
|
||||||
|
[m_openGLContext makeCurrentContext];
|
||||||
|
|
||||||
|
/* When increasing sampler limit, verify created context is a supported configuration. */
|
||||||
|
if (increasedSamplerLimit) {
|
||||||
|
const char *vendor = (const char *)glGetString(GL_VENDOR);
|
||||||
|
const char *renderer = (const char *)glGetString(GL_RENDERER);
|
||||||
|
|
||||||
|
/* If generated context type is unsupported, release existing context and
|
||||||
|
* fallback to creating a normal context below. */
|
||||||
|
if (strstr(vendor, "Intel") || strstr(renderer, "Software")) {
|
||||||
|
[m_openGLContext release];
|
||||||
|
m_openGLContext = nil;
|
||||||
|
increasedSamplerLimit = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_debug) {
|
||||||
|
GLint major = 0, minor = 0;
|
||||||
|
glGetIntegerv(GL_MAJOR_VERSION, &major);
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION, &minor);
|
||||||
|
fprintf(stderr, "OpenGL version %d.%d%s\n", major, minor, softwareGL ? " (software)" : "");
|
||||||
|
fprintf(stderr, "Renderer: %s\n", glGetString(GL_RENDERER));
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef GHOST_WAIT_FOR_VSYNC
|
#ifdef GHOST_WAIT_FOR_VSYNC
|
||||||
{
|
{
|
||||||
GLint swapInt = 1;
|
GLint swapInt = 1;
|
||||||
/* Wait for vertical-sync, to avoid tearing artifacts. */
|
/* Wait for vertical-sync, to avoid tearing artifacts. */
|
||||||
[m_openGLContext setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
|
[m_openGLContext setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
initContextGLEW();
|
initContextGLEW();
|
||||||
|
|
||||||
if (m_metalView) {
|
if (m_metalView) {
|
||||||
if (m_defaultFramebuffer == 0) {
|
if (m_defaultFramebuffer == 0) {
|
||||||
/* Create a virtual frame-buffer. */
|
/* Create a virtual frame-buffer. */
|
||||||
[m_openGLContext makeCurrentContext];
|
[m_openGLContext makeCurrentContext];
|
||||||
metalInitFramebuffer();
|
metalInitFramebuffer();
|
||||||
|
initClearGL();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (m_openGLView) {
|
||||||
|
[m_openGLView setOpenGLContext:m_openGLContext];
|
||||||
|
[m_openGLContext setView:m_openGLView];
|
||||||
initClearGL();
|
initClearGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[m_openGLContext flushBuffer];
|
||||||
|
|
||||||
|
if (s_sharedCount == 0)
|
||||||
|
s_sharedOpenGLContext = m_openGLContext;
|
||||||
|
|
||||||
|
s_sharedCount++;
|
||||||
}
|
}
|
||||||
else if (m_openGLView) {
|
|
||||||
[m_openGLView setOpenGLContext:m_openGLContext];
|
|
||||||
[m_openGLContext setView:m_openGLView];
|
|
||||||
initClearGL();
|
|
||||||
}
|
|
||||||
|
|
||||||
[m_openGLContext flushBuffer];
|
|
||||||
|
|
||||||
if (s_sharedCount == 0)
|
|
||||||
s_sharedOpenGLContext = m_openGLContext;
|
|
||||||
|
|
||||||
s_sharedCount++;
|
|
||||||
|
|
||||||
[pool drain];
|
|
||||||
|
|
||||||
return GHOST_kSuccess;
|
return GHOST_kSuccess;
|
||||||
|
|
||||||
error:
|
|
||||||
|
|
||||||
[pixelFormat release];
|
|
||||||
|
|
||||||
[pool drain];
|
|
||||||
|
|
||||||
return GHOST_kFailure;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GHOST_TSuccess GHOST_ContextCGL::releaseNativeHandles()
|
GHOST_TSuccess GHOST_ContextCGL::releaseNativeHandles()
|
||||||
|
@@ -318,7 +318,7 @@ GHOST_TSuccess GHOST_ContextGLX::releaseNativeHandles()
|
|||||||
|
|
||||||
GHOST_TSuccess GHOST_ContextGLX::setSwapInterval(int interval)
|
GHOST_TSuccess GHOST_ContextGLX::setSwapInterval(int interval)
|
||||||
{
|
{
|
||||||
if (!GLXEW_EXT_swap_control) {
|
if (GLXEW_EXT_swap_control) {
|
||||||
::glXSwapIntervalEXT(m_display, m_window, interval);
|
::glXSwapIntervalEXT(m_display, m_window, interval);
|
||||||
return GHOST_kSuccess;
|
return GHOST_kSuccess;
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,7 @@ GHOST_System::GHOST_System()
|
|||||||
#ifdef WITH_INPUT_NDOF
|
#ifdef WITH_INPUT_NDOF
|
||||||
m_ndofManager(0),
|
m_ndofManager(0),
|
||||||
#endif
|
#endif
|
||||||
|
m_multitouchGestures(true),
|
||||||
m_tabletAPI(GHOST_kTabletAutomatic),
|
m_tabletAPI(GHOST_kTabletAutomatic),
|
||||||
m_is_debug_enabled(false)
|
m_is_debug_enabled(false)
|
||||||
{
|
{
|
||||||
@@ -307,6 +308,11 @@ GHOST_TSuccess GHOST_System::getButtonState(GHOST_TButton mask, bool &isDown) co
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GHOST_System::setMultitouchGestures(const bool use)
|
||||||
|
{
|
||||||
|
m_multitouchGestures = use;
|
||||||
|
}
|
||||||
|
|
||||||
void GHOST_System::setTabletAPI(GHOST_TTabletAPI api)
|
void GHOST_System::setTabletAPI(GHOST_TTabletAPI api)
|
||||||
{
|
{
|
||||||
m_tabletAPI = api;
|
m_tabletAPI = api;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user