Home | History | Annotate | Download | only in glshared
      1 #ifndef _GLSTEXTURETESTUTIL_HPP
      2 #define _GLSTEXTURETESTUTIL_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 Texture test utilities.
     24  *
     25  * About coordinates:
     26  *  + Quads consist of 2 triangles, rendered using explicit indices.
     27  *  + All TextureTestUtil functions and classes expect texture coordinates
     28  *    for quads to be specified in order (-1, -1), (-1, 1), (1, -1), (1, 1).
     29  *//*--------------------------------------------------------------------*/
     30 
     31 #include "tcuDefs.hpp"
     32 #include "tcuTexture.hpp"
     33 #include "tcuSurface.hpp"
     34 #include "tcuPixelFormat.hpp"
     35 #include "tcuRenderTarget.hpp"
     36 #include "tcuTestContext.hpp"
     37 #include "tcuTestLog.hpp"
     38 #include "tcuCompressedTexture.hpp"
     39 #include "tcuTextureUtil.hpp"
     40 #include "tcuTexVerifierUtil.hpp"
     41 
     42 #include "gluShaderProgram.hpp"
     43 #include "gluShaderUtil.hpp"
     44 #include "gluTextureTestUtil.hpp"
     45 
     46 #include "deInt32.h"
     47 
     48 #include <map>
     49 
     50 namespace tcu
     51 {
     52 struct LookupPrecision;
     53 struct LodPrecision;
     54 struct TexComparePrecision;
     55 }
     56 
     57 namespace deqp
     58 {
     59 namespace gls
     60 {
     61 namespace TextureTestUtil
     62 {
     63 
     64 enum Program
     65 {
     66 	PROGRAM_2D_FLOAT = 0,
     67 	PROGRAM_2D_INT,
     68 	PROGRAM_2D_UINT,
     69 	PROGRAM_2D_SHADOW,
     70 
     71 	PROGRAM_2D_FLOAT_BIAS,
     72 	PROGRAM_2D_INT_BIAS,
     73 	PROGRAM_2D_UINT_BIAS,
     74 	PROGRAM_2D_SHADOW_BIAS,
     75 
     76 	PROGRAM_1D_FLOAT,
     77 	PROGRAM_1D_INT,
     78 	PROGRAM_1D_UINT,
     79 	PROGRAM_1D_SHADOW,
     80 
     81 	PROGRAM_1D_FLOAT_BIAS,
     82 	PROGRAM_1D_INT_BIAS,
     83 	PROGRAM_1D_UINT_BIAS,
     84 	PROGRAM_1D_SHADOW_BIAS,
     85 
     86 	PROGRAM_CUBE_FLOAT,
     87 	PROGRAM_CUBE_INT,
     88 	PROGRAM_CUBE_UINT,
     89 	PROGRAM_CUBE_SHADOW,
     90 
     91 	PROGRAM_CUBE_FLOAT_BIAS,
     92 	PROGRAM_CUBE_INT_BIAS,
     93 	PROGRAM_CUBE_UINT_BIAS,
     94 	PROGRAM_CUBE_SHADOW_BIAS,
     95 
     96 	PROGRAM_1D_ARRAY_FLOAT,
     97 	PROGRAM_1D_ARRAY_INT,
     98 	PROGRAM_1D_ARRAY_UINT,
     99 	PROGRAM_1D_ARRAY_SHADOW,
    100 
    101 	PROGRAM_2D_ARRAY_FLOAT,
    102 	PROGRAM_2D_ARRAY_INT,
    103 	PROGRAM_2D_ARRAY_UINT,
    104 	PROGRAM_2D_ARRAY_SHADOW,
    105 
    106 	PROGRAM_3D_FLOAT,
    107 	PROGRAM_3D_INT,
    108 	PROGRAM_3D_UINT,
    109 
    110 	PROGRAM_3D_FLOAT_BIAS,
    111 	PROGRAM_3D_INT_BIAS,
    112 	PROGRAM_3D_UINT_BIAS,
    113 
    114 	PROGRAM_CUBE_ARRAY_FLOAT,
    115 	PROGRAM_CUBE_ARRAY_INT,
    116 	PROGRAM_CUBE_ARRAY_UINT,
    117 	PROGRAM_CUBE_ARRAY_SHADOW,
    118 
    119 	PROGRAM_BUFFER_FLOAT,
    120 	PROGRAM_BUFFER_INT,
    121 	PROGRAM_BUFFER_UINT,
    122 
    123 	PROGRAM_LAST
    124 };
    125 
    126 class ProgramLibrary
    127 {
    128 public:
    129 											ProgramLibrary			(const glu::RenderContext& context, tcu::TestLog& log, glu::GLSLVersion glslVersion, glu::Precision texCoordPrecision);
    130 											~ProgramLibrary			(void);
    131 
    132 	glu::ShaderProgram*						getProgram				(Program program);
    133 	void									clear					(void);
    134 
    135 private:
    136 											ProgramLibrary			(const ProgramLibrary& other);
    137 	ProgramLibrary&							operator=				(const ProgramLibrary& other);
    138 
    139 	const glu::RenderContext&				m_context;
    140 	tcu::TestLog&							m_log;
    141 	glu::GLSLVersion						m_glslVersion;
    142 	glu::Precision							m_texCoordPrecision;
    143 	std::map<Program, glu::ShaderProgram*>	m_programs;
    144 };
    145 
    146 class TextureRenderer
    147 {
    148 public:
    149 								TextureRenderer			(const glu::RenderContext& context, tcu::TestLog& log, glu::GLSLVersion glslVersion, glu::Precision texCoordPrecision);
    150 								~TextureRenderer		(void);
    151 
    152 	void						clear					(void); //!< Frees allocated resources. Destructor will call clear() as well.
    153 
    154 	void						renderQuad				(int texUnit, const float* texCoord, glu::TextureTestUtil::TextureType texType);
    155 	void						renderQuad				(int texUnit, const float* texCoord, const glu::TextureTestUtil::RenderParams& params);
    156 
    157 private:
    158 								TextureRenderer			(const TextureRenderer& other);
    159 	TextureRenderer&			operator=				(const TextureRenderer& other);
    160 
    161 	const glu::RenderContext&	m_renderCtx;
    162 	tcu::TestLog&				m_log;
    163 	ProgramLibrary				m_programLibrary;
    164 };
    165 
    166 class RandomViewport
    167 {
    168 public:
    169 	int		x;
    170 	int		y;
    171 	int		width;
    172 	int		height;
    173 
    174 	RandomViewport (const tcu::RenderTarget& renderTarget, int preferredWidth, int preferredHeight, deUint32 seed);
    175 };
    176 
    177 } // TextureTestUtil
    178 } // gls
    179 } // deqp
    180 
    181 #endif // _GLSTEXTURETESTUTIL_HPP
    182