You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.6 KiB
91 lines
2.6 KiB
/*-------------------------------------------------------------------------
|
|
* drawElements Quality Program Random Shader Generator
|
|
* ----------------------------------------------------
|
|
*
|
|
* Copyright 2014 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*//*!
|
|
* \file
|
|
* \brief Random Shader Generator Tester.
|
|
*//*--------------------------------------------------------------------*/
|
|
|
|
#include "rsgProgramGenerator.hpp"
|
|
#include "rsgProgramExecutor.hpp"
|
|
#include "tcuSurface.hpp"
|
|
#include "tcuImageIO.hpp"
|
|
#include "rsgUtils.hpp"
|
|
#include "deStringUtil.hpp"
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <cstdio>
|
|
|
|
using std::string;
|
|
|
|
void runTest (deUint32 seed)
|
|
{
|
|
printf("Seed: %d\n", seed);
|
|
|
|
// Generate test program
|
|
try
|
|
{
|
|
rsg::ProgramParameters programParams;
|
|
|
|
programParams.seed = seed;
|
|
programParams.fragmentParameters.randomize = true;
|
|
programParams.fragmentParameters.maxStatementDepth = 3;
|
|
|
|
rsg::Shader vertexShader(rsg::Shader::TYPE_VERTEX);
|
|
rsg::Shader fragmentShader(rsg::Shader::TYPE_FRAGMENT);
|
|
|
|
rsg::ProgramGenerator generator;
|
|
generator.generate(programParams, vertexShader, fragmentShader);
|
|
|
|
std::cout << "Vertex shader:\n--\n" << vertexShader.getSource() << "--\n";
|
|
std::cout << "Fragment shader:\n--\n" << fragmentShader.getSource() << "--\n";
|
|
|
|
// Uniforms
|
|
std::vector<const rsg::ShaderInput*> uniforms;
|
|
std::vector<rsg::VariableValue> uniformValues;
|
|
de::Random rnd(seed);
|
|
rsg::computeUnifiedUniforms(vertexShader, fragmentShader, uniforms);
|
|
rsg::computeUniformValues(rnd, uniformValues, uniforms);
|
|
|
|
// Render image
|
|
tcu::Surface surface(64, 64);
|
|
rsg::ProgramExecutor executor(surface.getAccess(), 3, 5);
|
|
|
|
executor.execute(vertexShader, fragmentShader, uniformValues);
|
|
|
|
string fileName = string("test-") + de::toString(seed) + ".png";
|
|
tcu::ImageIO::savePNG(surface.getAccess(), fileName.c_str());
|
|
std::cout << fileName << " written\n";
|
|
}
|
|
catch (const std::exception& e)
|
|
{
|
|
printf("Failed: %s\n", e.what());
|
|
}
|
|
}
|
|
|
|
int main (int argc, const char* const* argv)
|
|
{
|
|
DE_UNREF(argc && argv);
|
|
|
|
for (int seed = 0; seed < 10; seed++)
|
|
runTest(seed);
|
|
|
|
return 0;
|
|
}
|