| /*------------------------------------------------------------------------- |
| * 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; |
| } |