1#ifndef _GLSSTATECHANGEPERFTESTCASES_HPP 2#define _GLSSTATECHANGEPERFTESTCASES_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 State change performance tests. 24 *//*--------------------------------------------------------------------*/ 25 26#include "tcuDefs.hpp" 27#include "tcuTestCase.hpp" 28 29namespace glu 30{ 31class ShaderProgram; 32class RenderContext; 33} 34 35namespace glw 36{ 37class Functions; 38} 39 40namespace deqp 41{ 42namespace gls 43{ 44 45class StateChangePerformanceCase : public tcu::TestCase 46{ 47public: 48 enum DrawType 49 { 50 DRAWTYPE_NOT_INDEXED = 0, //!< glDrawArrays() 51 DRAWTYPE_INDEXED_USER_PTR, //!< glDrawElements(), indices from user pointer. 52 DRAWTYPE_INDEXED_BUFFER, //!< glDrawElements(), indices in buffer. 53 }; 54 55 StateChangePerformanceCase (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* description, DrawType drawType, int drawCallCount, int triangleCount); 56 ~StateChangePerformanceCase (void); 57 58 void init (void); 59 void deinit (void); 60 61 IterateResult iterate (void); 62 63protected: 64 void requireIndexBuffers (int count); 65 void requireCoordBuffers (int count); 66 void requirePrograms (int count); 67 void requireTextures (int count); 68 void requireFramebuffers (int count); 69 void requireRenderbuffers (int count); 70 void requireSamplers (int count); 71 void requireVertexArrays (int count); 72 73 virtual void setupInitialState (const glw::Functions& gl) = 0; 74 virtual void renderTest (const glw::Functions& gl) = 0; 75 virtual void renderReference (const glw::Functions& gl) = 0; 76 77 void callDraw (const glw::Functions& gl); 78 79 void logAndSetTestResult (void); 80 81protected: 82 glu::RenderContext& m_renderCtx; 83 84 const DrawType m_drawType; 85 const int m_iterationCount; 86 const int m_callCount; 87 const int m_triangleCount; 88 89 std::vector<deUint32> m_indexBuffers; 90 std::vector<deUint32> m_coordBuffers; 91 std::vector<deUint32> m_textures; 92 std::vector<glu::ShaderProgram*> m_programs; 93 std::vector<deUint32> m_framebuffers; 94 std::vector<deUint32> m_renderbuffers; 95 std::vector<deUint32> m_samplers; 96 std::vector<deUint32> m_vertexArrays; 97 98private: 99 StateChangePerformanceCase (const StateChangePerformanceCase&); 100 StateChangePerformanceCase& operator= (const StateChangePerformanceCase&); 101 102 std::vector<deUint16> m_indices; 103 104 std::vector<deUint64> m_interleavedResults; 105 std::vector<deUint64> m_batchedResults; 106}; 107 108class StateChangeCallPerformanceCase : public tcu::TestCase 109{ 110public: 111 112 StateChangeCallPerformanceCase (tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* description); 113 ~StateChangeCallPerformanceCase (void); 114 115 IterateResult iterate (void); 116 117 virtual void execCalls (const glw::Functions& gl, int iterNdx, int callCount) = 0; 118 119private: 120 void executeTest (void); 121 void logTestCase (void); 122 123 void logAndSetTestResult (void); 124 125 glu::RenderContext& m_renderCtx; 126 127 const int m_iterationCount; 128 const int m_callCount; 129 130 std::vector<deUint64> m_results; 131}; 132 133} // gls 134} // deqp 135 136#endif // _GLSSTATECHANGEPERFTESTCASES_HPP 137