summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2020-03-04 12:59:48 +0000
committerMike Krus <mike.krus@kdab.com>2020-03-06 08:25:31 +0000
commit0d5a9ebc01a584ab4364e825a3d8a5dabd2ffd8b (patch)
tree14c9cf2ec23296160f1cb30ddcd5586e5fca159f /tests
parent76b39dd90f613f340066cc5a4ceed65ff778bdd4 (diff)
Move common job handling out of Renderer
Should be done in aspect as it's independent of the backend. Moved some tests to separate test using an empty renderer as other backends are likely to have different jobs. Change-Id: I2bec0939045acea7b91ecb1622ba18bf9f5db3c6 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/render/aspect/aspect.pro12
-rw-r--r--tests/auto/render/aspect/tst_aspect.cpp189
-rw-r--r--tests/auto/render/commons/commons.pri2
-rw-r--r--tests/auto/render/commons/testaspect.cpp5
-rw-r--r--tests/auto/render/commons/testaspect.h1
-rw-r--r--tests/auto/render/commons/testrenderer.cpp4
-rw-r--r--tests/auto/render/commons/testrenderer.h20
-rw-r--r--tests/auto/render/opengl/renderer/renderer.pro3
-rw-r--r--tests/auto/render/opengl/renderer/tst_renderer.cpp67
-rw-r--r--tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp24
-rw-r--r--tests/auto/render/render.pro1
-rw-r--r--tests/benchmarks/render/jobs/tst_bench_jobs.cpp18
12 files changed, 262 insertions, 84 deletions
diff --git a/tests/auto/render/aspect/aspect.pro b/tests/auto/render/aspect/aspect.pro
new file mode 100644
index 000000000..1e8a9c042
--- /dev/null
+++ b/tests/auto/render/aspect/aspect.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+
+TARGET = tst_aspect
+
+QT += 3dcore 3dcore-private 3drender 3drender-private testlib
+
+CONFIG += testcase
+
+SOURCES += tst_aspect.cpp
+
+CONFIG += useCommonTestAspect
+include(../commons/commons.pri)
diff --git a/tests/auto/render/aspect/tst_aspect.cpp b/tests/auto/render/aspect/tst_aspect.cpp
new file mode 100644
index 000000000..9bd5df698
--- /dev/null
+++ b/tests/auto/render/aspect/tst_aspect.cpp
@@ -0,0 +1,189 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QMutex>
+#include <QWaitCondition>
+#include <QThread>
+#include <Qt3DRender/qrenderaspect.h>
+#include <Qt3DRender/private/offscreensurfacehelper_p.h>
+#include <Qt3DRender/private/rendersettings_p.h>
+#include <Qt3DRender/private/viewportnode_p.h>
+#include <Qt3DRender/private/job_common_p.h>
+#include <Qt3DRender/private/entity_p.h>
+
+#include "testaspect.h"
+#include "testrenderer.h"
+
+class TestRendererAspect : public Qt3DRender::TestAspect {
+public:
+ TestRendererAspect(Qt3DCore::QEntity *root) : Qt3DRender::TestAspect(root) {
+ auto d = Qt3DCore::QAbstractAspectPrivate::get(this);
+ d->m_rootId = root->id();
+ }
+
+ void replaceWithTestRenderer() {
+ auto daspect = Qt3DRender::QRenderAspectPrivate::get(this);
+
+ auto sceneRoot = daspect->m_renderer->sceneRoot();
+ daspect->m_renderer->shutdown();
+ delete daspect->m_renderer;
+ daspect->m_renderer = new TestRenderer();
+ daspect->m_renderer->setNodeManagers(daspect->m_nodeManagers);
+ daspect->m_renderer->setOffscreenSurfaceHelper(daspect->m_offscreenHelper);
+ sceneRoot->setRenderer(daspect->m_renderer);
+ daspect->m_renderer->setSceneRoot(sceneRoot);
+
+ // Give it a setting instance
+ Qt3DRender::Render::RenderSettings settings;
+ // owned by FG manager
+ Qt3DRender::Render::ViewportNode *fgRoot = new Qt3DRender::Render::ViewportNode();
+ const Qt3DCore::QNodeId fgRootId = Qt3DCore::QNodeId::createId();
+
+ daspect->m_nodeManagers->frameGraphManager()->appendNode(fgRootId, fgRoot);
+ settings.setActiveFrameGraphId(fgRootId);
+
+ daspect->m_renderer->setSettings(&settings);
+ }
+};
+
+class tst_Aspect : public QObject
+{
+ Q_OBJECT
+public :
+ tst_Aspect() = default;
+ ~tst_Aspect() = default;
+
+private Q_SLOTS:
+
+ void checkJobs()
+ {
+ // GIVEN
+ Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
+ QScopedPointer<TestRendererAspect> aspect(new TestRendererAspect(rootEntity));
+ auto daspect = Qt3DRender::QRenderAspectPrivate::get(aspect.data());
+ daspect->m_renderAfterJobs = true;
+ aspect->onEngineStartup();
+
+ // replace with empty renderer
+ aspect->replaceWithTestRenderer();
+
+ // WHEN
+ daspect->m_renderer->markDirty(Qt3DRender::Render::AbstractRenderer::AllDirty, nullptr);
+
+ auto jobs = daspect->jobsToExecute(1.);
+// qDebug() << jobs.size();
+// for (auto job: jobs)
+// qDebug() << Qt3DCore::QAspectJobPrivate::get(job.data())->m_jobName;
+
+ // THEN -> AllDirty
+ QCOMPARE(jobs.size(),
+ 1 + // UpdateTreeEnabled
+ 1 + // UpdateTransform
+ 1 + // UpdateWorldBoundingVolume
+ 1 + // CalcBoundingVolume
+ 1 + // ExpandBoundingVolume
+ 1 + // SyncLoadingJobs
+ 1 + // UpdateSkinningPalette
+ 1 + // UpdateLevelOfDetail
+ 1 + // UpdateLayerEntity
+ 1 + // PickBoundingVolume
+ 1 + // RayCasting
+ 0 // No skeleton, no scene loading, no geometry, no buffers
+ );
+
+ // WHEN
+ daspect->m_renderer->clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ jobs = daspect->jobsToExecute(1.);
+
+ // THEN -> Nothing dirty
+ QCOMPARE(jobs.size(),
+ 1 + // SyncLoadingJobs
+ 1 + // UpdateSkinningPalette
+ 1 + // UpdateLevelOfDetail
+ 1 + // PickBoundingVolume
+ 1 + // RayCasting
+ 0 // No skeleton, no scene loading, no geometry, no buffers
+ );
+
+ // WHEN
+ daspect->m_renderer->clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ daspect->m_renderer->markDirty(Qt3DRender::Render::AbstractRenderer::EntityEnabledDirty, nullptr);
+ jobs = daspect->jobsToExecute(1.);
+
+ // THEN -> enabled dirty
+ QCOMPARE(jobs.size(),
+ 1 + // UpdateTreeEnabled
+ 1 + // SyncLoadingJobs
+ 1 + // UpdateSkinningPalette
+ 1 + // UpdateLevelOfDetail
+ 1 + // PickBoundingVolume
+ 1 + // RayCasting
+ 0 // No skeleton, no scene loading, no geometry, no buffers
+ );
+
+ // WHEN
+ daspect->m_renderer->clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ daspect->m_renderer->markDirty(Qt3DRender::Render::AbstractRenderer::TransformDirty, nullptr);
+ jobs = daspect->jobsToExecute(1.);
+
+ // THEN -> transform dirty
+ QCOMPARE(jobs.size(),
+ 1 + // UpdateTransform
+ 1 + // UpdateWorldBoundingVolume
+ 1 + // ExpandBoundingVolume
+ 1 + // SyncLoadingJobs
+ 1 + // UpdateSkinningPalette
+ 1 + // UpdateLevelOfDetail
+ 1 + // PickBoundingVolume
+ 1 + // RayCasting
+ 0 // No skeleton, no scene loading, no geometry, no buffers
+ );
+
+ // WHEN
+ daspect->m_renderer->clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
+ daspect->m_renderer->markDirty(Qt3DRender::Render::AbstractRenderer::GeometryDirty, nullptr);
+ jobs = daspect->jobsToExecute(1.);
+
+ // THEN -> geometry dirty
+ QCOMPARE(jobs.size(),
+ 1 + // CalcBoundingVolume
+ 1 + // ExpandBoundingVolume
+ 1 + // SyncLoadingJobs
+ 1 + // UpdateSkinningPalette
+ 1 + // UpdateLevelOfDetail
+ 1 + // PickBoundingVolume
+ 1 + // RayCasting
+ 0 // No skeleton, no scene loading, no geometry, no buffers
+ );
+ }
+};
+
+QTEST_MAIN(tst_Aspect)
+
+#include "tst_aspect.moc"
diff --git a/tests/auto/render/commons/commons.pri b/tests/auto/render/commons/commons.pri
index 6f4382a0b..1c6645f8d 100644
--- a/tests/auto/render/commons/commons.pri
+++ b/tests/auto/render/commons/commons.pri
@@ -6,7 +6,7 @@ HEADERS += \
useCommonTestAspect {
SOURCES += $$PWD/testaspect.cpp
- SOURCES += $$PWD/testaspect.h
+ HEADERS += $$PWD/testaspect.h
}
INCLUDEPATH += $$PWD
diff --git a/tests/auto/render/commons/testaspect.cpp b/tests/auto/render/commons/testaspect.cpp
index 87ffc56d7..086d79bb6 100644
--- a/tests/auto/render/commons/testaspect.cpp
+++ b/tests/auto/render/commons/testaspect.cpp
@@ -95,6 +95,11 @@ Render::NodeManagers *TestAspect::nodeManagers() const
return d_func()->m_renderer->nodeManagers();
}
+void TestAspect::onEngineStartup()
+{
+ QRenderAspect::onEngineStartup();
+}
+
void TestAspect::onRegistered()
{
QRenderAspect::onRegistered();
diff --git a/tests/auto/render/commons/testaspect.h b/tests/auto/render/commons/testaspect.h
index a0da98721..dfbe78fbd 100644
--- a/tests/auto/render/commons/testaspect.h
+++ b/tests/auto/render/commons/testaspect.h
@@ -56,6 +56,7 @@ public:
Qt3DRender::Render::NodeManagers *nodeManagers() const;
+ void onEngineStartup();
void onRegistered();
void onUnregistered();
diff --git a/tests/auto/render/commons/testrenderer.cpp b/tests/auto/render/commons/testrenderer.cpp
index 5a36fecf2..45713e9b9 100644
--- a/tests/auto/render/commons/testrenderer.cpp
+++ b/tests/auto/render/commons/testrenderer.cpp
@@ -38,7 +38,7 @@ TestRenderer::~TestRenderer()
void TestRenderer::markDirty(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes, Qt3DRender::Render::BackendNode *node)
{
- Q_UNUSED(node);
+ Q_UNUSED(node)
m_changes |= changes;
}
@@ -50,7 +50,7 @@ Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet TestRenderer::dirtyBit
#if defined(QT_BUILD_INTERNAL)
void TestRenderer::clearDirtyBits(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes)
{
- m_changes &= changes;
+ m_changes &= ~changes;
}
#endif
diff --git a/tests/auto/render/commons/testrenderer.h b/tests/auto/render/commons/testrenderer.h
index 7b3e0a387..8d5d87a98 100644
--- a/tests/auto/render/commons/testrenderer.h
+++ b/tests/auto/render/commons/testrenderer.h
@@ -43,15 +43,17 @@ public:
void dumpInfo() const override {}
API api() const override { return AbstractRenderer::OpenGL; }
qint64 time() const override { return 0; }
- void setTime(qint64 time) override { Q_UNUSED(time); }
+ void setTime(qint64 time) override { Q_UNUSED(time) }
+ void setAspect(Qt3DRender::QRenderAspect *aspect) override { m_aspect = aspect; }
void setNodeManagers(Qt3DRender::Render::NodeManagers *m) override
{
m_managers = m;
m_resourceAccessor.reset(new Qt3DRender::Render::ResourceAccessor(this, m_managers));
}
- void setServices(Qt3DCore::QServiceLocator *services) override { Q_UNUSED(services); }
- void setSurfaceExposed(bool exposed) override { Q_UNUSED(exposed); }
+ void setServices(Qt3DCore::QServiceLocator *services) override { Q_UNUSED(services) }
+ void setSurfaceExposed(bool exposed) override { Q_UNUSED(exposed) }
void setJobsInLastFrame(int jobsInLastFrame) override { Q_UNUSED(jobsInLastFrame) }
+ Qt3DRender::QRenderAspect *aspect() const override { return m_aspect; }
Qt3DRender::Render::NodeManagers *nodeManagers() const override { return m_managers; }
Qt3DCore::QServiceLocator *services() const override { return nullptr; }
void initialize() override {}
@@ -66,17 +68,13 @@ public:
void jobsDone(Qt3DCore::QAspectManager *manager) override { Q_UNUSED(manager) }
QVector<Qt3DCore::QAspectJobPtr> preRenderingJobs() override { return QVector<Qt3DCore::QAspectJobPtr>(); }
QVector<Qt3DCore::QAspectJobPtr> renderBinJobs() override { return QVector<Qt3DCore::QAspectJobPtr>(); }
- Qt3DCore::QAspectJobPtr pickBoundingVolumeJob() override { return Qt3DCore::QAspectJobPtr(); }
- Qt3DCore::QAspectJobPtr rayCastingJob() override { return Qt3DCore::QAspectJobPtr(); }
- Qt3DCore::QAspectJobPtr syncLoadingJobs() override { return Qt3DCore::QAspectJobPtr(); }
- Qt3DCore::QAspectJobPtr expandBoundingVolumeJob() override { return Qt3DCore::QAspectJobPtr(); }
void setSceneRoot(Qt3DRender::Render::Entity *root) override { Q_UNUSED(root) }
Qt3DRender::Render::Entity *sceneRoot() const override { return nullptr; }
Qt3DRender::Render::FrameGraphNode *frameGraphRoot() const override { return nullptr; }
Qt3DCore::QAbstractFrameAdvanceService *frameAdvanceService() const override { return nullptr; }
- void registerEventFilter(Qt3DCore::QEventFilterService *service) override { Q_UNUSED(service) }
- void setSettings(Qt3DRender::Render::RenderSettings *settings) override { Q_UNUSED(settings) }
- Qt3DRender::Render::RenderSettings *settings() const override { return nullptr; }
+ void setSettings(Qt3DRender::Render::RenderSettings *settings) override { m_settings = settings; }
+ Qt3DRender::Render::RenderSettings *settings() const override { return m_settings; }
+ void setPendingEvents(const QList<QPair<QObject *, QMouseEvent> > &, const QList<QKeyEvent> &) override { }
void markDirty(Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet changes, Qt3DRender::Render::BackendNode *node) override;
Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet dirtyBits() override;
@@ -99,8 +97,10 @@ public:
protected:
Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet m_changes;
+ Qt3DRender::QRenderAspect *m_aspect = nullptr;
Qt3DRender::Render::NodeManagers *m_managers = nullptr;
QSharedPointer<Qt3DRender::Render::ResourceAccessor> m_resourceAccessor;
+ Qt3DRender::Render::RenderSettings *m_settings = nullptr;
};
QT_END_NAMESPACE
diff --git a/tests/auto/render/opengl/renderer/renderer.pro b/tests/auto/render/opengl/renderer/renderer.pro
index d481c7b9e..a4a459655 100644
--- a/tests/auto/render/opengl/renderer/renderer.pro
+++ b/tests/auto/render/opengl/renderer/renderer.pro
@@ -10,3 +10,6 @@ SOURCES += tst_renderer.cpp
# Link Against OpenGL Renderer Plugin
include(../opengl_render_plugin.pri)
+
+CONFIG += useCommonTestAspect
+include(../../commons/commons.pri)
diff --git a/tests/auto/render/opengl/renderer/tst_renderer.cpp b/tests/auto/render/opengl/renderer/tst_renderer.cpp
index db7a37af1..abb1aee86 100644
--- a/tests/auto/render/opengl/renderer/tst_renderer.cpp
+++ b/tests/auto/render/opengl/renderer/tst_renderer.cpp
@@ -30,12 +30,15 @@
#include <QMutex>
#include <QWaitCondition>
#include <QThread>
-#include <Qt3DRender/private/viewportnode_p.h>
#include <renderer_p.h>
#include <renderview_p.h>
#include <renderviewbuilder_p.h>
-#include <Qt3DRender/private/offscreensurfacehelper_p.h>
#include <renderqueue_p.h>
+#include <Qt3DRender/private/viewportnode_p.h>
+#include <Qt3DRender/private/offscreensurfacehelper_p.h>
+#include <Qt3DRender/private/qrenderaspect_p.h>
+
+#include "testaspect.h"
class tst_Renderer : public QObject
{
@@ -72,19 +75,14 @@ private Q_SLOTS:
QVector<Qt3DCore::QAspectJobPtr> jobs = renderer.preRenderingJobs();
// THEN
- QCOMPARE(jobs.size(),
- 1 + // PickBoundingVolumeJob
- 1); // RayCastingJob
+ QCOMPARE(jobs.size(), 0);
// WHEN
renderer.m_sendBufferCaptureJob->addRequest({Qt3DCore::QNodeId(), {}});
jobs = renderer.preRenderingJobs();
// THEN
- QCOMPARE(jobs.size(),
- 1 + // PickBoundingVolumeJob
- 1 + // RayCastingJob
- 1); // SendBufferCaptureJob
+ QCOMPARE(jobs.size(), 1); // SendBufferCaptureJob
// Note: pending render buffer captures are only cleared when the job is run
// WHEN
@@ -93,8 +91,6 @@ private Q_SLOTS:
// THEN
QCOMPARE(jobs.size(),
- 1 + // PickBoundingVolumeJob
- 1 + // RayCastingJob
1 + // SendBufferCaptureJob
1); // SendSetFenceHandlesJob
// Note: pending set fence handles are only cleared when the job is run
@@ -106,8 +102,12 @@ private Q_SLOTS:
void checkRenderBinJobs()
{
// GIVEN
+ Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
+ QScopedPointer<Qt3DRender::TestAspect> aspect(new Qt3DRender::TestAspect(rootEntity));
+ auto daspect = Qt3DRender::QRenderAspectPrivate::get(aspect.data());
+
Qt3DRender::Render::NodeManagers nodeManagers;
- Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous);
+ auto &renderer = *(static_cast<Qt3DRender::Render::OpenGL::Renderer *>(daspect->m_renderer));
Qt3DRender::Render::OpenGL::RenderQueue *renderQueue = renderer.renderQueue();
Qt3DRender::Render::OffscreenSurfaceHelper offscreenHelper(&renderer);
Qt3DRender::Render::RenderSettings settings;
@@ -156,21 +156,11 @@ private Q_SLOTS:
// (Renderer is not initialized so FilterCompatibleTechniqueJob
// and ShaderGathererJob are not added here)
QCOMPARE(jobs.size(),
- 1 + // EntityEnabledDirty
- 1 + // WorldTransformJob
- 1 + // UpdateWorldBoundingVolume
1 + // UpdateShaderDataTransform
- 1 + // ExpandBoundingVolumeJob
- 1 + // CalculateBoundingVolumeJob
- 1 + // UpdateMeshTriangleListJob
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
1 + // BufferGathererJob
1 + // TexturesGathererJob
- 1 + // UpdateEntityLayersJob
1 + // LightGathererJob
1 + // CacheLightJob
1 + // RenderableEntityFilterJob
@@ -191,11 +181,8 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
singleRenderViewJobCount +
singleRenderViewCommandRebuildJobCount +
renderViewBuilderMaterialCacheJobCount +
@@ -211,11 +198,8 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
singleRenderViewJobCount +
singleRenderViewCommandRebuildJobCount +
renderViewBuilderMaterialCacheJobCount +
@@ -230,12 +214,8 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
- 1 + // EntityEnabledDirty
singleRenderViewJobCount +
layerCacheJobCount);
@@ -248,15 +228,9 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
- 1 + // WorldTransformJob
- 1 + // UpdateWorldBoundingVolume
1 + // UpdateShaderDataTransform
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
- 1 + // ExpandBoundingVolumeJob
singleRenderViewJobCount);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
@@ -268,11 +242,8 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
singleRenderViewJobCount +
singleRenderViewCommandRebuildJobCount +
renderViewBuilderMaterialCacheJobCount);
@@ -286,14 +257,8 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
- 1 + // CalculateBoundingVolumeJob
- 1 + // UpdateMeshTriangleListJob
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
- 1 + // ExpandBoundingVolumeJob
1 + // RenderableEntityFilterPtr
1 + // SyncRenderableEntities
singleRenderViewCommandRebuildJobCount +
@@ -308,13 +273,8 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
- 1 + // updateSkinningPaletteJob
- 1 + // SyncLoadingJobs
- 1 + // CalculateBoundingVolumeJob
- 1 + // UpdateMeshTriangleListJob
1 + // BufferGathererJob
singleRenderViewJobCount);
@@ -327,12 +287,9 @@ private Q_SLOTS:
// THEN (level
QCOMPARE(jobs.size(),
- 1 + // updateLevelOfDetailJob
1 + // cleanupJob
1 + // VAOGatherer
1 + // TexturesGathererJob
- 1 + // updateSkinningPaletteJob
- 1 + // SyncTexturesGathererJob
singleRenderViewJobCount);
renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty);
diff --git a/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp b/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp
index fe534e243..f0d02d63a 100644
--- a/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp
+++ b/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp
@@ -53,6 +53,7 @@
#include <Qt3DRender/private/nodemanagers_p.h>
#include <Qt3DRender/private/managers_p.h>
#include <Qt3DRender/private/filterentitybycomponentjob_p.h>
+#include <Qt3DRender/private/qrenderaspect_p.h>
QT_BEGIN_NAMESPACE
@@ -290,6 +291,11 @@ private Q_SLOTS:
Qt3DRender::QClearBuffers *clearBuffer = new Qt3DRender::QClearBuffers(viewport);
Qt3DRender::TestAspect testAspect(buildSimpleScene(viewport));
+ auto expandBVJob = Qt3DRender::QRenderAspectPrivate::get(&testAspect)->m_expandBoundingVolumeJob;
+ auto wordTransformJob = Qt3DRender::QRenderAspectPrivate::get(&testAspect)->m_worldTransformJob;
+ auto updateTreeEnabledJob = Qt3DRender::QRenderAspectPrivate::get(&testAspect)->m_updateTreeEnabledJob;
+ auto updateEntityLayerJob = Qt3DRender::QRenderAspectPrivate::get(&testAspect)->m_updateEntityLayersJob;
+
// THEN
Qt3DRender::Render::FrameGraphNode *leafNode = testAspect.nodeManagers()->frameGraphManager()->lookupNode(clearBuffer->id());
QVERIFY(leafNode != nullptr);
@@ -304,7 +310,6 @@ private Q_SLOTS:
// Step 1
QCOMPARE(renderViewBuilder.renderViewJob()->dependencies().size(), 1); // Depends upon skinning palette update
-
// Step 2
QCOMPARE(renderViewBuilder.syncRenderViewPostInitializationJob()->dependencies().size(), 1);
QCOMPARE(renderViewBuilder.syncRenderViewPostInitializationJob()->dependencies().constFirst().toStrongRef().data(),
@@ -316,7 +321,7 @@ private Q_SLOTS:
QCOMPARE(renderViewBuilder.filterProximityJob()->dependencies().size(), 2);
QVERIFY(renderViewBuilder.filterProximityJob()->dependencies().contains(renderViewBuilder.syncRenderViewPostInitializationJob()));
- QVERIFY(renderViewBuilder.filterProximityJob()->dependencies().contains(testAspect.renderer()->expandBoundingVolumeJob()));
+ QVERIFY(renderViewBuilder.filterProximityJob()->dependencies().contains(expandBVJob));
QCOMPARE(renderViewBuilder.setClearDrawBufferIndexJob()->dependencies().size(), 1);
QCOMPARE(renderViewBuilder.setClearDrawBufferIndexJob()->dependencies().constFirst().toStrongRef().data(),
@@ -324,14 +329,13 @@ private Q_SLOTS:
QCOMPARE(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().size(), 3);
QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(renderViewBuilder.syncRenderViewPostInitializationJob()));
- QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(testAspect.renderer()->updateWorldTransformJob()));
+ QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(wordTransformJob));
QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(testAspect.renderer()->updateShaderDataTransformJob()));
// Step 4
QCOMPARE(renderViewBuilder.frustumCullingJob()->dependencies().size(), 2);
QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(renderViewBuilder.syncPreFrustumCullingJob()));
- QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(testAspect.renderer()->expandBoundingVolumeJob()));
-
+ QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(expandBVJob));
QCOMPARE(renderViewBuilder.syncRenderViewPreCommandUpdateJob()->dependencies().size(), renderViewBuilder.materialGathererJobs().size() + 7);
QVERIFY(renderViewBuilder.syncRenderViewPreCommandUpdateJob()->dependencies().contains(renderViewBuilder.syncRenderViewPostInitializationJob()));
@@ -374,16 +378,16 @@ private Q_SLOTS:
// Step 3
QCOMPARE(renderViewBuilder.filterEntityByLayerJob()->dependencies().size(), 3);
- QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(testAspect.renderer()->updateEntityLayersJob()));
+ QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(updateEntityLayerJob));
QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(renderViewBuilder.syncRenderViewPostInitializationJob()));
- QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(testAspect.renderer()->updateTreeEnabledJob()));
+ QVERIFY(renderViewBuilder.filterEntityByLayerJob()->dependencies().contains(updateTreeEnabledJob));
QCOMPARE(renderViewBuilder.syncFilterEntityByLayerJob()->dependencies().size(), 1);
QVERIFY(renderViewBuilder.syncFilterEntityByLayerJob()->dependencies().contains(renderViewBuilder.filterEntityByLayerJob()));
QCOMPARE(renderViewBuilder.filterProximityJob()->dependencies().size(), 2);
QVERIFY(renderViewBuilder.filterProximityJob()->dependencies().contains(renderViewBuilder.syncRenderViewPostInitializationJob()));
- QVERIFY(renderViewBuilder.filterProximityJob()->dependencies().contains(testAspect.renderer()->expandBoundingVolumeJob()));
+ QVERIFY(renderViewBuilder.filterProximityJob()->dependencies().contains(expandBVJob));
QCOMPARE(renderViewBuilder.setClearDrawBufferIndexJob()->dependencies().size(), 1);
QCOMPARE(renderViewBuilder.setClearDrawBufferIndexJob()->dependencies().constFirst().toStrongRef().data(),
@@ -391,7 +395,7 @@ private Q_SLOTS:
QCOMPARE(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().size(), 3);
QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(renderViewBuilder.syncRenderViewPostInitializationJob()));
- QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(testAspect.renderer()->updateWorldTransformJob()));
+ QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(wordTransformJob));
QVERIFY(renderViewBuilder.syncPreFrustumCullingJob()->dependencies().contains(testAspect.renderer()->updateShaderDataTransformJob()));
for (const auto &materialGatherer : renderViewBuilder.materialGathererJobs()) {
@@ -404,7 +408,7 @@ private Q_SLOTS:
// Step 4
QCOMPARE(renderViewBuilder.frustumCullingJob()->dependencies().size(), 2);
QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(renderViewBuilder.syncPreFrustumCullingJob()));
- QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(testAspect.renderer()->expandBoundingVolumeJob()));
+ QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(expandBVJob));
QVERIFY(renderViewBuilder.syncRenderViewPreCommandUpdateJob()->dependencies().contains(renderViewBuilder.syncRenderViewPostInitializationJob()));
QVERIFY(renderViewBuilder.syncRenderViewPreCommandUpdateJob()->dependencies().contains(renderViewBuilder.syncFilterEntityByLayerJob()));
diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro
index 14fc74883..f8011b2cf 100644
--- a/tests/auto/render/render.pro
+++ b/tests/auto/render/render.pro
@@ -2,6 +2,7 @@ TEMPLATE = subdirs
qtConfig(private_tests) {
SUBDIRS += \
+ aspect \
entity \
renderpass \
shader \
diff --git a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp
index 85b5e8c89..57bd7745d 100644
--- a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp
+++ b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp
@@ -87,20 +87,26 @@ namespace Qt3DRender {
QVector<Qt3DCore::QAspectJobPtr> worldTransformJob()
{
- static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer)->m_worldTransformJob->setRoot(d_func()->m_renderer->sceneRoot());
- return QVector<Qt3DCore::QAspectJobPtr>() << static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer)->m_worldTransformJob;
+ auto renderer = static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer);
+ auto daspect = Qt3DRender::QRenderAspectPrivate::get(renderer->aspect());
+ daspect->m_worldTransformJob->setRoot(d_func()->m_renderer->sceneRoot());
+ return QVector<Qt3DCore::QAspectJobPtr>() << daspect->m_worldTransformJob;
}
QVector<Qt3DCore::QAspectJobPtr> updateBoundingJob()
{
- static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer)->m_updateWorldBoundingVolumeJob->setManager(d_func()->m_renderer->nodeManagers()->renderNodesManager());
- return QVector<Qt3DCore::QAspectJobPtr>() << static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer)->m_updateWorldBoundingVolumeJob;
+ auto renderer = static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer);
+ auto daspect = Qt3DRender::QRenderAspectPrivate::get(renderer->aspect());
+ daspect->m_updateWorldBoundingVolumeJob->setManager(d_func()->m_renderer->nodeManagers()->renderNodesManager());
+ return QVector<Qt3DCore::QAspectJobPtr>() << daspect->m_updateWorldBoundingVolumeJob;
}
QVector<Qt3DCore::QAspectJobPtr> calculateBoundingVolumeJob()
{
- static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer)->m_calculateBoundingVolumeJob->setRoot(d_func()->m_renderer->sceneRoot());
- return QVector<Qt3DCore::QAspectJobPtr>() << static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer)->m_calculateBoundingVolumeJob;
+ auto renderer = static_cast<Render::OpenGL::Renderer *>(d_func()->m_renderer);
+ auto daspect = Qt3DRender::QRenderAspectPrivate::get(renderer->aspect());
+ daspect->m_calculateBoundingVolumeJob->setRoot(d_func()->m_renderer->sceneRoot());
+ return QVector<Qt3DCore::QAspectJobPtr>() << daspect->m_calculateBoundingVolumeJob;
}
QVector<Qt3DCore::QAspectJobPtr> framePreparationJob()