From 59c8fc253d19d00baaf064a8b931345cf1f48613 Mon Sep 17 00:00:00 2001 From: Roman Sorokin Date: Mon, 25 Aug 2014 14:53:17 +0300 Subject: [PATCH] Now tests used shaders from the same sorce file like a program --- drape/drape_tests/compile_shaders_test.cpp | 89 +++++++++++++++++----- 1 file changed, 69 insertions(+), 20 deletions(-) diff --git a/drape/drape_tests/compile_shaders_test.cpp b/drape/drape_tests/compile_shaders_test.cpp index 2da2822e88..e8b9ff749e 100644 --- a/drape/drape_tests/compile_shaders_test.cpp +++ b/drape/drape_tests/compile_shaders_test.cpp @@ -1,6 +1,11 @@ #include "../../testing/testing.hpp" -#include "enum_shaders.hpp" +#include "../../drape/shader_def.hpp" +#include "../../drape/shader.hpp" + +#include "../glconstants.hpp" + +#include "glmock_functions.hpp" #include "../../platform/platform.hpp" #include "../../std/sstream.hpp" @@ -11,6 +16,13 @@ #include #include #include +#include + +#include + +using testing::Return; +using testing::AnyNumber; +using namespace dp; #if defined (OMIM_OS_MAC) #define SHADERS_COMPILER "GLSLESCompiler_Series5.mac" @@ -32,6 +44,14 @@ string DebugPrint(QString const & s) return s.toStdString(); } +void WriteShaderToFile(QTemporaryFile & file, string shader) +{ + EXPECTGL(glGetInteger(gl_const::GLMaxFragmentTextures)).WillRepeatedly(Return(8)); + sh::Inject(shader); + QTextStream out(&file); + out << QString::fromStdString(shader); +} + UNIT_TEST(CompileShaders_Test) { Platform & platform = GetPlatform(); @@ -46,14 +66,22 @@ UNIT_TEST(CompileShaders_Test) QString errorLog; QTextStream ss(&errorLog); - gpu_test::InitEnumeration(); - for (size_t i = 0; i < gpu_test::VertexEnum.size(); ++i) + gpu::InitEnumeration(); + + for (size_t i = 0; i < gpu::VertexEnum.size(); ++i) { + QTemporaryFile file; + if (file.open()) + WriteShaderToFile(file, gpu::VertexEnum[i]); + else + TEST(false, ("File can't be created!")); + QProcess p; p.setProcessChannelMode(QProcess::MergedChannels); QStringList args; - args << QString::fromStdString(gpu_test::VertexEnum[i]) - << QString::fromStdString(gpu_test::VertexEnum[i] + ".bin") + + args << file.fileName() + << file.fileName() + ".bin" << "-v"; p.start(QString::fromStdString(glslCompilerPath), args, QIODevice::ReadOnly); @@ -64,19 +92,24 @@ UNIT_TEST(CompileShaders_Test) if (result.indexOf("Success") == -1) { ss << "\n" << QString("SHADER COMPILE ERROR\n"); - ss << QString::fromStdString(gpu_test::VertexEnum[i]) << "\n"; + ss << file.fileName() << "\n"; ss << result.trimmed() << "\n"; isPass = false; } } - for (size_t i = 0; i < gpu_test::FragmentEnum.size(); ++i) + for (size_t i = 0; i < gpu::FragmentEnum.size(); ++i) { + QTemporaryFile file; + if (file.open()) + WriteShaderToFile(file, gpu::FragmentEnum[i]); + else + TEST(false, ("File can't be created!")); QProcess p; p.setProcessChannelMode(QProcess::MergedChannels); QStringList args; - args << QString::fromStdString(gpu_test::FragmentEnum[i]) - << QString::fromStdString(gpu_test::FragmentEnum[i] + ".bin") + args << file.fileName() + << file.fileName() + ".bin" << "-f"; p.start(QString::fromStdString(glslCompilerPath), args, QIODevice::ReadOnly); @@ -87,13 +120,16 @@ UNIT_TEST(CompileShaders_Test) if (result.indexOf("Succes") == -1) { ss << "\n" << QString("SHADER COMPILE ERROR\n"); - ss << QString::fromStdString(gpu_test::FragmentEnum[i]) << "\n"; + ss << file.fileName() << "\n"; ss << result.trimmed() << "\n"; isPass = false; } } TEST(isPass, (errorLog)); + + gpu::VertexEnum.clear(); + gpu::FragmentEnum.clear(); } #ifdef OMIM_OS_MAC @@ -111,12 +147,14 @@ void TestMaliShaders(string driver, string hardware, string release) QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("MALICM_LOCATION", QString::fromStdString(platform.ResourcesDir() + "shaders_compiler/" MALI_DIR)); - if (gpu_test::FragmentEnum.empty() && gpu_test::VertexEnum.empty()) - gpu_test::InitEnumeration(); - - - for (size_t i = 0; i < gpu_test::VertexEnum.size(); ++i) + for (size_t i = 0; i < gpu::VertexEnum.size(); ++i) { + QTemporaryFile file; + if (file.open()) + WriteShaderToFile(file, gpu::VertexEnum[i]); + else + TEST(false, ("File can't be created!")); + QProcess p; p.setProcessEnvironment(env); p.setProcessChannelMode(QProcess::MergedChannels); @@ -129,7 +167,7 @@ void TestMaliShaders(string driver, string hardware, string release) << QString::fromStdString(hardware) << "-d" << QString::fromStdString(driver) - << QString::fromStdString(gpu_test::VertexEnum[i]); + << file.fileName(); p.start(QString::fromStdString(glslCompilerPath), args, QIODevice::ReadOnly); TEST(p.waitForStarted(), ("GLSL compiler not started")); @@ -139,14 +177,20 @@ void TestMaliShaders(string driver, string hardware, string release) if (result.indexOf("Compilation succeeded.") == -1) { ss << "\n" << QString("SHADER COMPILE ERROR\n"); - ss << QString::fromStdString(gpu_test::VertexEnum[i]) << "\n"; + ss << file.fileName() << "\n"; ss << result.trimmed() << "\n"; isPass = false; } } - for (size_t i = 0; i < gpu_test::FragmentEnum.size(); ++i) + for (size_t i = 0; i < gpu::FragmentEnum.size(); ++i) { + QTemporaryFile file; + if (file.open()) + WriteShaderToFile(file, gpu::FragmentEnum[i]); + else + TEST(false, ("File can't be created!")); + QProcess p; p.setProcessEnvironment(env); p.setProcessChannelMode(QProcess::MergedChannels); @@ -159,7 +203,7 @@ void TestMaliShaders(string driver, string hardware, string release) << QString::fromStdString(hardware) << "-d" << QString::fromStdString(driver) - << QString::fromStdString(gpu_test::FragmentEnum[i]); + << file.fileName(); p.start(QString::fromStdString(glslCompilerPath), args, QIODevice::ReadOnly); TEST(p.waitForStarted(), ("GLSL compiler not started")); @@ -169,7 +213,7 @@ void TestMaliShaders(string driver, string hardware, string release) if (result.indexOf("Compilation succeeded.") == -1) { ss << "\n" << QString("SHADER COMPILE ERROR\n"); - ss << QString::fromStdString(gpu_test::FragmentEnum[i]) << "\n"; + ss << file.fileName() << "\n"; ss << result.trimmed() << "\n"; isPass = false; } @@ -226,9 +270,14 @@ UNIT_TEST(MALI_CompileShaders_Test) models[2].m_releases.push_back(make_pair("Mali-T760", "r0p3")); models[2].m_releases.push_back(make_pair("Mali-T760", "r1p0")); + gpu::InitEnumeration(); + for(size_t i = 0; i < models.size(); ++i) for(size_t j = 0; j < models[i].m_releases.size(); ++j) TestMaliShaders(models[i].m_driverName, models[i].m_releases[j].first, models[i].m_releases[j].second); + + gpu::VertexEnum.clear(); + gpu::FragmentEnum.clear(); } #endif