48 enum class ShaderItemType {
56 enum class ShaderItemMapFlag {
59 Q_DECLARE_FLAGS(ShaderItemMapFlags, ShaderItemMapFlag)
66 typedef QMap<QByteArray, QByteArray> TStrTableStrMap;
67 typedef QMap<QByteArray, QPair<quint32, QByteArray>> TStrTableSizedStrMap;
69 typedef QPair<QByteArray, QByteArray> TParamPair;
70 typedef QPair<QByteArray, TParamPair> TConstantBufferParamPair;
71 typedef QVector<TConstantBufferParamPair> TConstantBufferParamArray;
73 TStrTableStrMap m_incoming;
74 TStrTableStrMap *m_outgoing =
nullptr;
75 TStrTableStrMap m_flatIncoming;
76 TStrTableStrMap *m_flatOutgoing =
nullptr;
77 QSet<QByteArray> m_includes;
78 QList<QByteArray> m_prefixes;
79 TStrTableStrMap m_uniforms;
80 TStrTableSizedStrMap m_uniformArrays;
81 TStrTableStrMap m_constantBuffers;
82 TConstantBufferParamArray m_constantBufferParams;
83 QByteArray m_codeBuilder;
84 QByteArray m_finalBuilder;
85 QSSGShaderGeneratorStage m_stage;
86 QSSGShaderGeneratorStageFlags m_enabledStages;
87 QList<QByteArray> m_addedFunctions;
88 TStrTableStrMap m_addedTypeDeclarations;
89 TStrTableStrMap m_addedDefinitions;
94 Buffer(
const QByteArray &name,
const QByteArray &contentType, QSSGMemoryQualifiers qualifiers,
const QByteArray &condition)
95 : name(name), contentType(contentType), qualifiers(qualifiers), condition(condition) {}
97 QByteArray contentType;
98 QSSGMemoryQualifiers qualifiers;
104 Image(
const QByteArray &name,
const QByteArray &imageType,
const QByteArray &format, QSSGMemoryQualifiers qualifiers,
const QByteArray &condition)
105 : name(name), imageType(imageType), format(format), qualifiers(qualifiers), condition(condition) {}
107 QByteArray imageType;
109 QSSGMemoryQualifiers qualifiers;
110 QByteArray condition;
113 std::vector<Image> m_images;
114 std::vector<Buffer> m_buffers;
115 QSSGShaderResourceMergeContext *m_mergeContext =
nullptr;
117 explicit QSSGStageGeneratorBase(QSSGShaderGeneratorStage inStage);
118 virtual ~QSSGStageGeneratorBase() =
default;
120 virtual void begin(QSSGShaderGeneratorStageFlags inEnabledStages);
122 virtual void addIncoming(
const QByteArray &name,
const QByteArray &type);
123 virtual void addOutgoing(
const QByteArray &name,
const QByteArray &type);
125 virtual void addFlatIncoming(
const QByteArray &name,
const QByteArray &type);
126 virtual void addFlatOutgoing(
const QByteArray &name,
const QByteArray &type);
128 virtual void addUniform(
const QByteArray &name,
const QByteArray &type);
130 virtual void addUniformArray(
const QByteArray &name,
const QByteArray &type, quint32 size);
132 virtual void addConstantBuffer(
const QByteArray &name,
const QByteArray &layout);
133 virtual void addConstantBufferParam(
const QByteArray &cbName,
const QByteArray ¶mName,
const QByteArray &type);
135 virtual QSSGStageGeneratorBase &operator<<(
const QByteArray &data);
136 virtual void append(
const QByteArray &data);
137 QSSGShaderGeneratorStage stage()
const;
139 void addShaderPass2Marker(ShaderItemType itemType);
141 void addShaderItemMap(ShaderItemType itemType,
const TStrTableStrMap &itemMap, ShaderItemMapFlags flags = {});
143 virtual void addShaderIncomingMap();
145 virtual void addShaderUniformMap();
147 virtual void addShaderOutgoingMap();
149 virtual void addShaderConstantBufferItemMap(
const QByteArray &itemType,
const TStrTableStrMap &cbMap, TConstantBufferParamArray cbParamsArray);
151 virtual void appendShaderCode() final;
153 virtual void addInclude(
const QByteArray &name) final;
155 void buildShaderSourcePass1(QSSGShaderResourceMergeContext *mergeContext);
157 QByteArray buildShaderSourcePass2(QSSGShaderResourceMergeContext *mergeContext);
159 virtual void addFunction(
const QByteArray &functionName) final;
161 virtual void addDefinition(
const QByteArray &name,
const QByteArray &value) final;
163 virtual void addTypeDeclaration(
const QByteArray &typeName,
const QByteArray &snippet) final;
165 void addPrefix(
const QByteArray &data);
167 void addImage(
const QByteArray &name,
const QByteArray &imageType,
const QByteArray &format, QSSGMemoryQualifiers qualifiers,
const QByteArray &condition = {});
168 void addBuffer(
const QByteArray &name,
const QByteArray &contentType, QSSGMemoryQualifiers qualifiers,
const QByteArray &condition = {});
191 Q_DISABLE_COPY(QSSGProgramGenerator)
193 QSSGProgramGenerator() =
default;
213 const QByteArray &contents,
214 QSSGShaderGeneratorStage stage);
217 const QSSGShaderFeatures &inFeatureSet,
218 QSSGShaderLibraryManager &shaderLibraryManager,
219 QSSGShaderCache &theCache,
220 QSSGRhiShaderPipeline::StageFlags stageFlags,
221 const QSSGUserShaderAugmentation &shaderAugmentation,
223 bool perTargetCompilation,
224 const QByteArray &inCacheKey = {});
QSSGRhiShaderPipelinePtr compileGeneratedRhiShader(const QByteArray &inMaterialInfoString, const QSSGShaderFeatures &inFeatureSet, QSSGShaderLibraryManager &shaderLibraryManager, QSSGShaderCache &theCache, QSSGRhiShaderPipeline::StageFlags stageFlags, const QSSGUserShaderAugmentation &shaderAugmentation, int viewCount, bool perTargetCompilation, const QByteArray &inCacheKey={})