4 using System.Globalization;
5 using SiliconStudio.Shaders.Ast;
6 using SiliconStudio.Shaders.Ast.Hlsl;
9 namespace SiliconStudio.Shaders.Writer.Hlsl
16 #region Constructors and Destructors
27 GenerateUniformBlocks =
true;
32 public bool GenerateUniformBlocks {
get; set; }
34 public bool TrimFloatSuffix {
get; set; }
36 #region Public Methods
42 if (TrimFloatSuffix && literal.
Value is
float)
43 literal.Text = literal.Text.Trim(
'f',
'F',
'l',
'L');
50 public virtual void Visit(Ast.Glsl.InterfaceType interfaceType)
52 Write(interfaceType.Qualifiers,
true);
55 Write(interfaceType.Name);
59 Write(interfaceType.Attributes,
false);
63 foreach (var variableDeclaration
in interfaceType.Fields)
64 VisitDynamic(variableDeclaration);
68 if (IsDeclaratingVariable.Count == 0 || !IsDeclaratingVariable.Peek())
70 Write(
";").WriteLine();
103 if (constantBuffer.
Members.Count > 0)
105 if (GenerateUniformBlocks)
108 if (constantBuffer.
Register != null)
111 throw new NotImplementedException();
113 Write(
"layout(binding = ").Write(constantBuffer.Register.Register.Text).Write(
") ");
115 Write(
"uniform").Write(
" ").Write(constantBuffer.
Name).WriteSpace().Write(
"{").WriteLine();
117 VisitDynamicList(constantBuffer.
Members);
121 Write(
"// Begin cbuffer ").Write(constantBuffer.Name).WriteLine();
122 foreach (var member
in constantBuffer.
Members)
130 VisitDynamic(member);
134 if (GenerateUniformBlocks)
137 Write(
"};").WriteLine();
141 Write(
"// End buffer ").Write(constantBuffer.Name).WriteLine();
206 public void Visit(Ast.Glsl.LayoutQualifier layoutQualifier)
209 for (
int i = 0; i < layoutQualifier.Layouts.Count; i++)
211 var layout = layoutQualifier.Layouts[i];
212 if (i > 0) Write(
",").WriteSpace();
214 if (layout.Value != null)
216 WriteSpace().Write(
"=").WriteSpace();
217 Visit((
Node)layout.Value);
override void Visit(Typedef typedef)
Visits the specified typedef. The typedef.
RegisterLocation Register
Gets or sets the register.
A state expresion in the form: sampler {...}.
override void Visit(StateInitializer stateInitializer)
override void Visit(RegisterLocation registerLocation)
override void Visit(Annotations annotations)
Visits the specified Annotations. The Annotations.
override void Visit(PackOffset packOffset)
override void Visit(Literal literal)
override void Visit(StateExpression stateExpression)
Visits the specified state expression. The state expression.
override void Visit(ClassType classType)
Visits the specified class type. Type of the class.
Identifier Name
Gets or sets the name.
Describes a packoffset(value).
object Value
Gets or sets the value.
Qualifier Qualifiers
Gets or sets the qualifiers.
List< Node > Members
Gets or sets the members.
Declaration of a constant buffer.
override void Visit(InterfaceType interfaceType)
Visits the specified interface type. Type of the interface.
Describe a register location
HlslToGlslWriter(bool useNodeStack=false)
Initializes a new instance of the HlslWriter class.
override void Visit(AsmExpression asmExpression)
Visits the specified asm expression. The asm expression.
static readonly Qualifier None
None Enum.
override void Visit(Technique technique)
Visits the specified technique.
SiliconStudio.Shaders.Ast.Glsl.LayoutQualifier LayoutQualifier
virtual void Visit(Ast.Glsl.InterfaceType interfaceType)
override void Visit(Semantic semantic)
override void Visit(CastExpression castExpression)
Visits the specified cast expression. The cast expression.
override void Visit(ConstantBuffer constantBuffer)
Visits the specified constant buffer. The constant buffer.
override void Visit(AttributeDeclaration attributeDeclaration)
Visits the specified attribute declaration. The attribute declaration.
void Visit(Ast.Glsl.LayoutQualifier layoutQualifier)