diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2018-02-20 15:21:13 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-02-28 10:44:49 +0000 |
commit | 3dff7c204da1d834629544b54b9f6efaafe165e2 (patch) | |
tree | f8529c267fd3a8ffa2f7e293682bdea219fe2897 /tests | |
parent | a43cf3726679704cc8c4c5a405c60c6f1c4fcfce (diff) |
Revert "Keep rendering in sync with aspect jobs by adding barriers"
This reverts commit 46319648436814afb5a77755dde6681e304befaf.
We want to be able to render one set of RenderViews for frame n while
concurrently building RenderViews for frame n + 1. The reverted commit removed
that behavior which reduced the CPU time available to prepare a frame.
This would cause on some scenes a failure to meet the ~10ms budget we have to
prepare a frame. This is therefore a regression. The root cause behind this
regression is that a job cannot be executed until all the jobs which have been
previously launched have completed.
The proposed solution would be to instead add an OpenGL command thread that
can be used to load graphics resources required for the RenderViews directly
when required. This would in turn allow to cache RenderViews and keep the
concurrent behavior of RenderView submission and creation.
With that goal in mind, the following patches will be rebased and updated
https://codereview.qt-project.org/#/c/189309/
https://codereview.qt-project.org/#/c/189310/
Change-Id: I4879047c45986a0e615e3aef7b7352f82a04a9da
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests')
8 files changed, 71 insertions, 255 deletions
diff --git a/tests/auto/render/commons/testrenderer.h b/tests/auto/render/commons/testrenderer.h index 9624f129a..b3f602dc2 100644 --- a/tests/auto/render/commons/testrenderer.h +++ b/tests/auto/render/commons/testrenderer.h @@ -52,7 +52,7 @@ public: void shutdown() override {} void releaseGraphicsResources() override {} void render() override {} - void doRender() override {} + void doRender(bool scene3dBlocking = false) override { Q_UNUSED(scene3dBlocking); } void cleanGraphicsResources() override {} bool isRunning() const override { return true; } bool shouldRender() override { return true; } @@ -60,7 +60,7 @@ public: 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 syncSkeletonLoadingJob() override { return Qt3DCore::QAspectJobPtr(); } + Qt3DCore::QAspectJobPtr syncTextureLoadingJob() override { return Qt3DCore::QAspectJobPtr(); } Qt3DCore::QAspectJobPtr expandBoundingVolumeJob() override { return Qt3DCore::QAspectJobPtr(); } void setSceneRoot(Qt3DCore::QBackendNodeFactory *factory, Qt3DRender::Render::Entity *root) override { Q_UNUSED(factory); Q_UNUSED(root); } Qt3DRender::Render::Entity *sceneRoot() const override { return nullptr; } @@ -81,12 +81,6 @@ public: void setOffscreenSurfaceHelper(Qt3DRender::Render::OffscreenSurfaceHelper *helper) override; QSurfaceFormat format() override; - void lockSurfaceAndRender() override {} - bool releaseRendererAndRequestPromiseToRender() override { return true; } - bool waitForRenderJobs() override { return true; } - bool tryWaitForRenderJobs(int timeout) override { Q_UNUSED(timeout); return true; } - void abortRenderJobs() override {} - protected: Qt3DRender::Render::AbstractRenderer::BackendNodeDirtySet m_changes; Qt3DRender::Render::NodeManagers *m_managers; diff --git a/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp b/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp index 803d57fa9..4d4a08a34 100644 --- a/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp +++ b/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp @@ -93,8 +93,7 @@ public: { renderer()->setOpenGLContext(&m_glContext); d_func()->m_renderer->initialize(); - renderer()->graphicsContext()->makeCurrent(m_window.data()); - renderer()->graphicsContext()->beginDrawing(); + renderer()->graphicsContext()->beginDrawing(m_window.data()); } Render::Renderer *renderer() const diff --git a/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp b/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp index e61fdf6e5..d07ec9914 100644 --- a/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp +++ b/tests/auto/render/geometryrenderer/tst_geometryrenderer.cpp @@ -30,7 +30,6 @@ #include <qbackendnodetester.h> #include <Qt3DRender/private/geometryrenderer_p.h> #include <Qt3DRender/private/geometryrenderermanager_p.h> -#include <Qt3DRender/private/nodemanagers_p.h> #include <Qt3DRender/qgeometry.h> #include <Qt3DRender/qgeometryfactory.h> #include <Qt3DCore/qpropertyupdatedchange.h> @@ -187,8 +186,6 @@ private Q_SLOTS: // GIVEN Qt3DRender::Render::GeometryRenderer renderGeometryRenderer; TestRenderer renderer; - Qt3DRender::Render::NodeManagers nodeManagers; - renderGeometryRenderer.setRenderer(&renderer); QVERIFY(!renderGeometryRenderer.isDirty()); diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro index 4045b577a..6cb9aefcf 100644 --- a/tests/auto/render/render.pro +++ b/tests/auto/render/render.pro @@ -110,8 +110,7 @@ qtConfig(private_tests) { raycaster \ qscreenraycaster \ raycastingjob \ - qcamera \ - renderbarrierjob + qcamera QT_FOR_CONFIG = 3dcore-private # TO DO: These could be restored to be executed in all cases diff --git a/tests/auto/render/renderbarrierjob/renderbarrierjob.pro b/tests/auto/render/renderbarrierjob/renderbarrierjob.pro deleted file mode 100644 index 5a988144f..000000000 --- a/tests/auto/render/renderbarrierjob/renderbarrierjob.pro +++ /dev/null @@ -1,9 +0,0 @@ -TEMPLATE = app - -TARGET = tst_renderbarrierjob - -QT += 3dcore 3dcore-private 3drender 3drender-private testlib - -CONFIG += testcase - -SOURCES += tst_renderbarrierjob.cpp diff --git a/tests/auto/render/renderbarrierjob/tst_renderbarrierjob.cpp b/tests/auto/render/renderbarrierjob/tst_renderbarrierjob.cpp deleted file mode 100644 index e3b49edd4..000000000 --- a/tests/auto/render/renderbarrierjob/tst_renderbarrierjob.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** 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/private/renderbarrierjob_p.h> -#include <Qt3DRender/private/job_common_p.h> - -class TestRenderThread : public QThread -{ -public: - TestRenderThread(Qt3DRender::Render::RenderBarrierJobPtr barrier) - : m_barrier(barrier) - {} - - void run() override - { - m_started.store(1); - m_writeSemaphore.release(); - m_readSemaphore.acquire(); - - m_barrier->allowToProceed(); - m_released.store(1); - m_writeSemaphore.release(); - m_readSemaphore.acquire(); - - m_barrier->waitForDependencies(); - m_completed.store(1); - } - - Qt3DRender::Render::RenderBarrierJobPtr m_barrier; - QSemaphore m_writeSemaphore; - QSemaphore m_readSemaphore; - - QAtomicInt m_started; - QAtomicInt m_released; - QAtomicInt m_completed; -}; - -class tst_RenderBarrierJob : public QObject -{ - Q_OBJECT -public : - tst_RenderBarrierJob() {} - ~tst_RenderBarrierJob() {} - -private Q_SLOTS: - void shouldControlRenderThread() - { - // GIVEN a barrier (of any type) - auto barrier = Qt3DRender::Render::RenderBarrierJobPtr::create(Qt3DRender::Render::JobTypes::BeginDrawingBarrier); - TestRenderThread testThread(barrier); - - // THEN - QVERIFY(testThread.m_started.load() == 0); - QVERIFY(testThread.m_released.load() == 0); - QVERIFY(testThread.m_completed.load() == 0); - - // WHEN - testThread.start(); - testThread.m_writeSemaphore.acquire(); - - // THEN thread should have started - QVERIFY(testThread.m_started.load() == 1); - QVERIFY(testThread.m_released.load() == 0); - QVERIFY(testThread.m_completed.load() == 0); - testThread.m_readSemaphore.release(); - - // WHEN - testThread.m_writeSemaphore.acquire(); - - // THEN job should be released - QVERIFY(testThread.m_started.load() == 1); - QVERIFY(testThread.m_released.load() == 1); - QVERIFY(testThread.m_completed.load() == 0); - testThread.m_readSemaphore.release(); - - // WHEN job runs and we wait for thread - barrier->run(); - testThread.wait(); - - // THEN thread should be finished - QVERIFY(testThread.m_started.load() == 1); - QVERIFY(testThread.m_released.load() == 1); - QVERIFY(testThread.m_completed.load() == 1); - } -}; - -QTEST_MAIN(tst_RenderBarrierJob) - -#include "tst_renderbarrierjob.moc" diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp index b941a2ac4..27708c1b9 100644 --- a/tests/auto/render/renderer/tst_renderer.cpp +++ b/tests/auto/render/renderer/tst_renderer.cpp @@ -34,9 +34,6 @@ #include <Qt3DRender/private/viewportnode_p.h> #include <Qt3DRender/private/renderview_p.h> #include <Qt3DRender/private/renderviewbuilder_p.h> -#include <Qt3DRender/private/offscreensurfacehelper_p.h> -#include <Qt3DRender/private/loadtexturedatajob_p.h> -#include <Qt3DRender/private/renderbarrierjob_p.h> class tst_Renderer : public QObject { @@ -66,62 +63,46 @@ private Q_SLOTS: // NOTE: FilterCompatibleTechniqueJob and ShaderGathererJob cannot run because the context // is not initialized in this test - const int renderBarrierJobCount = 5; - // Barriers: readRenderQueueSize - // beginDrawing - // updateGLResources - // prepareCommandSubmission - // endDrawing - - const int renderViewJobCount = 13 + 1 * Qt3DRender::Render::RenderViewBuilder::optimalJobCount(); + const int singleRenderViewJobCount = 11 + 1 * Qt3DRender::Render::RenderViewBuilder::optimalJobCount(); // RenderViewBuilder renderViewJob, // renderableEntityFilterJob, // lightGatherJob, // computableEntityFilterJob, // syncRenderViewInitializationJob, - // filterEntityByLayerJob, - // syncFilterEntityByLayerJob, // syncFrustumCullingJob, // filterProximityJob, // setClearDrawBufferIndexJob, // frustumCullingJob, // syncRenderCommandBuldingJob, // syncRenderViewCommandBuilderJob - // n * RenderViewCommandBuildJobs - - const int flagIndependentRendererJobCount = 6; - // Flag independent: updateLevelOfDetailJob - // cleanupJob - // sendRenderCaptureJob - // sendBufferCaptureJob - // VAOGatherer - // updateSkinningPaletteJob - - const int flagIndependetRenderViewJobCount = renderViewJobCount - 2; - // Cached: filterEntityByLayerJob, - // syncFilterEntityByLayerJob, + // n * (RenderViewCommandBuildJobs) - - // WHEN (nothing dirty, no buffers) + // WHEN (nothing dirty, no buffers, no layers to be rebuilt, no materials to be rebuilt) QVector<Qt3DCore::QAspectJobPtr> jobs = renderer.renderBinJobs(); - // THEN + // THEN (level QCOMPARE(jobs.size(), - flagIndependetRenderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount); + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendRenderCaptureJob + 1 + // sendBufferCaptureJob + 1 + // VAOGatherer + 1 + // updateSkinningPaletteJob + singleRenderViewJobCount); // Only valid for the first call to renderBinJobs(), since subsequent calls won't have the renderqueue reset + // WHEN renderer.markDirty(Qt3DRender::Render::AbstractRenderer::EntityEnabledDirty, nullptr); jobs = renderer.renderBinJobs(); - // THEN + // THEN (level QCOMPARE(jobs.size(), - flagIndependetRenderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount + - 1 + // filterEntityByLayerJob - 1 + // syncFilterEntityByLayerJob + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendRenderCaptureJob + 1 + // sendBufferCaptureJob + 1 + // VAOGatherer + 1 + // updateSkinningPaletteJob 1); // EntityEnabledDirty renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); @@ -130,14 +111,17 @@ private Q_SLOTS: renderer.markDirty(Qt3DRender::Render::AbstractRenderer::TransformDirty, nullptr); jobs = renderer.renderBinJobs(); - // THEN + // THEN (level QCOMPARE(jobs.size(), - flagIndependetRenderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount + + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendRenderCaptureJob + 1 + // sendBufferCaptureJob + 1 + // VAOGatherer 1 + // WorldTransformJob 1 + // UpdateWorldBoundingVolume 1 + // UpdateShaderDataTransform + 1 + // updateSkinningPaletteJob 1); // ExpandBoundingVolumeJob renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); @@ -146,13 +130,16 @@ private Q_SLOTS: renderer.markDirty(Qt3DRender::Render::AbstractRenderer::GeometryDirty, nullptr); jobs = renderer.renderBinJobs(); - // THEN + // THEN (level QCOMPARE(jobs.size(), - flagIndependetRenderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount + + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendRenderCaptureJob + 1 + // sendBufferCaptureJob + 1 + // VAOGatherer 1 + // CalculateBoundingVolumeJob 1 + // UpdateMeshTriangleListJob + 1 + // updateSkinningPaletteJob 1); // ExpandBoundingVolumeJob renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); @@ -161,11 +148,14 @@ private Q_SLOTS: renderer.markDirty(Qt3DRender::Render::AbstractRenderer::BuffersDirty, nullptr); jobs = renderer.renderBinJobs(); - // THEN + // THEN (level QCOMPARE(jobs.size(), - flagIndependetRenderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount + + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendRenderCaptureJob + 1 + // sendBufferCaptureJob + 1 + // VAOGatherer + 1 + // updateSkinningPaletteJob 1); // BufferGathererJob renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); @@ -174,26 +164,16 @@ private Q_SLOTS: renderer.markDirty(Qt3DRender::Render::AbstractRenderer::TexturesDirty, nullptr); jobs = renderer.renderBinJobs(); - // THEN + // THEN (level QCOMPARE(jobs.size(), - flagIndependetRenderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount + - 1 + // LoadTextureDataJob - 1); // TexturesGathererJob - - renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); - - // WHEN - renderer.markDirty(Qt3DRender::Render::AbstractRenderer::SkeletonDataDirty, nullptr); - jobs = renderer.renderBinJobs(); - - // THEN - QCOMPARE(jobs.size(), - flagIndependetRenderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount + - 1); // SyncSkeletonLoadingJob + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendRenderCaptureJob + 1 + // sendBufferCaptureJob + 1 + // VAOGatherer + 1 + // TexturesGathererJob + 1 + // updateSkinningPaletteJob + 1); // SyncTexturesGathererJob renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); @@ -201,47 +181,30 @@ private Q_SLOTS: renderer.markDirty(Qt3DRender::Render::AbstractRenderer::AllDirty, nullptr); jobs = renderer.renderBinJobs(); - // THEN + // THEN (Renderer is not initialized so FilterCompatibleTechniqueJob + // and ShaderGathererJob are not added here) QCOMPARE(jobs.size(), - renderViewJobCount + - renderBarrierJobCount + - flagIndependentRendererJobCount + - 1 + // UpdateTreeEnablee + 1 + // EntityEnabledDirty 1 + // WorldTransformJob 1 + // UpdateWorldBoundingVolume 1 + // UpdateShaderDataTransform + 1 + // ExpandBoundingVolumeJob 1 + // CalculateBoundingVolumeJob 1 + // UpdateMeshTriangleListJob - 1 + // ExpandBoundingVolumeJob + 1 + // updateSkinningPaletteJob + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendRenderCaptureJob + 1 + // sendBufferCaptureJob + 1 + // VAOGatherer 1 + // BufferGathererJob - 1 + // LoadTextureDataJob 1 + // TexturesGathererJob - 1 + // SyncSkeletonLoadingJob - 1 + // FilterCompatibleTechniqueJob - 1 + // ShaderGathererJob - Qt3DRender::Render::RenderViewBuilder::optimalJobCount() + // MaterialGathererJobs - 1); // syncMaterialGathererJob + 1 // SyncTextureLoadingJob + ); renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); - } - - void checkRenderBarrierJobDependencies() - { - // GIVEN - Qt3DRender::Render::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); - - // THEN - // internal dependencies - QVERIFY(renderer.beginDrawingBarrierJob()->dependencies().contains(renderer.readRenderQueueSizeBarrierJob())); - QVERIFY(renderer.updateGLResourcesBarrierJob()->dependencies().contains(renderer.beginDrawingBarrierJob())); - QVERIFY(renderer.prepareCommandSubmissionBarrierJob()->dependencies().contains(renderer.updateGLResourcesBarrierJob())); - QVERIFY(renderer.endDrawingBarrierJob()->dependencies().contains(renderer.prepareCommandSubmissionBarrierJob())); - QVERIFY(renderer.filterCompatibleTechniqueJob()->dependencies().contains(renderer.beginDrawingBarrierJob())); - QVERIFY(renderer.loadTextureJob()->dependencies().contains(renderer.updateGLResourcesBarrierJob())); - QVERIFY(renderer.prepareCommandSubmissionBarrierJob()->dependencies().contains(renderer.loadTextureJob())); - QVERIFY(renderer.updateGLResourcesBarrierJob()->dependencies().contains(renderer.filterCompatibleTechniqueJob())); } }; diff --git a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp index 1bdf20170..be1f1fb5d 100644 --- a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp +++ b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp @@ -49,7 +49,6 @@ #include <Qt3DRender/private/qrenderaspect_p.h> #include <Qt3DRender/private/nodemanagers_p.h> #include <Qt3DRender/private/managers_p.h> -#include <Qt3DRender/private/renderbarrierjob_p.h> QT_BEGIN_NAMESPACE @@ -307,25 +306,21 @@ private Q_SLOTS: QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(renderViewBuilder.syncFrustumCullingJob())); QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(testAspect.renderer()->expandBoundingVolumeJob())); - QCOMPARE(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().size(), renderViewBuilder.materialGathererJobs().size() + 7); + QCOMPARE(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().size(), renderViewBuilder.materialGathererJobs().size() + 6); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.syncRenderViewInitializationJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.renderableEntityFilterJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.computableEntityFilterJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.filterProximityJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.lightGathererJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.frustumCullingJob())); - QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(testAspect.renderer()->updateGLResourcesBarrierJob())); for (const auto materialGatherer : renderViewBuilder.materialGathererJobs()) { QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(materialGatherer)); } // Step 5 for (const auto renderViewBuilderJob : renderViewBuilder.renderViewBuilderJobs()) { - QCOMPARE(renderViewBuilderJob->dependencies().size(), 4); - QVERIFY(renderViewBuilderJob->dependencies().contains(renderViewBuilder.syncRenderCommandBuildingJob())); - QVERIFY(renderViewBuilderJob->dependencies().contains(testAspect.renderer()->updateSkinningPaletteJob())); - QVERIFY(renderViewBuilderJob->dependencies().contains(testAspect.renderer()->updateWorldBoundingVolumeJob())); - QVERIFY(renderViewBuilderJob->dependencies().contains(testAspect.renderer()->updateShaderDataTransformJob())); + QCOMPARE(renderViewBuilderJob->dependencies().size(), 1); + QCOMPARE(renderViewBuilderJob->dependencies().first().data(), renderViewBuilder.syncRenderCommandBuildingJob().data()); } // Step 6 @@ -383,7 +378,7 @@ private Q_SLOTS: QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(renderViewBuilder.syncFrustumCullingJob())); QVERIFY(renderViewBuilder.frustumCullingJob()->dependencies().contains(testAspect.renderer()->expandBoundingVolumeJob())); - QCOMPARE(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().size(), renderViewBuilder.materialGathererJobs().size() + 8); + QCOMPARE(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().size(), renderViewBuilder.materialGathererJobs().size() + 7); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.syncRenderViewInitializationJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.renderableEntityFilterJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.computableEntityFilterJob())); @@ -391,18 +386,14 @@ private Q_SLOTS: QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.lightGathererJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.frustumCullingJob())); QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(renderViewBuilder.filterProximityJob())); - QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(testAspect.renderer()->updateGLResourcesBarrierJob())); for (const auto materialGatherer : renderViewBuilder.materialGathererJobs()) { QVERIFY(renderViewBuilder.syncRenderCommandBuildingJob()->dependencies().contains(materialGatherer)); } // Step 5 for (const auto renderViewBuilderJob : renderViewBuilder.renderViewBuilderJobs()) { - QCOMPARE(renderViewBuilderJob->dependencies().size(), 4); - QVERIFY(renderViewBuilderJob->dependencies().contains(renderViewBuilder.syncRenderCommandBuildingJob())); - QVERIFY(renderViewBuilderJob->dependencies().contains(testAspect.renderer()->updateSkinningPaletteJob())); - QVERIFY(renderViewBuilderJob->dependencies().contains(testAspect.renderer()->updateWorldBoundingVolumeJob())); - QVERIFY(renderViewBuilderJob->dependencies().contains(testAspect.renderer()->updateShaderDataTransformJob())); + QCOMPARE(renderViewBuilderJob->dependencies().size(), 1); + QCOMPARE(renderViewBuilderJob->dependencies().first().data(), renderViewBuilder.syncRenderCommandBuildingJob().data()); } // Step 6 |