@@ -36,16 +36,6 @@ class COpenGLQueryPool final : public IQueryPool
36
36
queries.resize (_params.queryCount );
37
37
gl->extGlCreateQueries (GL_TIMESTAMP, _params.queryCount , queries.data ());
38
38
}
39
- else if (_params.queryType == EQT_TRANSFORM_FEEDBACK_STREAM_EXT)
40
- {
41
- // Vulkan Transform feedback queries write two integers;
42
- // The first integer is the number of primitives successfully written to the corresponding transform feedback buffer
43
- // and the second is the number of primitives output to the vertex stream.
44
- // But in OpenGL there you need twice the queries to get both values.
45
- queries.resize (_params.queryCount * 2 );
46
- gl->extGlCreateQueries (GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, _params.queryCount , queries.data ());
47
- gl->extGlCreateQueries (GL_PRIMITIVES_GENERATED, _params.queryCount , queries.data () + _params.queryCount );
48
- }
49
39
else
50
40
{
51
41
assert (false && " QueryType is not supported." );
@@ -56,6 +46,19 @@ class COpenGLQueryPool final : public IQueryPool
56
46
{
57
47
return core::SRange<const GLuint>(queries.data (), queries.data () + queries.size ());
58
48
}
49
+
50
+ inline GLuint getQueryAt (uint32_t index) const
51
+ {
52
+ if (index < queries.size ())
53
+ {
54
+ return queries[index];
55
+ }
56
+ else
57
+ {
58
+ assert (false );
59
+ return 0u ; // is 0 an invalid GLuint?
60
+ }
61
+ }
59
62
60
63
inline void beginQuery (IOpenGL_FunctionTable* gl, uint32_t queryIndex, E_QUERY_CONTROL_FLAGS flags) const
61
64
{
@@ -70,13 +73,6 @@ class COpenGLQueryPool final : public IQueryPool
70
73
{
71
74
assert (false && " TIMESTAMP Query doesn't work with begin/end functions." );
72
75
}
73
- else if (params.queryType == EQT_TRANSFORM_FEEDBACK_STREAM_EXT)
74
- {
75
- GLuint query1 = getQueryAt (queryIndex);
76
- GLuint query2 = getQueryAt (queryIndex + params.queryCount );
77
- gl->glQuery .pglBeginQuery (GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, query1);
78
- gl->glQuery .pglBeginQuery (GL_PRIMITIVES_GENERATED, query2);
79
- }
80
76
else
81
77
{
82
78
assert (false && " QueryType is not supported." );
@@ -97,11 +93,6 @@ class COpenGLQueryPool final : public IQueryPool
97
93
{
98
94
assert (false && " TIMESTAMP Query doesn't work with begin/end functions." );
99
95
}
100
- else if (params.queryType == EQT_TRANSFORM_FEEDBACK_STREAM_EXT)
101
- {
102
- gl->glQuery .pglEndQuery (GL_PRIMITIVES_GENERATED);
103
- gl->glQuery .pglEndQuery (GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
104
- }
105
96
else
106
97
{
107
98
assert (false && " QueryType is not supported." );
@@ -124,13 +115,6 @@ class COpenGLQueryPool final : public IQueryPool
124
115
{
125
116
assert (false && " TIMESTAMP Query doesn't work with begin/end functions." );
126
117
}
127
- else if (params.queryType == EQT_TRANSFORM_FEEDBACK_STREAM_EXT)
128
- {
129
- GLuint query1 = getQueryAt (queryIndex);
130
- GLuint query2 = getQueryAt (queryIndex + params.queryCount );
131
- gl->glQuery .pglBeginQueryIndexed (GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, index, query1);
132
- gl->glQuery .pglBeginQueryIndexed (GL_PRIMITIVES_GENERATED, index, query2);
133
- }
134
118
else
135
119
{
136
120
assert (false && " QueryType is not supported." );
@@ -151,11 +135,6 @@ class COpenGLQueryPool final : public IQueryPool
151
135
{
152
136
assert (false && " TIMESTAMP Query doesn't work with begin/end functions." );
153
137
}
154
- else if (params.queryType == EQT_TRANSFORM_FEEDBACK_STREAM_EXT)
155
- {
156
- gl->glQuery .pglEndQueryIndexed (GL_PRIMITIVES_GENERATED, index);
157
- gl->glQuery .pglEndQueryIndexed (GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, index);
158
- }
159
138
else
160
139
{
161
140
assert (false && " QueryType is not supported." );
@@ -167,13 +146,9 @@ class COpenGLQueryPool final : public IQueryPool
167
146
{
168
147
// NOTE: There is no Reset Queries on OpenGL but to make the queries invalid/unavailable and not return the previous ones we just delete the queries and recreate them.
169
148
// TODO: Needs test
170
- size_t logicalQuerySize = 0ull ;
171
- if (params.queryType == EQT_TRANSFORM_FEEDBACK_STREAM_EXT)
172
- logicalQuerySize = queries.size () / 2ull ;
173
- else
174
- logicalQuerySize = queries.size ();
149
+ size_t querySize = queries.size ();
175
150
176
- if (query + queryCount > logicalQuerySize )
151
+ if (query + queryCount > querySize )
177
152
{
178
153
assert (false );
179
154
return false ;
@@ -189,32 +164,10 @@ class COpenGLQueryPool final : public IQueryPool
189
164
gl->glQuery .pglDeleteQueries (queryCount, queries.data () + query);
190
165
gl->extGlCreateQueries (GL_TIMESTAMP, queryCount, queries.data () + query);
191
166
}
192
- else if (params.queryType == EQT_TRANSFORM_FEEDBACK_STREAM_EXT)
193
- {
194
- gl->glQuery .pglDeleteQueries (queryCount, queries.data () + query);
195
- gl->glQuery .pglDeleteQueries (queryCount, (queries.data () + logicalQuerySize) + query);
196
- gl->extGlCreateQueries (GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, queryCount, queries.data () + query);
197
- gl->extGlCreateQueries (GL_PRIMITIVES_GENERATED, queryCount, (queries.data () + logicalQuerySize) + query );
198
- }
199
167
200
168
return true ;
201
169
}
202
170
203
- protected:
204
-
205
- inline GLuint getQueryAt (uint32_t index) const
206
- {
207
- if (index < queries.size ())
208
- {
209
- return queries[index];
210
- }
211
- else
212
- {
213
- assert (false );
214
- return 0u ; // is 0 an invalid GLuint?
215
- }
216
- }
217
-
218
171
};
219
172
220
173
} // end namespace nbl::video
0 commit comments