summaryrefslogtreecommitdiffstats
path: root/tests/auto/render/shader/tst_shader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/render/shader/tst_shader.cpp')
-rw-r--r--tests/auto/render/shader/tst_shader.cpp94
1 files changed, 58 insertions, 36 deletions
diff --git a/tests/auto/render/shader/tst_shader.cpp b/tests/auto/render/shader/tst_shader.cpp
index d1578aee7..a1f837010 100644
--- a/tests/auto/render/shader/tst_shader.cpp
+++ b/tests/auto/render/shader/tst_shader.cpp
@@ -42,15 +42,17 @@ private slots:
void cleanupLeavesACoherentState();
void dealWithPropertyChanges_data();
void dealWithPropertyChanges();
+ void dealWithFormatChanges();
void checkSetRendererDirtyOnInitialization();
void allowToChangeShaderCode_data();
void allowToChangeShaderCode();
};
-Qt3DRender::QShaderProgram *createFrontendShader()
+Qt3DRender::QShaderProgram *createFrontendShader(Qt3DRender::QShaderProgram::Format format = Qt3DRender::QShaderProgram::GLSL)
{
Qt3DRender::QShaderProgram *shader = new Qt3DRender::QShaderProgram();
+ shader->setFormat(format);
shader->setVertexShaderCode(QByteArrayLiteral(
"#version 150"\
@@ -79,15 +81,10 @@ void tst_RenderShader::hasCoherentInitialState()
{
Qt3DRender::Render::Shader *shader = new Qt3DRender::Render::Shader();
- QCOMPARE(shader->isLoaded(), false);
- QCOMPARE(shader->dna(), 0U);
- QVERIFY(shader->uniformsNames().isEmpty());
- QVERIFY(shader->attributesNames().isEmpty());
- QVERIFY(shader->uniformBlockNames().isEmpty());
- QVERIFY(shader->uniforms().isEmpty());
- QVERIFY(shader->attributes().isEmpty());
- QVERIFY(shader->uniformBlocks().isEmpty());
QCOMPARE(shader->status(), Qt3DRender::QShaderProgram::NotReady);
+ QCOMPARE(shader->format(), Qt3DRender::QShaderProgram::GLSL);
+ QVERIFY(shader->log().isEmpty());
+ QCOMPARE(shader->isDirty(), false);
}
void tst_RenderShader::matchesFrontendPeer()
@@ -98,17 +95,17 @@ void tst_RenderShader::matchesFrontendPeer()
backend.setRenderer(&renderer);
simulateInitializationSync(frontend.data(), &backend);
- QCOMPARE(backend.isLoaded(), false);
- QVERIFY(backend.dna() != 0U);
+ QCOMPARE(backend.isDirty(), true);
for (int i = Qt3DRender::QShaderProgram::Vertex; i <= Qt3DRender::QShaderProgram::Compute; ++i)
QCOMPARE(backend.shaderCode()[i],
frontend->shaderCode(static_cast<Qt3DRender::QShaderProgram::ShaderType>(i)));
+ QCOMPARE(backend.format(), frontend->format());
}
void tst_RenderShader::cleanupLeavesACoherentState()
{
- QScopedPointer<Qt3DRender::QShaderProgram> frontend(createFrontendShader());
+ QScopedPointer<Qt3DRender::QShaderProgram> frontend(createFrontendShader(Qt3DRender::QShaderProgram::SPIRV));
TestRenderer renderer;
Qt3DRender::Render::Shader shader;
@@ -117,15 +114,9 @@ void tst_RenderShader::cleanupLeavesACoherentState()
shader.cleanup();
- QCOMPARE(shader.isLoaded(), false);
- QCOMPARE(shader.dna(), 0U);
- QVERIFY(shader.uniformsNames().isEmpty());
- QVERIFY(shader.attributesNames().isEmpty());
- QVERIFY(shader.uniformBlockNames().isEmpty());
- QVERIFY(shader.uniforms().isEmpty());
- QVERIFY(shader.attributes().isEmpty());
- QVERIFY(shader.uniformBlocks().isEmpty());
+ QCOMPARE(shader.isDirty(), false);
QCOMPARE(shader.status(), Qt3DRender::QShaderProgram::NotReady);
+ QCOMPARE(shader.format(), Qt3DRender::QShaderProgram::GLSL);
}
void tst_RenderShader::dealWithPropertyChanges_data()
@@ -152,7 +143,7 @@ void tst_RenderShader::dealWithPropertyChanges()
Qt3DRender::Render::Shader backend;
Qt3DRender::QShaderProgram shader;
- backend.setLoaded(true);
+
TestRenderer renderer;
backend.setRenderer(&renderer);
simulateInitializationSync(&shader, &backend);
@@ -162,11 +153,13 @@ void tst_RenderShader::dealWithPropertyChanges()
backend.syncFromFrontEnd(&shader, false);
// THEN
- QCOMPARE(backend.shaderCode().at(type), QByteArrayLiteral("foo"));
- QVERIFY(!backend.isLoaded());
+ QCOMPARE(backend.shaderCode().at(type), QStringLiteral("foo"));
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
+ QCOMPARE(backend.isDirty(), true);
+
renderer.resetDirty();
- backend.setLoaded(true);
+ QCOMPARE(renderer.dirtyBits(), 0);
+ backend.unsetDirty();
// WHEN
shader.setShaderCode(type, QByteArrayLiteral("foo"));
@@ -174,10 +167,8 @@ void tst_RenderShader::dealWithPropertyChanges()
// THEN
QCOMPARE(backend.shaderCode().at(type), QByteArrayLiteral("foo"));
- QVERIFY(backend.isLoaded());
QCOMPARE(renderer.dirtyBits(), 0);
- renderer.resetDirty();
- backend.setLoaded(true);
+ QCOMPARE(backend.isDirty(), false);
// WHEN
shader.setShaderCode(type, QByteArrayLiteral("bar"));
@@ -185,10 +176,48 @@ void tst_RenderShader::dealWithPropertyChanges()
// THEN
QCOMPARE(backend.shaderCode().at(type), QByteArrayLiteral("bar"));
- QVERIFY(!backend.isLoaded());
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
renderer.resetDirty();
- backend.setLoaded(true);
+ QCOMPARE(backend.isDirty(), true);
+}
+
+void tst_RenderShader::dealWithFormatChanges()
+{
+ // GIVEN
+ Qt3DRender::Render::Shader backend;
+ Qt3DRender::QShaderProgram shader;
+ TestRenderer renderer;
+ backend.setRenderer(&renderer);
+ simulateInitializationSync(&shader, &backend);
+
+ // WHEN
+ shader.setFormat(Qt3DRender::QShaderProgram::GLSL);
+ backend.syncFromFrontEnd(&shader, false);
+
+ // THEN
+ QCOMPARE(backend.format(), Qt3DRender::QShaderProgram::GLSL);
+ QCOMPARE(backend.isDirty(), false);
+ QCOMPARE(renderer.dirtyBits(), 0);
+
+ // WHEN
+ shader.setFormat(Qt3DRender::QShaderProgram::SPIRV);
+ backend.syncFromFrontEnd(&shader, false);
+
+ // THEN
+ QCOMPARE(backend.format(), Qt3DRender::QShaderProgram::SPIRV);
+ QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
+ QCOMPARE(backend.isDirty(), true);
+
+ renderer.resetDirty();
+ backend.unsetDirty();
+
+ // WHEN
+ shader.setFormat(Qt3DRender::QShaderProgram::SPIRV);
+ backend.syncFromFrontEnd(&shader, false);
+
+ // THEN
+ QCOMPARE(backend.isDirty(), false);
+ QCOMPARE(renderer.dirtyBits(), 0);
}
void tst_RenderShader::checkSetRendererDirtyOnInitialization()
@@ -221,7 +250,6 @@ void tst_RenderShader::allowToChangeShaderCode()
QFETCH(Qt3DRender::QShaderProgram::ShaderType, type);
Qt3DRender::Render::Shader backend;
- backend.setLoaded(true);
TestRenderer renderer;
backend.setRenderer(&renderer);
@@ -230,30 +258,24 @@ void tst_RenderShader::allowToChangeShaderCode()
// THEN
QCOMPARE(backend.shaderCode().at(type), QStringLiteral("foo"));
- QVERIFY(!backend.isLoaded());
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
renderer.resetDirty();
- backend.setLoaded(true);
// WHEN
backend.setShaderCode(type, QByteArrayLiteral("foo"));
// THEN
QCOMPARE(backend.shaderCode().at(type), QStringLiteral("foo"));
- QVERIFY(backend.isLoaded());
QCOMPARE(renderer.dirtyBits(), 0);
renderer.resetDirty();
- backend.setLoaded(true);
// WHEN
backend.setShaderCode(type, QByteArrayLiteral("bar"));
// THEN
QCOMPARE(backend.shaderCode().at(type), QStringLiteral("bar"));
- QVERIFY(!backend.isLoaded());
QCOMPARE(renderer.dirtyBits(), Qt3DRender::Render::AbstractRenderer::ShadersDirty);
renderer.resetDirty();
- backend.setLoaded(true);
}
QTEST_APPLESS_MAIN(tst_RenderShader)