Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,22 @@
<!-- ======================================================================== -->

<!-- <image> -->
<implementation name="IM_image_float_genmsl" nodedef="ND_image_float" file="../genglsl/mx_image_float.glsl" function="mx_image_float" target="genmsl">
<implementation name="IM_image_float_genmsl" nodedef="ND_image_float" file="../../genglsl/stdlib/mx_image_float.glsl" function="mx_image_float" target="genmsl">
<input name="default" type="float" implname="default_value" />
</implementation>
<implementation name="IM_image_color3_genmsl" nodedef="ND_image_color3" file="../genglsl/mx_image_color3.glsl" function="mx_image_color3" target="genmsl">
<implementation name="IM_image_color3_genmsl" nodedef="ND_image_color3" file="../../genglsl/stdlib/mx_image_color3.glsl" function="mx_image_color3" target="genmsl">
<input name="default" type="color3" implname="default_value" />
</implementation>
<implementation name="IM_image_color4_genmsl" nodedef="ND_image_color4" file="../genglsl/mx_image_color4.glsl" function="mx_image_color4" target="genmsl">
<implementation name="IM_image_color4_genmsl" nodedef="ND_image_color4" file="../../genglsl/stdlib/mx_image_color4.glsl" function="mx_image_color4" target="genmsl">
<input name="default" type="color4" implname="default_value" />
</implementation>
<implementation name="IM_image_vector2_genmsl" nodedef="ND_image_vector2" file="../genglsl/mx_image_vector2.glsl" function="mx_image_vector2" target="genmsl">
<implementation name="IM_image_vector2_genmsl" nodedef="ND_image_vector2" file="../../genglsl/stdlib/mx_image_vector2.glsl" function="mx_image_vector2" target="genmsl">
<input name="default" type="vector2" implname="default_value" />
</implementation>
<implementation name="IM_image_vector3_genmsl" nodedef="ND_image_vector3" file="../genglsl/mx_image_vector3.glsl" function="mx_image_vector3" target="genmsl">
<implementation name="IM_image_vector3_genmsl" nodedef="ND_image_vector3" file="../../genglsl/stdlib/mx_image_vector3.glsl" function="mx_image_vector3" target="genmsl">
<input name="default" type="vector3" implname="default_value" />
</implementation>
<implementation name="IM_image_vector4_genmsl" nodedef="ND_image_vector4" file="../genglsl/mx_image_vector4.glsl" function="mx_image_vector4" target="genmsl">
<implementation name="IM_image_vector4_genmsl" nodedef="ND_image_vector4" file="../../genglsl/stdlib/mx_image_vector4.glsl" function="mx_image_vector4" target="genmsl">
<input name="default" type="vector4" implname="default_value" />
</implementation>

Expand Down
7 changes: 6 additions & 1 deletion source/MaterialXGenShader/GenOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ class MX_GENSHADER_API GenOptions
hwNormalizeUdimTexCoords(false),
hwWriteAlbedoTable(false),
hwWriteEnvPrefilter(false),
hwImplicitBitangents(true)
hwImplicitBitangents(true),
dataLibraryLegacyLocationFallback(true)
{
}
virtual ~GenOptions() { }
Expand Down Expand Up @@ -191,6 +192,10 @@ class MX_GENSHADER_API GenOptions
/// Calculate fallback bitangents from existing normals and tangents
/// inside the bitangent node.
bool hwImplicitBitangents;

/// Enables the fallback heuristic to locate a data library file by
/// its location in the previous structure.
bool dataLibraryLegacyLocationFallback;
};

MATERIALX_NAMESPACE_END
Expand Down
32 changes: 32 additions & 0 deletions source/MaterialXGenShader/ShaderGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,38 @@ void ShaderGenerator::emitLibraryInclude(const FilePath& filename, GenContext& c
FilePath libraryPrefix = context.getOptions().libraryPrefix;
FilePath fullFilename = libraryPrefix.isEmpty() ? filename : libraryPrefix / filename;
FilePath resolvedFilename = context.resolveSourceFile(fullFilename, FilePath());

if (context.getOptions().dataLibraryLegacyLocationFallback)
{
// heuristic to deal with relocation of data library files - this should be deprecated at some point in the future
// and possibly guarded by a shader generation option?
//
// if we originally passed a relative file, then we expect resolveSourceFile() to return an absolute path
// if the file was found, otherwise it just returns the original relative file.
// we can use this difference to detect if the library include was not located and attempt to find it in
// the old location.
if (!fullFilename.isAbsolute() && !resolvedFilename.isAbsolute() && fullFilename == resolvedFilename)
{
// we didn't find the file, so lets try and look in the "new" location.
// Example
// old : stdlib/genmsl/lib/mx_texture.metal
// new : targets/genmsl/stdlib/lib/mx_texture.metal
//
// remapping heuristic
// 1) add the "targets" prefix
// 2) swap the first two parts
// 3) append the rest
FilePath altFilename = FilePath("targets") / FilePath(filename[1]) / FilePath(filename[0]);
for (size_t i = 2; i < filename.size(); ++i)
{
altFilename = altFilename / FilePath(filename[i]);
}

fullFilename = libraryPrefix.isEmpty() ? altFilename : libraryPrefix / altFilename;
resolvedFilename = context.resolveSourceFile(fullFilename, FilePath());
}
}

stage.addInclude(fullFilename, resolvedFilename, context);
}

Expand Down
2 changes: 1 addition & 1 deletion source/MaterialXTest/MaterialXRender/RenderUtil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ bool ShaderRenderTester::validate(const mx::FilePath optionsFilePath)

mx::GenContext context(_shaderGenerator);
context.registerSourceCodeSearchPath(searchPath);
context.registerSourceCodeSearchPath(searchPath.find("libraries/stdlib/genosl/include"));
context.registerSourceCodeSearchPath(searchPath.find("libraries/targets/genosl/stdlib/include"));

// Set target unit space
context.getOptions().targetDistanceUnit = "meter";
Expand Down
2 changes: 1 addition & 1 deletion source/MaterialXTest/MaterialXRenderOsl/GenReference.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ TEST_CASE("GenReference: OSL Reference", "[genreference]")
}
// Add in library include path for compile testing as the generated
// shader's includes are not added with absolute paths.
oslIncludePaths.append(searchPath.find("libraries/stdlib/genosl/include"));
oslIncludePaths.append(searchPath.find("libraries/targets/genosl/stdlib/include"));
oslRenderer->setOslIncludePath(oslIncludePaths);
}

Expand Down