45 enum class ShaderItemType {
52 enum class ShaderItemMapFlag {
55 Q_DECLARE_FLAGS(ShaderItemMapFlags, ShaderItemMapFlag)
62 typedef QMap<QByteArray, QByteArray> TStrTableStrMap;
63 typedef QMap<QByteArray, QPair<quint32, QByteArray>> TStrTableSizedStrMap;
65 typedef QPair<QByteArray, QByteArray> TParamPair;
66 typedef QPair<QByteArray, TParamPair> TConstantBufferParamPair;
67 typedef QVector<TConstantBufferParamPair> TConstantBufferParamArray;
69 TStrTableStrMap m_incoming;
70 TStrTableStrMap *m_outgoing =
nullptr;
71 TStrTableStrMap m_flatIncoming;
72 TStrTableStrMap *m_flatOutgoing =
nullptr;
73 QSet<QByteArray> m_includes;
74 TStrTableStrMap m_uniforms;
75 TStrTableSizedStrMap m_uniformArrays;
76 TStrTableStrMap m_constantBuffers;
77 TConstantBufferParamArray m_constantBufferParams;
78 QByteArray m_codeBuilder;
79 QByteArray m_finalBuilder;
80 QSSGShaderGeneratorStage m_stage;
81 QSSGShaderGeneratorStageFlags m_enabledStages;
82 QList<QByteArray> m_addedFunctions;
83 TStrTableStrMap m_addedTypeDeclarations;
84 TStrTableStrMap m_addedDefinitions;
85 QSSGShaderResourceMergeContext *m_mergeContext =
nullptr;
87 explicit QSSGStageGeneratorBase(QSSGShaderGeneratorStage inStage);
88 virtual ~QSSGStageGeneratorBase() =
default;
90 virtual void begin(QSSGShaderGeneratorStageFlags inEnabledStages);
92 virtual void addIncoming(
const QByteArray &name,
const QByteArray &type);
93 virtual void addOutgoing(
const QByteArray &name,
const QByteArray &type);
95 virtual void addFlatIncoming(
const QByteArray &name,
const QByteArray &type);
96 virtual void addFlatOutgoing(
const QByteArray &name,
const QByteArray &type);
98 virtual void addUniform(
const QByteArray &name,
const QByteArray &type);
100 virtual void addUniformArray(
const QByteArray &name,
const QByteArray &type, quint32 size);
102 virtual void addConstantBuffer(
const QByteArray &name,
const QByteArray &layout);
103 virtual void addConstantBufferParam(
const QByteArray &cbName,
const QByteArray ¶mName,
const QByteArray &type);
105 virtual QSSGStageGeneratorBase &operator<<(
const QByteArray &data);
106 virtual void append(
const QByteArray &data);
107 QSSGShaderGeneratorStage stage()
const;
109 void addShaderPass2Marker(ShaderItemType itemType);
111 void addShaderItemMap(ShaderItemType itemType,
const TStrTableStrMap &itemMap, ShaderItemMapFlags flags = {});
113 virtual void addShaderIncomingMap();
115 virtual void addShaderUniformMap();
117 virtual void addShaderOutgoingMap();
119 virtual void addShaderConstantBufferItemMap(
const QByteArray &itemType,
const TStrTableStrMap &cbMap, TConstantBufferParamArray cbParamsArray);
121 virtual void appendShaderCode() final;
123 virtual void addInclude(
const QByteArray &name) final;
125 void buildShaderSourcePass1(QSSGShaderResourceMergeContext *mergeContext);
127 QByteArray buildShaderSourcePass2(QSSGShaderResourceMergeContext *mergeContext);
129 virtual void addFunction(
const QByteArray &functionName) final;
131 virtual void addDefinition(
const QByteArray &name,
const QByteArray &value) final;
133 virtual void addTypeDeclaration(
const QByteArray &typeName,
const QByteArray &snippet) final;
152 Q_DISABLE_COPY(QSSGProgramGenerator)
154 QSSGProgramGenerator() =
default;
173 const QByteArray &contents,
174 QSSGShaderGeneratorStage stage);
177 const QSSGShaderFeatures &inFeatureSet,
178 QSSGShaderLibraryManager &shaderLibraryManager,
179 QSSGShaderCache &theCache,
180 QSSGRhiShaderPipeline::StageFlags stageFlags,
182 bool perTargetCompilation);
QSSGRhiShaderPipelinePtr compileGeneratedRhiShader(const QByteArray &inMaterialInfoString, const QSSGShaderFeatures &inFeatureSet, QSSGShaderLibraryManager &shaderLibraryManager, QSSGShaderCache &theCache, QSSGRhiShaderPipeline::StageFlags stageFlags, int viewCount, bool perTargetCompilation)