From 675bf068fef4e12703f48e08ff6cbc8590e4682f Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Sun, 9 Feb 2025 10:40:15 -0700 Subject: [PATCH] Deps: Include OIIO PR 4630 OIIO triggered some asserts in the debug configuration on windows during file save, upstream PR 4630 is required to resolve these. --- .../build_environment/cmake/oiio_4630.diff | 73 +++++++++++++++++++ .../build_environment/cmake/openimageio.cmake | 3 + 2 files changed, 76 insertions(+) create mode 100644 build_files/build_environment/cmake/oiio_4630.diff diff --git a/build_files/build_environment/cmake/oiio_4630.diff b/build_files/build_environment/cmake/oiio_4630.diff new file mode 100644 index 00000000000..726bc71e521 --- /dev/null +++ b/build_files/build_environment/cmake/oiio_4630.diff @@ -0,0 +1,73 @@ +diff --git a/src/libOpenImageIO/imagebuf.cpp b/src/libOpenImageIO/imagebuf.cpp +index 1cae86b9c9..b015995e9c 100644 +--- a/src/libOpenImageIO/imagebuf.cpp ++++ b/src/libOpenImageIO/imagebuf.cpp +@@ -99,20 +99,20 @@ span_from_buffer(void* data, TypeDesc format, int nchannels, int width, + if (xstride >= 0) { + bufend += xstride * (width - 1); + } else { +- bufstart -= xstride * (width - 1); ++ bufstart += xstride * (width - 1); + } + // Expand to the span range for a whole image plane. + if (ystride >= 0) { + bufend += ystride * (height - 1); + } else { +- bufstart -= ystride * (height - 1); ++ bufstart += ystride * (height - 1); + } + // Expand to the span range for a whole volume. + if (depth > 1 && zstride != 0) { + if (zstride >= 0) { + bufend += zstride * (depth - 1); + } else { +- bufstart -= zstride * (depth - 1); ++ bufstart += zstride * (depth - 1); + } + } + return { bufstart, size_t(bufend - bufstart) }; +@@ -905,7 +905,7 @@ ImageBufImpl::set_bufspan_localpixels(span bufspan, + } + m_bufspan = bufspan; + m_localpixels = (char*)buforigin; +- OIIO_DASSERT(check_span(m_bufspan, m_localpixels, spec().format)); ++ OIIO_ASSERT(check_span(m_bufspan, m_localpixels, spec().format)); + } + + +diff --git a/src/libOpenImageIO/imagebuf_test.cpp b/src/libOpenImageIO/imagebuf_test.cpp +index 2785ccf96c..9ef4219f73 100644 +--- a/src/libOpenImageIO/imagebuf_test.cpp ++++ b/src/libOpenImageIO/imagebuf_test.cpp +@@ -300,6 +300,31 @@ ImageBuf_test_appbuffer_strided() + } + } + } ++ ++ // Test negative strides by filling with yellow, backwards ++ { ++ ImageBufAlgo::fill(wrapped, cspan(green)); ++ // Use the ImageBuf constructor from a pointer to the last pixel and ++ // negative strides. But don't include the edge pixels of the original ++ // buffer. ++ ImageBuf neg(ImageSpec(res - 2, res - 2, nchans, TypeFloat), ++ &mem[res - 2][res - 2][0] /* point to last pixel */, ++ -nchans * sizeof(float) /* negative x stride */, ++ -res * nchans * sizeof(float) /* negative y stride*/); ++ const float yellow[nchans] = { 1.0f, 1.0f, 0.0f }; ++ ImageBufAlgo::fill(neg, cspan(yellow)); ++ ++ for (int y = 0; y < res; ++y) { ++ for (int x = 0; x < res; ++x) { ++ if (x == 0 || x == res - 1 || y == 0 || y == res - 1) ++ OIIO_CHECK_ASSERT(make_cspan(mem[y][x], nchans) ++ == make_cspan(green)); ++ else ++ OIIO_CHECK_ASSERT(make_cspan(mem[y][x], nchans) ++ == make_cspan(yellow)); ++ } ++ } ++ } + } + + diff --git a/build_files/build_environment/cmake/openimageio.cmake b/build_files/build_environment/cmake/openimageio.cmake index 0dcebf720e3..aeeef7253fb 100644 --- a/build_files/build_environment/cmake/openimageio.cmake +++ b/build_files/build_environment/cmake/openimageio.cmake @@ -131,6 +131,9 @@ ExternalProject_Add(external_openimageio ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimageio/src/external_openimageio/ < ${PATCH_DIR}/openimageio.diff && + ${PATCH_CMD} -p 1 -N -d + ${BUILD_DIR}/openimageio/src/external_openimageio/ < + ${PATCH_DIR}/oiio_4630.diff && ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimageio/src/external_openimageio/ < ${PATCH_DIR}/oiio_windows_arm64.diff