diff options
author | Svenn-Arne Dragly <svenn-arne.dragly@qt.io> | 2018-01-22 10:42:36 +0100 |
---|---|---|
committer | Svenn-Arne Dragly <svenn-arne.dragly@qt.io> | 2018-02-01 12:29:54 +0000 |
commit | d02c54e3349e04fd21f22e67bf88c4a1631faf45 (patch) | |
tree | e3d51bf6d3b6dd9a4b0e54683b6d47eb119ce79c /tests | |
parent | a819190eb71ceb6bb9202f0b3497cc117d8331e7 (diff) |
Fix OnDemand render policy
The OnDemand render policy has no effect because the ShadersDirty and
ComputeDirty flags are always set. This commit resets ShadersDirty so
that ShaderGathererJob is only run when needed. It also introduces the
TechniquesDirty flag so we know when to run
FilterCompatibleTechniqueJob and makes sure the job is only run if
the context has been initialized and the renderer is running.
Task-number: QTBUG-65965
Change-Id: Icbcc03ed2dc6b14c6580cc794267b5a88e5f4ca2
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'tests')
3 files changed, 19 insertions, 54 deletions
diff --git a/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp b/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp index 83e816861..4d4a08a34 100644 --- a/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp +++ b/tests/auto/render/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp @@ -192,35 +192,6 @@ private Q_SLOTS: QCOMPARE(backendFilterCompatibleTechniqueJob.renderer(), &renderer); } - void checkRunRendererNotRunning() - { - // GIVEN - Qt3DRender::Render::FilterCompatibleTechniqueJob backendFilterCompatibleTechniqueJob; - Qt3DRender::TestAspect testAspect(buildTestScene()); - - // WHEN - Qt3DRender::Render::NodeManagers *nodeManagers = testAspect.nodeManagers(); - QVERIFY(nodeManagers); - Qt3DRender::Render::TechniqueManager *techniqueManager = nodeManagers->techniqueManager(); - QVERIFY(techniqueManager); - backendFilterCompatibleTechniqueJob.setManager(techniqueManager); - backendFilterCompatibleTechniqueJob.setRenderer(testAspect.renderer()); - testAspect.initializeRenderer(); - testAspect.renderer()->shutdown(); - - // THEN - QCOMPARE(testAspect.renderer()->isRunning(), false); - QVector<Qt3DRender::Render::HTechnique> handles = testAspect.nodeManagers()->techniqueManager()->activeHandles(); - QCOMPARE(handles.size(), 3); - - // WHEN - backendFilterCompatibleTechniqueJob.run(); - - // THEN -> untouched since not running - const QVector<Qt3DCore::QNodeId> dirtyTechniquesId = testAspect.nodeManagers()->techniqueManager()->takeDirtyTechniques(); - QCOMPARE(dirtyTechniquesId.size(), 3); - } - void checkRunRendererRunning() { // GIVEN diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp index 85d978926..b53c26f83 100644 --- a/tests/auto/render/renderer/tst_renderer.cpp +++ b/tests/auto/render/renderer/tst_renderer.cpp @@ -60,6 +60,9 @@ private Q_SLOTS: renderer.setSettings(&settings); renderer.initialize(); + // NOTE: FilterCompatibleTechniqueJob and ShaderGathererJob cannot run because the context + // is not initialized in this test + const int singleRenderViewJobCount = 11 + 2 * Qt3DRender::Render::RenderViewBuilder::optimalJobCount(); // RenderViewBuilder renderViewJob, // renderableEntityFilterJob, @@ -84,7 +87,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob 1 + // VAOGatherer 1 + // updateSkinningPaletteJob singleRenderViewJobCount); // Only valid for the first call to renderBinJobs(), since subsequent calls won't have the renderqueue reset @@ -100,7 +102,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob 1 + // VAOGatherer 1 + // updateSkinningPaletteJob 1); // EntityEnabledDirty @@ -117,7 +118,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob 1 + // VAOGatherer 1 + // WorldTransformJob 1 + // UpdateWorldBoundingVolume @@ -137,7 +137,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob 1 + // VAOGatherer 1 + // CalculateBoundingVolumeJob 1 + // UpdateMeshTriangleListJob @@ -156,7 +155,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob 1 + // VAOGatherer 1 + // updateSkinningPaletteJob 1); // BufferGathererJob @@ -164,23 +162,6 @@ private Q_SLOTS: renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); // WHEN - renderer.markDirty(Qt3DRender::Render::AbstractRenderer::ShadersDirty, nullptr); - jobs = renderer.renderBinJobs(); - - // THEN (level - QCOMPARE(jobs.size(), - 1 + // updateLevelOfDetailJob - 1 + // cleanupJob - 1 + // sendRenderCaptureJob - 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob - 1 + // VAOGatherer - 1 + // updateSkinningPaletteJob - 1); // ShaderGathererJob - - renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); - - // WHEN renderer.markDirty(Qt3DRender::Render::AbstractRenderer::TexturesDirty, nullptr); jobs = renderer.renderBinJobs(); @@ -190,7 +171,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob 1 + // VAOGatherer 1 + // TexturesGathererJob 1 + // updateSkinningPaletteJob @@ -208,7 +188,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob - 1 + // filterCompatibleTechniquesJob 1 + // VAOGatherer 1 + // EntityEnabledDirty 1 + // WorldTransformJob @@ -218,7 +197,6 @@ private Q_SLOTS: 1 + // CalculateBoundingVolumeJob 1 + // UpdateMeshTriangleListJob 1 + // BufferGathererJob - 1 + // ShaderGathererJob 1 + // TexturesGathererJob 1 + // updateSkinningPaletteJob 1); // SyncTexturesGathererJob diff --git a/tests/auto/render/technique/tst_technique.cpp b/tests/auto/render/technique/tst_technique.cpp index a712434d1..7dfd5b85c 100644 --- a/tests/auto/render/technique/tst_technique.cpp +++ b/tests/auto/render/technique/tst_technique.cpp @@ -193,6 +193,8 @@ private Q_SLOTS: // THEN QCOMPARE(backendTechnique.isEnabled(), newValue); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } { // WHEN @@ -217,6 +219,8 @@ private Q_SLOTS: QCOMPARE(dirtyTechniques.size(), 1); QCOMPARE(dirtyTechniques.first(), backendTechnique.peerId()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } { Qt3DRender::QParameter parameter; @@ -230,6 +234,8 @@ private Q_SLOTS: // THEN QCOMPARE(backendTechnique.parameters().size(), 1); QCOMPARE(backendTechnique.parameters().first(), parameter.id()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } { // WHEN @@ -239,6 +245,8 @@ private Q_SLOTS: // THEN QCOMPARE(backendTechnique.parameters().size(), 0); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } } { @@ -253,6 +261,8 @@ private Q_SLOTS: // THEN QCOMPARE(backendTechnique.filterKeys().size(), 1); QCOMPARE(backendTechnique.filterKeys().first(), filterKey.id()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } { // WHEN @@ -262,6 +272,8 @@ private Q_SLOTS: // THEN QCOMPARE(backendTechnique.filterKeys().size(), 0); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } } { @@ -276,6 +288,8 @@ private Q_SLOTS: // THEN QCOMPARE(backendTechnique.renderPasses().size(), 1); QCOMPARE(backendTechnique.renderPasses().first(), pass.id()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } { // WHEN @@ -285,6 +299,8 @@ private Q_SLOTS: // THEN QCOMPARE(backendTechnique.renderPasses().size(), 0); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TechniquesDirty); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); } } } |