summarylogtreecommitdiffstats
path: root/blender.patch
diff options
context:
space:
mode:
Diffstat (limited to 'blender.patch')
-rw-r--r--blender.patch257
1 files changed, 162 insertions, 95 deletions
diff --git a/blender.patch b/blender.patch
index fe767829a70a..dc4982ad1148 100644
--- a/blender.patch
+++ b/blender.patch
@@ -10,77 +10,6 @@ diff -x .git -ur usd.orig/cmake/defaults/Packages.cmake external_usd/cmake/defau
add_definitions(${TBB_DEFINITIONS})
# --math
-diff -x .git -ur usd.orig/pxr/base/plug/initConfig.cpp external_usd/pxr/base/plug/initConfig.cpp
---- usd.orig/pxr/base/plug/initConfig.cpp.orig 2020-06-12 17:20:07.478199779 +0200
-+++ external_usd/pxr/base/plug/initConfig.cpp 2020-06-12 17:25:28.648588552 +0200
-@@ -69,10 +69,40 @@
-
- ARCH_CONSTRUCTOR(Plug_InitConfig, 2, void)
- {
-+ /* The contents of this constructor have been moved to usd_initialise_plugin_path(...) */
-+}
-+
-+}; // end of anonymous namespace
-+
-+/**
-+ * The contents of this function used to be in the static constructor Plug_InitConfig.
-+ * This static constructor made it impossible for Blender to pass a path to the USD
-+ * library at runtime, as the constructor would run before Blender's main() function.
-+ *
-+ * This function is wrapped in a C function of the same name (defined below),
-+ * so that it can be called from Blender's main() function.
-+ *
-+ * The datafiles_usd_path path is used to point to the USD plugin path when Blender
-+ * has been installed. The fallback_usd_path path should point to the build-time
-+ * location of the USD plugin files so that Blender can be run on a development machine
-+ * without requiring an installation step.
-+ */
-+void
-+usd_initialise_plugin_path(const char *datafiles_usd_path)
-+{
- std::vector<std::string> result;
-
- std::vector<std::string> debugMessages;
-
-+ // Add Blender-specific paths. They MUST end in a slash, or symlinks will not be treated as directory.
-+ if (datafiles_usd_path != NULL && datafiles_usd_path[0] != '\0') {
-+ std::string datafiles_usd_path_str(datafiles_usd_path);
-+ if (datafiles_usd_path_str.back() != '/') {
-+ datafiles_usd_path_str += "/";
-+ }
-+ result.push_back(datafiles_usd_path_str);
-+ }
-+
- // Determine the absolute path to the Plug shared library. Any relative
- // paths specified in the plugin search path will be anchored to this
- // directory, to allow for relocatability. Note that this can fail when pxr
-@@ -114,9 +144,24 @@
- _AppendPathList(&result, installLocation, binaryPath);
- #endif // PXR_INSTALL_LOCATION
-
-- Plug_SetPaths(result, debugMessages);
--}
-+ if (!TfGetenv("PXR_PATH_DEBUG").empty()) {
-+ printf("USD Plugin paths: (%zu in total):\n", result.size());
-+ for(const std::string &path : result) {
-+ printf(" %s\n", path.c_str());
-+ }
-+ }
-
-+ Plug_SetPaths(result, debugMessages);
- }
-
- PXR_NAMESPACE_CLOSE_SCOPE
-+
-+/* Workaround to make it possible to pass a path at runtime to USD. */
-+extern "C" {
-+void
-+usd_initialise_plugin_path(
-+ const char *datafiles_usd_path)
-+{
-+ PXR_NS::usd_initialise_plugin_path(datafiles_usd_path);
-+}
-+}
diff -Naur external_usd_base/cmake/macros/Public.cmake external_usd/cmake/macros/Public.cmake
--- external_usd_base/cmake/macros/Public.cmake 2019-10-24 14:39:53 -0600
+++ external_usd/cmake/macros/Public.cmake 2020-01-11 13:33:29 -0700
@@ -97,36 +26,174 @@ diff -Naur external_usd_base/cmake/macros/Public.cmake external_usd/cmake/macros
endforeach()
foreach(lib ${PXR_OBJECT_LIBS})
set(objects "${objects};\$<TARGET_OBJECTS:${lib}>")
+diff -ru USD-20.11/pxr/base/tf/pxrLZ4/lz4.cpp external_usd/pxr/base/tf/pxrLZ4/lz4.cpp
+--- USD-20.11/pxr/base/tf/pxrLZ4/lz4.cpp 2020-10-14 19:25:19.000000000 +0100
++++ external_usd/pxr/base/tf/pxrLZ4/lz4.cpp 2021-02-09 09:28:51.496190085 +0000
+@@ -614,6 +614,15 @@
+ /*-************************************
+ * Internal Definitions used in Tests
+ **************************************/
++
++/*******************************************************************
++ * Disabled in Blender. The BLOSC library also exposes these
++ * functions, and this causes 'duplicate symbol' linker errors.
++ *
++ * This problem has been reported upstream at
++ * https://github.com/PixarAnimationStudios/USD/issues/1447
++ *
++ *******************************************************************
+ #if defined (__cplusplus)
+ extern "C" {
+ #endif
+@@ -627,6 +636,7 @@
+ #if defined (__cplusplus)
+ }
+ #endif
++********************************************************************/
+
+ /*-******************************
+ * Compression functions
+
+From 442d087962f762deeb8b6e49a0955753fcf9aeb9 Mon Sep 17 00:00:00 2001
+From: Tsahi Zidenberg <tsahee@amazon.com>
+Date: Sun, 15 Nov 2020 15:18:24 +0000
+Subject: [PATCH 1/2] stackTrace: support aarch64/linux
+
+stacktrace calls syscall directly via assembler. Create compatible
+aarch64 code.
+---
+ pxr/base/arch/stackTrace.cpp | 30 ++++++++++++++++++++++++------
+ 1 file changed, 24 insertions(+), 6 deletions(-)
-diff --git a/pxr/base/arch/align.h b/pxr/base/arch/align.h
-index f3cabf4..ebc8a69 100644
---- a/pxr/base/arch/align.h
-+++ b/pxr/base/arch/align.h
-@@ -77,7 +77,11 @@ ArchAlignMemory(void *base)
- /// The size of a CPU cache line on the current processor architecture in bytes.
- ///
- /// \hideinitializer
-+#if defined(ARCH_OS_DARWIN) && defined(ARCH_CPU_ARM)
-+#define ARCH_CACHE_LINE_SIZE 128
+diff --git a/pxr/base/arch/stackTrace.cpp b/pxr/base/arch/stackTrace.cpp
+index dcc1dfd46..c11aabeb1 100644
+--- a/pxr/base/arch/stackTrace.cpp
++++ b/pxr/base/arch/stackTrace.cpp
+@@ -583,7 +583,6 @@ nonLockingLinux__execve (const char *file,
+ char *const argv[],
+ char *const envp[])
+ {
+-#if defined(ARCH_BITS_64)
+ /*
+ * We make a direct system call here, because we can't find an
+ * execve which corresponds with the non-locking fork we call
+@@ -594,7 +593,27 @@ nonLockingLinux__execve (const char *file,
+ * hangs in a threaded app. (We use the non-locking fork to get
+ * around problems with forking when we have had memory
+ * corruption.) whew.
+- *
++ */
++
++ unsigned long result;
++
++#if defined (__aarch64__)
++ {
++ register long __file_result asm ("x0") = (long)file;
++ register char* const* __argv asm ("x1") = argv;
++ register char* const* __envp asm ("x2") = envp;
++ register long __num_execve asm ("x8") = 221;
++ __asm__ __volatile__ (
++ "svc 0"
++ : "=r" (__file_result)
++ : "r"(__num_execve), "r" (__file_result), "r" (__argv), "r" (__envp)
++ : "memory"
++ );
++ result = __file_result;
++ }
++#elif defined(ARCH_CPU_INTEL) && defined(ARCH_BITS_64)
++
++ /*
+ * %rdi, %rsi, %rdx, %rcx, %r8, %r9 are args 0-5
+ * syscall clobbers %rcx and %r11
+ *
+@@ -603,7 +622,6 @@ nonLockingLinux__execve (const char *file,
+ * constraints to gcc.
+ */
+
+- unsigned long result;
+ __asm__ __volatile__ (
+ "mov %0, %%rdi \n\t"
+ "mov %%rcx, %%rsi \n\t"
+@@ -614,6 +632,9 @@ nonLockingLinux__execve (const char *file,
+ : "0" (file), "c" (argv), "d" (envp)
+ : "memory", "cc", "r11"
+ );
+#else
- #define ARCH_CACHE_LINE_SIZE 64
++#error Unknown architecture
+#endif
- ///@}
-
-diff --git a/pxr/base/arch/math.h b/pxr/base/arch/math.h
-index 3e66c37..64a052c 100644
---- a/pxr/base/arch/math.h
-+++ b/pxr/base/arch/math.h
-@@ -42,7 +42,7 @@ PXR_NAMESPACE_OPEN_SCOPE
- /// \addtogroup group_arch_Math
- ///@{
+ if (result >= 0xfffffffffffff000) {
+ errno = -result;
+@@ -621,9 +642,6 @@ nonLockingLinux__execve (const char *file,
+ }
--#if defined (ARCH_CPU_INTEL) || defined(doxygen)
-+#if defined (ARCH_CPU_INTEL) || defined(ARCH_CPU_ARM) || defined(doxygen)
+ return result;
+-#else
+-#error Unknown architecture
+-#endif
+ }
- /// This is the smallest value e such that 1+e^2 == 1, using floats.
- /// True for all IEEE754 chipsets.
+ #endif
+From a1dffe02519bb3c6ccbbe8c6c58304da5db98995 Mon Sep 17 00:00:00 2001
+From: Tsahi Zidenberg <tsahee@amazon.com>
+Date: Sun, 15 Nov 2020 15:22:52 +0000
+Subject: [PATCH 2/2] timing: support aarch64/linux
+The aarch64 arch-timer is directly accessible to userspace via two
+registers:
+CNTVCT_EL0 - holds the current counter value
+CNTFRQ_EL0 - holds the counter frequency (in Hz)
+---
+ pxr/base/arch/timing.cpp | 6 ++++++
+ pxr/base/arch/timing.h | 6 +++++-
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+diff --git a/pxr/base/arch/timing.cpp b/pxr/base/arch/timing.cpp
+index 27ad58fed..9022950c1 100644
+--- a/pxr/base/arch/timing.cpp
++++ b/pxr/base/arch/timing.cpp
+@@ -59,6 +59,11 @@ ARCH_HIDDEN
+ void
+ Arch_InitTickTimer()
+ {
++#ifdef __aarch64__
++ uint64_t counter_hz;
++ __asm __volatile("mrs %0, CNTFRQ_EL0" : "=&r" (counter_hz));
++ Arch_NanosecondsPerTick = double(1e9) / double(counter_hz);
++#else
+ // NOTE: Normally ifstream would be cleaner, but it causes crashes when
+ // used in conjunction with DSOs and the Intel Compiler.
+ FILE *in;
+@@ -135,6 +140,7 @@ Arch_InitTickTimer()
+ }
+
+ Arch_NanosecondsPerTick = double(1e9) / double(cpuHz);
++#endif
+ }
+ #elif defined(ARCH_OS_WINDOWS)
+
+diff --git a/pxr/base/arch/timing.h b/pxr/base/arch/timing.h
+index 67ec0d15f..6dc3e85a0 100644
+--- a/pxr/base/arch/timing.h
++++ b/pxr/base/arch/timing.h
+@@ -36,7 +36,7 @@
+ /// \addtogroup group_arch_SystemFunctions
+ ///@{
+
+-#if defined(ARCH_OS_LINUX)
++#if defined(ARCH_OS_LINUX) && defined(ARCH_CPU_INTEL)
+ #include <x86intrin.h>
+ #elif defined(ARCH_OS_DARWIN)
+ #include <mach/mach_time.h>
+@@ -69,6 +69,10 @@ ArchGetTickTime()
+ #elif defined(ARCH_CPU_INTEL)
+ // On Intel we'll use the rdtsc instruction.
+ return __rdtsc();
++#elif defined (__aarch64__)
++ uint64_t result;
++ __asm __volatile("mrs %0, CNTVCT_EL0" : "=&r" (result));
++ return result;
+ #else
+ #error Unknown architecture.
+ #endif