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