diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-17 10:54:36 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-19 22:04:41 +0200 |
commit | cc61edd1a0f6d68198d6b09c6dd3f007b3167bca (patch) | |
tree | 59095cccf05549b1910f8ed5cc11fe7c82af6325 | |
parent | 06e26b66e00e00de2e14ab8213c04ddca07aaaec (diff) |
Update QDispatchCompute to use direct sync
Change-Id: I08b3c3903a06f242da740f1fb486396ee960be53
Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r-- | src/render/framegraph/dispatchcompute.cpp | 40 | ||||
-rw-r--r-- | src/render/framegraph/dispatchcompute_p.h | 4 | ||||
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 2 |
3 files changed, 20 insertions, 26 deletions
diff --git a/src/render/framegraph/dispatchcompute.cpp b/src/render/framegraph/dispatchcompute.cpp index f7e9dcff4..5eae75bc6 100644 --- a/src/render/framegraph/dispatchcompute.cpp +++ b/src/render/framegraph/dispatchcompute.cpp @@ -66,32 +66,26 @@ void DispatchCompute::cleanup() m_workGroups[2] = 1; } -void DispatchCompute::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void DispatchCompute::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - FrameGraphNode::initializeFromPeer(change); - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QDispatchComputeData>>(change); - const auto &data = typedChange->data; - m_workGroups[0] = data.workGroupX; - m_workGroups[1] = data.workGroupY; - m_workGroups[2] = data.workGroupZ; -} + const QDispatchCompute *node = qobject_cast<const QDispatchCompute *>(frontEnd); + if (!node) + return; -void DispatchCompute::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - if (e->type() == Qt3DCore::PropertyUpdated) { - Qt3DCore::QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); - if (propertyChange->propertyName() == QByteArrayLiteral("workGroupX")) { - m_workGroups[0] = propertyChange->value().toInt(); - markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::ComputeDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("workGroupY")) { - m_workGroups[1] = propertyChange->value().toInt(); - markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::ComputeDirty); - } else if (propertyChange->propertyName() == QByteArrayLiteral("workGroupZ")) { - m_workGroups[2] = propertyChange->value().toInt(); - markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::ComputeDirty); - } + FrameGraphNode::syncFromFrontEnd(frontEnd, firstTime); + + if (m_workGroups[0] != node->workGroupX()) { + m_workGroups[0] = node->workGroupX(); + markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::ComputeDirty); + } + if (m_workGroups[1] != node->workGroupY()) { + m_workGroups[1] = node->workGroupY(); + markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::ComputeDirty); + } + if (m_workGroups[2] != node->workGroupZ()) { + m_workGroups[2] = node->workGroupZ(); + markDirty(AbstractRenderer::FrameGraphDirty|AbstractRenderer::ComputeDirty); } - FrameGraphNode::sceneChangeEvent(e); } } // Render diff --git a/src/render/framegraph/dispatchcompute_p.h b/src/render/framegraph/dispatchcompute_p.h index aa88a35c5..24a641938 100644 --- a/src/render/framegraph/dispatchcompute_p.h +++ b/src/render/framegraph/dispatchcompute_p.h @@ -68,13 +68,13 @@ public: void cleanup(); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; inline int x() const Q_DECL_NOTHROW { return m_workGroups[0]; } inline int y() const Q_DECL_NOTHROW { return m_workGroups[1]; } inline int z() const Q_DECL_NOTHROW { return m_workGroups[2]; } + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; + private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; int m_workGroups[3]; }; diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 8d8a5b53c..9bc4e0ed4 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -298,7 +298,7 @@ void QRenderAspectPrivate::registerBackendTypes() q->registerBackendType<QFrameGraphNode, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::FrameGraphNode, QFrameGraphNode> >::create(m_renderer)); q->registerBackendType<QCameraSelector, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::CameraSelector, QCameraSelector> >::create(m_renderer)); q->registerBackendType<QClearBuffers, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::ClearBuffers, QClearBuffers> >::create(m_renderer)); - q->registerBackendType<QDispatchCompute>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::DispatchCompute, QDispatchCompute> >::create(m_renderer)); + q->registerBackendType<QDispatchCompute, true>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::DispatchCompute, QDispatchCompute> >::create(m_renderer)); q->registerBackendType<QFrustumCulling>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::FrustumCulling, QFrustumCulling> >::create(m_renderer)); q->registerBackendType<QLayerFilter>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::LayerFilterNode, QLayerFilter> >::create(m_renderer)); q->registerBackendType<QNoDraw>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::NoDraw, QNoDraw> >::create(m_renderer)); |