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