From 825ec5b4f628a20f70b2c4d472fb7a32c66e33d8 Mon Sep 17 00:00:00 2001 From: Jerry Gamache Date: Fri, 12 Jan 2024 09:40:05 -0500 Subject: [PATCH] LOOKDEVX-2354 - Fix the transform nodes crash A transform node with empty space values will cause the shadergen to crash. This has been fixed in future MaterialX 1.38.9 by introducing ShaderPort::getValueString() in https://github.com/AcademySoftwareFoundation/MaterialX/pull/1560 We have backported that fix in local copies of the transform node C++ implementations in order to prevent crashing with the current versions of MaterialX. --- .../render/MaterialXGenOgsXml/CMakeLists.txt | 9 ++ .../GlslFragmentGenerator.cpp | 26 +++++ .../Nodes/MayaTransformNormalNodeGlsl.cpp | 54 ++++++++++ .../Nodes/MayaTransformNormalNodeGlsl.h | 28 ++++++ .../Nodes/MayaTransformPointNodeGlsl.cpp | 25 +++++ .../Nodes/MayaTransformPointNodeGlsl.h | 26 +++++ .../Nodes/MayaTransformVectorNodeGlsl.cpp | 98 +++++++++++++++++++ .../Nodes/MayaTransformVectorNodeGlsl.h | 36 +++++++ 8 files changed, 302 insertions(+) create mode 100644 lib/mayaUsd/render/MaterialXGenOgsXml/Nodes/MayaTransformNormalNodeGlsl.cpp create mode 100644 lib/mayaUsd/render/MaterialXGenOgsXml/Nodes/MayaTransformNormalNodeGlsl.h create mode 100644 lib/mayaUsd/render/MaterialXGenOgsXml/Nodes/MayaTransformPointNodeGlsl.cpp create mode 100644 lib/mayaUsd/render/MaterialXGenOgsXml/Nodes/MayaTransformPointNodeGlsl.h create mode 100644 lib/mayaUsd/render/MaterialXGenOgsXml/Nodes/MayaTransformVectorNodeGlsl.cpp create mode 100644 lib/mayaUsd/render/MaterialXGenOgsXml/Nodes/MayaTransformVectorNodeGlsl.h diff --git a/lib/mayaUsd/render/MaterialXGenOgsXml/CMakeLists.txt b/lib/mayaUsd/render/MaterialXGenOgsXml/CMakeLists.txt index afc78958f6..918c950020 100644 --- a/lib/mayaUsd/render/MaterialXGenOgsXml/CMakeLists.txt +++ b/lib/mayaUsd/render/MaterialXGenOgsXml/CMakeLists.txt @@ -13,6 +13,15 @@ target_sources(${PROJECT_NAME} PugiXML/pugixml.cpp ) +if(MaterialX_VERSION VERSION_LESS "1.38.9") +target_sources(${PROJECT_NAME} + PRIVATE + Nodes/MayaTransformNormalNodeGlsl.cpp + Nodes/MayaTransformPointNodeGlsl.cpp + Nodes/MayaTransformVectorNodeGlsl.cpp +) +endif() + set(HEADERS CombinedMaterialXVersion.h GlslFragmentGenerator.h diff --git a/lib/mayaUsd/render/MaterialXGenOgsXml/GlslFragmentGenerator.cpp b/lib/mayaUsd/render/MaterialXGenOgsXml/GlslFragmentGenerator.cpp index 6280198b87..a9602ba8c5 100644 --- a/lib/mayaUsd/render/MaterialXGenOgsXml/GlslFragmentGenerator.cpp +++ b/lib/mayaUsd/render/MaterialXGenOgsXml/GlslFragmentGenerator.cpp @@ -7,6 +7,11 @@ #include "Nodes/SurfaceNodeMaya.h" #include "Nodes/TexcoordNodeMaya.h" +#if MX_COMBINED_VERSION <= 13809 +#include "Nodes/MayaTransformNormalNodeGlsl.h" +#include "Nodes/MayaTransformPointNodeGlsl.h" +#include "Nodes/MayaTransformVectorNodeGlsl.h" +#endif #include #include @@ -180,6 +185,27 @@ GlslFragmentGenerator::GlslFragmentGenerator() "IM_texcoord_vector3_" + GlslShaderGenerator::TARGET, TexcoordNodeGlslMaya::create); } + // The MaterialX transform node will crash if one of the "space" inputs is empty. This will be + // fixed in 1.38.9. In the meantime we use patched nodes to replace those previously added in + // the base class. +#if MX_COMBINED_VERSION <= 13809 + //