public static ShaderOp GenerateOutputBlockStruct(FrontEndTranslator translator, ShaderType shaderType, ShaderInterfaceSet interfaceSet, ShaderBlock declarationBlock, ShaderBlock decorationsBlock)
        {
            var instanceOp = GenerateOutputStruct(translator, shaderType, interfaceSet, declarationBlock, decorationsBlock);

            if (instanceOp == null)
            {
                return(null);
            }

            var instanceType = instanceOp.mResultType.GetDereferenceType();

            Decorations.AddDecorationBlock(translator, instanceType, decorationsBlock);
            return(instanceOp);
        }
Exemple #2
0
        public static ShaderOp GenerateInputStruct(FrontEndTranslator translator, ShaderType shaderType, ShaderInterfaceSet interfaceSet, ShaderBlock declarationBlock, ShaderBlock decorationsBlock)
        {
            if (interfaceSet.Fields.Count == 0)
            {
                return(null);
            }

            var typeName     = shaderType.mMeta.TypeName.CloneAsAppended("_Inputs");
            var instanceName = "In";
            var instanceOp   = EntryPointGenerationShared.GenerateInterfaceStructAndOp(translator, interfaceSet.Fields, typeName, instanceName, StorageClass.Input);
            var instanceType = instanceOp.mResultType.GetDereferenceType();

            Decorations.AddDecorationBlock(translator, instanceType, decorationsBlock);
            Decorations.AddDecorationLocation(translator, instanceOp, 0, decorationsBlock);
            declarationBlock.mLocalVariables.Add(instanceOp);
            return(instanceOp);
        }