• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _GL4CSPARSETEXTURE2TESTS_HPP
2 #define _GL4CSPARSETEXTURE2TESTS_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  gl4cSparseTexture2Tests.hpp
29  * \brief Conformance tests for the GL_ARB_sparse_texture2 functionality.
30  */ /*-------------------------------------------------------------------*/
31 
32 #include "glcTestCase.hpp"
33 #include "glwDefs.hpp"
34 #include "glwEnums.hpp"
35 #include "tcuDefs.hpp"
36 #include <map>
37 #include <set>
38 #include <vector>
39 
40 #include "gl4cSparseTextureTests.hpp"
41 #include "gluDrawUtil.hpp"
42 #include "gluShaderProgram.hpp"
43 #include "gluTextureUtil.hpp"
44 #include "tcuTextureUtil.hpp"
45 
46 using namespace glw;
47 using namespace glu;
48 
49 namespace gl4cts
50 {
51 
52 struct PageSizeStruct
53 {
54 	GLint xSize;
55 	GLint ySize;
56 	GLint zSize;
57 
PageSizeStructgl4cts::PageSizeStruct58 	PageSizeStruct() : xSize(0), ySize(0), zSize(0)
59 	{
60 	}
PageSizeStructgl4cts::PageSizeStruct61 	PageSizeStruct(GLint x, GLint y, GLint z) : xSize(x), ySize(y), zSize(z)
62 	{
63 	}
64 };
65 
66 typedef std::pair<GLint, PageSizeStruct> PageSizePair;
67 
68 /** Test verifies if extension is available for GLSL
69  **/
70 class ShaderExtensionTestCase : public deqp::TestCase
71 {
72 public:
73 	/* Public methods */
74 	ShaderExtensionTestCase(deqp::Context& context, const std::string extension);
75 
76 	tcu::TestNode::IterateResult iterate();
77 
78 private:
79 	/* Private members */
80 	std::string mExtension;
81 };
82 
83 /** Test verifies if values returned by GetInternalFormat* query matches Standard Virtual Page Sizes for <pname>:
84  *   - VIRTUAL_PAGE_SIZE_X_ARB,
85  *   - VIRTUAL_PAGE_SIZE_Y_ARB,
86  *   - VIRTUAL_PAGE_SIZE_Z_ARB.
87  **/
88 class StandardPageSizesTestCase : public deqp::TestCase
89 {
90 public:
91 	/* Public methods */
92 	StandardPageSizesTestCase(deqp::Context& context);
93 
94 	void						 init();
95 	tcu::TestNode::IterateResult iterate();
96 
97 private:
98 	/* Private methods */
99 	std::vector<GLint> mSupportedTargets;
100 	std::map<GLint, PageSizeStruct> mStandardVirtualPageSizesTable;
101 
102 	/* Private members */
103 };
104 
105 /** Test verifies glTexStorage* functionality added by ARB_sparse_texture2 extension
106  **/
107 class SparseTexture2AllocationTestCase : public SparseTextureAllocationTestCase
108 {
109 public:
110 	/* Public methods */
111 	SparseTexture2AllocationTestCase(deqp::Context& context);
112 
113 	virtual void						 init();
114 	virtual tcu::TestNode::IterateResult iterate();
115 
116 private:
117 	/* Private methods */
118 };
119 
120 /** Test verifies glTexPageCommitmentARB functionality added by ARB_sparse_texture2 extension
121  **/
122 class SparseTexture2CommitmentTestCase : public SparseTextureCommitmentTestCase
123 {
124 public:
125 	/* Public methods */
126 	SparseTexture2CommitmentTestCase(deqp::Context& context);
127 
128 	SparseTexture2CommitmentTestCase(deqp::Context& context, const char* name, const char* description);
129 
130 	virtual void						 init();
131 	virtual tcu::TestNode::IterateResult iterate();
132 
133 protected:
134 	/* Protected members */
135 	struct TokenStrings
136 	{
137 		std::string format;
138 		std::string pointType;
139 		std::string pointDef;
140 		std::string outputType;
141 		std::string inputType;
142 		std::string returnType;
143 		std::string resultExpected;
144 		std::string resultDefault;
145 		std::string epsilon;
146 		std::string sampleDef;
147 	};
148 
149 	/* Protected methods */
150 	TokenStrings createShaderTokens(GLint target, GLint verifyTarget, GLint format, GLint sample, const std::string outputBase = "image",
151 									const std::string inputBase = "image");
152 
153 	virtual bool caseAllowed(GLint target, GLint format);
154 
155 	virtual bool sparseAllocateTexture(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint levels);
156 	virtual bool allocateTexture(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint levels);
157 	virtual bool writeDataToTexture(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level);
158 	virtual bool verifyTextureData(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level);
159 };
160 
161 /** Test verifies if access to uncommitted regions of sparse texture works as expected
162  **/
163 class UncommittedRegionsAccessTestCase : public SparseTexture2CommitmentTestCase
164 {
165 public:
166 	/* Public methods */
167 	UncommittedRegionsAccessTestCase(deqp::Context& context);
168 
169 	virtual void						 init();
170 	virtual tcu::TestNode::IterateResult iterate();
171 
172 private:
173 	/* Private members */
174 	GLuint mFramebuffer;
175 	GLuint mRenderbuffer;
176 
177 	/* Private methods */
178 	bool readsAllowed(GLint target, GLint format, bool shaderOnly = false);
179 	bool atomicAllowed(GLint target, GLint format);
180 	bool depthStencilAllowed(GLint target, GLint format);
181 
182 	bool UncommittedReads(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level);
183 	bool UncommittedAtomicOperations(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level);
184 	bool UncommittedDepthStencil(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level);
185 
186 	void prepareDepthStencilFramebuffer(const Functions& gl, GLint width, GLint height);
187 	void cleanupDepthStencilFramebuffer(const Functions& gl);
188 	bool verifyTextureDataExtended(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level,
189 								   bool shaderOnly = false);
190 	bool verifyAtomicOperations(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level);
191 	bool verifyStencilTest(const Functions& gl, ShaderProgram& program, GLint width, GLint height,
192 						   GLint widthCommitted);
193 	bool verifyDepthTest(const Functions& gl, ShaderProgram& program, GLint width, GLint height, GLint widthCommitted);
194 	bool verifyDepthBoundsTest(const Functions& gl, ShaderProgram& program, GLint width, GLint height,
195 							   GLint widthCommitted);
196 };
197 
198 /** Test verifies if sparse texture lookup functions for GLSL works as expected
199  **/
200 class SparseTexture2LookupTestCase : public SparseTexture2CommitmentTestCase
201 {
202 public:
203 	/* Public methods */
204 	SparseTexture2LookupTestCase(deqp::Context& context);
205 
206 	SparseTexture2LookupTestCase(deqp::Context& context, const char* name, const char* description);
207 
208 	void						 init();
209 	tcu::TestNode::IterateResult iterate();
210 
211 protected:
212 	/* Protected types */
213 	struct FunctionToken
214 	{
215 		std::string name;
216 		std::string arguments;
217 
218 		std::set<GLint> allowedTargets;
219 
FunctionTokengl4cts::SparseTexture2LookupTestCase::FunctionToken220 		FunctionToken()
221 		{
222 		}
223 
FunctionTokengl4cts::SparseTexture2LookupTestCase::FunctionToken224 		FunctionToken(std::string fname, std::string fargs) : name(fname), arguments(fargs)
225 		{
226 		}
227 	};
228 
229 	struct TokenStringsExt : public TokenStrings
230 	{
231 		std::string formatDef;
232 		std::string sizeDef;
233 		std::string lod;
234 		std::string lodDef;
235 		std::string coordType;
236 		std::string iCoordType;
237 		std::string coordDef;
238 		std::string cubeMapCoordDef;
239 		std::string refZDef;
240 		std::string cubeMapArrayRefZDef;
241 		std::string offsetDim;
242 		std::string offsetType;
243 		std::string nOffsetType;
244 		std::string componentDef;
245 		std::string offsetArrayDef;
246 		std::string pointCoord;
247 	};
248 
249 	/* Protected members */
250 	std::vector<FunctionToken> mFunctions;
251 
252 	/* Protected methods */
253 	TokenStringsExt createLookupShaderTokens(GLint target, GLint verifyTarget, GLint format, GLint level, GLint sample,
254 											 FunctionToken& funcToken);
255 
256 	virtual bool caseAllowed(GLint target, GLint format);
257 	virtual bool funcAllowed(GLint target, GLint format, FunctionToken& funcToken);
258 
259 	virtual bool writeDataToTexture(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level);
260 
261 	virtual void setupDepthMode(const Functions& gl, GLint target, GLuint& texture);
262 	virtual bool verifyLookupTextureData(const Functions& gl, GLint target, GLint format, GLuint& texture, GLint level,
263 										 FunctionToken& funcToken);
264 };
265 
266 /** Test group which encapsulates all sparse texture conformance tests */
267 class SparseTexture2Tests : public deqp::TestCaseGroup
268 {
269 public:
270 	/* Public methods */
271 	SparseTexture2Tests(deqp::Context& context);
272 
273 	void init();
274 
275 private:
276 	SparseTexture2Tests(const SparseTexture2Tests& other);
277 	SparseTexture2Tests& operator=(const SparseTexture2Tests& other);
278 };
279 
280 void replaceToken(const GLchar* token, const GLchar* text, std::string& string);
281 
282 } /* glcts namespace */
283 
284 #endif // _GL4CSPARSETEXTURE2TESTS_HPP
285