Compare commits

..

7 commits

Author SHA1 Message Date
Benjamin A. Beasley
7046cd69ae Rebuilt for breaking openshadinglanguage 1.14 update 2026-02-19 09:12:23 +00:00
Luya Tshimbalanga
15312f3045 Revert "Remove unused MaterialX support"
This reverts commit b5e913b0f3.
2026-02-19 09:03:56 +00:00
Luya Tshimbalanga
d695a7426b Remove unused MaterialX support
This commit removed the unusued materialx support dropped by
upstream.
2026-01-07 19:01:02 -08:00
Benjamin A. Beasley
f8baedc2d2 Backport fix for CVE-2025-14439/GHSA-grjp-54v3-c442 (fix RHBZ#2422275) 2025-12-25 00:26:30 +00:00
Benjamin A. Beasley
f4f5b9f86d Backport fixes for CVE-2025-64181 etc. in OpenEXRCore 2025-12-02 20:05:43 +00:00
Benjamin A. Beasley
0890b361b4 Rebuilt with stb_image patched for two new security bugs 2025-11-25 20:13:31 +00:00
Benjamin A. Beasley
5e6aa83e99 Use macros for supported architectures
[skip changelog]
2025-11-25 20:13:16 +00:00
17 changed files with 1263 additions and 538 deletions

7
.gitignore vendored
View file

@ -17,10 +17,3 @@
/OpenUSD-24.11.tar.gz
/OpenUSD-25.02.tar.gz
/OpenUSD-25.02a.tar.gz
/OpenUSD-25.05.tar.gz
/OpenUSD-25.05.01.tar.gz
/OpenUSD-25.08.tar.gz
/OpenUSD-25.11.tar.gz
/OpenUSD-26.03.tar.gz
/OpenUSD-26.05.tar.gz
/OpenUSD-26.08.tar.gz

View file

@ -1,18 +1,18 @@
From 3e51fb244dd264b09179999d29dc7c5afd7e71e3 Mon Sep 17 00:00:00 2001
From 600958d513ee65fa967639bed1fc56e3061fa05f Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Tue, 2 Dec 2025 10:43:31 +0000
Subject: [PATCH] Backport fixes for CVE-2025-64181 etc. in OpenEXRCore
---
.../hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c | 20 ++++++++++++++++---
.../OpenEXR/OpenEXRCore/internal_util.h | 4 ++--
.../OpenEXR/OpenEXRCore/parse_header.c | 4 +++-
pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c | 20 ++++++++++++++++---
.../hio/OpenEXR/OpenEXRCore/internal_util.h | 4 ++--
.../hio/OpenEXR/OpenEXRCore/parse_header.c | 4 +++-
3 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c
index cfe80b4cd68..e11209fe660 100644
--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c
+++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/chunk.c
diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c
index cfe80b4cd..e11209fe6 100644
--- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c
+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/chunk.c
@@ -1292,6 +1292,16 @@ exr_read_tile_chunk_info (
return pctxt->report_error (
pctxt, EXR_ERR_INVALID_ARGUMENT, "Invalid packed size of 0");
@ -49,10 +49,10 @@ index cfe80b4cd68..e11209fe660 100644
}
else
rv = EXR_ERR_SUCCESS;
diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h
index 3c6f02786cc..e0fa3933d92 100644
--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h
+++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/internal_util.h
diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h
index 3c6f02786..e0fa3933d 100644
--- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h
+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/internal_util.h
@@ -31,10 +31,10 @@ compute_sampled_height (int height, int y_sampling, int start_y)
else
start = start_y;
@ -66,10 +66,10 @@ index 3c6f02786cc..e0fa3933d92 100644
else
nlines = (end - start) / y_sampling + 1;
}
diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c
index d7230392693..8b6cf78cc59 100644
--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c
+++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/parse_header.c
diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c
index d72303926..8b6cf78cc 100644
--- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c
+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/parse_header.c
@@ -2293,7 +2293,9 @@ internal_exr_compute_chunk_offset_size (struct _internal_exr_part* curpart)
w = (uint64_t) (((int64_t) dw.max.x) - ((int64_t) dw.min.x) + 1);
@ -81,3 +81,6 @@ index d7230392693..8b6cf78cc59 100644
{
const exr_attr_tiledesc_t* tiledesc = curpart->tiles->tiledesc;
int64_t tilecount = 0;
--
2.52.0

View file

@ -1,4 +1,4 @@
From ee4e9b30e14133e35c23821d3dc7aa93df354a38 Mon Sep 17 00:00:00 2001
From 0beb6ef89859d29599c159cb52e2b85419adb413 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Fri, 27 Oct 2023 12:56:58 -0400
Subject: [PATCH] Downstream-only: add an SONAME version
@ -33,15 +33,15 @@ built with -DPXR_BUILD_EXAMPLES=OFF, but it is.)
---
cmake/defaults/Version.cmake | 6 ++++++
cmake/macros/Private.cmake | 1 +
cmake/macros/Public.cmake | 2 ++
3 files changed, 9 insertions(+)
cmake/macros/Public.cmake | 1 +
3 files changed, 8 insertions(+)
diff --git a/cmake/defaults/Version.cmake b/cmake/defaults/Version.cmake
index c31b5e8d9..fabb45397 100644
index 6dd5d5f2d..0a20d47c5 100644
--- a/cmake/defaults/Version.cmake
+++ b/cmake/defaults/Version.cmake
@@ -10,3 +10,9 @@ set(PXR_MINOR_VERSION "26")
set(PXR_PATCH_VERSION "8") # NOTE: Must not have leading 0 for single digits
@@ -10,3 +10,9 @@ set(PXR_MINOR_VERSION "25")
set(PXR_PATCH_VERSION "2") # NOTE: Must not have leading 0 for single digits
math(EXPR PXR_VERSION "${PXR_MAJOR_VERSION} * 10000 + ${PXR_MINOR_VERSION} * 100 + ${PXR_PATCH_VERSION}")
+
@ -51,37 +51,29 @@ index c31b5e8d9..fabb45397 100644
+ "Downstream shared object version"
+)
diff --git a/cmake/macros/Private.cmake b/cmake/macros/Private.cmake
index cddb4e095..5e4b4603a 100644
index 6fe1134c1..692924954 100644
--- a/cmake/macros/Private.cmake
+++ b/cmake/macros/Private.cmake
@@ -1355,6 +1355,7 @@ function(_pxr_library NAME)
FOLDER "${folder}"
POSITION_INDEPENDENT_CODE ON
@@ -1372,6 +1372,7 @@ function(_pxr_library NAME)
IMPORT_PREFIX "${args_PREFIX}"
+ SOVERSION ${PXR_DOWNSTREAM_SOVERSION}
PREFIX "${args_PREFIX}"
SUFFIX "${args_SUFFIX}"
+ SOVERSION ${PXR_DOWNSTREAM_SOVERSION}
)
target_compile_definitions(${NAME}
diff --git a/cmake/macros/Public.cmake b/cmake/macros/Public.cmake
index 5f6a5456b..553b645ec 100644
index 2647707ac..1917edf87 100644
--- a/cmake/macros/Public.cmake
+++ b/cmake/macros/Public.cmake
@@ -415,6 +415,7 @@ function(pxr_library NAME)
TYPE "${args_TYPE}"
PREFIX "${prefix}"
SUFFIX "${suffix}"
+ SOVERSION ${PXR_DOWNSTREAM_SOVERSION}
SUBDIR "${subdir}"
CPPFILES "${args_CPPFILES};${${NAME}_CPPFILES}"
PUBLIC_HEADERS "${args_PUBLIC_HEADERS};${${NAME}_PUBLIC_HEADERS}"
@@ -1213,6 +1214,7 @@ function(pxr_toplevel_prologue)
@@ -1115,6 +1115,7 @@ function(pxr_toplevel_prologue)
FOLDER "${folder}"
PREFIX "${libPrefix}"
IMPORT_PREFIX "${libPrefix}"
OUTPUT_NAME ${libName}
+ SOVERSION ${PXR_DOWNSTREAM_SOVERSION}
+ SOVERSION ${PXR_DOWNSTREAM_SOVERSION}
)
_get_install_dir("lib" libInstallPrefix)
install(
--
2.55.0
2.48.1

View file

@ -1,65 +0,0 @@
From 817e23674f1b4ba62481c4e9794f0665a44d83f8 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Fri, 1 Aug 2025 08:47:41 -0400
Subject: [PATCH] Downstream-only: use Valgrind macro instead of inline
assembly
Upstream already has a plan to make this change, but is waiting to be
able to add a build dependency on valgrind-devel. We have no such
obstacle, and this change fixes the inline assembly failing to compile
on aarch64.
---
pxr/exec/vdf/executorDataVector.cpp | 28 +++-------------------------
1 file changed, 3 insertions(+), 25 deletions(-)
diff --git a/pxr/exec/vdf/executorDataVector.cpp b/pxr/exec/vdf/executorDataVector.cpp
index 96dacca06..7e5625678 100644
--- a/pxr/exec/vdf/executorDataVector.cpp
+++ b/pxr/exec/vdf/executorDataVector.cpp
@@ -11,40 +11,18 @@
#include "pxr/base/tf/stl.h"
#include "pxr/base/trace/trace.h"
+#include <valgrind/memcheck.h>
+
PXR_NAMESPACE_OPEN_SCOPE
/// Issue a magic instruction sequence which Valgrind will intercept and mark
/// the specified memory defined for memcheck.
///
-/// XXX: We should replace this with the VALGRIND_MAKE_MEM_DEFINED macro
-/// from memcheck.h, once we can establish a build dependency on
-/// valgrind-devel.
-///
static inline void
Vdf_ExecutorDataVector_ValgrindMakeDefined(void *ptr, size_t size)
{
-#if defined(ARCH_OS_LINUX) && defined(ARCH_CPU_INTEL)
- // Pass a result and a pointer to some arguments via registers
- volatile unsigned long long int result;
- volatile unsigned long long int args[6] = {
- 0x4D430002, // Memcheck: MAKE_MEM_DEFINED
- (uintptr_t)(ptr), // Memory address
- size, // Size in bytes
- 0, 0, 0 // Remaining unused arguments
- };
-
- // Magical instruction sequence which Valgrind will interpret as an
- // annotation (see valgrind.h)
- __asm__ volatile(
- "rolq $3, %%rdi ; rolq $13, %%rdi\n\t"
- "rolq $61, %%rdi ; rolq $51, %%rdi\n\t"
- "xchgq %%rbx, %%rbx"
- : "=d" (result)
- : "a" (&args[0]), "0" (0)
- : "cc", "memory"
- );
-#endif
+ VALGRIND_MAKE_MEM_DEFINED(ptr, size);
}
Vdf_ExecutorDataVector::~Vdf_ExecutorDataVector()
--
2.55.0

View file

@ -1,4 +1,4 @@
From 2d851f23e912d8312f2ea6818963150a8c484138 Mon Sep 17 00:00:00 2001
From 892fffda8fe1e388cb1511889636e80a864bed43 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Wed, 28 Aug 2024 10:42:48 -0400
Subject: [PATCH 1/6] Downstream-only: use the system double-conversion library
@ -8,10 +8,10 @@ Subject: [PATCH 1/6] Downstream-only: use the system double-conversion library
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/pxr/base/tf/CMakeLists.txt b/pxr/base/tf/CMakeLists.txt
index 4294f2cb5..b45df65b8 100644
index 438e9af37..749af9a2b 100644
--- a/pxr/base/tf/CMakeLists.txt
+++ b/pxr/base/tf/CMakeLists.txt
@@ -105,11 +105,14 @@ function(add_py_dll_link_test)
@@ -110,11 +110,14 @@ function(add_py_dll_link_test)
endfunction()
@ -21,12 +21,12 @@ index 4294f2cb5..b45df65b8 100644
LIBRARIES
arch
${WINLIBS}
TBB::tbb
${TBB_tbb_LIBRARY}
+ ${double-conversion_LIBRARY}
PUBLIC_CLASSES
anyUniquePtr
@@ -276,14 +279,6 @@ pxr_library(tf
INCLUDE_DIRS
${TBB_INCLUDE_DIRS}
@@ -281,14 +284,6 @@ pxr_library(tf
CPPFILES
initConfig.cpp
@ -42,5 +42,5 @@ index 4294f2cb5..b45df65b8 100644
PYMODULE_CPPFILES
--
2.55.0
2.48.1

View file

@ -1,110 +0,0 @@
From f3e9600db6086e834c0503cdaf30b5ba7ed53ceb Mon Sep 17 00:00:00 2001
From: Anonymous Coward <nobody@redhat.com>
Date: Sun, 26 Jul 2026 16:13:18 +0200
Subject: [PATCH] Replace PyWeakref_GetObject with PyWeakref_GetRef
PyWeakref_GetObject was removed in Python 3.15. Replace all four call
sites with PyWeakref_GetRef, which returns a strong reference instead
of a borrowed one, and adjust reference counting accordingly.
In Tf_PyIdHandle::Ptr(), return Py_None when the referent is dead to
match the original behaviour (previously returned NULL erroneously).
In Tf_PyWeakObject::GetObject(), explicitly return a Python None object
on failure, matching the original semantics exactly.
Fixes: https://github.com/PixarAnimationStudios/OpenUSD/issues/3966
Assisted-by: Claude Opus 4.6
Reviewed-by: OpenUSD Maintainers <usd-maintainers@fedoraproject.org>
---
pxr/base/tf/pyFunction.h | 13 +++++++++----
pxr/base/tf/pyIdentity.cpp | 10 +++++++++-
pxr/base/tf/pyWeakObject.cpp | 12 +++++++++---
3 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/pxr/base/tf/pyFunction.h b/pxr/base/tf/pyFunction.h
index 85af943b2..f77b5b71b 100644
--- a/pxr/base/tf/pyFunction.h
+++ b/pxr/base/tf/pyFunction.h
@@ -49,11 +49,13 @@ struct TfPyFunctionFromPython<Ret (Args...)>
using namespace pxr_boost::python;
// Attempt to get the referenced callable object.
TfPyLock lock;
- object callable(handle<>(borrowed(PyWeakref_GetObject(weak.ptr()))));
- if (TfPyIsNone(callable)) {
+ PyObject *rawCallable = NULL;
+ if (PyWeakref_GetRef(weak.ptr(), &rawCallable) <= 0) {
TF_WARN("Tried to call an expired python callback");
return Ret();
}
+ // PyWeakref_GetRef returns a strong reference; handle<> steals it.
+ object callable{handle<>(rawCallable)};
return TfPyCall<Ret>(callable)(args...);
}
};
@@ -68,12 +70,15 @@ struct TfPyFunctionFromPython<Ret (Args...)>
// Attempt to get the referenced self parameter, then build a new
// instance method and call it.
TfPyLock lock;
- PyObject *self = PyWeakref_GetObject(weakSelf.ptr());
- if (self == Py_None) {
+ PyObject *self = NULL;
+ if (PyWeakref_GetRef(weakSelf.ptr(), &self) <= 0) {
TF_WARN("Tried to call a method on an expired python instance");
return Ret();
}
+ // PyWeakref_GetRef returns a strong reference to self; PyMethod_New
+ // takes its own reference, so release ours afterward.
object method(handle<>(PyMethod_New(func.ptr(), self)));
+ Py_DECREF(self);
return TfPyCall<Ret>(method)(args...);
}
};
diff --git a/pxr/base/tf/pyIdentity.cpp b/pxr/base/tf/pyIdentity.cpp
index 5389d8f25..06b7f9b0c 100644
--- a/pxr/base/tf/pyIdentity.cpp
+++ b/pxr/base/tf/pyIdentity.cpp
@@ -136,7 +136,15 @@ PyObject *
Tf_PyIdHandle::Ptr() const {
if (_weakRef) {
TfPyLock lock;
- return PyWeakref_GetObject(_weakRef);
+ PyObject *obj = NULL;
+ if (PyWeakref_GetRef(_weakRef, &obj) > 0) {
+ // Return a borrowed-style reference: decrement so the caller
+ // does not need to release. Safe because the GIL is held by
+ // all callers.
+ Py_DECREF(obj);
+ return obj;
+ }
+ return Py_None; // dead referent → match original behaviour
}
return 0;
}
diff --git a/pxr/base/tf/pyWeakObject.cpp b/pxr/base/tf/pyWeakObject.cpp
index 8cfddc729..ecdd7f705 100644
--- a/pxr/base/tf/pyWeakObject.cpp
+++ b/pxr/base/tf/pyWeakObject.cpp
@@ -115,9 +115,15 @@ Tf_PyWeakObject::GetOrCreate(pxr_boost::python::object const &obj)
pxr_boost::python::object
Tf_PyWeakObject::GetObject() const
{
- return pxr_boost::python::object
- (pxr_boost::python::handle<>
- (pxr_boost::python::borrowed(PyWeakref_GetObject(_weakRef.get()))));
+ PyObject *obj = NULL;
+ if (PyWeakref_GetRef(_weakRef.get(), &obj) > 0) {
+ // PyWeakref_GetRef returns a strong reference; handle<> steals it.
+ return pxr_boost::python::object(
+ pxr_boost::python::handle<>(obj));
+ }
+ // Dead referent: return Py_None explicitly, as the original did.
+ return pxr_boost::python::object(
+ pxr_boost::python::handle<>(pxr_boost::python::borrowed(Py_None)));
}
void
--
2.55.0

View file

@ -0,0 +1,686 @@
From 61d94c86dcbadbf574cad1e4c5b1a60e308a6ba9 Mon Sep 17 00:00:00 2001
From: sunyab <sunyab@users.noreply.github.com>
Date: Fri, 26 Sep 2025 13:16:55 -0700
Subject: [PATCH] sdf: Guard against invalid primChildren in crate files
A crate file containing a primChildren field on a prim with invalid
entries (e.g. an empty name or name with invalid characters)
could lead to issues when accessing that prim's children later
on. In addition, duplicate entries in the field could cause
unexpected behavior when iterating over those children.
We now check for these conditions when loading a crate file and
emit a runtime error and fail to load the layer if we encounter
this problem.
This situation typically does not occur via regular Sdf and
Usd usage, so we only do this verification if
PXR_PREFER_SAFETY_OVER_SPEED is enabled.
(Internal change: 2380262)
(Internal change: 2380126)
---
pxr/usd/sdf/CMakeLists.txt | 19 +++
.../testSdfUsdcInvalidPrimChildren.cpp | 84 ++++++++++++
.../duplicate_prim_children.usdc | Bin 0 -> 704 bytes
.../root.usdc | Bin 0 -> 38110 bytes
pxr/usd/usd/crateData.cpp | 127 +++++++++++++++++-
5 files changed, 227 insertions(+), 3 deletions(-)
create mode 100644 pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp
create mode 100644 pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/duplicate_prim_children.usdc
create mode 100644 pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/root.usdc
diff --git a/pxr/usd/sdf/CMakeLists.txt b/pxr/usd/sdf/CMakeLists.txt
index 6562d572e..b15ce83d3 100644
--- a/pxr/usd/sdf/CMakeLists.txt
+++ b/pxr/usd/sdf/CMakeLists.txt
@@ -338,6 +338,16 @@ pxr_build_test(testSdfTextFileFormatParsing
testenv/testSdfTextFileFormatParsing.cpp
)
+pxr_build_test(testSdfUsdcInvalidPrimChildren
+ LIBRARIES
+ ar
+ arch
+ tf
+ sdf
+ CPPFILES
+ testenv/testSdfUsdcInvalidPrimChildren.cpp
+)
+
pxr_install_test_dir(
SRC testenv/testSdfBatchNamespaceEdit.testenv
DEST testSdfBatchNamespaceEdit/testSdfBatchNamespaceEdit.testenv
@@ -367,6 +377,11 @@ pxr_install_test_dir(
SRC testenv/testSdfParsing.testenv
DEST testSdfParsing/testSdfParsing.testenv
)
+
+pxr_install_test_dir(
+ SRC testenv/testSdfUsdcInvalidPrimChildren.testenv
+ DEST testSdfUsdcInvalidPrimChildren
+)
pxr_register_test(testSdfAssetPath
PYTHON
@@ -544,3 +559,7 @@ pxr_register_test(testSdfVariants
PYTHON
COMMAND "${CMAKE_INSTALL_PREFIX}/tests/testSdfVariants"
)
+pxr_register_test(testSdfUsdcInvalidPrimChildren
+ COMMAND "${CMAKE_INSTALL_PREFIX}/tests/testSdfUsdcInvalidPrimChildren"
+ EXPECTED_RETURN_CODE 0
+)
diff --git a/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp
new file mode 100644
index 000000000..49258b657
--- /dev/null
+++ b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.cpp
@@ -0,0 +1,84 @@
+//
+// Copyright 2025 Pixar
+//
+// Licensed under the terms set forth in the LICENSE.txt file available at
+// https://openusd.org/license.
+//
+
+#include "pxr/pxr.h"
+
+#include "pxr/base/tf/error.h"
+#include "pxr/base/tf/errorMark.h"
+#include "pxr/base/tf/diagnosticLite.h"
+#include "pxr/usd/sdf/childrenView.h"
+#include "pxr/usd/sdf/layer.h"
+#include "pxr/usd/sdf/primSpec.h"
+
+#include <string>
+#include <cstring>
+
+PXR_NAMESPACE_USING_DIRECTIVE
+
+static void
+TestInvalidPrimChildren()
+{
+ // This test relies on verification checks that are only enabled when
+ // PXR_PREFER_SAFETY_OVER_SPEED is enabled.
+#ifdef PXR_PREFER_SAFETY_OVER_SPEED
+ // open the layer and check for invalid child prim names and specs
+ TfErrorMark m;
+
+ auto layer = SdfLayer::FindOrOpen("root.usdc");
+ TF_AXIOM(!layer);
+
+ TF_AXIOM(!m.IsClean());
+ TF_AXIOM(std::any_of(m.begin(), m.end(),
+ [](const TfError& e) {
+ return TfStringEndsWith(e.GetCommentary(),
+ "Invalid child identifier '' found "
+ "on parent '/_materials'");
+ }));
+ TF_AXIOM(std::any_of(m.begin(), m.end(),
+ [](const TfError& e) {
+ return TfStringEndsWith(e.GetCommentary(),
+ "Invalid children found in primChildren field "
+ "for path '/_materials'");
+ }));
+#endif
+}
+
+static void
+TestDuplicatePrimChildren()
+{
+ // This test relies on verification checks that are only enabled when
+ // PXR_PREFER_SAFETY_OVER_SPEED is enabled.
+#ifdef PXR_PREFER_SAFETY_OVER_SPEED
+ // open the layer and check for invalid child prim names and specs
+ TfErrorMark m;
+
+ auto layer = SdfLayer::FindOrOpen("duplicate_prim_children.usdc");
+ TF_AXIOM(!layer);
+
+ TF_AXIOM(!m.IsClean());
+ TF_AXIOM(std::any_of(m.begin(), m.end(),
+ [](const TfError& e) {
+ return TfStringEndsWith(e.GetCommentary(),
+ "Duplicate child identifier 'Child1' found "
+ "on parent '/Root'");
+ }));
+ TF_AXIOM(std::any_of(m.begin(), m.end(),
+ [](const TfError& e) {
+ return TfStringEndsWith(e.GetCommentary(),
+ "Invalid children found in primChildren field "
+ "for path '/Root'");
+ }));
+#endif
+}
+
+int main(int argc, char** argv)
+{
+ TestInvalidPrimChildren();
+ TestDuplicatePrimChildren();
+
+ return 0;
+}
diff --git a/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/duplicate_prim_children.usdc b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/duplicate_prim_children.usdc
new file mode 100644
index 0000000000000000000000000000000000000000..b6710e961deb11804a49dbaf2fd2ceb31d261d65
GIT binary patch
literal 704
zcmbu7&rZTX5XQf4sV$-j!K(+Z97z0gG*L-eg+OXUYvNH1O(X%@)SBRpgAc$1_y8Wg
z`Zhj-9!yNcVismBoSn-zncwWUJJY&Xo$94mw_#xsUt+2M4Ytt$=wy}yU;x+v*0`#x
zSmi2b4--IvdfKE7QhZoP)e6uF!vs;>AKJJ5K`#zQ$fLAxqI6*5ediF}B#9BlVHCtk
zKe$6LyuTR)NFJiV=?(*S`+LhKS0?JkQirz7mGT$@dlfvIuu;L2g-L$F3a3j2iro9A
z5?_kBmg+ybnVMV$D^G=~nzbgNr|TtGXrEi#bP6wOlhT-DrloAbS0YjtBHI+EYWKnb
zMCPfSjGQ_D=HvcFOFAB306bHAP3rlbrgNS(SoBfocfnaxw(A*2k@zv4UvlYli$lCj
X+^zWyW-3O+Tf{wA+N=DP_zCe}Iz2v9
literal 0
HcmV?d00001
diff --git a/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/root.usdc b/pxr/usd/sdf/testenv/testSdfUsdcInvalidPrimChildren.testenv/root.usdc
new file mode 100644
index 0000000000000000000000000000000000000000..651668dd7b6012b65e8fde4bfb4a973a697ceb58
GIT binary patch
literal 38110
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
C@)ZIA
literal 0
HcmV?d00001
diff --git a/pxr/usd/usd/crateData.cpp b/pxr/usd/usd/crateData.cpp
index a82933214..f70b57fe5 100644
--- a/pxr/usd/usd/crateData.cpp
+++ b/pxr/usd/usd/crateData.cpp
@@ -17,6 +17,7 @@
#include "pxr/base/tf/stringUtils.h"
#include "pxr/base/tf/typeInfoMap.h"
#include "pxr/base/tf/pxrTslRobinMap/robin_map.h"
+#include "pxr/base/tf/pxrTslRobinMap/robin_set.h"
#include "pxr/base/trace/trace.h"
#include "pxr/base/work/dispatcher.h"
@@ -29,6 +30,8 @@
#include <tbb/parallel_for.h>
#include <tbb/parallel_sort.h>
+#include <tbb/blocked_range.h>
+#include <tbb/concurrent_vector.h>
#include <algorithm>
#include <functional>
@@ -717,6 +720,7 @@ public:
////////////////////////////////////////////////////////////////////////
private:
+ using TokenSet = pxr_tsl::robin_set<TfToken, TfToken::HashFunctor>;
bool _PopulateFromCrateFile() {
@@ -815,10 +819,11 @@ private:
}
// Create all the specData entries and store pointers to them.
- tbb::parallel_for(
- tbb::blocked_range<size_t>(0, specs.size()),
+ auto createSpecData =
[this, crateFile, &liveFieldSets, &specs](
- tbb::blocked_range<size_t> const &r) {
+ tbb::blocked_range<size_t> const &r,
+ auto&& validateChildrenFn) {
+
for (size_t i = r.begin(),
end = r.end(); i != end; ++i) {
@@ -830,10 +835,59 @@ private:
specData.fields =
liveFieldSets.find(spec.fieldSetIndex)->second;
+ std::forward<decltype(validateChildrenFn)>
+ (validateChildrenFn)(spec, specData);
+ }
+ };
+
+#ifndef PXR_PREFER_SAFETY_OVER_SPEED
+ tbb::parallel_for(
+ tbb::blocked_range<size_t>(0, specs.size()),
+ [&createSpecData](tbb::blocked_range<size_t> const& r) {
+ createSpecData(r, [](auto&&...) {});
+ });
+#else
+ // In safety-over-speed mode we perform additional validation
+ // on specs in worker threads. We need to collect runtime errors
+ // emitted in those threads and transport them back to the
+ // original thread.
+ tbb::concurrent_vector<TfErrorTransport> errorTransports;
+
+ tbb::parallel_for(
+ tbb::blocked_range<size_t>(0, specs.size()),
+ [this, &createSpecData, &errorTransports](
+ tbb::blocked_range<size_t> const& r) {
+
+ // Reuse a TokenSet for duplicate checking in
+ // _ValidateSpecChildren to avoid allocating memory
+ // repeatedly.
+ TokenSet dupeTokenSet;
+ TfErrorMark m;
+
+ createSpecData(
+ r,
+ [this, &dupeTokenSet](auto&&... args) {
+ _ValidateSpecChildren(
+ std::forward<decltype(args)>(args)...,
+ &dupeTokenSet);
+ });
+
+ if (!m.IsClean()) {
+ TfErrorTransport transport = m.Transport();
+ errorTransports.grow_by(1)->swap(transport);
}
},
tbb::static_partitioner());
+ for (TfErrorTransport& transport : errorTransports) {
+ transport.Post();
+ }
+
+ if (!m.IsClean()) {
+ return false;
+ }
+#endif
+
_lastSet = _data.end();
return true;
@@ -851,6 +905,73 @@ private:
return ret;
}
+ inline bool _HasValidChildren(const SdfPath &path,
+ const VtValue &val,
+ TokenSet* dupeTokenSet) const {
+ if (!val.IsHolding<TfTokenVector>()) {
+ return false;
+ }
+
+ enum class ErrorType { Invalid, Duplicate };
+ ErrorType errorType;
+ dupeTokenSet->clear();
+
+ const TfTokenVector& children = val.UncheckedGet<TfTokenVector>();
+ auto invalidChild = std::find_if(children.begin(), children.end(),
+ [&](const TfToken& childName) {
+ // Check that the child has a valid identifier and that the
+ // child path exists in the data.
+ if (!SdfPath::IsValidIdentifier(childName) ||
+ _data.find(path.AppendChild(childName)) == _data.end()) {
+ errorType = ErrorType::Invalid;
+ return true;
+ }
+
+ // Check that the child does not duplicate another child.
+ if (!dupeTokenSet->insert(childName).second) {
+ errorType = ErrorType::Duplicate;
+ return true;
+ }
+
+ return false;
+ });
+ if (ARCH_UNLIKELY(invalidChild != children.end())) {
+ TF_RUNTIME_ERROR(
+ "%s child identifier '%s' found on parent '%s'",
+ (errorType == ErrorType::Duplicate ?
+ "Duplicate" : "Invalid"),
+ invalidChild->GetText(), path.GetAsString().c_str());
+ return false;
+ }
+
+ return true;
+ }
+
+ inline bool _ValidateSpecChildren(const CrateFile::Spec& spec,
+ const _SpecData &specData,
+ TokenSet* dupeTokenSet) const {
+ if (specData.specType == SdfSpecTypePrim) {
+ // Check for invalid children in primChildren field
+ _FieldValuePairVector const &fields = specData.fields.Get();
+ auto field = std::find_if(fields.begin(), fields.end(),
+ [](_FieldValuePair const &fieldValue) {
+ return fieldValue.first == SdfChildrenKeys->PrimChildren;
+ });
+ if (field != fields.end()) {
+ SdfPath const &path = _crateFile->GetPath(spec.pathIndex);
+ VtValue const &value = field->second;
+ if (!_HasValidChildren(path, value, dupeTokenSet)) {
+ TF_RUNTIME_ERROR(
+ "Invalid children found in primChildren field for path "
+ "'%s'", path.GetAsString().c_str());
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
inline std::vector<double> const &
_ListTimeSamplesForPath(const SdfPath &path) const {
TF_DESCRIBE_SCOPE(GetAssetPath().c_str());
--
2.52.0

View file

@ -1,17 +1,17 @@
From 9fd6089b3e95bb882199ee359fbba83f7c4bb410 Mon Sep 17 00:00:00 2001
From 07716964aaf5aab8345e1801a18bcab8a493e5e5 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Thu, 29 Aug 2024 13:30:18 -0400
Subject: [PATCH 2/6] Downstream-only: use the system lz4 library
---
pxr/base/tf/CMakeLists.txt | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
pxr/base/tf/CMakeLists.txt | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/pxr/base/tf/CMakeLists.txt b/pxr/base/tf/CMakeLists.txt
index b45df65b8..5e6de96da 100644
index 749af9a2b..56ca1fd83 100644
--- a/pxr/base/tf/CMakeLists.txt
+++ b/pxr/base/tf/CMakeLists.txt
@@ -106,6 +106,8 @@ function(add_py_dll_link_test)
@@ -111,6 +111,8 @@ function(add_py_dll_link_test)
endfunction()
find_library(double-conversion_LIBRARY NAMES double-conversion REQUIRED)
@ -20,18 +20,19 @@ index b45df65b8..5e6de96da 100644
pxr_library(tf
LIBRARIES
@@ -113,6 +115,10 @@ pxr_library(tf
@@ -118,9 +120,11 @@ pxr_library(tf
${WINLIBS}
TBB::tbb
${TBB_tbb_LIBRARY}
${double-conversion_LIBRARY}
+ ${LZ4_LIBRARIES}
+
+ INCLUDE_DIRS
INCLUDE_DIRS
${TBB_INCLUDE_DIRS}
+ ${LZ4_INCLUDE_DIRS}
PUBLIC_CLASSES
anyUniquePtr
@@ -279,7 +285,6 @@ pxr_library(tf
@@ -284,7 +288,6 @@ pxr_library(tf
CPPFILES
initConfig.cpp
@ -40,5 +41,5 @@ index b45df65b8..5e6de96da 100644
PYMODULE_CPPFILES
module.cpp
--
2.55.0
2.48.1

View file

@ -1,16 +1,16 @@
From 73637a9bf67b3f7afe5070e5d56b07524e14a073 Mon Sep 17 00:00:00 2001
From 6723d17b04358284e46b717da6dd3d9a25fd094d Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Fri, 30 Aug 2024 09:32:08 -0400
Subject: [PATCH 3/6] Downstream-only: use the system pugixml library
---
third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt | 6 +++---
.../renderman-26/plugin/rmanArgsParser/CMakeLists.txt | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt b/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt
index 244f27aa8..1e00413c4 100644
--- a/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt
+++ b/third_party/renderman/plugin/rmanArgsParser/CMakeLists.txt
diff --git a/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt b/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt
index ad5c1f49e..79b82e3f0 100644
--- a/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt
+++ b/third_party/renderman-26/plugin/rmanArgsParser/CMakeLists.txt
@@ -1,6 +1,8 @@
set(PXR_PREFIX "")
set(PXR_PACKAGE rmanArgsParser)
@ -20,9 +20,9 @@ index 244f27aa8..1e00413c4 100644
pxr_plugin(rmanArgsParser
LIBRARIES
arch
@@ -9,12 +11,10 @@ pxr_plugin(rmanArgsParser
vt
@@ -10,12 +12,10 @@ pxr_plugin(rmanArgsParser
ar
ndr
sdr
+ ${pugixml_LIBRARY}
@ -35,5 +35,5 @@ index 244f27aa8..1e00413c4 100644
PRIVATE_HEADERS
api.h
--
2.55.0
2.48.1

View file

@ -1,23 +1,22 @@
From f331a476a66e41e93d83b7a2e438d3ee7f12ea32 Mon Sep 17 00:00:00 2001
From 69a381db3ad7e0a457fb547eab46d6fdd6532f32 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Sat, 31 Aug 2024 11:08:18 -0400
Subject: [PATCH 4/6] Downstream-only: use the system rapidjson library
---
pxr/base/js/CMakeLists.txt | 40 --------------------------------------
1 file changed, 40 deletions(-)
pxr/base/js/CMakeLists.txt | 37 -------------------------------------
1 file changed, 37 deletions(-)
diff --git a/pxr/base/js/CMakeLists.txt b/pxr/base/js/CMakeLists.txt
index 8cbda8c52..ec8f3c249 100644
index d59dc1f6d..086d1bc48 100644
--- a/pxr/base/js/CMakeLists.txt
+++ b/pxr/base/js/CMakeLists.txt
@@ -15,46 +15,6 @@ pxr_library(js
@@ -15,43 +15,6 @@ pxr_library(js
converter.h
types.h
- PRIVATE_HEADERS
- rapidjson/allocators.h
- rapidjson/cursorstreamwrapper.h
- rapidjson/document.h
- rapidjson/encodedstream.h
- rapidjson/encodings.h
@ -27,7 +26,6 @@ index 8cbda8c52..ec8f3c249 100644
- rapidjson/filewritestream.h
- rapidjson/fwd.h
- rapidjson/internal/biginteger.h
- rapidjson/internal/clzll.h
- rapidjson/internal/diyfp.h
- rapidjson/internal/dtoa.h
- rapidjson/internal/ieee754.h
@ -52,12 +50,11 @@ index 8cbda8c52..ec8f3c249 100644
- rapidjson/schema.h
- rapidjson/stream.h
- rapidjson/stringbuffer.h
- rapidjson/uri.h
- rapidjson/writer.h
-
DOXYGEN_FILES
overview.dox
)
--
2.55.0
2.48.1

View file

@ -1,16 +1,16 @@
From a537b44edabe942380d2e87ea7069bdf32b93dbc Mon Sep 17 00:00:00 2001
From 190572d6e81729f7e04ddf50891c7af368ea4995 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Sun, 1 Sep 2024 21:30:11 -0400
Subject: [PATCH 5/6] Downstream-only: use the system libdeflate
---
pxr/imaging/hio/CMakeLists.txt | 7 +++++++
.../hioOpenEXR/OpenEXR/OpenEXRCore/compression.c | 3 +--
.../plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h | 12 ------------
pxr/imaging/hio/CMakeLists.txt | 7 +++++++
pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c | 3 +--
pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h | 12 ------------
3 files changed, 8 insertions(+), 14 deletions(-)
diff --git a/pxr/imaging/hio/CMakeLists.txt b/pxr/imaging/hio/CMakeLists.txt
index e61fc7c54..7cfbe9d70 100644
index 75e1e6298..09264c600 100644
--- a/pxr/imaging/hio/CMakeLists.txt
+++ b/pxr/imaging/hio/CMakeLists.txt
@@ -1,6 +1,9 @@
@ -34,10 +34,10 @@ index e61fc7c54..7cfbe9d70 100644
PUBLIC_CLASSES
fieldTextureData
diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c
diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c b/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c
index a672e833b..1d2eaea56 100644
--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c
+++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/compression.c
--- a/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c
+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCore/compression.c
@@ -8,8 +8,7 @@
#include "internal_memory.h"
#include "internal_structs.h"
@ -48,10 +48,10 @@ index a672e833b..1d2eaea56 100644
#if ( \
LIBDEFLATE_VERSION_MAJOR > 1 || \
diff --git a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h
diff --git a/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h b/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h
index 7481a346e..71bdde9cc 100644
--- a/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h
+++ b/pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCoreUnity.h
--- a/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h
+++ b/pxr/imaging/hio/OpenEXR/OpenEXRCoreUnity.h
@@ -8,18 +8,6 @@
#include "OpenEXRCore/openexr_config.h"
@ -72,5 +72,5 @@ index 7481a346e..71bdde9cc 100644
#include "OpenEXRCore/attributes.c"
--
2.55.0
2.48.1

View file

@ -1,28 +1,28 @@
From f2a3615238a691e11a4029c33498e7f21a34fff9 Mon Sep 17 00:00:00 2001
From 8173625c157a1cb59c0f5cf8039afde9cce84641 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Wed, 4 Sep 2024 11:09:47 -0400
Subject: [PATCH 6/6] Downstream-only: use the system libavif
---
pxr/imaging/plugin/hioAvif/AVIFImage.cpp | 2 +-
pxr/imaging/plugin/hioAvif/CMakeLists.txt | 194 +---------------------
2 files changed, 7 insertions(+), 189 deletions(-)
pxr/imaging/plugin/hioAvif/CMakeLists.txt | 195 +---------------------
2 files changed, 8 insertions(+), 189 deletions(-)
diff --git a/pxr/imaging/plugin/hioAvif/AVIFImage.cpp b/pxr/imaging/plugin/hioAvif/AVIFImage.cpp
index b56369ee5..c6fcb4a6c 100644
index b902a9806..e83af2acc 100644
--- a/pxr/imaging/plugin/hioAvif/AVIFImage.cpp
+++ b/pxr/imaging/plugin/hioAvif/AVIFImage.cpp
@@ -30,7 +30,7 @@ ARCH_PRAGMA_UNUSED_FUNCTION
@@ -29,7 +29,7 @@ ARCH_PRAGMA_UNUSED_FUNCTION
#include "pxr/base/tf/stringUtils.h"
#include "pxr/base/tf/type.h"
-#include "pxr/imaging/plugin/hioAvif/AVIF/src/avif/avif.h"
+#include <avif/avif.h>
PXR_NAMESPACE_OPEN_SCOPE
#include "pxr/base/arch/export.h"
diff --git a/pxr/imaging/plugin/hioAvif/CMakeLists.txt b/pxr/imaging/plugin/hioAvif/CMakeLists.txt
index 1ac2683f6..7d583c137 100644
index 29ffe0fdf..7f1680eaf 100644
--- a/pxr/imaging/plugin/hioAvif/CMakeLists.txt
+++ b/pxr/imaging/plugin/hioAvif/CMakeLists.txt
@@ -1,6 +1,9 @@
@ -35,11 +35,14 @@ index 1ac2683f6..7d583c137 100644
pxr_plugin(hioAvif
LIBRARIES
ar
@@ -8,197 +11,12 @@ pxr_plugin(hioAvif
@@ -8,196 +11,12 @@ pxr_plugin(hioAvif
gf
hio
tf
+ ${AVIF_LIBRARIES}
+
+ INCLUDE_DIRS
+ ${AVIF_INCLUDE_DIRS}
- PRIVATE_HEADERS
- aom/aom.h
@ -50,89 +53,89 @@ index 1ac2683f6..7d583c137 100644
- aom/aom_image.h
- aom/aom_integer.h
- aom/aomdx.h
- aom/aom_external_partition.h
- aom/aom_dsp/binary_codes_reader.h
- aom/aom_dsp/bitreader.h
- aom/aom_dsp/aom_dsp_common.h
- aom/aom_dsp/bitreader_buffer.h
- aom/aom_dsp/blend.h
- aom/aom_dsp/entcode.h
- aom/aom_dsp/entdec.h
- aom/aom_dsp/grain_table.h
- aom/aom_dsp/aom_filter.h
- aom/aom_dsp/grain_synthesis.h
- aom/aom_dsp/intrapred_common.h
- aom/aom_dsp/prob.h
- aom/aom_dsp/recenter.h
- aom/aom_dsp/txfm_common.h
- aom/aom_mem/aom_mem.h
- aom/aom_mem/include/aom_mem_intrnl.h
- aom/aom_ports/bitops.h
- aom/aom_ports/aom_once.h
- aom/aom_ports/mem.h
- aom/aom_ports/mem_ops.h
- aom/aom_ports/mem_ops_aligned.h
- aom/aom_ports/msvc.h
- aom/aom_ports/system_state.h
- aom/aom_ports/aom_timer.h
- aom/aom_scale/aom_scale.h
- aom/aom_scale/yv12config.h
- aom/aom_util/aom_thread.h
- aom/av1/av1_iface_common.h
- aom/av1/common/av1_common_int.h
- aom/av1/common/alloccommon.h
- aom/av1/common/av1_inv_txfm1d.h
- aom/av1/common/av1_inv_txfm1d_cfg.h
- aom/av1/common/av1_loopfilter.h
- aom/av1/common/av1_txfm.h
- aom/av1/common/blockd.h
- aom/av1/common/cdef.h
- aom/av1/common/cdef_block.h
- aom/av1/common/cfl.h
- aom/av1/common/common.h
- aom/av1/common/common_data.h
- aom/av1/common/convolve.h
- aom/av1/common/entropy.h
- aom/av1/common/entropymode.h
- aom/av1/common/entropymv.h
- aom/av1/common/enums.h
- aom/av1/common/filter.h
- aom/av1/common/frame_buffers.h
- aom/av1/common/mv.h
- aom/av1/common/mvref_common.h
- aom/av1/common/idct.h
- aom/av1/common/obmc.h
- aom/av1/common/obu_util.h
- aom/av1/common/odintrin.h
- aom/av1/common/pred_common.h
- aom/av1/common/quant_common.h
- aom/av1/common/reconinter.h
- aom/av1/common/reconintra.h
- aom/av1/common/resize.h
- aom/av1/common/restoration.h
- aom/av1/common/scale.h
- aom/av1/common/scan.h
- aom/av1/common/seg_common.h
- aom/av1/common/thread_common.h
- aom/av1/common/tile_common.h
- aom/av1/common/timing.h
- aom/av1/common/token_cdfs.h
- aom/av1/common/txb_common.h
- aom/av1/common/warped_motion.h
- aom/av1/decoder/decodeframe.h
- aom/av1/decoder/decoder.h
- aom/av1/decoder/decodemv.h
- aom/av1/decoder/decodetxb.h
- aom/av1/decoder/detokenize.h
- aom/av1/decoder/dthread.h
- aom/av1/decoder/obu.h
- aom/config/aom_config.h
- aom/config/aom_dsp_rtcd.h
- aom/config/aom_scale_rtcd.h
- aom/config/aom_version.h
- aom/config/av1_rtcd.h
- aom/internal/aom_codec_internal.h
- aom/internal/aom_image_internal.h
- aom_dsp/aom_dsp_common.h
- aom_dsp/aom_filter.h
- aom_dsp/binary_codes_reader.h
- aom_dsp/bitreader.h
- aom_dsp/bitreader_buffer.h
- aom_dsp/blend.h
- aom_dsp/entcode.h
- aom_dsp/entdec.h
- aom_dsp/flow_estimation/corner_detect.h
- aom_dsp/flow_estimation/flow_estimation.h
- aom_dsp/grain_params.h
- aom_dsp/grain_table.h
- aom_dsp/intrapred_common.h
- aom_dsp/odintrin.h
- aom_dsp/prob.h
- aom_dsp/pyramid.h
- aom_dsp/recenter.h
- aom_dsp/txfm_common.h
- aom_mem/aom_mem.h
- aom_mem/include/aom_mem_intrnl.h
- aom_ports/aom_once.h
- aom_ports/aom_timer.h
- aom_ports/bitops.h
- aom_ports/mem.h
- aom_ports/mem_ops.h
- aom_ports/mem_ops_aligned.h
- aom_ports/sanitizer.h
- aom_scale/yv12config.h
- aom_util/aom_thread.h
- aom_util/aom_pthread.h
- av1/av1_iface_common.h
- av1/common/alloccommon.h
- av1/common/av1_common_int.h
- av1/common/av1_inv_txfm1d.h
- av1/common/av1_inv_txfm1d_cfg.h
- av1/common/av1_loopfilter.h
- av1/common/av1_txfm.h
- av1/common/blockd.h
- av1/common/cdef.h
- av1/common/cdef_block.h
- av1/common/cfl.h
- av1/common/common.h
- av1/common/common_data.h
- av1/common/convolve.h
- av1/common/entropy.h
- av1/common/entropymode.h
- av1/common/entropymv.h
- av1/common/enums.h
- av1/common/filter.h
- av1/common/frame_buffers.h
- av1/common/idct.h
- av1/common/mv.h
- av1/common/mvref_common.h
- av1/common/obmc.h
- av1/common/obu_util.h
- av1/common/pred_common.h
- av1/common/quant_common.h
- av1/common/reconinter.h
- av1/common/reconinter_template.inc
- av1/common/reconintra.h
- av1/common/resize.h
- av1/common/restoration.h
- av1/common/scale.h
- av1/common/scan.h
- av1/common/seg_common.h
- av1/common/thread_common.h
- av1/common/tile_common.h
- av1/common/timing.h
- av1/common/token_cdfs.h
- av1/common/txb_common.h
- av1/common/warped_motion.h
- av1/decoder/decodeframe.h
- av1/decoder/decodemv.h
- av1/decoder/decoder.h
- av1/decoder/decodetxb.h
- av1/decoder/detokenize.h
- av1/decoder/dthread.h
- av1/decoder/grain_synthesis.h
- av1/decoder/obu.h
- common/args_helper.h
- aom/internal/common/args_helper.h
- AVIF/src/avif/avif.h
- AVIF/src/avif/internal.h
- AVIF/src/src-libyuv/libyuv/basic_types.h
@ -142,74 +145,71 @@ index 1ac2683f6..7d583c137 100644
- AVIF/src/src-libyuv/libyuv/scale.h
- AVIF/src/src-libyuv/libyuv/scale_row.h
- AVIF/src/src-libyuv/libyuv/version.h
+ INCLUDE_DIRS
+ ${AVIF_INCLUDE_DIRS}
-
CPPFILES
- aom/src/aom_codec.c
- aom/src/aom_decoder.c
- aom/src/aom_image.c
- aom/src/aom_integer.c
- aom_dsp/aom_convolve.c
- aom_dsp/aom_dsp_rtcd.c
- aom_dsp/binary_codes_reader.c
- aom_dsp/bitreader.c
- aom_dsp/bitreader_buffer.c
- aom_dsp/blend_a64_hmask.c
- aom_dsp/blend_a64_mask.c
- aom_dsp/blend_a64_vmask.c
- aom_dsp/entcode.c
- aom_dsp/entdec.c
- aom_dsp/intrapred.c
- aom_dsp/loopfilter.c
- aom_dsp/odintrin.c
- aom_dsp/pyramid.c
- aom_mem/aom_mem.c
- aom_scale/aom_scale_rtcd.c
- aom_scale/generic/yv12config.c
- aom_scale/generic/yv12extend.c
- aom_util/aom_thread.c
- av1/av1_dx_iface.c
- av1/common/alloccommon.c
- av1/common/av1_inv_txfm1d.c
- av1/common/av1_inv_txfm2d.c
- av1/common/av1_loopfilter.c
- av1/common/av1_rtcd.c
- av1/common/av1_txfm.c
- av1/common/blockd.c
- av1/common/cdef.c
- av1/common/cdef_block.c
- av1/common/cfl.c
- av1/common/common_data.c
- av1/common/convolve.c
- av1/common/entropy.c
- av1/common/entropymode.c
- av1/common/entropymv.c
- av1/common/frame_buffers.c
- av1/common/idct.c
- av1/common/mvref_common.c
- av1/common/obu_util.c
- av1/common/pred_common.c
- av1/common/quant_common.c
- av1/common/reconinter.c
- av1/common/reconintra.c
- av1/common/resize.c
- av1/common/restoration.c
- av1/common/scale.c
- av1/common/scan.c
- av1/common/seg_common.c
- av1/common/thread_common.c
- av1/common/tile_common.c
- av1/common/timing.c
- av1/common/txb_common.c
- av1/common/warped_motion.c
- av1/decoder/decodeframe.c
- av1/decoder/decodemv.c
- av1/decoder/decoder.c
- av1/decoder/decodetxb.c
- av1/decoder/detokenize.c
- av1/decoder/grain_synthesis.c
- av1/decoder/obu.c
- aom/aom_codec.c
- aom/aom_decoder.c
- aom/aom_image.c
- aom/aom_integer.c
- aom/aom_dsp/aom_convolve.c
- aom/aom_dsp/aom_dsp_rtcd.c
- aom/aom_dsp/binary_codes_reader.c
- aom/aom_dsp/bitreader.c
- aom/aom_dsp/bitreader_buffer.c
- aom/aom_dsp/blend_a64_hmask.c
- aom/aom_dsp/blend_a64_vmask.c
- aom/aom_dsp/blend_a64_mask.c
- aom/aom_dsp/entcode.c
- aom/aom_dsp/entdec.c
- aom/aom_dsp/grain_synthesis.c
- aom/aom_dsp/intrapred.c
- aom/aom_dsp/loopfilter.c
- aom/aom_mem/aom_mem.c
- aom/aom_scale/aom_scale_rtcd.c
- aom/aom_scale/generic/aom_scale.c
- aom/aom_scale/generic/gen_scalers.c
- aom/aom_scale/generic/yv12config.c
- aom/aom_scale/generic/yv12extend.c
- aom/aom_util/aom_thread.c
- aom/av1/av1_dx_iface.c
- aom/av1/common/alloccommon.c
- aom/av1/common/av1_inv_txfm1d.c
- aom/av1/common/av1_inv_txfm2d.c
- aom/av1/common/av1_loopfilter.c
- aom/av1/common/av1_txfm.c
- aom/av1/common/av1_rtcd.c
- aom/av1/common/blockd.c
- aom/av1/common/cdef.c
- aom/av1/common/cdef_block.c
- aom/av1/common/cfl.c
- aom/av1/common/convolve.c
- aom/av1/common/entropymode.c
- aom/av1/common/entropy.c
- aom/av1/common/entropymv.c
- aom/av1/common/frame_buffers.c
- aom/av1/common/idct.c
- aom/av1/common/mvref_common.c
- aom/av1/common/obu_util.c
- aom/av1/common/pred_common.c
- aom/av1/common/quant_common.c
- aom/av1/common/reconinter.c
- aom/av1/common/reconintra.c
- aom/av1/common/resize.c
- aom/av1/common/restoration.c
- aom/av1/common/av1_scale.c
- aom/av1/common/scan.c
- aom/av1/common/seg_common.c
- aom/av1/common/thread_common.c
- aom/av1/common/timing.c
- aom/av1/common/txb_common.c
- aom/av1/common/tile_common.c
- aom/av1/common/warped_motion.c
- aom/av1/decoder/decodeframe.c
- aom/av1/decoder/decodemv.c
- aom/av1/decoder/decoder.c
- aom/av1/decoder/decodetxb.c
- aom/av1/decoder/detokenize.c
- aom/av1/decoder/obu.c
- AVIF/src/alpha.c
- AVIF/src/avif.c
- AVIF/src/codec_aom.c
@ -237,5 +237,5 @@ index 1ac2683f6..7d583c137 100644
RESOURCE_FILES
--
2.55.0
2.48.1

217
2266.patch Normal file
View file

@ -0,0 +1,217 @@
From a07a6b4d1da19bfc499db49641d74fb7c1a71e9b Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Sat, 11 Feb 2023 13:58:42 -0500
Subject: [PATCH] Port to Embree 4.x
---
cmake/modules/FindEmbree.cmake | 16 ++++++++--------
pxr/imaging/plugin/hdEmbree/context.h | 2 +-
pxr/imaging/plugin/hdEmbree/mesh.cpp | 2 +-
pxr/imaging/plugin/hdEmbree/mesh.h | 4 ++--
pxr/imaging/plugin/hdEmbree/meshSamplers.h | 4 ++--
pxr/imaging/plugin/hdEmbree/pch.h | 6 +++---
pxr/imaging/plugin/hdEmbree/renderDelegate.h | 2 +-
pxr/imaging/plugin/hdEmbree/renderParam.h | 2 +-
pxr/imaging/plugin/hdEmbree/renderer.cpp | 8 ++------
pxr/imaging/plugin/hdEmbree/renderer.h | 4 ++--
.../plugin/hdEmbree/testenv/testHdEmbree.cpp | 2 +-
11 files changed, 24 insertions(+), 28 deletions(-)
diff --git a/cmake/modules/FindEmbree.cmake b/cmake/modules/FindEmbree.cmake
index cd52f6b7f5..7c3ecd7cd8 100644
--- a/cmake/modules/FindEmbree.cmake
+++ b/cmake/modules/FindEmbree.cmake
@@ -20,11 +20,11 @@
#=============================================================================
if (APPLE)
- set (EMBREE_LIB_NAME libembree3.dylib)
+ set (EMBREE_LIB_NAME libembree4.dylib)
elseif (UNIX)
- set (EMBREE_LIB_NAME libembree3.so)
+ set (EMBREE_LIB_NAME libembree4.so)
elseif (WIN32)
- set (EMBREE_LIB_NAME embree3.lib)
+ set (EMBREE_LIB_NAME embree4.lib)
endif()
find_library(EMBREE_LIBRARY
@@ -39,7 +39,7 @@ find_library(EMBREE_LIBRARY
)
find_path(EMBREE_INCLUDE_DIR
- embree3/rtcore.h
+ embree4/rtcore.h
HINTS
"${EMBREE_LOCATION}/include"
"$ENV{EMBREE_LOCATION}/include"
@@ -47,12 +47,12 @@ DOC
"Embree headers path"
)
-if (EMBREE_INCLUDE_DIR AND EXISTS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" )
- file(STRINGS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_MAJOR.*$")
+if (EMBREE_INCLUDE_DIR AND EXISTS "${EMBREE_INCLUDE_DIR}/embree4/rtcore_version.h" )
+ file(STRINGS "${EMBREE_INCLUDE_DIR}/embree4/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_MAJOR.*$")
string(REGEX MATCHALL "[0-9]+" MAJOR ${TMP})
- file(STRINGS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_MINOR.*$")
+ file(STRINGS "${EMBREE_INCLUDE_DIR}/embree4/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_MINOR.*$")
string(REGEX MATCHALL "[0-9]+" MINOR ${TMP})
- file(STRINGS "${EMBREE_INCLUDE_DIR}/embree3/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_PATCH.*$")
+ file(STRINGS "${EMBREE_INCLUDE_DIR}/embree4/rtcore_version.h" TMP REGEX "^#define RTC_VERSION_PATCH.*$")
string(REGEX MATCHALL "[0-9]+" PATCH ${TMP})
set (EMBREE_VERSION ${MAJOR}.${MINOR}.${PATCH})
diff --git a/pxr/imaging/plugin/hdEmbree/context.h b/pxr/imaging/plugin/hdEmbree/context.h
index 4165adb1e6..af9cc4ef5b 100644
--- a/pxr/imaging/plugin/hdEmbree/context.h
+++ b/pxr/imaging/plugin/hdEmbree/context.h
@@ -14,7 +14,7 @@
#include "pxr/base/gf/matrix4f.h"
#include "pxr/base/vt/array.h"
-#include <embree3/rtcore.h>
+#include <embree4/rtcore.h>
PXR_NAMESPACE_OPEN_SCOPE
diff --git a/pxr/imaging/plugin/hdEmbree/mesh.cpp b/pxr/imaging/plugin/hdEmbree/mesh.cpp
index 195f83a633..d3cb949952 100644
--- a/pxr/imaging/plugin/hdEmbree/mesh.cpp
+++ b/pxr/imaging/plugin/hdEmbree/mesh.cpp
@@ -203,7 +203,7 @@ void HdEmbreeMesh::_EmbreeCullFaces(const RTCFilterFunctionNArguments* args)
default: break;
}
if (cull) {
- // This is how you reject a hit in embree3 instead of setting
+ // This is how you reject a hit in embree3/4 instead of setting
// geomId to invalid on the ray
args->valid[i] = 0;
}
diff --git a/pxr/imaging/plugin/hdEmbree/mesh.h b/pxr/imaging/plugin/hdEmbree/mesh.h
index bbb006302f..ef1ef07a98 100644
--- a/pxr/imaging/plugin/hdEmbree/mesh.h
+++ b/pxr/imaging/plugin/hdEmbree/mesh.h
@@ -15,8 +15,8 @@
#include "pxr/imaging/plugin/hdEmbree/meshSamplers.h"
-#include <embree3/rtcore.h>
-#include <embree3/rtcore_ray.h>
+#include <embree4/rtcore.h>
+#include <embree4/rtcore_ray.h>
PXR_NAMESPACE_OPEN_SCOPE
diff --git a/pxr/imaging/plugin/hdEmbree/meshSamplers.h b/pxr/imaging/plugin/hdEmbree/meshSamplers.h
index c32c35fffa..3712a9e3ab 100644
--- a/pxr/imaging/plugin/hdEmbree/meshSamplers.h
+++ b/pxr/imaging/plugin/hdEmbree/meshSamplers.h
@@ -12,8 +12,8 @@
#include "pxr/imaging/hd/meshUtil.h"
#include "pxr/base/vt/types.h"
-#include <embree3/rtcore.h>
-#include <embree3/rtcore_geometry.h>
+#include <embree4/rtcore.h>
+#include <embree4/rtcore_geometry.h>
#include <bitset>
diff --git a/pxr/imaging/plugin/hdEmbree/pch.h b/pxr/imaging/plugin/hdEmbree/pch.h
index 0369fea3a1..2f9f19fa09 100644
--- a/pxr/imaging/plugin/hdEmbree/pch.h
+++ b/pxr/imaging/plugin/hdEmbree/pch.h
@@ -84,9 +84,9 @@
#undef toupper
#endif
#endif // PXR_PYTHON_SUPPORT_ENABLED && !PXR_USE_INTERNAL_BOOST_PYTHON
-#include <embree3/rtcore.h>
-#include <embree3/rtcore_geometry.h>
-#include <embree3/rtcore_ray.h>
+#include <embree4/rtcore.h>
+#include <embree4/rtcore_geometry.h>
+#include <embree4/rtcore_ray.h>
#include <tbb/blocked_range.h>
#include <tbb/cache_aligned_allocator.h>
#include <tbb/concurrent_hash_map.h>
diff --git a/pxr/imaging/plugin/hdEmbree/renderDelegate.h b/pxr/imaging/plugin/hdEmbree/renderDelegate.h
index 1d8694daa6..72894b9080 100644
--- a/pxr/imaging/plugin/hdEmbree/renderDelegate.h
+++ b/pxr/imaging/plugin/hdEmbree/renderDelegate.h
@@ -14,7 +14,7 @@
#include "pxr/base/tf/staticTokens.h"
#include <mutex>
-#include <embree3/rtcore.h>
+#include <embree4/rtcore.h>
PXR_NAMESPACE_OPEN_SCOPE
diff --git a/pxr/imaging/plugin/hdEmbree/renderParam.h b/pxr/imaging/plugin/hdEmbree/renderParam.h
index 206a7458bc..354fed4faa 100644
--- a/pxr/imaging/plugin/hdEmbree/renderParam.h
+++ b/pxr/imaging/plugin/hdEmbree/renderParam.h
@@ -11,7 +11,7 @@
#include "pxr/imaging/hd/renderDelegate.h"
#include "pxr/imaging/hd/renderThread.h"
-#include <embree3/rtcore.h>
+#include <embree4/rtcore.h>
PXR_NAMESPACE_OPEN_SCOPE
diff --git a/pxr/imaging/plugin/hdEmbree/renderer.cpp b/pxr/imaging/plugin/hdEmbree/renderer.cpp
index 88d5e79093..820238c373 100644
--- a/pxr/imaging/plugin/hdEmbree/renderer.cpp
+++ b/pxr/imaging/plugin/hdEmbree/renderer.cpp
@@ -667,9 +667,7 @@ HdEmbreeRenderer::_TraceRay(unsigned int x, unsigned int y,
rayHit.ray.flags = 0;
_PopulateRayHit(&rayHit, origin, dir, 0.0f);
{
- RTCIntersectContext context;
- rtcInitIntersectContext(&context);
- rtcIntersect1(_scene, &context, &rayHit);
+ rtcIntersect1(_scene, &rayHit);
//
// there is something odd about how this is used in Embree. Is it reversed
// here and then when it it used in
@@ -1005,9 +1003,7 @@ HdEmbreeRenderer::_ComputeAmbientOcclusion(GfVec3f const& position,
shadow.flags = 0;
_PopulateRay(&shadow, position, shadowDir, 0.001f);
{
- RTCIntersectContext context;
- rtcInitIntersectContext(&context);
- rtcOccluded1(_scene,&context,&shadow);
+ rtcOccluded1(_scene,&shadow);
}
// Record this AO ray's contribution to the occlusion factor: a
diff --git a/pxr/imaging/plugin/hdEmbree/renderer.h b/pxr/imaging/plugin/hdEmbree/renderer.h
index 2da9880848..fc3e062dd8 100644
--- a/pxr/imaging/plugin/hdEmbree/renderer.h
+++ b/pxr/imaging/plugin/hdEmbree/renderer.h
@@ -15,8 +15,8 @@
#include "pxr/base/gf/matrix4d.h"
#include "pxr/base/gf/rect2i.h"
-#include <embree3/rtcore.h>
-#include <embree3/rtcore_ray.h>
+#include <embree4/rtcore.h>
+#include <embree4/rtcore_ray.h>
#include <random>
#include <atomic>
diff --git a/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp b/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp
index 02c2ca69f8..93705b2d28 100644
--- a/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp
+++ b/pxr/imaging/plugin/hdEmbree/testenv/testHdEmbree.cpp
@@ -23,7 +23,7 @@
#include "pxr/base/tf/errorMark.h"
-#include <embree3/rtcore.h>
+#include <embree4/rtcore.h>
#include <iostream>
PXR_NAMESPACE_USING_DIRECTIVE

22
3487.patch Normal file
View file

@ -0,0 +1,22 @@
From 97151da9044e0fb488b61d664cc56fda0b711bf7 Mon Sep 17 00:00:00 2001
From: "Benjamin A. Beasley" <code@musicinmybrain.net>
Date: Tue, 21 Jan 2025 22:05:01 -0500
Subject: [PATCH] Add missing #include <cstdint>
Fixes failure to compile with GCC 15
---
pxr/usd/usd/zipFile.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/pxr/usd/usd/zipFile.h b/pxr/usd/usd/zipFile.h
index 4356be7ecb..8f22420966 100644
--- a/pxr/usd/usd/zipFile.h
+++ b/pxr/usd/usd/zipFile.h
@@ -10,6 +10,7 @@
#include "pxr/pxr.h"
#include "pxr/usd/usd/api.h"
+#include <cstdint>
#include <memory>
#include <string>
#include <utility>

View file

@ -0,0 +1,34 @@
From 534b22c12dc18203ab5b233792debca8bf843b2e Mon Sep 17 00:00:00 2001
From: Matt Johnson <matt.johnson@epicgames.com>
Date: Fri, 24 Jan 2025 16:17:30 -0800
Subject: [PATCH] work: account for task_group_base interface change in oneTBB
2022.0.0
The `m_wait_ctx` member being used in a narrow band of oneTBB versions was removed in a refactor that went into version [v2022.0.0](https://github.com/oneapi-src/oneTBB/releases/tag/v2022.0.0) which was released yesterday:
https://github.com/oneapi-src/oneTBB/commit/1f52f5093ec7ce23829fe64ab82ac5541fea42ee
This change accounts for the update in the new version of oneTBB and uses the newly added `m_wait_vertex` member to access the same context as before.
Closes #3392
(Internal change: 2354795)
---
pxr/base/work/dispatcher.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/pxr/base/work/dispatcher.cpp b/pxr/base/work/dispatcher.cpp
index 24daa98b5b..45a9f38004 100644
--- a/pxr/base/work/dispatcher.cpp
+++ b/pxr/base/work/dispatcher.cpp
@@ -34,7 +34,11 @@ WorkDispatcher::WorkDispatcher()
#if TBB_INTERFACE_VERSION_MAJOR >= 12
inline tbb::detail::d1::wait_context&
WorkDispatcher::_TaskGroup::_GetInternalWaitContext() {
+#if TBB_INTERFACE_VERSION_MINOR >= 14
+ return m_wait_vertex.get_context();
+#else
return m_wait_ctx;
+#endif
}
#endif

View file

@ -1 +1 @@
SHA512 (OpenUSD-26.08.tar.gz) = 82f7bb4f77b295be79cd36f591f242276d36c0d589b0fca383344c27e70daf7e29151bf587528bb2fc2b2a8b974387a253993ace3caf5f79ae70f9ebbc71cf1a
SHA512 (OpenUSD-25.02a.tar.gz) = 6369b902d4e84bda7f3b54357915a933f2d3ea7753b9f702350af6d341572d49a0644ccf803a469e9b452aad1f3d81d7cbfab340f2509fba1213ffd575cf402b

173
usd.spec
View file

@ -2,13 +2,15 @@
# package version, as a reminder of the need to rebuild dependent packages on
# every update. See additional notes near the downstream ABI versioning patch.
# It should be 0.MAJOR.MINOR without leading zeros, e.g. 22.03 → 0.22.3.
%global downstream_so_version 0.26.8
%global downstream_so_version 0.25.2
%bcond alembic 1
%bcond draco 1
%bcond embree 1
%bcond jemalloc 0
%bcond materialx 1
# Not yet packaged: https://github.com/AcademySoftwareFoundation/MaterialX
# https://bugzilla.redhat.com/show_bug.cgi?id=2262694
%bcond materialx 0
# Default "UNIX Makefiles" backend for CMake would also work fine; ninja is a
# bit faster. We conditionalize it just in case there are backend-specific
# issues in the future.
@ -25,7 +27,7 @@
%bcond test 0
Name: usd
Version: 26.08
Version: 25.02a
Release: %autorelease
Summary: 3D VFX pipeline interchange file format
@ -33,15 +35,12 @@ Summary: 3D VFX pipeline interchange file format
#
# Apache-2.0:
# - pxr/imaging/hgiVulkan/spirv_reflect.{cpp,h}
# - pxr/imaging/plugin/hdEmbree/pxrPbrt/pbrtUtils.h
# - pxr/imaging/plugin/hdEmbree/pxrIES/pxr-IES.patch
# - pxr/imaging/plugin/hdEmbree/pxrIES/ies.{cpp,h}
# BSD-3-Clause:
# - pxr/base/gf/ilmbase_*
# - pxr/base/js/rapidjson/msinttypes/ (removed in %%prep)
# - pxr/base/tf/pxrCLI11/ (removed in %%prep)
# - pxr/base/tf/pxrDoubleConversion/ (removed in %%prep)
# - pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/
# - pxr/imaging/hio/OpenEXR/OpenEXRCore/
# - pxr/imaging/plugin/hioAvif/AVIF/src/src-libyuv/
# BSD-2-Clause:
# - pxr/base/tf/pxrLZ4/ (removed in %%prep)
@ -59,14 +58,14 @@ Summary: 3D VFX pipeline interchange file format
# - pxr/base/tf/pxrTslRobinMap/
# - pxr/imaging/garch/khrplatform.h
# - pxr/imaging/hgiVulkan/vk_mem_alloc.h
# - pxr/imaging/plugin/hioOpenEXR/OpenEXR/deflate/ (removed in %%prep)
# - third_party/renderman/plugin/rmanArgsParser/pugixml/ (removed in %%prep)
# - pxr/imaging/hio/OpenEXR/deflate/ (removed in %%prep)
# - third_party/renderman-26/plugin/rmanArgsParser/pugixml/ (removed in %%prep)
# MIT OR Unlicense:
# - pxr/imaging/hio/stb/
# Pixar AND GPL-3.0-or-later WITH Bison-exception-2.2:
# - pxr/usd/sdf/path.tab.{cpp,h}
# - pxr/usd/sdf/textFileFormat.tab.{cpp,h}
# - third_party/renderman/plugin/hdPrman/virtualStructConditionalGrammar.tab.{cpp,h}
# - third_party/renderman-26/plugin/hdPrman/virtualStructConditionalGrammar.tab.{cpp,h}
#
# Additionally, the following would be listed above but are removed in %%prep:
#
@ -127,13 +126,12 @@ Source1: org.openusd.usdview.desktop
# built with -DPXR_BUILD_EXAMPLES=OFF, but it is.)
Patch: 0001-Downstream-only-add-an-SONAME-version.patch
# Downstream-only: use Valgrind macro instead of inline assembly
#
# Upstream already has a plan to make this change, but is waiting to be
# able to add a build dependency on valgrind-devel. We have no such
# obstacle, and this change fixes the inline assembly failing to compile
# on aarch64.
Patch: 0001-Downstream-only-use-Valgrind-macro-instead-of-inline.patch
# Port to Embree 4.x
# https://github.com/PixarAnimationStudios/OpenUSD/pull/2266
# See also:
# hdEmbree: add support for building against embree4
# https://github.com/PixarAnimationStudios/USD/pull/2266
Patch: %{forgeurl}/pull/2266.patch
# Downstream-only: use the system double-conversion library
Patch: 0001-Downstream-only-use-the-system-double-conversion-lib.patch
@ -148,17 +146,37 @@ Patch: 0005-Downstream-only-use-the-system-libdeflate.patch
# Downstream-only: use the system libavif library
Patch: 0006-Downstream-only-use-the-system-libavif.patch
# work: account for task_group_base interface change in oneTBB 2022.0.0
# https://github.com/PixarAnimationStudios/OpenUSD/pull/3392
# Merged as commit 534b22c12dc18203ab5b233792debca8bf843b2e.
Patch: %{forgeurl}/commit/534b22c12dc18203ab5b233792debca8bf843b2e.patch
# Add missing #include <cstdint>
# https://github.com/PixarAnimationStudios/OpenUSD/pull/3487
# Fixes failure to compile with GCC 15
Patch: %{forgeurl}/pull/3487.patch
# Backport fixes for CVE-2025-64181 etc. in OpenEXRCore
# https://github.com/PixarAnimationStudios/OpenUSD/pull/3903
Patch: %{forgeurl}/pull/3903.patch
# Rebased on v25.02a
Patch: 0001-Backport-fixes-for-CVE-2025-64181-etc.-in-OpenEXRCor.patch
# Replace PyWeakref_GetObject with PyWeakref_GetRef
# Fixes RHBZ#2433881. This patch is LLM-generated and needs expert human
# review, but it at least builds. See discussion in
# https://bugzilla.redhat.com/show_bug.cgi?id=2433881.
# Mentioned upstream in
# https://github.com/PixarAnimationStudios/OpenUSD/issues/3966#issuecomment-5128542913.
Patch: 0001-Replace-PyWeakref_GetObject-with-PyWeakref_GetRef.patch
# sdf: Guard against invalid primChildren in crate files
# https://github.com/PixarAnimationStudios/OpenUSD/commit/b9530922b6a8ea72cd43661226b693fff8abbe4c
#
# Fixes:
#
# CVE-2025-14439 usd: OpenUSD File Parsing Use-After-Free Remote Code Execution
# Vulnerability [fedora-42]
# https://bugzilla.redhat.com/show_bug.cgi?id=2422275
#
# …which is:
#
# OpenUSD File Parsing Use-After-Free Remote Code Execution Vulnerability
# https://github.com/advisories/GHSA-grjp-54v3-c442
#
# Cherry-picked on v25.08.
Patch: 0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch
# Base
BuildRequires: gcc-c++
@ -170,17 +188,15 @@ BuildRequires: ninja-build
BuildRequires: dos2unix
BuildRequires: help2man
# For applying 0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch,
# which includes binary diffs.
BuildRequires: git-core
BuildRequires: pkgconfig(blosc)
BuildRequires: pkgconfig(dri)
BuildRequires: hdf5-devel
BuildRequires: cmake(OpenSubdiv)
BuildRequires: opensubdiv-devel >= 3.6.0
BuildRequires: pkgconfig(tbb)
# This seems to be an indirect dependency, probably through OpenSubdiv.
# Ideally, everything would take care of its own dependencies, and we wouldnt
# have to specify it directly, but we havent studied the problem closely
# enough to propose a fix.
BuildRequires: pkgconfig(OpenCL)
# Unbundled:
BuildRequires: cmake(double-conversion)
BuildRequires: pkgconfig(liblz4)
@ -194,9 +210,6 @@ BuildRequires: pkgconfig(libavif)
BuildRequires: cmake(Imath) >= 3.0
# Introduced by 0001-Downstream-only-use-Valgrind-macro-instead-of-inline.patch
BuildRequires: valgrind-devel
%if %{with alembic}
BuildRequires: cmake(Alembic)
%endif
@ -213,13 +226,6 @@ BuildRequires: embree-devel
BuildRequires: pkgconfig(jemalloc)
%endif
%if %{with materialx}
BuildRequires: cmake(materialx)
BuildRequires: materialx-data
BuildRequires: pkgconfig(xt)
BuildRequires: python3-materialx
%endif
%if %{with ocio}
BuildRequires: cmake(OpenColorIO)
%endif
@ -238,7 +244,7 @@ BuildRequires: openvdb-devel
%endif
%if %{with ptex}
BuildRequires: cmake(ptex)
BuildRequires: pkgconfig(ptex)
%endif
# Header-only library: -static is for tracking per guidelines
@ -300,9 +306,8 @@ Provides: bundled(ilmbase) = 2.5.3
# Currently, Fedoras PEGTL is too old:
# https://bugzilla.redhat.com/show_bug.cgi?id=1902427
Provides: bundled(PEGTL) = 3.2.7
# Version from
# pxr/imaging/plugin/hioOpenEXR/OpenEXR/OpenEXRCore/openexr_version.h
# From pxr/imaging/plugin/hioOpenEXR/OpenEXR/README.md:
# Version from pxr/imaging/hio/OpenEXR/OpenEXRCore/openexr_version.h
# From pxr/imaging/hio/OpenEXR/README.md:
# A few changes are still in progress to upstreamed to the OpenEXR project,
# but these are minor, and otherwise, almost all differences between the
# interred OpenEXRCore and the official OpenEXR repo are consolidated to the
@ -331,39 +336,6 @@ Provides: bundled(openexr) = 3.2.0
# effort to remove the Boost dependency. While pxr_boost::python is derived
# from boost::python, it is not intended to remain compatible with it.
Provides: bundled(boost) = 1.85.0
# From LICENSE.txt:
# ===========================================================
# PBRT (Sampling functions)
# ============================================================
# USD includes code derived from the pbrt-v4 library, retrieved from
# https://github.com/mmp/pbrt-v4/tree/8c19f304558fd7681e2fef2c395a689d0106fb05, which was
# provided subject to the unmodified Apache 2.0 license. For details, see
# https://github.com/mmp/pbrt-v4/blob/8c19f304558fd7681e2fef2c395a689d0106fb05/LICENSE.txt
#
# The bundled routines in pxr/imaging/plugin/hdEmbree/pxrPbrt/pbrtUtils.h are
# just a handful of small internal utility functions. It would not be
# reasonable to add a dependency on the full pbrt ray tracer even if these were
# exposed in a public API.
Provides: bundled(pbrt-v4) = 4~20251208.8c19f30
# From LICENSE.txt:
# ============================================================
# Cycles (IES reader)
# ============================================================
# USD includes classes from the Blender Foundation's Cycles project, retrieved from
# https://projects.blender.org/blender/cycles/src/commit/0be21d452506ec90259b9063c28b5a6fc1cac6a1,
# which was provided subject to the unmodified Apache 2.0 license. For details, see
# https://projects.blender.org/blender/cycles/src/commit/0be21d452506ec90259b9063c28b5a6fc1cac6a1/LICENSE
#
# These are not a candidate for unbundling because they are internal utility
# functions not available in the public API. There are also some minor
# modifications for OpenUSD, documented in
# pxr/imaging/plugin/hdEmbree/pxrIES/pxr-IES.patch.
#
# Is this commit a post-release snapshot of 4.5.0, or a pre-release snapshot of
# 5.0.0? How can we tell? There doesnt seem to be a project version number
# embedded in the source tree. Since this commit hash is only two commits ahead
# of the v4.5.0 tag, we consider it a 4.5.0 post-release.
Provides: bundled(cycles) = 4.5.0^20251210.0be21d4
# We are currently able to unbundle these and use system libraries, but we
# retain the virtual Provides, commented out, as documentation and in case we
@ -376,7 +348,7 @@ Provides: bundled(cycles) = 4.5.0^20251210.0be21d4
# Version from: pxr/base/tf/pxrCLI11/README.md
# Provides: bundled(cli11) = 2.3.1
# Version from:
# third_party/renderman/plugin/rmanArgsParser/pugixml/pugiconfig.hpp
# third_party/renderman-26/plugin/rmanArgsParser/pugixml/pugiconfig.hpp
# (header comment)
# Provides: bundled(pugixml) = 1.9
# Version from: pxr/base/js/rapidjson/rapidjson.h
@ -385,7 +357,7 @@ Provides: bundled(cycles) = 4.5.0^20251210.0be21d4
# Version from: pxr/base/tf/pxrTslRobinMap/robin_growth_policy.h
# (PXR_TSL_RH_VERSION_{MAJOR,MINOR,PATCH})
# Provides: bundled(robin-map) = 1.3.0
# Version from pxr/imaging/plugin/hioOpenEXR/OpenEXR/deflate/libdeflate.h
# Version from pxr/imaging/hio/OpenEXR/deflate/libdeflate.h
# Provides: bundled(libdeflate) = 1.18
# Version from pxr/imaging/plugin/hioAvif/AVIF/src/avif/avif.h
# We actually have a post-release snapshot of libavif, because
@ -400,8 +372,8 @@ Provides: bundled(cycles) = 4.5.0^20251210.0be21d4
# https://chromium.googlesource.com/libyuv/libyuv and find the commit hash that
# corresponds to a particular serial number.
# LIBYUV_VERSION 1895 = commit a97746349b244efd54ab1eb0c0a7366717b33f39
# Provides: bundled(libyuv) = 0^20240812.a977463
# Version from pxr/imaging/plugin/hioAvif/config/aom_version.h
# Provides: bundled(libyuv) = 0^20240812gita977463
# Version from pxr/imaging/plugin/hioAvif/aom/config/aom_version.h
# Provides: bundled(aom) = 3.0.0
%description libs
@ -416,11 +388,6 @@ Requires: usd-libs%{?_isa} = %{version}-%{release}
# Unbundled, and exposed in the API:
Requires: cli11-devel cli11-static
Requires: robin-map-devel robin-map-static
# Needed by cmake config
Requires: cmake(OpenSubdiv)
%if %{with materialx}
Requires: cmake(materialx)
%endif
%description devel
This package contains the C++ header files and symbolic links to the shared
@ -437,8 +404,8 @@ BuildRequires: python3dist(jinja2)
BuildRequires: desktop-file-utils
BuildRequires: python3dist(pyside6)
BuildRequires: pyside6-tools
BuildRequires: python3dist(pyopengl)
%endif
BuildRequires: python3dist(pyopengl)
Requires: font(roboto)
Requires: font(robotoblack)
Requires: font(robotolight)
@ -446,8 +413,8 @@ Requires: font(robotomono)
Requires: python3dist(jinja2)
%if %{with usdview}
Requires: python3dist(pyside6)
Requires: python3dist(pyopengl)
%endif
Requires: python3dist(pyopengl)
Requires: usd-libs%{?_isa} = %{version}-%{release}
@ -457,7 +424,10 @@ Requires: usd-libs%{?_isa} = %{version}-%{release}
Python language bindings for the Universal Scene Description (USD) C++ API
%prep
%autosetup -p1 -n OpenUSD-%{version}
# The -S git is for applying
# 0001-sdf-Guard-against-invalid-primChildren-in-crate-file.patch, which
# includes binary diffs.
%autosetup -p1 -n OpenUSD-%{version} -S git
# Convert NOTICE.txt from CRNL line encoding
dos2unix NOTICE.txt
@ -520,9 +490,9 @@ cat > pxr/base/tf/pxrCLI11/CLI11.h <<'EOF'
namespace pxr_CLI = CLI;
EOF
# Remove the bundled copy of pugixml.
find third_party/renderman/plugin/rmanArgsParser/pugixml/ \
find third_party/renderman-*/plugin/rmanArgsParser/pugixml/ \
-type f ! -name '*.hpp' -print -delete
for hdr in third_party/renderman/plugin/rmanArgsParser/pugixml/*.hpp
for hdr in third_party/renderman-*/plugin/rmanArgsParser/pugixml/*.hpp
do
cat > "${hdr}" <<EOF
#include <$(basename "${hdr}")>
@ -545,7 +515,7 @@ namespace pxr_tsl = tsl;
EOF
done
# Remove the bundled copy of libdeflate.
rm -rv pxr/imaging/plugin/hioOpenEXR/OpenEXR/deflate/
rm -rv pxr/imaging/hio/OpenEXR/deflate/
# Remove the bundled copies of libavif, along with the associated libaom and
# the libyuv that is in the libavif sources.
rm -rv pxr/imaging/plugin/hioAvif/aom/ \
@ -619,13 +589,13 @@ extra_flags="${extra_flags-} -DTBB_SUPPRESS_DEPRECATED_MESSAGES=1"
-DPXR_BUILD_TESTS=%{expr:%{with test}?"ON":"OFF"} \
-DPXR_BUILD_TUTORIALS=OFF \
-DPXR_BUILD_USD_IMAGING=ON \
-DPXR_BUILD_EXEC=ON \
-DPXR_BUILD_USD_TOOLS=ON \
-DPXR_BUILD_USDVIEW=%{expr:%{with usdview}?"ON":"OFF"} \
\
-DPXR_BUILD_ALEMBIC_PLUGIN=%{expr:%{with alembic}?"ON":"OFF"} \
-DPXR_BUILD_DRACO_PLUGIN=%{expr:%{with draco}?"ON":"OFF"} \
-DPXR_BUILD_EMBREE_PLUGIN=%{expr:%{with embree}?"ON":"OFF"} \
-DPXR_BUILD_MATERIALX_PLUGIN=%{expr:%{with materialx}?"ON":"OFF"} \
-DPXR_BUILD_OPENCOLORIO_PLUGIN=%{expr:%{with ocio}?"ON":"OFF"} \
-DPXR_BUILD_OPENIMAGEIO_PLUGIN=%{expr:%{with oiio}?"ON":"OFF"} \
-DPXR_BUILD_PRMAN_PLUGIN=OFF \
@ -635,7 +605,6 @@ extra_flags="${extra_flags-} -DTBB_SUPPRESS_DEPRECATED_MESSAGES=1"
-DPXR_ENABLE_PTEX_SUPPORT=%{expr:%{with ptex}?"ON":"OFF"} \
-DPXR_ENABLE_OSL_SUPPORT=%{expr:%{with openshading}?"ON":"OFF"} \
-DPXR_ENABLE_MALLOCHOOK_SUPPORT=OFF \
-DPXR_ENABLE_MATERIALX_SUPPORT=%{expr:%{with materialx}?"ON":"OFF"} \
-DPXR_ENABLE_PYTHON_SUPPORT=ON \
\
-DPXR_INSTALL_LOCATION="%{_libdir}/usd/plugin" \
@ -654,10 +623,6 @@ extra_flags="${extra_flags-} -DTBB_SUPPRESS_DEPRECATED_MESSAGES=1"
mkdir -p %{buildroot}%{python3_sitearch}
mv %{buildroot}%{python3_sitelib}/* %{buildroot}%{python3_sitearch}
# Upstream may expect to use this as a script in development, but we install it
# without executable permissions, so we remove the shebang.
sed -r -i '1{/^#!/d}' '%{buildroot}%{python3_sitearch}/pxr/Usd/usdGenSchema.py'
%if %{with usdview}
# Install a desktop icon for usdview
desktop-file-install \
@ -701,11 +666,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.openusd.usdview.d
%{_bindir}/hdGenSchema
%{_bindir}/sdfdump
%{_bindir}/sdffilter
%if %{with materialx}
%{_bindir}/usdBakeMaterialX
%endif
%{_bindir}/usdGenSchema
%{_bindir}/usdInitSchema
%{_bindir}/usdcat
%{_bindir}/usdchecker
%if %{with draco}
@ -722,7 +683,6 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.openusd.usdview.d
%{_bindir}/usdstitch
%{_bindir}/usdstitchclips
%{_bindir}/usdtree
%{_bindir}/usdupdatecrate
%{_bindir}/usdzip
%if %{with usdview}
%{_datadir}/applications/org.openusd.usdview.desktop
@ -733,11 +693,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.openusd.usdview.d
%{_mandir}/man1/hdGenSchema.1*
%{_mandir}/man1/sdfdump.1*
%{_mandir}/man1/sdffilter.1*
%if %{with materialx}
%{_mandir}/man1/usdBakeMaterialX.1*
%endif
%{_mandir}/man1/usdGenSchema.1*
%{_mandir}/man1/usdInitSchema.1*
%{_mandir}/man1/usdcat.1*
%{_mandir}/man1/usdchecker.1*
%if %{with draco}
@ -754,7 +710,6 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.openusd.usdview.d
%{_mandir}/man1/usdstitch.1*
%{_mandir}/man1/usdstitchclips.1*
%{_mandir}/man1/usdtree.1*
%{_mandir}/man1/usdupdatecrate.1*
%{_mandir}/man1/usdzip.1*
%if %{with usdview}
%{_mandir}/man1/testusdview.1*