Bug 1932124

Summary: Blender not compatible with OpenColorIO 2.0
Product: [Fedora] Fedora Reporter: Richard Shaw <hobbes1069>
Component: blenderAssignee: Luya Tshimbalanga <luya_tfz>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 35CC: awilliam, design-devel, kwizart, luya_tfz, negativo17, promac
Target Milestone: ---Keywords: Upstream, VerifiedUpstream
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: blender-2.93.3-7.fc36 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-08-24 22:25:46 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1901430, 1972119    

Description Richard Shaw 2021-02-24 03:06:35 UTC
Blender does not appear to be compatible with OpenColorIO 2.0...

/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual const char* OCIOImpl::configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr__**, const char*, const char*)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:397:43: error: 'using element_type = const class OpenColorIO_v2_0::Config' {aka 'const class OpenColorIO_v2_0::Config'} has no member named 'getDisplayColorSpaceName'; did you mean 'getDisplayViewColorSpaceName'?
  397 |     return (*(ConstConfigRcPtr *)config)->getDisplayColorSpaceName(display, view);
      |                                           ^~~~~~~~~~~~~~~~~~~~~~~~
      |                                           getDisplayViewColorSpaceName
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr__**, float*)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:409:56: error: cannot convert 'float*' to 'double*'
  409 |     (*(ConstConfigRcPtr *)config)->getDefaultLumaCoefs(rgb);
      |                                                        ^~~
      |                                                        |
      |                                                        float*
In file included from /builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:29:
/usr/include/OpenColorIO/OpenColorIO.h:874:39: note:   initializing argument 1 of 'void OpenColorIO_v2_0::Config::getDefaultLumaCoefs(double*) const'
  874 |     void getDefaultLumaCoefs(double * rgb) const;
      |                              ~~~~~~~~~^~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::configGetXYZtoRGB(OCIO_ConstConfigRcPtr__**, float (*)[3])':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:436:25: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  436 |       to_rgb_processor->applyRGB(xyz_to_rgb[0]);
      |                         ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:437:25: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  437 |       to_rgb_processor->applyRGB(xyz_to_rgb[1]);
      |                         ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:438:25: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  438 |       to_rgb_processor->applyRGB(xyz_to_rgb[2]);
      |                         ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::colorSpaceIsBuiltin(OCIO_ConstConfigRcPtr__**, OCIO_ConstColorSpaceRcPtr__**, bool&, bool&)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:570:16: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  570 |     processor->applyRGB(cR);
      |                ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:571:16: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  571 |     processor->applyRGB(cG);
      |                ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:572:16: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  572 |     processor->applyRGB(cB);
      |                ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:573:16: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  573 |     processor->applyRGB(cW);
      |                ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::processorApply(OCIO_ConstProcessorRcPtr__**, OCIO_PackedImageDesc__**)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:655:42: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'apply'
  655 |     (*(ConstProcessorRcPtr *)processor)->apply(*(PackedImageDesc *)img);
      |                                          ^~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::processorApply_predivide(OCIO_ConstProcessorRcPtr__**, OCIO_PackedImageDesc__**)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:670:35: error: invalid conversion from 'void*' to 'float*' [-fpermissive]
  670 |       float *pixels = img->getData();
      |                       ~~~~~~~~~~~~^~
      |                                   |
      |                                   void*
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:684:44: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'apply'
  684 |       (*(ConstProcessorRcPtr *)processor)->apply(*img);
      |                                            ^~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::processorApplyRGB(OCIO_ConstProcessorRcPtr__**, float*)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:694:40: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGB'
  694 |   (*(ConstProcessorRcPtr *)processor)->applyRGB(pixel);
      |                                        ^~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::processorApplyRGBA(OCIO_ConstProcessorRcPtr__**, float*)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:699:40: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGBA'
  699 |   (*(ConstProcessorRcPtr *)processor)->applyRGBA(pixel);
      |                                        ^~~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::processorApplyRGBA_predivide(OCIO_ConstProcessorRcPtr__**, float*)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:705:42: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGBA'
  705 |     (*(ConstProcessorRcPtr *)processor)->applyRGBA(pixel);
      |                                          ^~~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:717:42: error: 'using element_type = const class OpenColorIO_v2_0::Processor' {aka 'const class OpenColorIO_v2_0::Processor'} has no member named 'applyRGBA'
  717 |     (*(ConstProcessorRcPtr *)processor)->applyRGBA(pixel);
      |                                          ^~~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual OCIO_DisplayTransformRcPtr__** OCIOImpl::createDisplayTransform()':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:747:3: error: 'DisplayTransformRcPtr' was not declared in this scope; did you mean 'OCIO_DisplayTransformRcPtr'?
  747 |   DisplayTransformRcPtr *dt = OBJECT_GUARDED_NEW(DisplayTransformRcPtr);
      |   ^~~~~~~~~~~~~~~~~~~~~
      |   OCIO_DisplayTransformRcPtr
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:747:26: error: 'dt' was not declared in this scope
  747 |   DisplayTransformRcPtr *dt = OBJECT_GUARDED_NEW(DisplayTransformRcPtr);
      |                          ^~
In file included from /builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:36:
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:747:50: error: expected type-specifier before 'DisplayTransformRcPtr'
  747 |   DisplayTransformRcPtr *dt = OBJECT_GUARDED_NEW(DisplayTransformRcPtr);
      |                                                  ^~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/guardedalloc/MEM_guardedalloc.h:278:89: note: in definition of macro 'OBJECT_GUARDED_NEW'
  278 | #    define OBJECT_GUARDED_NEW(type, args...) new (MEM_mallocN(sizeof(type), __func__)) type(args)
      |                                                                                         ^~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:749:9: error: 'DisplayTransform' has not been declared
  749 |   *dt = DisplayTransform::Create();
      |         ^~~~~~~~~~~~~~~~
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc: In member function 'virtual void OCIOImpl::displayTransformSetInputColorSpaceName(OCIO_DisplayTransformRcPtr__**, const char*)':
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:757:6: error: 'DisplayTransformRcPtr' was not declared in this scope; did you mean 'OCIO_DisplayTransformRcPtr'?
  757 |   (*(DisplayTransformRcPtr *)dt)->setInputColorSpaceName(name);
      |      ^~~~~~~~~~~~~~~~~~~~~
      |      OCIO_DisplayTransformRcPtr
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:757:29: error: expected primary-expression before ')' token
  757 |   (*(DisplayTransformRcPtr *)dt)->setInputColorSpaceName(name);
      |                             ^
/builddir/build/BUILD/blender-2.91.2/intern/opencolorio/ocio_impl.cc:757:30: error: expected ')' before 'dt'
  757 |   (*(DisplayTransformRcPtr *)dt)->setInputColorSpaceName(name);


Full log:

https://download.copr.fedorainfracloud.org/results/hobbes1069/OIIO/fedora-rawhide-x86_64/02014083-blender/builder-live.log.gz

Comment 2 Luya Tshimbalanga 2021-02-24 16:31:23 UTC
From the ticket on comment #2, upstream refused to backport the compatibility to 2.91.2 and suggest to build on 2.93.0 which will be available on May 2021 according to the schedule (https://developer.blender.org/project/view/125). The alternative will be a patch on future 2.92 which will be out in a few week or wait for 2.93.

Comment 3 Luya Tshimbalanga 2021-02-24 16:35:10 UTC
Another suggestion is to set a package OCIO 1.1.1 as a stopgap until Blender reaches 2.93.

Comment 4 Nicolas Chauvet (kwizart) 2021-03-04 10:10:17 UTC
(In reply to Luya Tshimbalanga from comment #2)
> From the ticket on comment #2, upstream refused to backport the
> compatibility to 2.91.2 and suggest to build on 2.93.0 which will be
> available on May 2021 according to the schedule
This looks possible for f34+ if dependencies (LuxRender, others) are compatible.
Of build with openvdb support dropped until moving to 2.93 ?

This could be done with a copr.

Comment 5 Richard Shaw 2021-03-04 12:27:33 UTC
I don't mind waiting a little while, but May seems a bit long. If you want to do some testing I can add you to my COPR.

Comment 6 Luya Tshimbalanga 2021-03-04 16:56:57 UTC
Feel free to find an effective method. Another option is something like OpenColorIO1 for dependency as a stopgap until Blender 2.93 lands.

Comment 7 Richard Shaw 2021-03-04 17:01:15 UTC
This is where things get confusing for me. Would we also need a OpenImageIO compatibility package linked with OCIO 1.x instead of 2.x?

The only consumers of OCIO right now are:
Blender - not compatible
Krita - builds look to be failing for Boost related reasons so I haven't tested
OpenImageIO - Builds fine

Comment 8 Luya Tshimbalanga 2021-03-05 02:17:23 UTC
(In reply to Richard Shaw from comment #7)
> This is where things get confusing for me. Would we also need a OpenImageIO
> compatibility package linked with OCIO 1.x instead of 2.x?
> 
> The only consumers of OCIO right now are:
> Blender - not compatible
> Krita - builds look to be failing for Boost related reasons so I haven't
> tested
> OpenImageIO - Builds fine

According to the Blender version.cmake (https://developer.blender.org/diffusion/B/browse/blender-v2.92-release/build_files/build_environment/cmake/versions.cmake), it seems the case. I had similar case with embree 2.x in the past.
Perhaps using upstream patch may help : https://developer.blender.org/diffusion/B/browse/master/build_files/build_environment/cmake/

Comment 9 Luya Tshimbalanga 2021-06-04 09:00:46 UTC
Blender 2.93.0 is released. I already pushed the commit on all Fedora release. Feel free to rebuild Blender with OCIO 2.x.

Comment 10 Richard Shaw 2021-06-10 11:12:51 UTC
Thanks for following up. I'm still working on Krita, and a new dependency usd.

Comment 11 Luya Tshimbalanga 2021-06-30 06:05:26 UTC
Do you need access to usd commit? Maybe so options need to get disabled.

Comment 12 Richard Shaw 2021-06-30 12:15:19 UTC
No, I'm a PP, I just kinda gave up. The API has changed significantly in the 2.0 release and porting the projects myself is not practical. I do need to file some bugs upstream so they hopefully at least know about it and will adopt it at some point in the near future.

Comment 13 Luya Tshimbalanga 2021-07-07 23:39:16 UTC
(In reply to Richard Shaw from comment #12)
> No, I'm a PP, I just kinda gave up. The API has changed significantly in the
> 2.0 release and porting the projects myself is not practical. I do need to
> file some bugs upstream so they hopefully at least know about it and will
> adopt it at some point in the near future.

Since Krita is the only dependent package for OCIO 1.x, it would be nice to push 2.x in the repository while making OCIO1.x as a stopgap for time being.
The new version of Blender will refuse to support 1.x.

Comment 14 Richard Shaw 2021-07-11 11:40:43 UTC
Bah, I may have to do that. Currently fighting a similar problem with OpenEXR 2.x vs 3.x.

Comment 15 Ben Cotton 2021-08-10 12:52:52 UTC
This bug appears to have been reported against 'rawhide' during the Fedora 35 development cycle.
Changing version to 35.

Comment 16 Adam Williamson 2021-08-13 18:28:25 UTC
So I looked into this little thicket a bit as I was looking at failed image builds, and blender being FTBFS prevents the design suite image building.

It looks to me like to make Blender build with current OpenEXR, we need OpenColorIO 2.x plus this PR:

https://github.com/AcademySoftwareFoundation/OpenColorIO/pull/1432

to deal with OpenEXR no longer having the "half" library that OCIO needs (that PR makes it use a half library from IMath instead, which we do seem to have packaged).

https://bugs.kde.org/show_bug.cgi?id=435474 seems to be the upstream bug for Krita, who don't seem inclined to get around to porting it any time soon.

Comment 17 Adam Williamson 2021-08-13 18:29:10 UTC
so basically I guess we either need to bump the main OpenColorIO lib for Blender and add a 1.x compat build for Krita, or possibly we could drop *OpenEXR* back down to 2.x until Krita is ready?

Comment 18 Richard Shaw 2021-08-13 18:58:07 UTC
Hah, I need to see if I actually built it, but I've already gotten a opencolorio1 compat repo. Until very recently I was mostly fighting the OpenEXR/Imath disaster but it looks like the two are now converging.

Comment 19 Richard Shaw 2021-08-13 19:09:50 UTC
Ok, so usd is tied up in the OpenEXR/Imath update so if it can't be made to work with OCIO 2.0 then I'm not sure the whole stack can be upgraded... Bah.

Comment 20 Richard Shaw 2021-08-13 19:15:38 UTC
Well crap. I was hoping to push off the OpenEXR/Imath 3.1.x update until at least the dust settles but it looks like I need to update Imath at least...

CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find Imath: Found unsuitable version "3.0.2", but required is at
  least "3.0.5" (found /usr/lib64/libImath-3_0.so)

Comment 21 Richard Shaw 2021-08-13 19:22:41 UTC
FYI, I forced it to 3.0.2 and it built...

Also, here's my working COPR if anyone wants to request access:
https://copr.fedorainfracloud.org/coprs/hobbes1069/OIIO/builds/

Comment 22 Fedora Update System 2021-08-24 22:25:46 UTC
FEDORA-2021-aef49a8d94 has been pushed to the Fedora 36 stable repository.
If problem still persists, please make note of it in this bug report.