13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _ES3FFBOTESTUTIL_HPP
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _ES3FFBOTESTUTIL_HPP
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.0 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 FBO test utilities.
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuDefs.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "sglrContext.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderUtil.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTexture.hpp"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuMatrix.hpp"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuRenderTarget.hpp"
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector>
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles3
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace FboTestUtil
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// \todo [2012-04-29 pyry] Clean up and name as SglrUtil
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Helper class for constructing DataType vectors.
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct DataTypes
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::vector<glu::DataType> vec;
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DataTypes& operator<< (glu::DataType type) { vec.push_back(type); return *this; }
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Shaders.
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass FlatColorShader : public sglr::ShaderProgram
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						FlatColorShader		(glu::DataType outputType);
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						~FlatColorShader	(void) {}
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setColor			(sglr::Context& context, deUint32 program, const tcu::Vec4& color);
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeVertices		(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeFragments		(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::DataType	m_outputType;
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GradientShader : public sglr::ShaderProgram
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						GradientShader		(glu::DataType outputType);
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						~GradientShader		(void) {}
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setGradient			(sglr::Context& context, deUint32 program, const tcu::Vec4& gradientMin, const tcu::Vec4& gradientMax);
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeVertices		(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeFragments		(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::DataType	m_outputType;
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture2DShader : public sglr::ShaderProgram
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					Texture2DShader			(const DataTypes& samplerTypes, glu::DataType outputType, const tcu::Vec4& outScale = tcu::Vec4(1.0f), const tcu::Vec4& outBias = tcu::Vec4(0.0f));
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					~Texture2DShader		(void) {}
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void			setUnit					(int samplerNdx, int unitNdx);
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void			setTexScaleBias			(int samplerNdx, const tcu::Vec4& scale, const tcu::Vec4& bias);
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void			setOutScaleBias			(const tcu::Vec4& scale, const tcu::Vec4& bias);
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void			setUniforms				(sglr::Context& context, deUint32 program) const;
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void			shadeVertices			(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void			shadeFragments			(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	struct Input
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		int			unitNdx;
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		tcu::Vec4	scale;
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		tcu::Vec4	bias;
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::vector<Input>	m_inputs;
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_outScale;
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_outBias;
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::DataType	m_outputType;
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureCubeShader : public sglr::ShaderProgram
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						TextureCubeShader		(glu::DataType samplerType, glu::DataType outputType);
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						~TextureCubeShader		(void) {}
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setFace					(tcu::CubeFace face);
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setTexScaleBias			(const tcu::Vec4& scale, const tcu::Vec4& bias);
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setUniforms				(sglr::Context& context, deUint32 program) const;
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeVertices			(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeFragments			(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Mat3			m_coordMat;
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_texScale;
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_texBias;
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::DataType	m_outputType;
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture2DArrayShader : public sglr::ShaderProgram
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						Texture2DArrayShader	(glu::DataType samplerType, glu::DataType outputType);
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						~Texture2DArrayShader	(void) {}
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setLayer				(int layer);
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setTexScaleBias			(const tcu::Vec4& scale, const tcu::Vec4& bias);
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setUniforms				(sglr::Context& context, deUint32 program) const;
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeVertices			(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeFragments			(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_texScale;
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_texBias;
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int					m_layer;
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::DataType	m_outputType;
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture3DShader : public sglr::ShaderProgram
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						Texture3DShader			(glu::DataType samplerType, glu::DataType outputType);
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						~Texture3DShader		(void) {}
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setDepth				(float r);
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setTexScaleBias			(const tcu::Vec4& scale, const tcu::Vec4& bias);
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				setUniforms				(sglr::Context& context, deUint32 program) const;
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeVertices			(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void				shadeFragments			(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_texScale;
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::Vec4			m_texBias;
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	float				m_depth;
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::DataType	m_outputType;
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DepthGradientShader : public sglr::ShaderProgram
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry								DepthGradientShader		(glu::DataType outputType);
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry								~DepthGradientShader	(void) {}
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void						setUniforms				(sglr::Context& context, deUint32 program, const float gradientMin, const float gradientMax, const tcu::Vec4& color);
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void						shadeVertices			(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void						shadeFragments			(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::DataType			m_outputType;
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const sglr::UniformSlot&	u_minGradient;
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const sglr::UniformSlot&	u_maxGradient;
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const sglr::UniformSlot&	u_color;
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Framebuffer incomplete exception.
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass FboIncompleteException : public tcu::TestError
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						FboIncompleteException		(deUint32 reason, const char* file, int line);
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual				~FboIncompleteException		(void) throw() {}
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32			getReason					(void) const { return m_reason; }
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	deUint32			m_reason;
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Utility functions.
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryglu::DataType			getFragmentOutputType				(const tcu::TextureFormat& format);
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::TextureFormat		getFramebufferReadFormat			(const tcu::TextureFormat& format);
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char*				getFormatName						(deUint32 format);
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid					clearColorBuffer					(sglr::Context& ctx, const tcu::TextureFormat& format, const tcu::Vec4& value);
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid					readPixels							(sglr::Context& ctx, tcu::Surface& dst, int x, int y, int width, int height, const tcu::TextureFormat& format, const tcu::Vec4& scale, const tcu::Vec4& bias);
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::RGBA				getFormatThreshold					(const tcu::TextureFormat& format);
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::RGBA				getFormatThreshold					(const deUint32 glFormat);
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::RGBA				getToSRGBConversionThreshold		(const tcu::TextureFormat& src, const tcu::TextureFormat& dst);
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // FboTestUtil
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles3
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _ES3FFBOTESTUTIL_HPP
233