diff --git a/build_files/cmake/Modules/FindOpenImageIO.cmake b/build_files/cmake/Modules/FindOpenImageIO.cmake index 094f2d3860e..56a355ddcca 100644 --- a/build_files/cmake/Modules/FindOpenImageIO.cmake +++ b/build_files/cmake/Modules/FindOpenImageIO.cmake @@ -12,7 +12,7 @@ # This can also be an environment variable. # OPENIMAGEIO_FOUND, If false, do not try to use OpenImageIO. # OPENIMAGEIO_PUGIXML_FOUND, Indicates whether OIIO has biltin PuguXML parser. -# OPENIMAGEIO_IDIFF, full path to idiff application if found. +# OPENIMAGEIO_TOOL, full path to oiiotool application if found. # # also defined, but not for general use are # OPENIMAGEIO_LIBRARY, where to find the OpenImageIO library. @@ -51,9 +51,9 @@ find_library(OPENIMAGEIO_LIBRARY set(_openimageio_LIBRARIES ${OPENIMAGEIO_LIBRARY}) -find_file(OPENIMAGEIO_IDIFF +find_file(OPENIMAGEIO_TOOL NAMES - idiff + oiiotool HINTS ${_openimageio_SEARCH_DIRS} PATH_SUFFIXES @@ -115,7 +115,7 @@ mark_as_advanced( OPENIMAGEIO_INCLUDE_DIR OPENIMAGEIO_LIBRARY OPENIMAGEIO_UTIL_LIBRARY - OPENIMAGEIO_IDIFF + OPENIMAGEIO_TOOL ) unset(_openimageio_SEARCH_DIRS) diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 5d67879fc9e..6f8edbf06d2 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -684,7 +684,7 @@ if(NOT OpenImageIO_FOUND) set(OIIO_OPTIMIZED optimized ${OPENIMAGEIO_LIBPATH}/OpenImageIO.lib optimized ${OPENIMAGEIO_LIBPATH}/OpenImageIO_Util.lib) set(OIIO_DEBUG debug ${OPENIMAGEIO_LIBPATH}/OpenImageIO_d.lib debug ${OPENIMAGEIO_LIBPATH}/OpenImageIO_Util_d.lib) set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG}) - set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe") + set(OPENIMAGEIO_TOOL "${OPENIMAGEIO}/bin/oiiotool.exe") endif() if(WITH_LLVM) diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index 9f14a057f61..77e06897991 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -109,7 +109,7 @@ endfunction() # Run Python render test. function(add_render_test testname testscript) - set(_args ${ARGN} -blender "${TEST_BLENDER_EXE}" -idiff "${OPENIMAGEIO_IDIFF}") + set(_args ${ARGN} -blender "${TEST_BLENDER_EXE}" -oiiotool "${OPENIMAGEIO_TOOL}") if(WITH_TESTS_BATCHED) list(APPEND _args --batch) endif() @@ -584,8 +584,8 @@ endif() # SVG Import if(TRUE) - if(NOT OPENIMAGEIO_IDIFF) - message(WARNING "Disabling SVG tests because OIIO idiff does not exist") + if(NOT OPENIMAGEIO_TOOL) + message(WARNING "Disabling SVG tests because OIIO oiiotool does not exist") else() set(_svg_render_tests complex path) @@ -603,8 +603,8 @@ if(TRUE) endif() if(WITH_CYCLES OR WITH_GPU_RENDER_TESTS) - if(NOT OPENIMAGEIO_IDIFF) - message(WARNING "Disabling render tests because OIIO idiff does not exist") + if(NOT OPENIMAGEIO_TOOL) + message(WARNING "Disabling render tests because OIIO oiiotool does not exist") elseif(NOT EXISTS "${TEST_SRC_DIR}/render/shader") message(WARNING "Disabling render tests because tests folder does not exist at ${TEST_SRC_DIR}") elseif(NOT WITH_COMPOSITOR_CPU) @@ -751,8 +751,8 @@ if(WITH_CYCLES OR WITH_GPU_RENDER_TESTS) endif() if(WITH_COMPOSITOR_CPU) - if(NOT OPENIMAGEIO_IDIFF) - message(WARNING "Disabling Compositor CPU tests because OIIO idiff does not exist") + if(NOT OPENIMAGEIO_TOOL) + message(WARNING "Disabling Compositor CPU tests because OIIO oiiotool does not exist") else() set(compositor_tests color @@ -783,8 +783,8 @@ endif() # NOTE: WITH_COMPOSITOR_CPU is needed for rendering. if(WITH_COMPOSITOR_REALTIME_TESTS AND WITH_COMPOSITOR_CPU) - if(NOT OPENIMAGEIO_IDIFF) - message(WARNING "Disabling realtime compositor tests because OIIO idiff does not exist") + if(NOT OPENIMAGEIO_TOOL) + message(WARNING "Disabling realtime compositor tests because OIIO oiiotool does not exist") else() set(compositor_tests color @@ -876,8 +876,8 @@ endif() if(WITH_GPU_DRAW_TESTS) - if(NOT OPENIMAGEIO_IDIFF) - message(STATUS "Disabling OpenGL draw tests because OIIO idiff does not exist") + if(NOT OPENIMAGEIO_TOOL) + message(STATUS "Disabling OpenGL draw tests because OIIO oiiotool does not exist") elseif(NOT EXISTS "${TEST_SRC_DIR}/opengl") message(STATUS "Disabling OpenGL draw tests because tests folder does not exist at ${TEST_SRC_DIR}") else() @@ -950,8 +950,8 @@ if(WITH_CODEC_FFMPEG) ) endif() -if(NOT OPENIMAGEIO_IDIFF) - message(STATUS "Disabling ImBuf image format tests because OIIO idiff does not exist") +if(NOT OPENIMAGEIO_TOOL) + message(STATUS "Disabling ImBuf image format tests because OIIO oiiotool does not exist") else() set(OPTIONAL_FORMATS "") if(WITH_IMAGE_CINEON) @@ -973,7 +973,7 @@ else() -- -test_dir "${TEST_SRC_DIR}/imbuf_io" -output_dir "${TEST_OUT_DIR}/imbuf_io/save" - -idiff "${OPENIMAGEIO_IDIFF}" + -oiiotool "${OPENIMAGEIO_TOOL}" -optional_formats "${OPTIONAL_FORMATS}" ) @@ -983,7 +983,7 @@ else() -- -test_dir "${TEST_SRC_DIR}/imbuf_io" -output_dir "${TEST_OUT_DIR}/imbuf_io/load" - -idiff "${OPENIMAGEIO_IDIFF}" + -oiiotool "${OPENIMAGEIO_TOOL}" -optional_formats "${OPTIONAL_FORMATS}" ) endif() @@ -991,8 +991,8 @@ endif() # ------------------------------------------------------------------------------ # SEQUENCER RENDER TESTS -if(NOT OPENIMAGEIO_IDIFF) - message(STATUS "Disabling sequencer render tests because OIIO idiff does not exist") +if(NOT OPENIMAGEIO_TOOL) + message(STATUS "Disabling sequencer render tests because OIIO oiiotool does not exist") else() set(render_tests transform diff --git a/tests/python/bl_imbuf_load.py b/tests/python/bl_imbuf_load.py index d45f52e545b..37700cfaca4 100644 --- a/tests/python/bl_imbuf_load.py +++ b/tests/python/bl_imbuf_load.py @@ -196,7 +196,7 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument('-test_dir', required=True, type=pathlib.Path) parser.add_argument('-output_dir', required=True, type=pathlib.Path) - parser.add_argument('-idiff', required=True, type=pathlib.Path) + parser.add_argument('-oiiotool', required=True, type=pathlib.Path) parser.add_argument('-optional_formats', required=True) args, remaining = parser.parse_known_args(argv) diff --git a/tests/python/bl_imbuf_save.py b/tests/python/bl_imbuf_save.py index f733cab2ae2..8e4c8cefe23 100644 --- a/tests/python/bl_imbuf_save.py +++ b/tests/python/bl_imbuf_save.py @@ -263,7 +263,7 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument('-test_dir', required=True, type=pathlib.Path) parser.add_argument('-output_dir', required=True, type=pathlib.Path) - parser.add_argument('-idiff', required=True, type=pathlib.Path) + parser.add_argument('-oiiotool', required=True, type=pathlib.Path) parser.add_argument('-optional_formats', required=True) args, remaining = parser.parse_known_args(argv) diff --git a/tests/python/bl_io_curve_svg_test.py b/tests/python/bl_io_curve_svg_test.py index bb722730d21..f0f89cfb263 100644 --- a/tests/python/bl_io_curve_svg_test.py +++ b/tests/python/bl_io_curve_svg_test.py @@ -36,7 +36,7 @@ def create_argparse(): parser.add_argument("-blender", nargs="+") parser.add_argument("-testdir", nargs=1) parser.add_argument("-outdir", nargs=1) - parser.add_argument("-idiff", nargs=1) + parser.add_argument("-oiiotool", nargs=1) parser.add_argument('--batch', default=False, action='store_true') return parser @@ -47,11 +47,11 @@ def main(): blender = args.blender[0] test_dir = args.testdir[0] - idiff = args.idiff[0] + oiiotool = args.oiiotool[0] output_dir = args.outdir[0] from modules import render_report - report = render_report.Report('IO Curve SVG', output_dir, idiff) + report = render_report.Report('IO Curve SVG', output_dir, oiiotool) report.set_pixelated(True) test_dir_name = Path(test_dir).name diff --git a/tests/python/compositor_cpu_render_tests.py b/tests/python/compositor_cpu_render_tests.py index 6f7b60d8939..55501eafcad 100644 --- a/tests/python/compositor_cpu_render_tests.py +++ b/tests/python/compositor_cpu_render_tests.py @@ -37,7 +37,7 @@ def create_argparse(): parser.add_argument("-blender", nargs="+") parser.add_argument("-testdir", nargs=1) parser.add_argument("-outdir", nargs=1) - parser.add_argument("-idiff", nargs=1) + parser.add_argument("-oiiotool", nargs=1) parser.add_argument('--batch', default=False, action='store_true') return parser @@ -48,11 +48,11 @@ def main(): blender = args.blender[0] test_dir = args.testdir[0] - idiff = args.idiff[0] + oiiotool = args.oiiotool[0] output_dir = args.outdir[0] from modules import render_report - report = render_report.Report("Compositor CPU", output_dir, idiff) + report = render_report.Report("Compositor CPU", output_dir, oiiotool) report.set_pixelated(True) report.set_reference_dir("compositor_cpu_renders") diff --git a/tests/python/compositor_realtime_render_tests.py b/tests/python/compositor_realtime_render_tests.py index 2bb85144a22..d244cbe39ab 100644 --- a/tests/python/compositor_realtime_render_tests.py +++ b/tests/python/compositor_realtime_render_tests.py @@ -42,7 +42,7 @@ def create_argparse(): parser.add_argument("-blender", nargs="+") parser.add_argument("-testdir", nargs=1) parser.add_argument("-outdir", nargs=1) - parser.add_argument("-idiff", nargs=1) + parser.add_argument("-oiiotool", nargs=1) parser.add_argument('--batch', default=False, action='store_true') return parser @@ -53,11 +53,11 @@ def main(): blender = args.blender[0] test_dir = args.testdir[0] - idiff = args.idiff[0] + oiiotool = args.oiiotool[0] output_dir = args.outdir[0] from modules import render_report - report = render_report.Report("Compositor Realtime", output_dir, idiff) + report = render_report.Report("Compositor Realtime", output_dir, oiiotool) report.set_reference_dir("compositor_realtime_renders") ok = report.run(test_dir, blender, get_arguments, batch=args.batch) diff --git a/tests/python/cycles_render_tests.py b/tests/python/cycles_render_tests.py index b258a90dfd7..043c9494c21 100644 --- a/tests/python/cycles_render_tests.py +++ b/tests/python/cycles_render_tests.py @@ -104,7 +104,7 @@ def create_argparse(): parser.add_argument("-blender", nargs="+") parser.add_argument("-testdir", nargs=1) parser.add_argument("-outdir", nargs=1) - parser.add_argument("-idiff", nargs=1) + parser.add_argument("-oiiotool", nargs=1) parser.add_argument("-device", nargs=1) parser.add_argument("-blacklist", nargs="*") parser.add_argument('--batch', default=False, action='store_true') @@ -117,7 +117,7 @@ def main(): blender = args.blender[0] test_dir = args.testdir[0] - idiff = args.idiff[0] + oiiotool = args.oiiotool[0] output_dir = args.outdir[0] device = args.device[0] @@ -132,7 +132,7 @@ def main(): blacklist += BLACKLIST_METAL from modules import render_report - report = render_report.Report('Cycles', output_dir, idiff, device, blacklist) + report = render_report.Report('Cycles', output_dir, oiiotool, device, blacklist) report.set_pixelated(True) report.set_reference_dir("cycles_renders") if device == 'CPU': diff --git a/tests/python/eevee_next_render_tests.py b/tests/python/eevee_next_render_tests.py index 041f5bfed03..4b47f834e2d 100644 --- a/tests/python/eevee_next_render_tests.py +++ b/tests/python/eevee_next_render_tests.py @@ -114,7 +114,7 @@ def create_argparse(): parser.add_argument("-blender", nargs="+") parser.add_argument("-testdir", nargs=1) parser.add_argument("-outdir", nargs=1) - parser.add_argument("-idiff", nargs=1) + parser.add_argument("-oiiotool", nargs=1) parser.add_argument('--batch', default=False, action='store_true') return parser @@ -125,7 +125,7 @@ def main(): blender = args.blender[0] test_dir = args.testdir[0] - idiff = args.idiff[0] + oiiotool = args.oiiotool[0] output_dir = args.outdir[0] gpu_device_type = get_gpu_device_type(blender) @@ -134,7 +134,7 @@ def main(): reference_override_dir = "eevee_next_renders/amd" from modules import render_report - report = render_report.Report("Eevee Next", output_dir, idiff) + report = render_report.Report("Eevee Next", output_dir, oiiotool) report.set_pixelated(True) report.set_reference_dir("eevee_next_renders") report.set_reference_override_dir(reference_override_dir) diff --git a/tests/python/eevee_render_tests.py b/tests/python/eevee_render_tests.py index 23d66c3f246..623a8a6e19b 100644 --- a/tests/python/eevee_render_tests.py +++ b/tests/python/eevee_render_tests.py @@ -142,7 +142,7 @@ def create_argparse(): parser.add_argument("-blender", nargs="+") parser.add_argument("-testdir", nargs=1) parser.add_argument("-outdir", nargs=1) - parser.add_argument("-idiff", nargs=1) + parser.add_argument("-oiiotool", nargs=1) parser.add_argument('--batch', default=False, action='store_true') return parser @@ -153,7 +153,7 @@ def main(): blender = args.blender[0] test_dir = args.testdir[0] - idiff = args.idiff[0] + oiiotool = args.oiiotool[0] output_dir = args.outdir[0] gpu_device_type = get_gpu_device_type(blender) @@ -162,7 +162,7 @@ def main(): reference_override_dir = "eevee_renders/amd" from modules import render_report - report = render_report.Report("Eevee", output_dir, idiff) + report = render_report.Report("Eevee", output_dir, oiiotool) report.set_pixelated(True) report.set_reference_dir("eevee_renders") report.set_reference_override_dir(reference_override_dir) diff --git a/tests/python/modules/imbuf_test.py b/tests/python/modules/imbuf_test.py index 7f563561405..1181ae0a16b 100644 --- a/tests/python/modules/imbuf_test.py +++ b/tests/python/modules/imbuf_test.py @@ -19,7 +19,7 @@ class AbstractImBufTest(unittest.TestCase): cls.reference_load_dir = pathlib.Path(args.test_dir).joinpath("reference_load") cls.output_dir = pathlib.Path(args.output_dir) cls.diff_dir = pathlib.Path(args.output_dir).joinpath("diff") - cls.idiff = pathlib.Path(args.idiff) + cls.oiiotool = pathlib.Path(args.oiiotool) cls.optional_formats = args.optional_formats os.makedirs(cls.diff_dir, exist_ok=True) @@ -51,11 +51,12 @@ class AbstractImBufTest(unittest.TestCase): if os.path.exists(ref_filepath): # Diff images test with threshold. command = ( - str(self.idiff), - "-fail", str(self.fail_threshold), - "-failpercent", str(self.fail_percent), + str(self.oiiotool), ref_filepath, out_filepath, + "--fail", str(self.fail_threshold), + "--failpercent", str(self.fail_percent), + "--diff", ) try: subprocess.check_output(command) @@ -63,7 +64,7 @@ class AbstractImBufTest(unittest.TestCase): except subprocess.CalledProcessError as e: if self.verbose: print_message(e.output.decode("utf-8", 'ignore')) - failed = e.returncode != 1 + failed = e.returncode != 0 else: if not self.update: return False @@ -78,13 +79,13 @@ class AbstractImBufTest(unittest.TestCase): # Generate diff image (set fail thresholds high to reduce output spam). diff_img = str(self.diff_dir.joinpath(out_name + ".diff.png")) command = ( - str(self.idiff), - "-fail", "1", - "-failpercent", "100", - "-abs", "-scale", "16", - "-o", diff_img, + str(self.oiiotool), ref_filepath, - out_filepath + out_filepath, + "--sub", + "--abs", + "--mulc", "16", + "-o", diff_img, ) try: diff --git a/tests/python/modules/render_report.py b/tests/python/modules/render_report.py index 6ca6fb969ee..861fdac81fc 100755 --- a/tests/python/modules/render_report.py +++ b/tests/python/modules/render_report.py @@ -67,9 +67,10 @@ def test_get_images(output_dir, filepath, reference_dir, reference_override_dir) diff_dirpath = os.path.join(output_dir, os.path.basename(dirpath), "diff") os.makedirs(diff_dirpath, exist_ok=True) - diff_img = os.path.join(diff_dirpath, testname + ".diff.png") + diff_color_img = os.path.join(diff_dirpath, testname + ".diff_color.png") + diff_alpha_img = os.path.join(diff_dirpath, testname + ".diff_alpha.png") - return old_img, ref_img, new_img, diff_img + return old_img, ref_img, new_img, diff_color_img, diff_alpha_img class Report: @@ -79,7 +80,7 @@ class Report: 'global_dir', 'reference_dir', 'reference_override_dir', - 'idiff', + 'oiiotool', 'pixelated', 'fail_threshold', 'fail_percent', @@ -93,13 +94,13 @@ class Report: 'blacklist', ) - def __init__(self, title, output_dir, idiff, device=None, blacklist=[]): + def __init__(self, title, output_dir, oiiotool, device=None, blacklist=[]): self.title = title self.output_dir = output_dir self.global_dir = os.path.dirname(output_dir) self.reference_dir = 'reference_renders' self.reference_override_dir = None - self.idiff = idiff + self.oiiotool = oiiotool self.compare_engine = None self.fail_threshold = 0.016 self.fail_percent = 1 @@ -246,13 +247,22 @@ class Report: columns_html = "Name%s%s" % (engine_self, engine_other) else: title = self.title + " Test Report" - columns_html = "NameNewReferenceDiff" + columns_html = "NameNewReferenceDiff ColorDiff Alpha" - html = """ + html = f""" {title}