6#ifndef MATERIALX_SHADERSTAGE_H
7#define MATERIALX_SHADERSTAGE_H
27#define DEFINE_SHADER_STAGE(stage, name) if (stage.getName() == name)
30#define BEGIN_SHADER_STAGE(stage, name) \
31 if (stage.getName() == name) \
33#define END_SHADER_STAGE(stage, name) }
35MATERIALX_NAMESPACE_BEGIN
46extern MX_GENSHADER_API
const string PIXEL;
70 const string&
getName()
const {
return _name; }
73 void setName(
const string& name) { _name = name; }
79 void setInstance(
const string& instance) { _instance = instance; }
82 bool empty()
const {
return _variableOrder.empty(); }
85 size_t size()
const {
return _variableOrder.size(); }
102 const ShaderPort* operator[](
const string& name)
const;
110 const ShaderPort* find(
const string& name)
const;
131 std::unordered_map<string, ShaderPortPtr> _variableMap;
132 vector<ShaderPort*> _variableOrder;
141 using FunctionCallId = std::pair<const ShaderNode*, int>;
145 std::set<FunctionCallId> functions;
155 const string&
getName()
const {
return _name; }
167 VariableBlockPtr createUniformBlock(
const string& name,
const string& instance = EMPTY_STRING);
170 VariableBlockPtr createInputBlock(
const string& name,
const string& instance = EMPTY_STRING);
173 VariableBlockPtr createOutputBlock(
const string& name,
const string& instance = EMPTY_STRING);
179 const VariableBlock& getUniformBlock(
const string& name)
const;
185 const VariableBlock& getInputBlock(
const string& name)
const;
191 const VariableBlock& getOutputBlock(
const string& name)
const;
226 return _sourceDependencies;
233 void endScope(
bool semicolon =
false,
bool newline =
true);
239 void endLine(
bool semicolon =
true);
245 void addString(
const string& str);
248 void addLine(
const string& str,
bool semicolon =
true);
251 void addComment(
const string& str);
254 void addBlock(
const string& str,
const FilePath& sourceFilename,
GenContext& context);
260 void addSourceDependency(
const FilePath& file);
263 template <
typename T>
286 _functionName = functionName;
294 string _functionName;
303 vector<Scope> _scopes;
312 std::set<size_t> _definedFunctions;
342 return uniforms.
add(type, name);
350 bool shouldWiden =
false)
353 return inputs.
add(type, name, {}, shouldWiden);
361 bool shouldWiden =
false)
364 return outputs.
add(type, name, {}, shouldWiden);
369 const string& instance,
383 bool shouldWiden =
false)
389MATERIALX_NAMESPACE_END
Cross-platform support for file and search paths.
Shader generation options class.
std::set< string > StringSet
A set of strings.
Definition: Library.h:61
Macros for declaring imported and exported symbols.
shared_ptr< ShaderStage > ShaderStagePtr
Shared pointer to a ShaderStage.
Definition: Library.h:36
std::stringstream StringStream
A string stream.
Definition: Library.h:31
shared_ptr< class ShaderPort > ShaderPortPtr
Shared pointer to a ShaderPort.
Definition: ShaderNode.h:29
std::shared_ptr< VariableBlock > VariableBlockPtr
Shared pointer to a VariableBlock.
Definition: ShaderStage.h:52
void addStageConnectorBlock(const string &block, const string &instance, ShaderStage &from, ShaderStage &to)
Utility function for adding a connector block between stages.
Definition: ShaderStage.h:368
void addStageConnector(const string &block, const TypeDesc *type, const string &name, ShaderStage &from, ShaderStage &to, bool shouldWiden=false)
Utility function for adding a variable to a stage connector block.
Definition: ShaderStage.h:378
ShaderPort * addStageUniform(const string &block, const TypeDesc *type, const string &name, ShaderStage &stage)
Utility function for adding a new shader port to a uniform block.
Definition: ShaderStage.h:336
std::unordered_map< string, VariableBlockPtr > VariableBlockMap
Shared pointer to a map between string identifiers and VariableBlocks.
Definition: ShaderStage.h:54
std::function< bool(ShaderPort *)> ShaderPortPredicate
A standard function predicate taking an ShaderPort pointer and returning a boolean.
Definition: ShaderStage.h:56
ShaderPort * addStageInput(const string &block, const TypeDesc *type, const string &name, ShaderStage &stage, bool shouldWiden=false)
Utility function for adding a new shader port to an input block.
Definition: ShaderStage.h:346
ShaderPort * addStageOutput(const string &block, const TypeDesc *type, const string &name, ShaderStage &stage, bool shouldWiden=false)
Utility function for adding a new shader port to an output block.
Definition: ShaderStage.h:357
Base class for syntax handling for shader generators.
shared_ptr< const Syntax > ConstSyntaxPtr
Shared pointer to a constant Syntax.
Definition: Syntax.h:28
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:29
A generic file path, supporting both syntactic and file system operations.
Definition: File.h:27
A context class for shader generation.
Definition: GenContext.h:31
Base class for shader generators All third-party shader generators should derive from this class.
Definition: ShaderGenerator.h:31
Class representing a node in the shader generation DAG.
Definition: ShaderNode.h:326
An input or output port on a ShaderNode.
Definition: ShaderNode.h:123
A shader stage, containing the state and resulting source code for the stage.
Definition: ShaderStage.h:139
const VariableBlockMap & getUniformBlocks() const
Return a map of all uniform blocks.
Definition: ShaderStage.h:200
void setFunctionName(const string &functionName)
Set stage function name.
Definition: ShaderStage.h:284
void addValue(const T &value)
Add a value.
Definition: ShaderStage.h:264
VariableBlock & getOutputBlock(const string &name)
Return the output variable block with given name.
Definition: ShaderStage.cpp:185
const string & getName() const
Return the stage name.
Definition: ShaderStage.h:155
void setSourceCode(const string &code)
Set the stage source code.
Definition: ShaderStage.h:161
const VariableBlockMap & getInputBlocks() const
Return a map of all input blocks.
Definition: ShaderStage.h:206
VariableBlockPtr createOutputBlock(const string &name, const string &instance=EMPTY_STRING)
Create a new output variable block.
Definition: ShaderStage.cpp:143
const string & getFunctionName() const
Return the stage function name.
Definition: ShaderStage.h:158
const StringSet & getSourceDependencies() const
Return a set of all source dependencies.
Definition: ShaderStage.h:224
VariableBlockPtr createInputBlock(const string &name, const string &instance=EMPTY_STRING)
Create a new input variable block.
Definition: ShaderStage.cpp:131
VariableBlock & getUniformBlock(const string &name)
Return the uniform variable block with given name.
Definition: ShaderStage.cpp:155
const string & getSourceCode() const
Return the stage source code.
Definition: ShaderStage.h:164
const VariableBlockMap & getOutputBlocks() const
Return a map of all output blocks.
Definition: ShaderStage.h:212
const StringSet & getIncludes() const
Return a set of all include files.
Definition: ShaderStage.h:218
VariableBlock & getInputBlock(const string &name)
Return the input variable block with given name.
Definition: ShaderStage.cpp:170
Punctuation
Punctuation types.
Definition: Syntax.h:44
A type descriptor for MaterialX data types.
Definition: TypeDesc.h:28
A block of variables in a shader stage.
Definition: ShaderStage.h:61
size_t size() const
Return the number of variables in this block.
Definition: ShaderStage.h:85
const string & getName() const
Get the name of this block.
Definition: ShaderStage.h:70
void setName(const string &name)
Set the name of this block.
Definition: ShaderStage.h:73
ShaderPort * operator[](size_t index)
Return a variable by index.
Definition: ShaderStage.h:88
bool empty() const
Return true if the block has no variables.
Definition: ShaderStage.h:82
const string & getInstance() const
Get the instance name of this block.
Definition: ShaderStage.h:76
const ShaderPort * operator[](size_t index) const
Return a variable by index.
Definition: ShaderStage.h:91
const vector< ShaderPort * > & getVariableOrder() const
Return a const reference to our variable order vector.
Definition: ShaderStage.h:94
ShaderPort * add(const TypeDesc *type, const string &name, ValuePtr value=nullptr, bool shouldWiden=false)
Add a new shader port to this block.
Definition: ShaderStage.cpp:68
void setInstance(const string &instance)
Set the instance name of this block.
Definition: ShaderStage.h:79
Definition: ShaderStage.h:143