Revision control

++ // Copyright (C) 2019 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++
++ #ifndef QSSGRHICONTEXT_H
++ #define QSSGRHICONTEXT_H
++
++ //
++ // W A R N I N G
++ // -------------
++ //
++ // This file is part of the QtQuick3D API, with limited compatibility guarantees.
++ // Usage of this API may make your code source and binary incompatible with
++ // future versions of Qt.
++ //
++
++ #include <QtCore/qstack.h>
++ #include <rhi/qrhi.h>
++
++ #include <QtQuick3DRuntimeRender/qtquick3druntimerenderexports.h>
++
++ QT_BEGIN_NAMESPACE
++
++ class QSSGRhiContextPrivate;
++ class QSSGRhiShaderPipeline;
++
++ class QSSGRhiGraphicsPipelineState
++ {
++ public:
++ enum class Flag : quint32
++ {
++ DepthTestEnabled = 0x1,
++ DepthWriteEnabled = 0x2,
++ BlendEnabled = 0x4,
++ UsesStencilRef = 0x8,
++ UsesScissor = 0x10
++ };
++ Q_DECLARE_FLAGS(Flags, Flag)
++
++ QRhiGraphicsPipeline::CompareOp depthFunc = QRhiGraphicsPipeline::LessOrEqual;
++ QRhiGraphicsPipeline::CullMode cullMode = QRhiGraphicsPipeline::None;
++ std::array<QRhiGraphicsPipeline::TargetBlend, 8> targetBlend;
++ QRhiGraphicsPipeline::PolygonMode polygonMode = QRhiGraphicsPipeline::Fill;
++ QRhiGraphicsPipeline::StencilOpState stencilOpFrontState {};
++ quint32 stencilWriteMask = 0xFF;
++ quint32 stencilRef = 0;
++ int depthBias = 0;
++ int samples = 1;
++ int colorAttachmentCount = 1;
++ int viewCount = 1;
++ float slopeScaledDepthBias = 0.0f;
++ float lineWidth = 1.0f;
++ Flags flags;
++ QRhiViewport viewport;
++ QRhiScissor scissor;
++ bool userSetCullMode = false; // set by PipelineStateOverride; not part of the pipeline cache key
++
++ private:
++ friend struct QSSGRhiGraphicsPipelineStatePrivate;
++ friend struct QSSGRhiInputAssemblerStatePrivate;
++ struct InputAssemblerState
++ {
++ enum InputSemantic {
++ PositionSemantic, // attr_pos
++ NormalSemantic, // attr_norm
++ TexCoord0Semantic, // attr_uv0
++ TexCoord1Semantic, // attr_uv1
++ TangentSemantic, // attr_textan
++ BinormalSemantic, // attr_binormal
++ ColorSemantic, // attr_color
++ MaxTargetSemantic = ColorSemantic,
++ JointSemantic, // attr_joints
++ WeightSemantic, // attr_weights
++ TexCoordLightmapSemantic // attr_lightmapuv
++ };
++
++ QRhiVertexInputLayout inputLayout;
++ QVarLengthArray<InputSemantic, 8> inputs;
++ QRhiGraphicsPipeline::Topology topology;
++ std::array<quint8, MaxTargetSemantic + 1> targetOffsets = { UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX,
++ UINT8_MAX, UINT8_MAX, UINT8_MAX };
++ quint8 targetCount = 0;
++ } ia;
++
++ // for internal use
++ const QSSGRhiShaderPipeline *shaderPipeline = nullptr;
++ };
++
++ struct QSSGRhiSamplerDescription
++ {
++ QRhiSampler::Filter minFilter;
++ QRhiSampler::Filter magFilter;
++ QRhiSampler::Filter mipmap;
++ QRhiSampler::AddressMode hTiling;
++ QRhiSampler::AddressMode vTiling;
++ QRhiSampler::AddressMode zTiling;
++ };
++
++ class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGRhiContext
++ {
++ Q_DISABLE_COPY(QSSGRhiContext)
++ public:
++ explicit QSSGRhiContext(QRhi *rhi);
++ ~QSSGRhiContext();
++
++ QRhi *rhi() const;
++ bool isValid() const;
++
++ QRhiRenderPassDescriptor *mainRenderPassDescriptor() const;
++ QRhiCommandBuffer *commandBuffer() const;
++ QRhiRenderTarget *renderTarget() const;
++ int mainPassSampleCount() const;
++ int mainPassViewCount() const;
++
++ QRhiSampler *sampler(const QSSGRhiSamplerDescription &samplerDescription);
++ void checkAndAdjustForNPoT(QRhiTexture *texture, QSSGRhiSamplerDescription *samplerDescription);
++ QRhiTexture *dummyTexture(QRhiTexture::Flags flags, QRhiResourceUpdateBatch *rub,
++ const QSize &size = QSize(64, 64), const QColor &fillColor = Qt::black,
++ int arraySize = 0);
++
++ QRhiCommandBuffer::BeginPassFlags commonPassFlags() const;
++
++ private:
++ Q_DECLARE_PRIVATE(QSSGRhiContext)
++ std::unique_ptr<QSSGRhiContextPrivate> d_ptr;
++ };
++
++ QT_END_NAMESPACE
++
++ #endif