xref: /aosp_15_r20/external/deqp/modules/glshared/glsSamplerObjectTest.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 #ifndef _GLSSAMPLEROBJECTTEST_HPP
2 #define _GLSSAMPLEROBJECTTEST_HPP
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program OpenGL ES 3.0 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 Sampler object testcases.
24  *//*--------------------------------------------------------------------*/
25 
26 #include "tcuTestCase.hpp"
27 #include "tcuTestLog.hpp"
28 #include "deRandom.hpp"
29 #include "tcuSurface.hpp"
30 #include "gluRenderContext.hpp"
31 #include "glw.h"
32 #include "glwEnums.hpp"
33 #include "gluShaderProgram.hpp"
34 
35 namespace deqp
36 {
37 namespace gls
38 {
39 
40 class TextureSamplerTest : public tcu::TestCase
41 {
42 public:
43     struct SamplingState
44     {
45         GLenum minFilter;
46         GLenum magFilter;
47         GLenum wrapT;
48         GLenum wrapS;
49         GLenum wrapR;
50         GLfloat minLod;
51         GLfloat maxLod;
52     };
53 
54     struct TestSpec
55     {
56         const char *name;
57         const char *desc;
58         GLenum target;
59         SamplingState textureState;
60         SamplingState samplerState;
61     };
62 
63     TextureSamplerTest(tcu::TestContext &testCtx, glu::RenderContext &renderCtx, const TestSpec &spec);
64     ~TextureSamplerTest(void);
65 
66     void init(void);
67     void deinit(void);
68 
69     IterateResult iterate(void);
70 
71 private:
72     void renderReferences(tcu::Surface &textureRef, tcu::Surface &samplerRef, int x, int y);
73     void renderResults(tcu::Surface &textureResult, tcu::Surface &samplerResult, int x, int y);
74 
75     void render(void);
76 
77     static void setTextureState(const glw::Functions &gl, GLenum target, SamplingState state);
78     static void setSamplerState(const glw::Functions &gl, SamplingState state, GLuint sampler);
79 
80     static GLuint createTexture2D(const glw::Functions &gl);
81     static GLuint createTexture3D(const glw::Functions &gl);
82     static GLuint createTextureCube(const glw::Functions &gl);
83     static GLuint createTexture(const glw::Functions &gl, GLenum target);
84 
85     static const char *selectVertexShader(GLenum target);
86     static const char *selectFragmentShader(GLenum target);
87 
88     glu::RenderContext &m_renderCtx;
89     glu::ShaderProgram *m_program;
90 
91     GLenum m_target;
92     SamplingState m_textureState;
93     SamplingState m_samplerState;
94 
95     de::Random m_random;
96 };
97 
98 class MultiTextureSamplerTest : public tcu::TestCase
99 {
100 public:
101     struct SamplingState
102     {
103         GLenum minFilter;
104         GLenum magFilter;
105         GLenum wrapT;
106         GLenum wrapS;
107         GLenum wrapR;
108         GLfloat minLod;
109         GLfloat maxLod;
110     };
111 
112     struct TestSpec
113     {
114         const char *name;
115         const char *desc;
116         GLenum target;
117         SamplingState textureState1;
118         SamplingState textureState2;
119         SamplingState samplerState;
120     };
121 
122     MultiTextureSamplerTest(tcu::TestContext &testCtx, glu::RenderContext &renderCtx, const TestSpec &spec);
123     ~MultiTextureSamplerTest(void);
124 
125     void init(void);
126     void deinit(void);
127 
128     IterateResult iterate(void);
129 
130 private:
131     void renderReferences(tcu::Surface &textureRef, tcu::Surface &samplerRef, int x, int y);
132     void renderResults(tcu::Surface &textureResult, tcu::Surface &samplerResult, int x, int y);
133 
134     void render(void);
135 
136     static void setTextureState(const glw::Functions &gl, GLenum target, SamplingState state);
137     static void setSamplerState(const glw::Functions &gl, SamplingState state, GLuint sampler);
138 
139     static GLuint createTexture2D(const glw::Functions &gl, int id);
140     static GLuint createTexture3D(const glw::Functions &gl, int id);
141     static GLuint createTextureCube(const glw::Functions &gl, int id);
142     static GLuint createTexture(const glw::Functions &gl, GLenum target, int id);
143 
144     static const char *selectVertexShader(GLenum target);
145     static const char *selectFragmentShader(GLenum target);
146 
147     glu::RenderContext &m_renderCtx;
148     glu::ShaderProgram *m_program;
149 
150     GLenum m_target;
151     SamplingState m_textureState1;
152     SamplingState m_textureState2;
153     SamplingState m_samplerState;
154 
155     de::Random m_random;
156 };
157 
158 } // namespace gls
159 } // namespace deqp
160 
161 #endif // _GLSSAMPLEROBJECTTEST_HPP
162