public static void GenerateInputFields(FrontEndTranslator translator, ShaderType shaderType, ShaderInterfaceSet interfaceSet, ShaderBlock declarationBlock, ShaderBlock decorationsBlock) { if (interfaceSet.Fields.Count == 0) { return; } var inputsName = shaderType.mMeta.mName + "_Inputs"; EntryPointGenerationShared.GenerateInterfaceGlobalFields(translator, interfaceSet.Fields, inputsName, "In", StorageClass.Input); foreach (var inputField in interfaceSet) { var fieldOp = interfaceSet.GetFieldInstance(translator, inputField, null); declarationBlock.mLocalVariables.Add(fieldOp); } Decorations.LocationCallback locationCallback = (ShaderField field, out int location, out int component) => { location = component = -1; var attribute = field.mMeta.mAttributes.FindFirstAttribute(typeof(Shader.StageInput)); if (attribute == null) { return(false); } var parsedAttribute = AttributeExtensions.ParseStageInput(attribute); location = parsedAttribute.Location; component = parsedAttribute.Component; return(true); }; Decorations.AddDecorationLocations(translator, shaderType, interfaceSet, locationCallback, decorationsBlock); }