You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.6 KiB
63 lines
2.6 KiB
using System; |
|
|
|
namespace UnityEditor.ShaderGraph.Internal |
|
{ |
|
// ------------------------------------------------------------------------------------------ |
|
// |
|
// The general use of precision follows this data flow |
|
// |
|
// Precision -- user selectable precision setting on each node |
|
// == apply precision inherit rules based on node inputs ==> |
|
// GraphPrecision -- where "GraphPrecision.Graph" means use the graph default setting |
|
// == fallback to graph defaults ==> |
|
// GraphPrecision -- where "GraphPrecision.Graph" means it is switchable when in a subgraph |
|
// == shadergraph concretization ==> |
|
// ConcretePrecision -- the actual precision used by the node, half or single |
|
// |
|
// We could at some point separate the two GraphPrecision uses into separate enums, |
|
// but they're close enough we're using one enum for both uses at the moment |
|
// |
|
// ------------------------------------------------------------------------------------------ |
|
|
|
// this is generally used for user-selectable precision |
|
[Serializable] |
|
enum Precision |
|
{ |
|
Inherit, // automatically choose the precision based on the inputs |
|
Single, // force single precision (float) |
|
Half, // force half precision |
|
Graph, // use the graph default (for subgraphs this will properly switch based on the subgraph node setting) |
|
} |
|
|
|
// this is used when calculating precision within a graph |
|
// it basically represents the precision after applying the automatic inheritance rules |
|
// but before applying the fallback to the graph default |
|
// tracking this explicitly helps us build subgraph switchable precision behavior (any node using Graph can be switched) |
|
public enum GraphPrecision |
|
{ |
|
Single = 0, // the ordering is different here so we can use the min function to resolve inherit/automatic behavior |
|
Graph = 1, |
|
Half = 2 |
|
} |
|
|
|
// this is the actual set of precisions we have, a shadergraph must resolve every node to one of these |
|
// in subgraphs, this concrete precision is only used for preview, and may not represent the actual precision of those nodes |
|
// when used in a shader graph |
|
[Serializable] |
|
public enum ConcretePrecision |
|
{ |
|
Single, |
|
Half, |
|
} |
|
|
|
// inherit(auto) rules for combining input types |
|
|
|
// half + half ==> half |
|
// single + single ==> single |
|
// single + half ==> single |
|
// single + graph ==> single |
|
// half + graph ==> graph |
|
// single + half + graph ==> single |
|
// |
|
// basically: take the min when arranged like so: single(0), graph(1), half(2) |
|
}
|
|
|