xref: /aosp_15_r20/external/deqp/modules/gles31/functional/es31fFboTestUtil.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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