1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QSPIRVCOMPILER_P_H
5#define QSPIRVCOMPILER_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of a number of Qt sources files. This header file may change from
13// version to version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtShaderTools/private/qtshadertoolsglobal_p.h>
19#include <rhi/qshader.h>
20#include <QtCore/QString>
21
22QT_BEGIN_NAMESPACE
23
24struct QSpirvCompilerPrivate;
25class QIODevice;
26
27class Q_SHADERTOOLS_PRIVATE_EXPORT QSpirvCompiler
28{
29public:
30 QSpirvCompiler();
31 ~QSpirvCompiler();
32
33 enum Flag {
34 RewriteToMakeBatchableForSG = 0x01,
35 FullDebugInfo = 0x02
36 };
37 Q_DECLARE_FLAGS(Flags, Flag)
38
39 void setSourceFileName(const QString &fileName);
40 void setSourceFileName(const QString &fileName, QShader::Stage stage);
41 void setSourceDevice(QIODevice *device, QShader::Stage stage, const QString &fileName = QString());
42 void setSourceString(const QByteArray &sourceString, QShader::Stage stage, const QString &fileName = QString());
43 void setFlags(Flags flags);
44 void setPreamble(const QByteArray &preamble);
45 void setSGBatchingVertexInputLocation(int location);
46
47 QByteArray compileToSpirv();
48 QString errorMessage() const;
49
50private:
51 Q_DISABLE_COPY(QSpirvCompiler)
52 QSpirvCompilerPrivate *d = nullptr;
53};
54
55Q_DECLARE_OPERATORS_FOR_FLAGS(QSpirvCompiler::Flags)
56
57QT_END_NAMESPACE
58
59#endif
60

source code of qtshadertools/src/shadertools/qspirvcompiler_p.h