47 enum class ShaderItemType {
55 enum class ShaderItemMapFlag {
58 Q_DECLARE_FLAGS(ShaderItemMapFlags, ShaderItemMapFlag)
65 typedef QMap<QByteArray, QByteArray> TStrTableStrMap;
66 typedef QMap<QByteArray, QPair<quint32, QByteArray>> TStrTableSizedStrMap;
68 typedef QPair<QByteArray, QByteArray> TParamPair;
69 typedef QPair<QByteArray, TParamPair> TConstantBufferParamPair;
70 typedef QVector<TConstantBufferParamPair> TConstantBufferParamArray;
72 TStrTableStrMap m_incoming;
73 TStrTableStrMap *m_outgoing =
nullptr;
74 TStrTableStrMap m_flatIncoming;
75 TStrTableStrMap *m_flatOutgoing =
nullptr;
76 QSet<QByteArray> m_includes;
77 QList<QByteArray> m_prefixes;
78 TStrTableStrMap m_uniforms;
79 TStrTableSizedStrMap m_uniformArrays;
80 TStrTableStrMap m_constantBuffers;
81 TConstantBufferParamArray m_constantBufferParams;
82 QByteArray m_codeBuilder;
83 QByteArray m_finalBuilder;
84 QSSGShaderGeneratorStage m_stage;
85 QSSGShaderGeneratorStageFlags m_enabledStages;
86 QList<QByteArray> m_addedFunctions;
87 TStrTableStrMap m_addedTypeDeclarations;
88 TStrTableStrMap m_addedDefinitions;
89 QSSGShaderResourceMergeContext *m_mergeContext =
nullptr;
91 explicit QSSGStageGeneratorBase(QSSGShaderGeneratorStage inStage);
92 virtual ~QSSGStageGeneratorBase() =
default;
94 virtual void begin(QSSGShaderGeneratorStageFlags inEnabledStages);
96 virtual void addIncoming(
const QByteArray &name,
const QByteArray &type);
97 virtual void addOutgoing(
const QByteArray &name,
const QByteArray &type);
99 virtual void addFlatIncoming(
const QByteArray &name,
const QByteArray &type);
100 virtual void addFlatOutgoing(
const QByteArray &name,
const QByteArray &type);
102 virtual void addUniform(
const QByteArray &name,
const QByteArray &type);
104 virtual void addUniformArray(
const QByteArray &name,
const QByteArray &type, quint32 size);
106 virtual void addConstantBuffer(
const QByteArray &name,
const QByteArray &layout);
107 virtual void addConstantBufferParam(
const QByteArray &cbName,
const QByteArray ¶mName,
const QByteArray &type);
109 virtual QSSGStageGeneratorBase &operator<<(
const QByteArray &data);
110 virtual void append(
const QByteArray &data);
111 QSSGShaderGeneratorStage stage()
const;
113 void addShaderPass2Marker(ShaderItemType itemType);
115 void addShaderItemMap(ShaderItemType itemType,
const TStrTableStrMap &itemMap, ShaderItemMapFlags flags = {});
117 virtual void addShaderIncomingMap();
119 virtual void addShaderUniformMap();
121 virtual void addShaderOutgoingMap();
123 virtual void addShaderConstantBufferItemMap(
const QByteArray &itemType,
const TStrTableStrMap &cbMap, TConstantBufferParamArray cbParamsArray);
125 virtual void appendShaderCode() final;
127 virtual void addInclude(
const QByteArray &name) final;
129 void buildShaderSourcePass1(QSSGShaderResourceMergeContext *mergeContext);
131 QByteArray buildShaderSourcePass2(QSSGShaderResourceMergeContext *mergeContext);
133 virtual void addFunction(
const QByteArray &functionName) final;
135 virtual void addDefinition(
const QByteArray &name,
const QByteArray &value) final;
137 virtual void addTypeDeclaration(
const QByteArray &typeName,
const QByteArray &snippet) final;
139 void addPrefix(
const QByteArray &data);
158 Q_DISABLE_COPY(QSSGProgramGenerator)
160 QSSGProgramGenerator() =
default;
179 const QByteArray &contents,
180 QSSGShaderGeneratorStage stage);
183 const QSSGShaderFeatures &inFeatureSet,
184 QSSGShaderLibraryManager &shaderLibraryManager,
185 QSSGShaderCache &theCache,
186 QSSGRhiShaderPipeline::StageFlags stageFlags,
187 const QSSGUserShaderAugmentation &shaderAugmentation,
189 bool perTargetCompilation);
QSSGRhiShaderPipelinePtr compileGeneratedRhiShader(const QByteArray &inMaterialInfoString, const QSSGShaderFeatures &inFeatureSet, QSSGShaderLibraryManager &shaderLibraryManager, QSSGShaderCache &theCache, QSSGRhiShaderPipeline::StageFlags stageFlags, const QSSGUserShaderAugmentation &shaderAugmentation, int viewCount, bool perTargetCompilation)