1*35238bceSAndroid Build Coastguard Worker #ifndef _ES31FFBOTESTUTIL_HPP 2*35238bceSAndroid Build Coastguard Worker #define _ES31FFBOTESTUTIL_HPP 3*35238bceSAndroid Build Coastguard Worker /*------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 3.1 Module 5*35238bceSAndroid Build Coastguard Worker * ------------------------------------------------- 6*35238bceSAndroid Build Coastguard Worker * 7*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker * 9*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker * 13*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker * 15*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker * limitations under the License. 20*35238bceSAndroid Build Coastguard Worker * 21*35238bceSAndroid Build Coastguard Worker *//*! 22*35238bceSAndroid Build Coastguard Worker * \file 23*35238bceSAndroid Build Coastguard Worker * \brief FBO test utilities. 24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp" 27*35238bceSAndroid Build Coastguard Worker #include "sglrContext.hpp" 28*35238bceSAndroid Build Coastguard Worker #include "gluShaderUtil.hpp" 29*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp" 30*35238bceSAndroid Build Coastguard Worker #include "tcuMatrix.hpp" 31*35238bceSAndroid Build Coastguard Worker #include "tcuRenderTarget.hpp" 32*35238bceSAndroid Build Coastguard Worker 33*35238bceSAndroid Build Coastguard Worker #include <vector> 34*35238bceSAndroid Build Coastguard Worker 35*35238bceSAndroid Build Coastguard Worker namespace deqp 36*35238bceSAndroid Build Coastguard Worker { 37*35238bceSAndroid Build Coastguard Worker namespace gles31 38*35238bceSAndroid Build Coastguard Worker { 39*35238bceSAndroid Build Coastguard Worker namespace Functional 40*35238bceSAndroid Build Coastguard Worker { 41*35238bceSAndroid Build Coastguard Worker namespace FboTestUtil 42*35238bceSAndroid Build Coastguard Worker { 43*35238bceSAndroid Build Coastguard Worker 44*35238bceSAndroid Build Coastguard Worker // \todo [2012-04-29 pyry] Clean up and name as SglrUtil 45*35238bceSAndroid Build Coastguard Worker 46*35238bceSAndroid Build Coastguard Worker // Helper class for constructing DataType vectors. 47*35238bceSAndroid Build Coastguard Worker struct DataTypes 48*35238bceSAndroid Build Coastguard Worker { 49*35238bceSAndroid Build Coastguard Worker std::vector<glu::DataType> vec; operator <<deqp::gles31::Functional::FboTestUtil::DataTypes50*35238bceSAndroid Build Coastguard Worker DataTypes &operator<<(glu::DataType type) 51*35238bceSAndroid Build Coastguard Worker { 52*35238bceSAndroid Build Coastguard Worker vec.push_back(type); 53*35238bceSAndroid Build Coastguard Worker return *this; 54*35238bceSAndroid Build Coastguard Worker } 55*35238bceSAndroid Build Coastguard Worker }; 56*35238bceSAndroid Build Coastguard Worker 57*35238bceSAndroid Build Coastguard Worker // Shaders. 58*35238bceSAndroid Build Coastguard Worker 59*35238bceSAndroid Build Coastguard Worker class Texture2DShader : public sglr::ShaderProgram 60*35238bceSAndroid Build Coastguard Worker { 61*35238bceSAndroid Build Coastguard Worker public: 62*35238bceSAndroid Build Coastguard Worker Texture2DShader(const DataTypes &samplerTypes, glu::DataType outputType, 63*35238bceSAndroid Build Coastguard Worker const tcu::Vec4 &outScale = tcu::Vec4(1.0f), const tcu::Vec4 &outBias = tcu::Vec4(0.0f)); ~Texture2DShader(void)64*35238bceSAndroid Build Coastguard Worker ~Texture2DShader(void) 65*35238bceSAndroid Build Coastguard Worker { 66*35238bceSAndroid Build Coastguard Worker } 67*35238bceSAndroid Build Coastguard Worker 68*35238bceSAndroid Build Coastguard Worker void setUnit(int samplerNdx, int unitNdx); 69*35238bceSAndroid Build Coastguard Worker void setTexScaleBias(int samplerNdx, const tcu::Vec4 &scale, const tcu::Vec4 &bias); 70*35238bceSAndroid Build Coastguard Worker void setOutScaleBias(const tcu::Vec4 &scale, const tcu::Vec4 &bias); 71*35238bceSAndroid Build Coastguard Worker 72*35238bceSAndroid Build Coastguard Worker void setUniforms(sglr::Context &context, uint32_t program) const; 73*35238bceSAndroid Build Coastguard Worker 74*35238bceSAndroid Build Coastguard Worker void shadeVertices(const rr::VertexAttrib *inputs, rr::VertexPacket *const *packets, const int numPackets) const; 75*35238bceSAndroid Build Coastguard Worker void shadeFragments(rr::FragmentPacket *packets, const int numPackets, 76*35238bceSAndroid Build Coastguard Worker const rr::FragmentShadingContext &context) const; 77*35238bceSAndroid Build Coastguard Worker 78*35238bceSAndroid Build Coastguard Worker private: 79*35238bceSAndroid Build Coastguard Worker struct Input 80*35238bceSAndroid Build Coastguard Worker { 81*35238bceSAndroid Build Coastguard Worker int unitNdx; 82*35238bceSAndroid Build Coastguard Worker tcu::Vec4 scale; 83*35238bceSAndroid Build Coastguard Worker tcu::Vec4 bias; 84*35238bceSAndroid Build Coastguard Worker }; 85*35238bceSAndroid Build Coastguard Worker 86*35238bceSAndroid Build Coastguard Worker std::vector<Input> m_inputs; 87*35238bceSAndroid Build Coastguard Worker tcu::Vec4 m_outScale; 88*35238bceSAndroid Build Coastguard Worker tcu::Vec4 m_outBias; 89*35238bceSAndroid Build Coastguard Worker 90*35238bceSAndroid Build Coastguard Worker const glu::DataType m_outputType; 91*35238bceSAndroid Build Coastguard Worker }; 92*35238bceSAndroid Build Coastguard Worker 93*35238bceSAndroid Build Coastguard Worker class TextureCubeArrayShader : public sglr::ShaderProgram 94*35238bceSAndroid Build Coastguard Worker { 95*35238bceSAndroid Build Coastguard Worker public: 96*35238bceSAndroid Build Coastguard Worker TextureCubeArrayShader(glu::DataType samplerType, glu::DataType outputType, glu::GLSLVersion glslVersion); ~TextureCubeArrayShader(void)97*35238bceSAndroid Build Coastguard Worker ~TextureCubeArrayShader(void) 98*35238bceSAndroid Build Coastguard Worker { 99*35238bceSAndroid Build Coastguard Worker } 100*35238bceSAndroid Build Coastguard Worker 101*35238bceSAndroid Build Coastguard Worker void setLayer(int layer); 102*35238bceSAndroid Build Coastguard Worker void setFace(tcu::CubeFace face); 103*35238bceSAndroid Build Coastguard Worker void setTexScaleBias(const tcu::Vec4 &scale, const tcu::Vec4 &bias); 104*35238bceSAndroid Build Coastguard Worker 105*35238bceSAndroid Build Coastguard Worker void setUniforms(sglr::Context &context, uint32_t program) const; 106*35238bceSAndroid Build Coastguard Worker 107*35238bceSAndroid Build Coastguard Worker void shadeVertices(const rr::VertexAttrib *inputs, rr::VertexPacket *const *packets, const int numPackets) const; 108*35238bceSAndroid Build Coastguard Worker void shadeFragments(rr::FragmentPacket *packets, const int numPackets, 109*35238bceSAndroid Build Coastguard Worker const rr::FragmentShadingContext &context) const; 110*35238bceSAndroid Build Coastguard Worker 111*35238bceSAndroid Build Coastguard Worker private: 112*35238bceSAndroid Build Coastguard Worker tcu::Vec4 m_texScale; 113*35238bceSAndroid Build Coastguard Worker tcu::Vec4 m_texBias; 114*35238bceSAndroid Build Coastguard Worker int m_layer; 115*35238bceSAndroid Build Coastguard Worker tcu::Mat3 m_coordMat; 116*35238bceSAndroid Build Coastguard Worker 117*35238bceSAndroid Build Coastguard Worker const glu::DataType m_outputType; 118*35238bceSAndroid Build Coastguard Worker }; 119*35238bceSAndroid Build Coastguard Worker 120*35238bceSAndroid Build Coastguard Worker // Framebuffer incomplete exception. 121*35238bceSAndroid Build Coastguard Worker class FboIncompleteException : public tcu::TestError 122*35238bceSAndroid Build Coastguard Worker { 123*35238bceSAndroid Build Coastguard Worker public: 124*35238bceSAndroid Build Coastguard Worker FboIncompleteException(uint32_t reason, const char *file, int line); ~FboIncompleteException(void)125*35238bceSAndroid Build Coastguard Worker virtual ~FboIncompleteException(void) throw() 126*35238bceSAndroid Build Coastguard Worker { 127*35238bceSAndroid Build Coastguard Worker } 128*35238bceSAndroid Build Coastguard Worker getReason(void) const129*35238bceSAndroid Build Coastguard Worker uint32_t getReason(void) const 130*35238bceSAndroid Build Coastguard Worker { 131*35238bceSAndroid Build Coastguard Worker return m_reason; 132*35238bceSAndroid Build Coastguard Worker } 133*35238bceSAndroid Build Coastguard Worker 134*35238bceSAndroid Build Coastguard Worker private: 135*35238bceSAndroid Build Coastguard Worker uint32_t m_reason; 136*35238bceSAndroid Build Coastguard Worker }; 137*35238bceSAndroid Build Coastguard Worker 138*35238bceSAndroid Build Coastguard Worker // Utility functions 139*35238bceSAndroid Build Coastguard Worker 140*35238bceSAndroid Build Coastguard Worker glu::DataType getFragmentOutputType(const tcu::TextureFormat &format); 141*35238bceSAndroid Build Coastguard Worker tcu::TextureFormat getFramebufferReadFormat(const tcu::TextureFormat &format); 142*35238bceSAndroid Build Coastguard Worker 143*35238bceSAndroid Build Coastguard Worker const char *getFormatName(uint32_t format); 144*35238bceSAndroid Build Coastguard Worker 145*35238bceSAndroid Build Coastguard Worker void clearColorBuffer(sglr::Context &ctx, const tcu::TextureFormat &format, const tcu::Vec4 &value); 146*35238bceSAndroid Build Coastguard Worker void readPixels(sglr::Context &ctx, tcu::Surface &dst, int x, int y, int width, int height, 147*35238bceSAndroid Build Coastguard Worker const tcu::TextureFormat &format, const tcu::Vec4 &scale, const tcu::Vec4 &bias); 148*35238bceSAndroid Build Coastguard Worker 149*35238bceSAndroid Build Coastguard Worker tcu::RGBA getFormatThreshold(const tcu::TextureFormat &format); 150*35238bceSAndroid Build Coastguard Worker tcu::RGBA getFormatThreshold(const uint32_t glFormat); 151*35238bceSAndroid Build Coastguard Worker 152*35238bceSAndroid Build Coastguard Worker } // namespace FboTestUtil 153*35238bceSAndroid Build Coastguard Worker } // namespace Functional 154*35238bceSAndroid Build Coastguard Worker } // namespace gles31 155*35238bceSAndroid Build Coastguard Worker } // namespace deqp 156*35238bceSAndroid Build Coastguard Worker 157*35238bceSAndroid Build Coastguard Worker #endif // _ES31FFBOTESTUTIL_HPP 158