glsShaderPerformanceCase.hpp revision 3c827367444ee418f129b2c238299f49d3264554
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