diff options
author | Mike Krus <mike.krus@kdab.com> | 2020-03-04 12:59:48 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2020-03-06 08:25:31 +0000 |
commit | 0d5a9ebc01a584ab4364e825a3d8a5dabd2ffd8b (patch) | |
tree | 14c9cf2ec23296160f1cb30ddcd5586e5fca159f /tests | |
parent | 76b39dd90f613f340066cc5a4ceed65ff778bdd4 (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.pro | 12 | ||||
-rw-r--r-- | tests/auto/render/aspect/tst_aspect.cpp | 189 | ||||
-rw-r--r-- | tests/auto/render/commons/commons.pri | 2 | ||||
-rw-r--r-- | tests/auto/render/commons/testaspect.cpp | 5 | ||||
-rw-r--r-- | tests/auto/render/commons/testaspect.h | 1 | ||||
-rw-r--r-- | tests/auto/render/commons/testrenderer.cpp | 4 | ||||
-rw-r--r-- | tests/auto/render/commons/testrenderer.h | 20 | ||||
-rw-r--r-- | tests/auto/render/opengl/renderer/renderer.pro | 3 | ||||
-rw-r--r-- | tests/auto/render/opengl/renderer/tst_renderer.cpp | 67 | ||||
-rw-r--r-- | tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp | 24 | ||||
-rw-r--r-- | tests/auto/render/render.pro | 1 | ||||
-rw-r--r-- | tests/benchmarks/render/jobs/tst_bench_jobs.cpp | 18 |
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() |