• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP
2 #define _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program OpenGL ES 3.1 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 Program interface query test case
24  *//*--------------------------------------------------------------------*/
25 
26 #include "tcuDefs.hpp"
27 #include "tes31TestCase.hpp"
28 #include "es31fProgramInterfaceDefinition.hpp"
29 
30 namespace deqp
31 {
32 namespace gles31
33 {
34 namespace Functional
35 {
36 
37 struct ProgramResourceQueryTestTarget
38 {
39 						ProgramResourceQueryTestTarget (ProgramInterface interface_, deUint32 propFlags_);
40 
41 	ProgramInterface	interface;
42 	deUint32			propFlags;
43 };
44 
45 enum ProgramResourcePropFlags
46 {
47 	PROGRAMRESOURCEPROP_ARRAY_SIZE						= (1 <<  1),
48 	PROGRAMRESOURCEPROP_ARRAY_STRIDE					= (1 <<  2),
49 	PROGRAMRESOURCEPROP_ATOMIC_COUNTER_BUFFER_INDEX		= (1 <<  3),
50 	PROGRAMRESOURCEPROP_BLOCK_INDEX						= (1 <<  4),
51 	PROGRAMRESOURCEPROP_LOCATION						= (1 <<  5),
52 	PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR				= (1 <<  6),
53 	PROGRAMRESOURCEPROP_MATRIX_STRIDE					= (1 <<  7),
54 	PROGRAMRESOURCEPROP_NAME_LENGTH						= (1 <<  8),
55 	PROGRAMRESOURCEPROP_OFFSET							= (1 <<  9),
56 	PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER			= (1 << 10),
57 	PROGRAMRESOURCEPROP_TYPE							= (1 << 11),
58 	PROGRAMRESOURCEPROP_BUFFER_BINDING					= (1 << 12),
59 	PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE				= (1 << 13),
60 	PROGRAMRESOURCEPROP_ACTIVE_VARIABLES				= (1 << 14),
61 	PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_SIZE			= (1 << 15),
62 	PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_STRIDE			= (1 << 16),
63 
64 	PROGRAMRESOURCEPROP_UNIFORM_INTERFACE_MASK			= PROGRAMRESOURCEPROP_ARRAY_SIZE					|
65 														  PROGRAMRESOURCEPROP_ARRAY_STRIDE					|
66 														  PROGRAMRESOURCEPROP_ATOMIC_COUNTER_BUFFER_INDEX	|
67 														  PROGRAMRESOURCEPROP_BLOCK_INDEX					|
68 														  PROGRAMRESOURCEPROP_LOCATION						|
69 														  PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR				|
70 														  PROGRAMRESOURCEPROP_MATRIX_STRIDE					|
71 														  PROGRAMRESOURCEPROP_NAME_LENGTH					|
72 														  PROGRAMRESOURCEPROP_OFFSET						|
73 														  PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER			|
74 														  PROGRAMRESOURCEPROP_TYPE,
75 
76 	PROGRAMRESOURCEPROP_UNIFORM_BLOCK_INTERFACE_MASK	= PROGRAMRESOURCEPROP_NAME_LENGTH					|
77 														  PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER			|
78 														  PROGRAMRESOURCEPROP_BUFFER_BINDING				|
79 														  PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE				|
80 														  PROGRAMRESOURCEPROP_ACTIVE_VARIABLES,
81 
82 	PROGRAMRESOURCEPROP_SHADER_STORAGE_BLOCK_MASK		= PROGRAMRESOURCEPROP_NAME_LENGTH					|
83 														  PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER			|
84 														  PROGRAMRESOURCEPROP_BUFFER_BINDING				|
85 														  PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE				|
86 														  PROGRAMRESOURCEPROP_ACTIVE_VARIABLES,
87 
88 	PROGRAMRESOURCEPROP_PROGRAM_INPUT_MASK				= PROGRAMRESOURCEPROP_ARRAY_SIZE					|
89 														  PROGRAMRESOURCEPROP_LOCATION						|
90 														  PROGRAMRESOURCEPROP_NAME_LENGTH					|
91 														  PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER			|
92 														  PROGRAMRESOURCEPROP_TYPE,
93 
94 	PROGRAMRESOURCEPROP_PROGRAM_OUTPUT_MASK				= PROGRAMRESOURCEPROP_ARRAY_SIZE					|
95 														  PROGRAMRESOURCEPROP_LOCATION						|
96 														  PROGRAMRESOURCEPROP_NAME_LENGTH					|
97 														  PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER			|
98 														  PROGRAMRESOURCEPROP_TYPE,
99 
100 	PROGRAMRESOURCEPROP_BUFFER_VARIABLE_MASK			= PROGRAMRESOURCEPROP_ARRAY_SIZE					|
101 														  PROGRAMRESOURCEPROP_ARRAY_STRIDE					|
102 														  PROGRAMRESOURCEPROP_BLOCK_INDEX					|
103 														  PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR				|
104 														  PROGRAMRESOURCEPROP_MATRIX_STRIDE					|
105 														  PROGRAMRESOURCEPROP_NAME_LENGTH					|
106 														  PROGRAMRESOURCEPROP_OFFSET						|
107 														  PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER			|
108 														  PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_SIZE			|
109 														  PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_STRIDE		|
110 														  PROGRAMRESOURCEPROP_TYPE,
111 
112 	PROGRAMRESOURCEPROP_TRANSFORM_FEEDBACK_VARYING_MASK	= PROGRAMRESOURCEPROP_ARRAY_SIZE					|
113 														  PROGRAMRESOURCEPROP_NAME_LENGTH					|
114 														  PROGRAMRESOURCEPROP_TYPE,
115 };
116 
117 class ProgramInterfaceQueryTestCase : public TestCase
118 {
119 public:
120 													ProgramInterfaceQueryTestCase	(Context& context, const char* name, const char* description, ProgramResourceQueryTestTarget queryTarget);
121 													~ProgramInterfaceQueryTestCase	(void);
122 
123 protected:
124 	ProgramInterface								getTargetInterface				(void) const;
125 
126 private:
127 	IterateResult									iterate							(void);
128 	virtual ProgramInterfaceDefinition::Program*	getProgramDefinition			(void) = 0;
129 	virtual std::vector<std::string>				getQueryTargetResources			(void) = 0;
130 
131 	const ProgramResourceQueryTestTarget			m_queryTarget;
132 };
133 
134 void checkProgramResourceUsage (const ProgramInterfaceDefinition::Program* program, const glw::Functions& gl, tcu::TestLog& log);
135 
136 } // Functional
137 } // gles31
138 } // deqp
139 
140 #endif // _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP
141