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