QShaderDescription Class

シェーダーのインターフェイスを記述します。詳細...

Header: #include <QShaderDescription>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Since: Qt 6.6

パブリック型

(since 6.6) struct BlockVariable
(since 6.6) struct BuiltinVariable
(since 6.6) struct InOutVariable
(since 6.6) struct PushConstantBlock
(since 6.6) struct StorageBlock
(since 6.6) struct UniformBlock
enum BuiltinType { PositionBuiltin, PointSizeBuiltin, ClipDistanceBuiltin, CullDistanceBuiltin, VertexIdBuiltin, …, InstanceIndexBuiltin }
enum ImageFlag { ReadOnlyImage, WriteOnlyImage }
flags ImageFlags
enum ImageFormat { ImageFormatUnknown, ImageFormatRgba32f, ImageFormatRgba16f, ImageFormatR32f, ImageFormatRgba8, …, ImageFormatR8ui }
enum QualifierFlag { QualifierReadOnly, QualifierWriteOnly, QualifierCoherent, QualifierVolatile, QualifierRestrict }
flags QualifierFlags
enum TessellationMode { UnknownTessellationMode, TrianglesTessellationMode, QuadTessellationMode, IsolineTessellationMode }
enum TessellationPartitioning { UnknownTessellationPartitioning, EqualTessellationPartitioning, FractionalEvenTessellationPartitioning, FractionalOddTessellationPartitioning }
enum TessellationWindingOrder { UnknownTessellationWindingOrder, CwTessellationWindingOrder, CcwTessellationWindingOrder }
enum VariableType { Unknown, Float, Vec2, Vec3, Vec4, …, Half4 }

パブリック関数

QShaderDescription()
QShaderDescription(const QShaderDescription &other)
~QShaderDescription()
QList<QShaderDescription::InOutVariable> combinedImageSamplers() const
std::array<uint, 3> computeShaderLocalSize() const
QList<QShaderDescription::BuiltinVariable> inputBuiltinVariables() const
QList<QShaderDescription::InOutVariable> inputVariables() const
bool isValid() const
QList<QShaderDescription::BuiltinVariable> outputBuiltinVariables() const
QList<QShaderDescription::InOutVariable> outputVariables() const
QList<QShaderDescription::PushConstantBlock> pushConstantBlocks() const
void serialize(QDataStream *stream, int version) const
QList<QShaderDescription::StorageBlock> storageBlocks() const
QList<QShaderDescription::InOutVariable> storageImages() const
QShaderDescription::TessellationMode tessellationMode() const
uint tessellationOutputVertexCount() const
QShaderDescription::TessellationPartitioning tessellationPartitioning() const
QShaderDescription::TessellationWindingOrder tessellationWindingOrder() const
QByteArray toJson() const
QList<QShaderDescription::UniformBlock> uniformBlocks() const
QShaderDescription &operator=(const QShaderDescription &other)

静的パブリック・メンバー

QShaderDescription deserialize(QDataStream *stream, int version)
bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)

詳細説明

警告 QShader や QShaderDescription を含む Qt Gui モジュールのQRhi クラスファミリーは、限定的な互換性保証を提供しています。これらのクラスにはソース互換性もバイナリ互換性も保証されていません。つまり、APIはアプリケーションが開発されたQtバージョンでのみ動作することが保証されています。しかし、ソース互換性のない変更は最小限にとどめることを目的としており、マイナーリリース(6.7、6.8など)のみで行われます。これらのクラスをアプリケーションで使用するには、Qt::GuiPrivate (CMake を使用している場合)にリンクし、rhi のプレフィックスを付けてヘッダをインクルードします(例:#include <rhi/qshaderdescription.h> )。

シェーダには通常、入力と出力のセットがあります。たとえば、バーテックスシェーダは多数の入力変数を持ち、アプリケーション が提供するデータ(モデルビュー行列など)にアクセスするために、1 つまたは複 数のユニフォームバッファを使用することがあります。フラグメントステージのシェーダは、(単純なセットアップでは)バー テックスステージからデータを受け取り、ユニフォームバッファ、イ メージ、サンプラからのデータにも依存するかもしれません。

頂点入力とユニフォームバッファのレイアウト(メンバの名前は何か、サイズ、オフセットなど)に関しては、アプリケーションとフレームワークは、実行時に動的にこれを発見する必要があるかもしれません。これは、シェーダーがビルトインではなく、ユーザーのような外部エンティティによって提供される場合に典型的です。

近代的で無駄のないグラフィックス API は、もはや実行時にシェーダ反射情報を照会する方法を提供しないかもしれません。そのため、このようなデータはQShaderBaker によって自動的に生成され、QShader ごとに QShaderDescription オブジェクトとして提供されます。

次の頂点シェーダを見てみましょう:

#version 440

layout(location = 0) in vec4 position;
layout(location = 1) in vec3 color;
layout(location = 0) out vec3 v_color;

layout(std140, binding = 0) uniform buf {
    mat4 mvp;
    float opacity;
} ubuf;

void main()
{
    v_color = color;
    gl_Position = ubuf.mvp * position;
}

このシェーダには 2 つの入力があります:vec4 タイプを持つ 0 の位置のposition と、vec3 タイプを持つ 1 の位置のcolor です:v_color出力は1つです。さらに重要なのは、バインディング0に68バイトのサイズを持つ一様ブロックがあり、オフセット0にmvp という名前の4x4行列、オフセット64にopacity という浮動小数点数の2つのメンバがあります。

これらはすべてQShaderDescriptionオブジェクトによって記述されます。QShaderDescription は、QDataStream を介して JSON やバイナリ形式にシリアライズすることができ、このバイナリ形式からデシリアライズすることもできます。実際には、QShader が関連する QShaderDescription を自動的に処理するため、これが必要になることはほとんどありませんが、上記のシェーダの QShaderDescription を(qsb ツールの-d オプションで実行されるように)JSON として書き出すと、次のようになります:

{
    "inputs": [
        {
            "location": 1,
            "name": "color",
            "type": "vec3"
        },
        {
            "location": 0,
            "name": "position",
            "type": "vec4"
        }
    ],
    "outputs": [
        {
            "location": 0,
            "name": "v_color",
            "type": "vec3"
        }
    ],
    "uniformBlocks": [
        {
            "binding": 0,
            "blockName": "buf",
            "members": [
                {
                    "matrixStride": 16,
                    "name": "mvp",
                    "offset": 0,
                    "size": 64,
                    "type": "mat4"
                },
                {
                    "name": "opacity",
                    "offset": 64,
                    "size": 4,
                    "type": "float"
                }
            ],
            "set": 0,
            "size": 68,
            "structName": "ubuf"
        }
    ]
}

C++ API では、上記のようなデータ構造にアクセスできます。C++のAPIでは、上記のようなデータ構造にアクセスすることができます。簡単にするために、内部構造体にはパブリックデータ・メンバしか含まれていません。

QShaderBaker およびQShaderも参照して ください。

メンバ型のドキュメント

enum QShaderDescription::BuiltinType

組み込み変数の型。

定数
QShaderDescription::PositionBuiltin0
QShaderDescription::PointSizeBuiltin1
QShaderDescription::ClipDistanceBuiltin3
QShaderDescription::CullDistanceBuiltin4
QShaderDescription::VertexIdBuiltin5
QShaderDescription::InstanceIdBuiltin6
QShaderDescription::PrimitiveIdBuiltin7
QShaderDescription::InvocationIdBuiltin8
QShaderDescription::LayerBuiltin9
QShaderDescription::ViewportIndexBuiltin10
QShaderDescription::TessLevelOuterBuiltin11
QShaderDescription::TessLevelInnerBuiltin12
QShaderDescription::TessCoordBuiltin13
QShaderDescription::PatchVerticesBuiltin14
QShaderDescription::FragCoordBuiltin15
QShaderDescription::PointCoordBuiltin16
QShaderDescription::FrontFacingBuiltin17
QShaderDescription::SampleIdBuiltin18
QShaderDescription::SamplePositionBuiltin19
QShaderDescription::SampleMaskBuiltin20
QShaderDescription::FragDepthBuiltin22
QShaderDescription::NumWorkGroupsBuiltin24
QShaderDescription::WorkgroupSizeBuiltin25
QShaderDescription::WorkgroupIdBuiltin26
QShaderDescription::LocalInvocationIdBuiltin27
QShaderDescription::GlobalInvocationIdBuiltin28
QShaderDescription::LocalInvocationIndexBuiltin29
QShaderDescription::VertexIndexBuiltin42
QShaderDescription::InstanceIndexBuiltin43

enum QShaderDescription::ImageFlag
flags QShaderDescription::ImageFlags.

イメージフラグ。

定数
QShaderDescription::ReadOnlyImage1 << 0
QShaderDescription::WriteOnlyImage1 << 1

ImageFlags 型はQFlags<ImageFlag> の typedef です。これは、ImageFlag 値の OR の組み合わせを格納します。

enum QShaderDescription::ImageFormat

画像フォーマット。

定数
QShaderDescription::ImageFormatUnknown0
QShaderDescription::ImageFormatRgba32f1
QShaderDescription::ImageFormatRgba16f2
QShaderDescription::ImageFormatR32f3
QShaderDescription::ImageFormatRgba84
QShaderDescription::ImageFormatRgba8Snorm5
QShaderDescription::ImageFormatRg32f6
QShaderDescription::ImageFormatRg16f7
QShaderDescription::ImageFormatR11fG11fB10f8
QShaderDescription::ImageFormatR16f9
QShaderDescription::ImageFormatRgba1610
QShaderDescription::ImageFormatRgb10A211
QShaderDescription::ImageFormatRg1612
QShaderDescription::ImageFormatRg813
QShaderDescription::ImageFormatR1614
QShaderDescription::ImageFormatR815
QShaderDescription::ImageFormatRgba16Snorm16
QShaderDescription::ImageFormatRg16Snorm17
QShaderDescription::ImageFormatRg8Snorm18
QShaderDescription::ImageFormatR16Snorm19
QShaderDescription::ImageFormatR8Snorm20
QShaderDescription::ImageFormatRgba32i21
QShaderDescription::ImageFormatRgba16i22
QShaderDescription::ImageFormatRgba8i23
QShaderDescription::ImageFormatR32i24
QShaderDescription::ImageFormatRg32i25
QShaderDescription::ImageFormatRg16i26
QShaderDescription::ImageFormatRg8i27
QShaderDescription::ImageFormatR16i28
QShaderDescription::ImageFormatR8i29
QShaderDescription::ImageFormatRgba32ui30
QShaderDescription::ImageFormatRgba16ui31
QShaderDescription::ImageFormatRgba8ui32
QShaderDescription::ImageFormatR32ui33
QShaderDescription::ImageFormatRgb10a2ui34
QShaderDescription::ImageFormatRg32ui35
QShaderDescription::ImageFormatRg16ui36
QShaderDescription::ImageFormatRg8ui37
QShaderDescription::ImageFormatR16ui38
QShaderDescription::ImageFormatR8ui39

enum QShaderDescription::QualifierFlag
flags QShaderDescription::QualifierFlags

Qualifier フラグ。

定数
QShaderDescription::QualifierReadOnly1 << 0
QShaderDescription::QualifierWriteOnly1 << 1
QShaderDescription::QualifierCoherent1 << 2
QShaderDescription::QualifierVolatile1 << 3
QShaderDescription::QualifierRestrict1 << 4

QualifierFlags 型はQFlags<QualifierFlag> の typedef です。QualifierFlags 値の OR の組み合わせを格納します。

enum QShaderDescription::TessellationMode

定数定数
QShaderDescription::UnknownTessellationMode0
QShaderDescription::TrianglesTessellationMode1
QShaderDescription::QuadTessellationMode2
QShaderDescription::IsolineTessellationMode3

enum QShaderDescription::TessellationPartitioning

定数定数値
QShaderDescription::UnknownTessellationPartitioning0
QShaderDescription::EqualTessellationPartitioning1
QShaderDescription::FractionalEvenTessellationPartitioning2
QShaderDescription::FractionalOddTessellationPartitioning3

enum QShaderDescription::TessellationWindingOrder

一定値定数値
QShaderDescription::UnknownTessellationWindingOrder0
QShaderDescription::CwTessellationWindingOrder1
QShaderDescription::CcwTessellationWindingOrder2

enum QShaderDescription::VariableType

変数またはブロックメンバの型を表します。

定数説明
QShaderDescription::Unknown0
QShaderDescription::Float1
QShaderDescription::Vec22
QShaderDescription::Vec33
QShaderDescription::Vec44
QShaderDescription::Mat25
QShaderDescription::Mat2x36
QShaderDescription::Mat2x47
QShaderDescription::Mat38
QShaderDescription::Mat3x29
QShaderDescription::Mat3x410
QShaderDescription::Mat411
QShaderDescription::Mat4x212
QShaderDescription::Mat4x313
QShaderDescription::Int14
QShaderDescription::Int215
QShaderDescription::Int316
QShaderDescription::Int417
QShaderDescription::Uint18
QShaderDescription::Uint219
QShaderDescription::Uint320
QShaderDescription::Uint421
QShaderDescription::Bool22
QShaderDescription::Bool223
QShaderDescription::Bool324
QShaderDescription::Bool425
QShaderDescription::Double26
QShaderDescription::Double227
QShaderDescription::Double328
QShaderDescription::Double429
QShaderDescription::DMat230
QShaderDescription::DMat2x331
QShaderDescription::DMat2x432
QShaderDescription::DMat333
QShaderDescription::DMat3x234
QShaderDescription::DMat3x435
QShaderDescription::DMat436
QShaderDescription::DMat4x237
QShaderDescription::DMat4x338
QShaderDescription::Sampler1D39
QShaderDescription::Sampler2D40
QShaderDescription::Sampler2DMS41
QShaderDescription::Sampler3D42
QShaderDescription::SamplerCube43
QShaderDescription::Sampler1DArray44
QShaderDescription::Sampler2DArray45
QShaderDescription::Sampler2DMSArray46
QShaderDescription::Sampler3DArray47
QShaderDescription::SamplerCubeArray48
QShaderDescription::SamplerRect49
QShaderDescription::SamplerBuffer50
QShaderDescription::SamplerExternalOES51
QShaderDescription::Sampler52個別のサンプラー用
QShaderDescription::Image1D53
QShaderDescription::Image2D54
QShaderDescription::Image2DMS55
QShaderDescription::Image3D56
QShaderDescription::ImageCube57
QShaderDescription::Image1DArray58
QShaderDescription::Image2DArray59
QShaderDescription::Image2DMSArray60
QShaderDescription::Image3DArray61
QShaderDescription::ImageCubeArray62
QShaderDescription::ImageRect63
QShaderDescription::ImageBuffer64
QShaderDescription::Struct65
QShaderDescription::Half66
QShaderDescription::Half267
QShaderDescription::Half368
QShaderDescription::Half469

メンバ関数説明

QShaderDescription::QShaderDescription()

新しい空の QShaderDescription を構築します。

注意: 空であることは、新しく構築されたインスタンスに対してisValid() がfalse を返すことを意味します。

QShaderDescription::QShaderDescription(const QShaderDescription &other)

other のコピーを構築します。

[noexcept] QShaderDescription::~QShaderDescription()

デストラクタ。

QList<QShaderDescription::InOutVariable> QShaderDescription::combinedImageSamplers() const

結合されたイメージサンプラーのリストを返します。

GLSL/Vulkanシェーダーをソースとして、layout(binding = 1) uniform sampler2D tex; ユニフォームは以下を生成します:(ここではテキストJSONとして示されています)

"combinedImageSamplers": [
     {
         "binding": 1,
         "name": "tex",
         "set": 0,
         "type": "sampler2D"
     }
 ]

これは、シェーダーの他の言語バージョンも結合イメージサンプラーを使用しなければならないという意味ではありません。たとえば、HLSLバージョンでは、Texture2DとSamplerStateオブジェクトをそれぞれレジスタt1とs1で使用するだけでしょう。

std::array<uint, 3> QShaderDescription::computeShaderLocalSize() const

コンピュートシェーダのローカルサイズを返します。

たとえば、次の宣言を持つコンピュートシェーダの場合、この関数は { 256, 16, 1} を返します。

layout(local_size_x = 256, local_size_y = 16, local_size_z = 1) in;

[static] QShaderDescription QShaderDescription::deserialize(QDataStream *stream, int version)

stream からロードされた新しいQShaderDescription を返します。version は qsb バージョンを指定します。

serialize()も参照してください

QList<QShaderDescription::BuiltinVariable> QShaderDescription::inputBuiltinVariables() const

入力として使用されるアクティブなビルトインのリストを返します。例えば、gl_TessCoord と gl_Position の値を読み取るテッセレーション評価シェーダは、TessCoordBuiltinPositionBuiltin がここにリストされます。

QList<QShaderDescription::InOutVariable> QShaderDescription::inputVariables() const

入力変数のリストを返します。これには、頂点ステージ用の頂点入力(アトリビュートと呼ばれることもある)と、他のステージ用の入力(バリエーションと呼ばれることもある)が含まれます。

bool QShaderDescription::isValid() const

QShaderDescription が、変数リストとブロック リストのいずれかに少なくとも 1 つのエントリを含む場合、true を返します。

QList<QShaderDescription::BuiltinVariable> QShaderDescription::outputBuiltinVariables() const

入力として使用されるアクティブな組み込み変数のリストを返します。たとえば、バーテックスシェーダは出力組み込みとしてPositionBuiltin を持つことが非常によくあります。

QList<QShaderDescription::InOutVariable> QShaderDescription::outputVariables() const

出力変数のリストを返します。

QList<QShaderDescription::PushConstantBlock> QShaderDescription::pushConstantBlocks() const

プッシュ定数ブロックのリストを返します。

注意: Qt Rendering Hardware Interface と組み合わせて使用するシェーダでは、プッシュ定数ブロックに依存しないようにしてください。

void QShaderDescription::serialize(QDataStream *stream, int version) const

このQShaderDescriptionstream にシリアライズします。version は qsb バージョンを指定します。

deserialize() およびtoJson()も参照してください

QList<QShaderDescription::StorageBlock> QShaderDescription::storageBlocks() const

シェーダ記憶ブロックのリストを返す。

たとえば、ソースとして GLSL/Vulkan シェーダーを使用する場合、次のように宣言します。

struct Stuff {
    vec2 a;
    vec2 b;
};
layout(std140, binding = 0) buffer StuffSsbo {
    vec4 whatever;
    Stuff stuff[];
} buf;

は以下を生成します:(ここではテキストJSONとして示されています)

"storageBlocks": [ {
    "binding": 0,
    "blockName": "StuffSsbo",
    "instanceName": "buf",
    "knownSize": 16,
    "runtimeArrayStride": 16
    "members": [
        {
            "name": "whatever",
            "offset": 0,
            "size": 16,
            "type": "vec4"
        },
        {
            "arrayDims": [
                0
            ],
            "name": "stuff",
            "offset": 16,
            "size": 0,
            "structMembers": [
                {
                    "name": "a",
                    "offset": 0,
                    "size": 8,
                    "type": "vec2"
                },
                {
                    "name": "b",
                    "offset": 8,
                    "size": 8,
                    "type": "vec2"
                }
            ],
            "type": "struct"
        }
    ],
    "set": 0
} ]

注: ストレージブロックの最後のメンバーのサイズは未定義です。これは、size 0と表示され、配列の次元は[0] 。ストレージブロックのknownSize は、最後のメンバのサイズを除外しています。配列サイズが未定義の最後のメンバに対する、配列項目間のバイト単位のストライドはruntimeArrayStride である。この値は、指定されたバッファメモリレイアウト標準(std140、std430)の規則に従って決定される。

注意: SSBOは、OpenGL 2.xや3.1より古いOpenGL ESなど、一部のグラフィックスAPIでは利用できません。

QList<QShaderDescription::InOutVariable> QShaderDescription::storageImages() const

画像変数のリストを返します。

これらはおそらくコンピュート・シェーダーで発生します。たとえば、layout (binding = 0, rgba8) uniform readonly image2D inputImage; :(ここではテキストJSONとして示されています)

"storageImages": [
     {
         "binding": 0,
         "imageFormat": "rgba8",
         "name": "inputImage",
         "set": 0,
         "type": "image2D"
     }
 ]

注意: 個別のイメージ・オブジェクトは、OpenGL 2.xや3.1より古いOpenGL ESなど、一部のグラフィックスAPIとは互換性がありません。

QShaderDescription::TessellationMode QShaderDescription::tessellationMode() const

テセレーションコントロールまたは評価シェーダーのテセレーション実行モードを返します。

設定されていない場合、返される値はUnknownTessellationMode です。

例えば、以下の宣言を持つテッセレーション評価シェーダーの場合、この関数はTrianglesTessellationMode を返します。

layout(triangles) in;

uint QShaderDescription::tessellationOutputVertexCount() const

出力頂点の数を返します。

例えば、以下の宣言を持つテッセレーション制御シェーダの場合、この関数は 3 を返します。

layout(vertices = 3) out;

QShaderDescription::TessellationPartitioning QShaderDescription::tessellationPartitioning() const

テッセレーション制御シェーダまたは評価シェーダのテッセレーション分割モードを返します。

設定されていない場合、返される値はUnknownTessellationPartitioning です。

例えば、以下の宣言を持つテッセレーション評価シェーダの場合、関数はFractionalOddTessellationPartitioning を返します。

layout(triangles, fractional_odd_spacing, ccw) in;

QShaderDescription::TessellationWindingOrder QShaderDescription::tessellationWindingOrder() const

テッセレーションコントロールまたは評価シェーダのテッセレーション巻き順を返します。

設定されていない場合、返される値はUnknownTessellationWindingOrder です。

例えば、以下の宣言を持つテッセレーション評価シェーダーの場合、この関数はCcwTessellationWindingOrder を返します。

layout(triangles, fractional_odd_spacing, ccw) in;

QByteArray QShaderDescription::toJson() const

データのシリアライズされたJSONテキストバージョンを返します。

注意: JSON テキストにはデシリアライズ・メソッドがありません。

serialize()も参照してください

QList<QShaderDescription::UniformBlock> QShaderDescription::uniformBlocks() const

ユニフォーム・ブロックのリストを返します。

QShaderDescription &QShaderDescription::operator=(const QShaderDescription &other)

このオブジェクトにother を割り当てます。

関連する非メンバー

[noexcept] bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)

2 つのQShaderDescription オブジェクトlhsrhs が等しい場合、true を返します。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。