xref: /aosp_15_r20/external/deqp/external/openglcts/modules/gl/gl4cSparseTextureTests.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 #ifndef _GL4CSPARSETEXTURETESTS_HPP
2 #define _GL4CSPARSETEXTURETESTS_HPP
3 /*-------------------------------------------------------------------------
4  * OpenGL Conformance Test Suite
5  * -----------------------------
6  *
7  * Copyright (c) 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  */ /*!
28  * \file  gl4cSparseTextureTests.hpp
29  * \brief Conformance tests for the GL_ARB_sparse_texture functionality.
30  */ /*-------------------------------------------------------------------*/
31 
32 #include "glcTestCase.hpp"
33 #include "glwDefs.hpp"
34 #include "glwEnums.hpp"
35 #include "tcuDefs.hpp"
36 #include <sstream>
37 #include <vector>
38 
39 #include "gluTextureUtil.hpp"
40 #include "tcuTextureUtil.hpp"
41 
42 using namespace glw;
43 using namespace glu;
44 
45 namespace gl4cts
46 {
47 
48 struct TextureState
49 {
50     GLint width;
51     GLint height;
52     GLint depth;
53     GLint levels;
54     GLint samples;
55     tcu::TextureFormat format;
56 
57     GLint minDepth;
58 
59     GLint pageSizeX;
60     GLint pageSizeY;
61     GLint pageSizeZ;
62 };
63 
64 class SparseTextureUtils
65 {
66 public:
67     static bool verifyQueryError(std::stringstream &log, const char *funcName, GLint target, GLint pname, GLint error,
68                                  GLint expectedError);
69 
70     static bool verifyError(std::stringstream &log, const char *funcName, GLint error, GLint expectedError);
71 
72     static GLint getTargetDepth(GLint target);
73 
74     static void getTexturePageSizes(const Functions &gl, GLint target, GLint format, GLint &pageSizeX, GLint &pageSizeY,
75                                     GLint &pageSizeZ);
76 
77     static void getTextureLevelSize(GLint target, TextureState &state, GLint level, GLint &width, GLint &height,
78                                     GLint &depth);
79 };
80 
81 /** Represents texture static helper
82  **/
83 class Texture
84 {
85 public:
86     /* Public static routines */
87     /* Functionality */
88     static void Bind(const Functions &gl, GLuint id, GLenum target);
89 
90     static void Generate(const Functions &gl, GLuint &out_id);
91 
92     static void Delete(const Functions &gl, GLuint &id);
93 
94     static void Storage(const Functions &gl, GLenum target, GLsizei levels, GLenum internal_format, GLuint width,
95                         GLuint height, GLuint depth);
96 
97     static void GetData(const Functions &gl, GLint level, GLenum target, GLenum format, GLenum type, GLvoid *out_data);
98 
99     static void SubImage(const Functions &gl, GLenum target, GLint level, GLint x, GLint y, GLint z, GLsizei width,
100                          GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
101 
102     /* Public fields */
103     GLuint m_id;
104 
105     /* Public constants */
106     static const GLuint m_invalid_id;
107 };
108 
109 /** Test verifies TexParameter{if}{v}, TexParameterI{u}v, GetTexParameter{if}v
110  * and GetTexParameterIi{u}v queries for <pname>:
111  *   - TEXTURE_SPARSE_ARB,
112  *   - VIRTUAL_PAGE_SIZE_INDEX_ARB.
113  * Test verifies also GetTexParameter{if}v and GetTexParameterIi{u}v queries for <pname>:
114  *   - NUM_SPARSE_LEVELS_ARB
115  **/
116 class TextureParameterQueriesTestCase : public deqp::TestCase
117 {
118 public:
119     /* Public methods */
120     TextureParameterQueriesTestCase(deqp::Context &context);
121 
122     void init();
123     tcu::TestNode::IterateResult iterate();
124 
125 private:
126     /* Private members */
127     std::stringstream mLog;
128 
129     std::vector<GLint> mSupportedTargets;
130     std::vector<GLint> mNotSupportedTargets;
131 
132     /* Private methods */
133     bool testTextureSparseARB(const Functions &gl, GLint target, GLint expectedError = GL_NO_ERROR);
134     bool testVirtualPageSizeIndexARB(const Functions &gl, GLint target, GLint expectedError = GL_NO_ERROR);
135     bool testNumSparseLevelsARB(const Functions &gl, GLint target);
136 
137     bool checkGetTexParameter(const Functions &gl, GLint target, GLint pname, GLint expected);
138 };
139 
140 /** Test verifies GetInternalformativ query for formats from Table 8.12 and <pname>:
141  *   - NUM_VIRTUAL_PAGE_SIZES_ARB,
142  *   - VIRTUAL_PAGE_SIZE_X_ARB,
143  *   - VIRTUAL_PAGE_SIZE_Y_ARB,
144  *   - VIRTUAL_PAGE_SIZE_Z_ARB.
145  **/
146 class InternalFormatQueriesTestCase : public deqp::TestCase
147 {
148 public:
149     /* Public methods */
150     InternalFormatQueriesTestCase(deqp::Context &context);
151 
152     void init();
153     tcu::TestNode::IterateResult iterate();
154 
155 private:
156     /* Private methods */
157     std::stringstream mLog;
158 
159     std::vector<GLint> mSupportedTargets;
160     std::vector<GLint> mSupportedInternalFormats;
161 
162     /* Private members */
163 };
164 
165 /** Test verifies GetIntegerv, GetFloatv, GetDoublev, GetInteger64v,
166  * and GetBooleanv queries for <pname>:
167  *   - MAX_SPARSE_TEXTURE_SIZE_ARB,
168  *   - MAX_SPARSE_3D_TEXTURE_SIZE_ARB,
169  *   - MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB,
170  *   - SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB.
171  **/
172 class SimpleQueriesTestCase : public deqp::TestCase
173 {
174 public:
175     /* Public methods */
176     SimpleQueriesTestCase(deqp::Context &context);
177 
178     tcu::TestNode::IterateResult iterate();
179 
180 private:
181     /* Private methods */
182     /* Private members */
183     void testSipmleQueries(const Functions &gl, GLint pname);
184 };
185 
186 /** Test verifies glTexStorage* functionality added by ARB_sparse_texture extension
187  **/
188 class SparseTextureAllocationTestCase : public deqp::TestCase
189 {
190 public:
191     /* Public methods */
192     SparseTextureAllocationTestCase(deqp::Context &context);
193 
194     SparseTextureAllocationTestCase(deqp::Context &context, const char *name, const char *description);
195 
196     virtual void init();
197     virtual tcu::TestNode::IterateResult iterate();
198 
199 protected:
200     /* Protected methods */
201     std::stringstream mLog;
202 
203     std::vector<GLint> mSupportedTargets;
204     std::vector<GLint> mFullArrayTargets;
205     std::vector<GLint> mSupportedInternalFormats;
206 
207     /* Protected members */
208     bool positiveTesting(const Functions &gl, GLint target, GLint format);
209     bool verifyTexParameterErrors(const Functions &gl, GLint target, GLint format);
210     bool verifyTexStorageVirtualPageSizeIndexError(const Functions &gl, GLint target, GLint format);
211     bool verifyTexStorageFullArrayCubeMipmapsError(const Functions &gl, GLint target, GLint format);
212     bool verifyTexStorageInvalidValueErrors(const Functions &gl, GLint target, GLint format);
213 };
214 
215 /** Test verifies glTexPageCommitmentARB functionality added by ARB_sparse_texture extension
216  **/
217 class SparseTextureCommitmentTestCase : public deqp::TestCase
218 {
219 public:
220     /* Public methods */
221     SparseTextureCommitmentTestCase(deqp::Context &context);
222 
223     SparseTextureCommitmentTestCase(deqp::Context &context, const char *name, const char *description);
224 
225     virtual void init();
226     virtual tcu::TestNode::IterateResult iterate();
227 
228 protected:
229     /* Protected members */
230     std::stringstream mLog;
231 
232     std::vector<GLint> mSupportedTargets;
233     std::vector<GLint> mSupportedInternalFormats;
234 
235     TextureState mState;
236 
237     /* Protected methods */
238     virtual void texPageCommitment(const Functions &gl, GLint target, GLint format, GLuint &texture, GLint level,
239                                    GLint xOffset, GLint yOffset, GLint zOffset, GLint width, GLint height, GLint depth,
240                                    GLboolean committ);
241 
242     virtual bool caseAllowed(GLint target, GLint format);
243 
244     virtual bool prepareTexture(const Functions &gl, GLint target, GLint format, GLuint &texture);
245     virtual bool sparseAllocateTexture(const Functions &gl, GLint target, GLint format, GLuint &texture, GLint levels);
246     virtual bool allocateTexture(const Functions &gl, GLint target, GLint format, GLuint &texture, GLint levels);
247     virtual bool writeDataToTexture(const Functions &gl, GLint target, GLint format, GLuint &texture, GLint level);
248     virtual bool verifyTextureData(const Functions &gl, GLint target, GLint format, GLuint &texture, GLint level);
249     virtual bool commitTexturePage(const Functions &gl, GLint target, GLint format, GLuint &texture, GLint level);
250 
251     virtual bool isInPageSizesRange(GLint target, GLint level);
252     virtual bool isPageSizesMultiplication(GLint target, GLint level);
253 
254     virtual bool verifyInvalidOperationErrors(const Functions &gl, GLint target, GLint format, GLuint &texture);
255     virtual bool verifyInvalidValueErrors(const Functions &gl, GLint target, GLint format, GLuint &texture);
256 };
257 
258 /** Test verifies glTexturePageCommitmentEXT functionality added by ARB_sparse_texture extension
259  **/
260 class SparseDSATextureCommitmentTestCase : public SparseTextureCommitmentTestCase
261 {
262 public:
263     /* Public methods */
264     SparseDSATextureCommitmentTestCase(deqp::Context &context);
265 
266     virtual tcu::TestNode::IterateResult iterate();
267 
268 private:
269     /* Private methods */
270     virtual void texPageCommitment(const Functions &gl, GLint target, GLint format, GLuint &texture, GLint level,
271                                    GLint xOffset, GLint yOffset, GLint zOffset, GLint width, GLint height, GLint depth,
272                                    GLboolean committ);
273 };
274 
275 /** Test group which encapsulates all sparse texture conformance tests */
276 class SparseTextureTests : public deqp::TestCaseGroup
277 {
278 public:
279     /* Public methods */
280     SparseTextureTests(deqp::Context &context);
281 
282     void init();
283 
284 private:
285     SparseTextureTests(const SparseTextureTests &other);
286     SparseTextureTests &operator=(const SparseTextureTests &other);
287 };
288 
289 } // namespace gl4cts
290 
291 #endif // _GL4CSPARSETEXTURETESTS_HPP
292