13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _GLSSHADERPERFORMANCECASE_HPP
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _GLSSHADERPERFORMANCECASE_HPP
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL (ES) Module
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * -----------------------------------------------
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Single-program test case wrapper for ShaderPerformanceMeasurer.
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuDefs.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestCase.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderProgram.hpp"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsShaderPerformanceMeasurer.hpp"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deSharedPtr.hpp"
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gls
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ShaderPerformanceCase : public tcu::TestCase
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	struct InitialCalibration
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int initialNumCalls;
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		InitialCalibration (void) : initialNumCalls(1) {}
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry										ShaderPerformanceCase				(tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const char* name, const char* description, PerfCaseType caseType);
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry										~ShaderPerformanceCase				(void);
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void								setCalibrationInitialParamStorage	(const de::SharedPtr<InitialCalibration>& storage) { m_initialCalibration = storage; }
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void								init								(void);
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void								deinit								(void);
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult						iterate								(void);
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected:
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void						setupProgram						(deUint32 program);
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void						setupRenderState					(void);
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void								setGridSize							(int gridW, int gridH);
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void								setViewportSize						(int width, int height);
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void								setVertexFragmentRatio				(float fragmentsPerVertices);
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int									getGridWidth						(void) const { return m_measurer.getGridWidth();		}
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int									getGridHeight						(void) const { return m_measurer.getGridHeight();		}
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int									getViewportWidth					(void) const { return m_measurer.getViewportWidth();	}
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int									getViewportHeight					(void) const { return m_measurer.getViewportHeight();	}
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void						reportResult						(float mvertPerSecond, float mfragPerSecond);
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	glu::RenderContext&					m_renderCtx;
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	PerfCaseType						m_caseType;
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::string							m_vertShaderSource;
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::string							m_fragShaderSource;
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::vector<AttribSpec>				m_attributes;
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	glu::ShaderProgram*					m_program;
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	ShaderPerformanceMeasurer			m_measurer;
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	de::SharedPtr<InitialCalibration>	m_initialCalibration;
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ShaderPerformanceCaseGroup : public tcu::TestCaseGroup
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry																ShaderPerformanceCaseGroup	(tcu::TestContext& testCtx, const char* name, const char* description);
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void														addChild					(ShaderPerformanceCase*);
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	de::SharedPtr<ShaderPerformanceCase::InitialCalibration>	m_initialCalibrationStorage;
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gls
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _GLSSHADERPERFORMANCECASE_HPP
101