diff --git a/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx b/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx index 3837722ffd..da6e6a25ea 100644 --- a/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx +++ b/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx @@ -498,7 +498,7 @@ - + diff --git a/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp b/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp index 451caa40fa..ad0461b482 100644 --- a/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp +++ b/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp @@ -179,6 +179,45 @@ TEST_CASE("GenShader: OSL Metadata", "[genosl]") REQUIRE(shader != nullptr); } +TEST_CASE("GenShader: OSL TransformMatrix Point Semantics", "[genosl]") +{ + const std::string expectedSourceCode = "transform({{mat}}, point({{in}}))"; + const std::string testDocumentString = R"( + + + + + + + +)"; + + mx::FileSearchPath searchPath = mx::getDefaultDataSearchPath(); + mx::DocumentPtr libraries = mx::createDocument(); + mx::loadLibraries({ "libraries" }, searchPath, libraries); + + mx::ImplementationPtr implementation = libraries->getImplementation("IM_transformmatrix_vector3M4_genosl"); + REQUIRE(implementation != nullptr); + REQUIRE(implementation->getAttribute("sourcecode") == expectedSourceCode); + + mx::DocumentPtr doc = mx::createDocument(); + mx::readFromXmlString(doc, testDocumentString); + doc->setDataLibrary(libraries); + + mx::NodeGraphPtr nodeGraph = doc->getNodeGraph("NG_transformmatrix_vector3M4"); + REQUIRE(nodeGraph != nullptr); + + mx::OutputPtr output = nodeGraph->getOutput("out"); + REQUIRE(output != nullptr); + + mx::GenContext context(mx::OslShaderGenerator::create()); + context.registerSourceCodeSearchPath(searchPath); + + mx::ShaderPtr shader = context.getShaderGenerator().generate("transformmatrix_point_semantics", output, context); + REQUIRE(shader != nullptr); + REQUIRE(shader->getSourceCode().find("point(") != std::string::npos); +} + static void generateOslCode() { mx::FileSearchPath searchPath = mx::getDefaultDataSearchPath();