1#ifndef _GLSSHADERPERFORMANCECASE_HPP 2#define _GLSSHADERPERFORMANCECASE_HPP 3/*------------------------------------------------------------------------- 4 * drawElements Quality Program OpenGL (ES) Module 5 * ----------------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Single-program test case wrapper for ShaderPerformanceMeasurer. 24 *//*--------------------------------------------------------------------*/ 25 26#include "tcuDefs.hpp" 27#include "tcuTestCase.hpp" 28#include "gluRenderContext.hpp" 29#include "gluShaderProgram.hpp" 30#include "glsShaderPerformanceMeasurer.hpp" 31#include "deSharedPtr.hpp" 32 33namespace deqp 34{ 35namespace gls 36{ 37 38class ShaderPerformanceCase : public tcu::TestCase 39{ 40public: 41 struct InitialCalibration 42 { 43 int initialNumCalls; 44 InitialCalibration (void) : initialNumCalls(1) {} 45 }; 46 47 ShaderPerformanceCase (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* description, PerfCaseType caseType); 48 ~ShaderPerformanceCase (void); 49 50 void setCalibrationInitialParamStorage (const de::SharedPtr<InitialCalibration>& storage) { m_initialCalibration = storage; } 51 52 void init (void); 53 void deinit (void); 54 55 IterateResult iterate (void); 56 57protected: 58 virtual void setupProgram (deUint32 program); 59 virtual void setupRenderState (void); 60 61 void setGridSize (int gridW, int gridH); 62 void setViewportSize (int width, int height); 63 void setVertexFragmentRatio (float fragmentsPerVertices); 64 65 int getGridWidth (void) const { return m_measurer.getGridWidth(); } 66 int getGridHeight (void) const { return m_measurer.getGridHeight(); } 67 int getViewportWidth (void) const { return m_measurer.getViewportWidth(); } 68 int getViewportHeight (void) const { return m_measurer.getViewportHeight(); } 69 70 virtual void reportResult (float mvertPerSecond, float mfragPerSecond); 71 72 glu::RenderContext& m_renderCtx; 73 74 PerfCaseType m_caseType; 75 76 std::string m_vertShaderSource; 77 std::string m_fragShaderSource; 78 std::vector<AttribSpec> m_attributes; 79 80private: 81 glu::ShaderProgram* m_program; 82 ShaderPerformanceMeasurer m_measurer; 83 84 de::SharedPtr<InitialCalibration> m_initialCalibration; 85}; 86 87class ShaderPerformanceCaseGroup : public tcu::TestCaseGroup 88{ 89public: 90 ShaderPerformanceCaseGroup (tcu::TestContext& testCtx, const char* name, const char* description); 91 void addChild (ShaderPerformanceCase*); 92 93private: 94 de::SharedPtr<ShaderPerformanceCase::InitialCalibration> m_initialCalibrationStorage; 95}; 96 97} // gls 98} // deqp 99 100#endif // _GLSSHADERPERFORMANCECASE_HPP 101