7#ifndef QSGRHIVISUALIZER_P_H
8#define QSGRHIVISUALIZER_P_H
23#include <QtCore/qrandom.h>
73 void recordDrawCalls(
const QList<DrawCall> &drawCalls,
74 QRhiCommandBuffer *cb,
75 QRhiShaderResourceBindings *srb,
76 bool blendOneOne =
false);
82 QRhiShaderResourceBindings *srb,
83 QRhiRenderPassDescriptor *rpDesc,
84 QRhiGraphicsPipeline::Topology topology,
85 QRhiVertexInputAttribute::Format vertexFormat,
88 void releaseResources();
91 QRhiGraphicsPipeline::Topology topology;
92 QRhiVertexInputAttribute::Format format;
94 QRhiGraphicsPipeline *ps;
96 QVarLengthArray<Pipeline, 16> pipelines;
99 PipelineCache m_pipelines;
104 QRhi *rhi, QRhiResourceUpdateBatch *u, QRhiRenderPassDescriptor *rpDesc);
105 void releaseResources();
106 void render(QRhiCommandBuffer *cb);
109 QRhiBuffer *vbuf =
nullptr;
110 QRhiBuffer *ubuf =
nullptr;
111 QRhiGraphicsPipeline *ps =
nullptr;
112 QRhiShaderResourceBindings *srb =
nullptr;
118 QRhi *rhi, QRhiResourceUpdateBatch *u);
119 void releaseResources();
120 void render(QRhiCommandBuffer *cb);
122 void gather(
Node *n);
124 QList<DrawCall> drawCalls;
125 QRhiBuffer *vbuf =
nullptr;
126 QRhiBuffer *ibuf =
nullptr;
127 QRhiBuffer *ubuf =
nullptr;
128 QRhiShaderResourceBindings *srb =
nullptr;
133 void prepare(
const QDataBuffer<Batch *> &opaqueBatches,
134 const QDataBuffer<Batch *> &alphaBatches,
136 QRhi *rhi, QRhiResourceUpdateBatch *u,
137 bool forceUintIndex);
138 void releaseResources();
139 void render(QRhiCommandBuffer *cb);
141 void gather(
Batch *b);
144 QList<DrawCall> drawCalls;
145 QRhiBuffer *ubuf =
nullptr;
146 QRhiShaderResourceBindings *srb =
nullptr;
152 QRhi *rhi, QRhiResourceUpdateBatch *u);
153 void releaseResources();
154 void render(QRhiCommandBuffer *cb);
156 void gather(QSGNode *node);
158 QList<DrawCall> drawCalls;
159 QRhiBuffer *vbuf =
nullptr;
160 QRhiBuffer *ibuf =
nullptr;
161 QRhiBuffer *ubuf =
nullptr;
162 QRhiShaderResourceBindings *srb =
nullptr;
168 QRhi *rhi, QRhiResourceUpdateBatch *u);
169 void releaseResources();
170 void render(QRhiCommandBuffer *cb);
172 void gather(
Node *n);
174 QList<DrawCall> drawCalls;
175 QRhiBuffer *vbuf =
nullptr;
176 QRhiBuffer *ibuf =
nullptr;
177 QRhiBuffer *ubuf =
nullptr;
178 QRhiShaderResourceBindings *srb =
nullptr;
182 QRhiBuffer *vbuf =
nullptr;
183 QRhiBuffer *ubuf =
nullptr;
184 QRhiShaderResourceBindings *srb =
nullptr;
185 QRhiGraphicsPipeline *ps =
nullptr;
189 QRandomGenerator m_randomGenerator;
const Type * at(uint index) const
char data[sizeof(Type) *PageSize]
QList< AllocatorPage< Type, PageSize > * > pages
void releaseExplicit(uint pageIndex, uint index)
void releaseResources() override
void prepareVisualize() override
void visualize() override
RhiVisualizer(Renderer *renderer)
void clearCachedRendererData()
QMultiHash< QList< quint32 >, QRhiShaderResourceBindings * > srbPool
Shader * prepareMaterial(QSGMaterial *material, const QSGGeometry *geometry=nullptr, QSGRendererInterface::RenderMode renderMode=QSGRendererInterface::RenderMode2D, int multiViewCount=0)
QList< quint32 > srbLayoutDescSerializeWorkspace
QHash< GraphicsPipelineStateKey, QRhiGraphicsPipeline * > pipelineCache
ShaderManager(QSGDefaultRenderContext *ctx)
Shader * prepareMaterialNoRewrite(QSGMaterial *material, const QSGGeometry *geometry=nullptr, QSGRendererInterface::RenderMode renderMode=QSGRendererInterface::RenderMode2D, int multiViewCount=0)
void updateRootTransforms(Node *n, Node *root, const QMatrix4x4 &combined)
void registerWithParentRoot(QSGNode *subRoot, QSGNode *parentRoot)
void visitClipNode(Node *n)
void updateStates(QSGNode *n) override
void visitOpacityNode(Node *n)
void updateRootTransforms(Node *n)
void visitTransformNode(Node *n)
void visitGeometryNode(Node *n)
virtual void visualize()=0
Visualizer(Renderer *renderer)
void setMode(VisualizeMode mode)
virtual void visualizeChangesPrepare(Node *n, uint parentChanges=0)
virtual void prepareVisualize()=0
VisualizeMode mode() const
virtual void releaseResources()=0
QHash< Node *, uint > m_visualizeChangeSet
VisualizeMode m_visualizeMode
The QSGMaterialShader class represents a graphics API independent shader program.
const int ZORDER_BUFFER_BINDING
static void qsg_wipeBuffer(Buffer *buffer)
static void rendererToMaterialGraphicsState(QSGMaterialShader::GraphicsPipelineState *dst, GraphicsState *src)
size_t qHash(const GraphicsState &s, size_t seed) noexcept
static QRhiVertexInputLayout calculateVertexInputLayout(const QSGMaterialShader *s, const QSGGeometry *geometry, bool batchable)
static void qsg_addBackOrphanedElements(QDataBuffer< Element * > &orphans, QDataBuffer< Element * > &renderList)
bool operator!=(const GraphicsPipelineStateKey &a, const GraphicsPipelineStateKey &b) noexcept
const float VIEWPORT_MIN_DEPTH
QSGMaterial::Flag QSGMaterial_FullMatrix
bool qsg_sort_batch_decreasing_order(Batch *a, Batch *b)
QDebug operator<<(QDebug d, const Pt &p)
QDebug operator<<(QDebug d, const Rect &r)
bool operator==(const ShaderKey &a, const ShaderKey &b) noexcept
bool operator==(const GraphicsPipelineStateKey &a, const GraphicsPipelineStateKey &b) noexcept
bool operator!=(const ShaderKey &a, const ShaderKey &b) noexcept
static void qsg_wipeBatch(Batch *batch)
static QRhiSampler * newSampler(QRhi *rhi, const QSGSamplerDescription &desc)
QRhiVertexInputAttribute::Format qsg_vertexInputFormat(const QSGGeometry::Attribute &a)
QRhiGraphicsPipeline::Topology qsg_topology(int geomDrawMode, QRhi *rhi)
QMatrix4x4 qsg_matrixForRoot(Node *node)
bool qsg_sort_batch_increasing_order(Batch *a, Batch *b)
static void qsg_addOrphanedElements(QDataBuffer< Element * > &orphans, const QDataBuffer< Element * > &renderList)
void qsg_setMultiViewFlagsOnMaterial(QSGMaterial *material, int multiViewCount)
const float VIEWPORT_MAX_DEPTH
int qsg_positionAttribute(QSGGeometry *g)
static int size_of_type(int type)
static bool isTranslate(const QMatrix4x4 &m)
static int qsg_countNodesInBatches(const QDataBuffer< Batch * > &batches)
static float calculateElementZOrder(const Element *e, qreal zRange)
static int qsg_fixIndexCount(int iCount, int drawMode)
bool qsg_sort_element_increasing_order(Element *a, Element *b)
static void materialToRendererGraphicsState(GraphicsState *dst, QSGMaterialShader::GraphicsPipelineState *src)
static bool needsBlendConstant(QRhiGraphicsPipeline::BlendFactor f)
const int VERTEX_BUFFER_BINDING
const uint DYNAMIC_VERTEX_INDEX_BUFFER_THRESHOLD
bool hasMaterialWithBlending(QSGGeometryNode *n)
static int qsg_countNodesInBatch(const Batch *batch)
bool operator==(const GraphicsState &a, const GraphicsState &b) noexcept
QRhiCommandBuffer::IndexFormat qsg_indexFormat(const QSGGeometry *geometry)
bool operator!=(const GraphicsState &a, const GraphicsState &b) noexcept
bool qsg_sort_element_decreasing_order(Element *a, Element *b)
size_t qHash(const ShaderKey &k, size_t seed) noexcept
void qsg_dumpShadowRoots(BatchRootInfo *i, int indent)
void qsg_dumpShadowRoots(Node *n)
static bool isScale(const QMatrix4x4 &m)
static bool is2DSafe(const QMatrix4x4 &m)
size_t qHash(const GraphicsPipelineStateKey &k, size_t seed) noexcept
Int aligned(Int v, Int byteAlign)
const quint32 DEFAULT_BUFFER_POOL_SIZE_LIMIT
Combined button and popup list for selecting options.
Q_DECLARE_TYPEINFO(QDateTime::Data, Q_RELOCATABLE_TYPE)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
#define DECLARE_DEBUG_VAR(variable)
#define QSGNODE_DIRTY_PARENT
QT_BEGIN_NAMESPACE int qt_sg_envInt(const char *name, int defaultValue)
#define SHADOWNODE_TRAVERSE(NODE)
#define QSGNODE_TRAVERSE(NODE)
Q_DECLARE_TYPEINFO(QSGBatchRenderer::DrawSet, Q_PRIMITIVE_TYPE)
Q_DECLARE_TYPEINFO(QSGBatchRenderer::GraphicsState, Q_RELOCATABLE_TYPE)
Q_DECLARE_TYPEINFO(QSGBatchRenderer::GraphicsPipelineStateKey, Q_RELOCATABLE_TYPE)
#define QSG_RENDERER_COORD_LIMIT
Q_DECLARE_TYPEINFO(QSGBatchRenderer::RenderPassState, Q_RELOCATABLE_TYPE)
bool geometryWasChanged(QSGGeometryNode *gn)
bool isSafeToBatch() const
void cleanupRemovedElements()
BatchCompatibility isMaterialCompatible(Element *e) const
bool isTranslateOnlyToRoot() const
StencilClipState stencilClipState
QDataBuffer< DrawSet > drawSets
uint nonDynamicChangeCount
DrawSet(int v, int z, int i)
QRhiGraphicsPipeline * depthPostPassPs
QRhiShaderResourceBindings * srb
QRhiGraphicsPipeline * ps
void setNode(QSGGeometryNode *n)
uint boundsOutsideFloatRange
const ShaderManagerShader * sms
size_t srbLayoutDescriptionHash
size_t renderTargetDescriptionHash
static GraphicsPipelineStateKey create(const GraphicsState &state, const ShaderManagerShader *sms, const QRhiRenderPassDescriptor *rpDesc, const QRhiShaderResourceBindings *srb)
QList< quint32 > srbLayoutDescription
QList< quint32 > renderTargetDescription
QSGGeometry::DrawingMode drawMode
QSGNode::NodeType type() const
BatchRootInfo * rootInfo() const
QSGNode::DirtyState dirtyState
ClipBatchRootInfo * clipInfo() const
Node * firstChild() const
RenderNodeElement * renderNodeElement() const
Element * element() const
bool hasChild(Node *child) const
void map(const QMatrix4x4 &mat)
void set(float nx, float ny)
void operator|=(const Pt &pt)
void set(float left, float top, float right, float bottom)
void map(const QMatrix4x4 &m)
bool isOutsideFloatRange() const
bool intersects(const Rect &r)
void operator|=(const Rect &r)
RenderNodeElement(QSGRenderNode *rn)
QSGRenderNode * renderNode
bool stencilEnabled() const override
QRect scissorRect() const override
const QMatrix4x4 * projectionMatrix() const override
const QRegion * clipRegion() const override
bool scissorEnabled() const override
int stencilValue() const override
const QMatrix4x4 * m_projectionMatrix
QRhiDepthStencilClearValue dsClear
static const int UBUF_SIZE
QRhiGraphicsPipeline::Topology topology
QRhiCommandBuffer::IndexFormat format
QSGRendererInterface::RenderMode renderMode
QSGMaterialShader * materialShader
QRhiVertexInputLayout inputLayout
QVarLengthArray< QRhiShaderStage, 2 > stages
QRhiCommandBuffer::IndexFormat indexFormat
QRhiShaderResourceBindings * srb
QDataBuffer< StencilDrawCall > drawCalls