xref: /aosp_15_r20/external/deqp/external/openglcts/modules/gl/gl4cIncompleteTextureAccessTests.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 #ifndef _GL4CINCOMPLETETEXTUREACCESSTESTS_HPP
2 #define _GL4CINCOMPLETETEXTUREACCESSTESTS_HPP
3 /*-------------------------------------------------------------------------
4  * OpenGL Conformance Test Suite
5  * -----------------------------
6  *
7  * Copyright (c) 2015-2016 The Khronos Group Inc.
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
24  */ /*-------------------------------------------------------------------*/
25 
26 /**
27  * \file  gl4cIncompleteTextureAccessTests.hpp
28  * \brief Declares test classes for incomplete texture access cases.
29  */ /*-------------------------------------------------------------------*/
30 
31 /* Includes. */
32 
33 #include "glcTestCase.hpp"
34 #include "glwDefs.hpp"
35 #include "tcuDefs.hpp"
36 
37 namespace gl4cts
38 {
39 namespace IncompleteTextureAccess
40 {
41 /** @class Tests
42  *
43  *  @brief Incomplete texture access test group.
44  */
45 class Tests : public deqp::TestCaseGroup
46 {
47 public:
48     /* Public member functions */
49     Tests(deqp::Context &context);
50 
51     void init();
52 
53 private:
54     /* Private member functions */
55     Tests(const Tests &other);
56     Tests &operator=(const Tests &other);
57 };
58 /* Tests class */
59 
60 /** @class IncompleteTextureAccessTest
61  *
62  *  Description:
63  *
64  *    This tests checks access to incomplete texture from shader using
65  *    texture sampler functions. For OpenGL 4.5 and higher (0.0, 0.0, 0.0, 1.0)
66  *    is expected for floating point non-shadow samplers. 0 is expected
67  *    for the shadow sampler.
68  *
69  *  Steps:
70  *
71  *      Prepare incomplete texture of given type.
72  *      Prepare framebuffer with RGBA renderbuffer 1x1 pixels in size
73  *      Prepare program which draws full screen textured quad using given sampler.
74  *      Make draw call.
75  *      Fetch framebuffer data using glReadPixels.
76  *      Compare the values with expected value.
77  *
78  *  Repeat the steps for following samplers:
79  *   -  sampler1D,
80  *   -  sampler2D,
81  *   -  sampler3D,
82  *   -  samplerCube,
83  *   -  sampler2DRect,
84  *   -  sampler1DArray,
85  *   -  sampler2DArray,
86  *   -  samplerCubeArray
87  *  expecting (0.0, 0.0, 0.0, 1.0) and:
88  *   -  sampler1DShadow,
89  *   -  sampler2DShadow,
90  *   -  samplerCubeShadow,
91  *   -  sampler2DRectShadow,
92  *   -  sampler1DArrayShadow,
93  *   -  sampler2DArrayShadow,
94  *   -  samplerCubeArrayShadow
95  *  expecting 0.0.
96  */
97 class SamplerTest : public deqp::TestCase
98 {
99 public:
100     /* Public member functions */
101     SamplerTest(deqp::Context &context);
102 
103     virtual tcu::TestNode::IterateResult iterate();
104 
105 private:
106     /* Private member functions */
107     SamplerTest(const SamplerTest &other);
108     SamplerTest &operator=(const SamplerTest &other);
109 
110     glw::GLuint m_po;
111     glw::GLuint m_to;
112     glw::GLuint m_fbo;
113     glw::GLuint m_rbo;
114     glw::GLuint m_vao;
115 
116     static const struct Configuration
117     {
118         glw::GLenum texture_target;
119         const glw::GLchar *sampler_template;
120         const glw::GLchar *fetch_template;
121         glw::GLfloat expected_result[4];
122         bool is_shadow;
123     } s_configurations[];
124 
125     static const glw::GLuint s_configurations_count;
126 
127     static const glw::GLchar *s_vertex_shader;
128     static const glw::GLchar *s_fragment_shader_head;
129     static const glw::GLchar *s_fragment_shader_body;
130     static const glw::GLchar *s_fragment_shader_tail;
131 
132     void PrepareProgram(Configuration configuration);
133     void PrepareTexture(Configuration configuration);
134     void PrepareVertexArrays();
135     void PrepareFramebuffer();
136     void Draw();
137     bool Check(Configuration configuration);
138     void CleanCase();
139     void CleanTest();
140 };
141 
142 /* SamplerTest class */
143 } // namespace IncompleteTextureAccess
144 } // namespace gl4cts
145 
146 #endif // _GL4CINCOMPLETETEXTUREACCESSTESTS_HPP
147