OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 (tt == non_default_unit) | 92 (tt == non_default_unit) |
93 ? group().texture_manager()->GetTexture(client_texture_id_) | 93 ? group().texture_manager()->GetTexture(client_texture_id_) |
94 : group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D); | 94 : group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D); |
95 state->texture_units[tt].bound_texture_2d = ref_2d; | 95 state->texture_units[tt].bound_texture_2d = ref_2d; |
96 } | 96 } |
97 state->active_texture_unit = active_unit; | 97 state->active_texture_unit = active_unit; |
98 } | 98 } |
99 | 99 |
100 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousStateBGR) { | 100 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousStateBGR) { |
101 InitState init; | 101 InitState init; |
102 init.gl_version = "3.0"; | |
103 init.bind_generates_resource = true; | 102 init.bind_generates_resource = true; |
104 InitDecoder(init); | 103 InitDecoder(init); |
105 SetupTexture(); | 104 SetupTexture(); |
106 | 105 |
107 InSequence sequence; | 106 InSequence sequence; |
108 // Expect to restore texture bindings for unit GL_TEXTURE0. | 107 // Expect to restore texture bindings for unit GL_TEXTURE0. |
109 AddExpectationsForActiveTexture(GL_TEXTURE0); | 108 AddExpectationsForActiveTexture(GL_TEXTURE0); |
110 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 109 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
111 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, | 110 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, |
112 TestHelper::kServiceDefaultTextureCubemapId); | 111 TestHelper::kServiceDefaultTextureCubemapId); |
113 | 112 |
114 // Expect to restore texture bindings for remaining units. | 113 // Expect to restore texture bindings for remaining units. |
115 for (uint32 i = 1; i < group().max_texture_units(); ++i) { | 114 for (uint32 i = 1; i < group().max_texture_units(); ++i) { |
116 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); | 115 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); |
117 AddExpectationsForBindTexture(GL_TEXTURE_2D, | 116 AddExpectationsForBindTexture(GL_TEXTURE_2D, |
118 TestHelper::kServiceDefaultTexture2dId); | 117 TestHelper::kServiceDefaultTexture2dId); |
119 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, | 118 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, |
120 TestHelper::kServiceDefaultTextureCubemapId); | 119 TestHelper::kServiceDefaultTextureCubemapId); |
121 } | 120 } |
122 | 121 |
123 // Expect to restore the active texture unit to GL_TEXTURE0. | 122 // Expect to restore the active texture unit to GL_TEXTURE0. |
124 AddExpectationsForActiveTexture(GL_TEXTURE0); | 123 AddExpectationsForActiveTexture(GL_TEXTURE0); |
125 | 124 |
126 GetDecoder()->RestoreAllTextureUnitBindings(NULL); | 125 GetDecoder()->RestoreAllTextureUnitBindings(NULL); |
127 } | 126 } |
128 | 127 |
129 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousState) { | 128 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousState) { |
130 InitState init; | 129 InitState init; |
131 init.gl_version = "3.0"; | |
132 InitDecoder(init); | 130 InitDecoder(init); |
133 SetupTexture(); | 131 SetupTexture(); |
134 | 132 |
135 InSequence sequence; | 133 InSequence sequence; |
136 // Expect to restore texture bindings for unit GL_TEXTURE0. | 134 // Expect to restore texture bindings for unit GL_TEXTURE0. |
137 AddExpectationsForActiveTexture(GL_TEXTURE0); | 135 AddExpectationsForActiveTexture(GL_TEXTURE0); |
138 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 136 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
139 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); | 137 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); |
140 | 138 |
141 // Expect to restore texture bindings for remaining units. | 139 // Expect to restore texture bindings for remaining units. |
142 for (uint32 i = 1; i < group().max_texture_units(); ++i) { | 140 for (uint32 i = 1; i < group().max_texture_units(); ++i) { |
143 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); | 141 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); |
144 AddExpectationsForBindTexture(GL_TEXTURE_2D, 0); | 142 AddExpectationsForBindTexture(GL_TEXTURE_2D, 0); |
145 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); | 143 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); |
146 } | 144 } |
147 | 145 |
148 // Expect to restore the active texture unit to GL_TEXTURE0. | 146 // Expect to restore the active texture unit to GL_TEXTURE0. |
149 AddExpectationsForActiveTexture(GL_TEXTURE0); | 147 AddExpectationsForActiveTexture(GL_TEXTURE0); |
150 | 148 |
151 GetDecoder()->RestoreAllTextureUnitBindings(NULL); | 149 GetDecoder()->RestoreAllTextureUnitBindings(NULL); |
152 } | 150 } |
153 | 151 |
154 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousStateBGR) { | 152 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousStateBGR) { |
155 InitState init; | 153 InitState init; |
156 init.gl_version = "3.0"; | |
157 init.bind_generates_resource = true; | 154 init.bind_generates_resource = true; |
158 InitDecoder(init); | 155 InitDecoder(init); |
159 SetupTexture(); | 156 SetupTexture(); |
160 | 157 |
161 // Construct a previous ContextState with all texture bindings | 158 // Construct a previous ContextState with all texture bindings |
162 // set to default textures. | 159 // set to default textures. |
163 ContextState prev_state(NULL, NULL, NULL); | 160 ContextState prev_state(NULL, NULL, NULL); |
164 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); | 161 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); |
165 | 162 |
166 InSequence sequence; | 163 InSequence sequence; |
167 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit, | 164 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit, |
168 // since the rest of the bindings haven't changed between the current | 165 // since the rest of the bindings haven't changed between the current |
169 // state and the |prev_state|. | 166 // state and the |prev_state|. |
170 AddExpectationsForActiveTexture(GL_TEXTURE0); | 167 AddExpectationsForActiveTexture(GL_TEXTURE0); |
171 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 168 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
172 | 169 |
173 // Expect to restore active texture unit to GL_TEXTURE0. | 170 // Expect to restore active texture unit to GL_TEXTURE0. |
174 AddExpectationsForActiveTexture(GL_TEXTURE0); | 171 AddExpectationsForActiveTexture(GL_TEXTURE0); |
175 | 172 |
176 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 173 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
177 } | 174 } |
178 | 175 |
179 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousState) { | 176 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousState) { |
180 InitState init; | 177 InitState init; |
181 init.gl_version = "3.0"; | |
182 InitDecoder(init); | 178 InitDecoder(init); |
183 SetupTexture(); | 179 SetupTexture(); |
184 | 180 |
185 // Construct a previous ContextState with all texture bindings | 181 // Construct a previous ContextState with all texture bindings |
186 // set to default textures. | 182 // set to default textures. |
187 ContextState prev_state(NULL, NULL, NULL); | 183 ContextState prev_state(NULL, NULL, NULL); |
188 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); | 184 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); |
189 | 185 |
190 InSequence sequence; | 186 InSequence sequence; |
191 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit, | 187 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit, |
192 // since the rest of the bindings haven't changed between the current | 188 // since the rest of the bindings haven't changed between the current |
193 // state and the |prev_state|. | 189 // state and the |prev_state|. |
194 AddExpectationsForActiveTexture(GL_TEXTURE0); | 190 AddExpectationsForActiveTexture(GL_TEXTURE0); |
195 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 191 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
196 | 192 |
197 // Expect to restore active texture unit to GL_TEXTURE0. | 193 // Expect to restore active texture unit to GL_TEXTURE0. |
198 AddExpectationsForActiveTexture(GL_TEXTURE0); | 194 AddExpectationsForActiveTexture(GL_TEXTURE0); |
199 | 195 |
200 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 196 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
201 } | 197 } |
202 | 198 |
203 TEST_P(GLES2DecoderRestoreStateTest, ActiveUnit1) { | 199 TEST_P(GLES2DecoderRestoreStateTest, ActiveUnit1) { |
204 InitState init; | 200 InitState init; |
205 init.gl_version = "3.0"; | |
206 InitDecoder(init); | 201 InitDecoder(init); |
207 | 202 |
208 // Bind a non-default texture to GL_TEXTURE1 unit. | 203 // Bind a non-default texture to GL_TEXTURE1 unit. |
209 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); | 204 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); |
210 ActiveTexture cmd; | 205 ActiveTexture cmd; |
211 cmd.Init(GL_TEXTURE1); | 206 cmd.Init(GL_TEXTURE1); |
212 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 207 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
213 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 208 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
214 SetupTexture(); | 209 SetupTexture(); |
215 | 210 |
(...skipping 10 matching lines...) Expand all Loading... |
226 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 221 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
227 | 222 |
228 // Expect to restore active texture unit to GL_TEXTURE1. | 223 // Expect to restore active texture unit to GL_TEXTURE1. |
229 AddExpectationsForActiveTexture(GL_TEXTURE1); | 224 AddExpectationsForActiveTexture(GL_TEXTURE1); |
230 | 225 |
231 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 226 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
232 } | 227 } |
233 | 228 |
234 TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit0BGR) { | 229 TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit0BGR) { |
235 InitState init; | 230 InitState init; |
236 init.gl_version = "3.0"; | |
237 init.bind_generates_resource = true; | 231 init.bind_generates_resource = true; |
238 InitDecoder(init); | 232 InitDecoder(init); |
239 | 233 |
240 // Bind a non-default texture to GL_TEXTURE1 unit. | 234 // Bind a non-default texture to GL_TEXTURE1 unit. |
241 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); | 235 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); |
242 SpecializedSetup<ActiveTexture, 0>(true); | 236 SpecializedSetup<ActiveTexture, 0>(true); |
243 ActiveTexture cmd; | 237 ActiveTexture cmd; |
244 cmd.Init(GL_TEXTURE1); | 238 cmd.Init(GL_TEXTURE1); |
245 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 239 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
246 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 240 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
(...skipping 18 matching lines...) Expand all Loading... |
265 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 259 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
266 | 260 |
267 // Expect to restore active texture unit to GL_TEXTURE1. | 261 // Expect to restore active texture unit to GL_TEXTURE1. |
268 AddExpectationsForActiveTexture(GL_TEXTURE1); | 262 AddExpectationsForActiveTexture(GL_TEXTURE1); |
269 | 263 |
270 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 264 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
271 } | 265 } |
272 | 266 |
273 TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit1BGR) { | 267 TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit1BGR) { |
274 InitState init; | 268 InitState init; |
275 init.gl_version = "3.0"; | |
276 init.bind_generates_resource = true; | 269 init.bind_generates_resource = true; |
277 InitDecoder(init); | 270 InitDecoder(init); |
278 | 271 |
279 // Bind a non-default texture to GL_TEXTURE0 unit. | 272 // Bind a non-default texture to GL_TEXTURE0 unit. |
280 SetupTexture(); | 273 SetupTexture(); |
281 | 274 |
282 // Construct a previous ContextState with GL_TEXTURE_2D target in | 275 // Construct a previous ContextState with GL_TEXTURE_2D target in |
283 // GL_TEXTURE1 unit bound to a non-default texture and the rest | 276 // GL_TEXTURE1 unit bound to a non-default texture and the rest |
284 // set to default textures. | 277 // set to default textures. |
285 ContextState prev_state(NULL, NULL, NULL); | 278 ContextState prev_state(NULL, NULL, NULL); |
(...skipping 12 matching lines...) Expand all Loading... |
298 TestHelper::kServiceDefaultTexture2dId); | 291 TestHelper::kServiceDefaultTexture2dId); |
299 | 292 |
300 // Expect to restore active texture unit to GL_TEXTURE0. | 293 // Expect to restore active texture unit to GL_TEXTURE0. |
301 AddExpectationsForActiveTexture(GL_TEXTURE0); | 294 AddExpectationsForActiveTexture(GL_TEXTURE0); |
302 | 295 |
303 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 296 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
304 } | 297 } |
305 | 298 |
306 TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit0) { | 299 TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit0) { |
307 InitState init; | 300 InitState init; |
308 init.gl_version = "3.0"; | |
309 InitDecoder(init); | 301 InitDecoder(init); |
310 | 302 |
311 // Bind a non-default texture to GL_TEXTURE1 unit. | 303 // Bind a non-default texture to GL_TEXTURE1 unit. |
312 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); | 304 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); |
313 SpecializedSetup<ActiveTexture, 0>(true); | 305 SpecializedSetup<ActiveTexture, 0>(true); |
314 ActiveTexture cmd; | 306 ActiveTexture cmd; |
315 cmd.Init(GL_TEXTURE1); | 307 cmd.Init(GL_TEXTURE1); |
316 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 308 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
317 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 309 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
318 SetupTexture(); | 310 SetupTexture(); |
(...skipping 16 matching lines...) Expand all Loading... |
335 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 327 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
336 | 328 |
337 // Expect to restore active texture unit to GL_TEXTURE1. | 329 // Expect to restore active texture unit to GL_TEXTURE1. |
338 AddExpectationsForActiveTexture(GL_TEXTURE1); | 330 AddExpectationsForActiveTexture(GL_TEXTURE1); |
339 | 331 |
340 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 332 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
341 } | 333 } |
342 | 334 |
343 TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit1) { | 335 TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit1) { |
344 InitState init; | 336 InitState init; |
345 init.gl_version = "3.0"; | |
346 InitDecoder(init); | 337 InitDecoder(init); |
347 | 338 |
348 // Bind a non-default texture to GL_TEXTURE0 unit. | 339 // Bind a non-default texture to GL_TEXTURE0 unit. |
349 SetupTexture(); | 340 SetupTexture(); |
350 | 341 |
351 // Construct a previous ContextState with GL_TEXTURE_2D target in | 342 // Construct a previous ContextState with GL_TEXTURE_2D target in |
352 // GL_TEXTURE1 unit bound to a non-default texture and the rest | 343 // GL_TEXTURE1 unit bound to a non-default texture and the rest |
353 // set to default textures. | 344 // set to default textures. |
354 ContextState prev_state(NULL, NULL, NULL); | 345 ContextState prev_state(NULL, NULL, NULL); |
355 InitializeContextState(&prev_state, 1, kServiceTextureId); | 346 InitializeContextState(&prev_state, 1, kServiceTextureId); |
(...skipping 28 matching lines...) Expand all Loading... |
384 {GL_DEPTH_TEST, false, false}, | 375 {GL_DEPTH_TEST, false, false}, |
385 {GL_DITHER, true, true}, | 376 {GL_DITHER, true, true}, |
386 {GL_POLYGON_OFFSET_FILL, false, true}, | 377 {GL_POLYGON_OFFSET_FILL, false, true}, |
387 {GL_SAMPLE_ALPHA_TO_COVERAGE, false, true}, | 378 {GL_SAMPLE_ALPHA_TO_COVERAGE, false, true}, |
388 {GL_SAMPLE_COVERAGE, false, true}, | 379 {GL_SAMPLE_COVERAGE, false, true}, |
389 {GL_SCISSOR_TEST, false, true}, | 380 {GL_SCISSOR_TEST, false, true}, |
390 {GL_STENCIL_TEST, false, false}, | 381 {GL_STENCIL_TEST, false, false}, |
391 {0, false, false}}; | 382 {0, false, false}}; |
392 | 383 |
393 InitState init; | 384 InitState init; |
394 init.gl_version = "2.1"; | |
395 InitDecoder(init); | 385 InitDecoder(init); |
396 | 386 |
397 for (int i = 0; test[i].gl_enum; i++) { | 387 for (int i = 0; test[i].gl_enum; i++) { |
398 bool enable_state = test[i].default_state; | 388 bool enable_state = test[i].default_state; |
399 | 389 |
400 // Test setting default state initially is ignored. | 390 // Test setting default state initially is ignored. |
401 EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set); | 391 EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set); |
402 | 392 |
403 // Test new and cached state changes. | 393 // Test new and cached state changes. |
404 for (int n = 0; n < 3; n++) { | 394 for (int n = 0; n < 3; n++) { |
(...skipping 13 matching lines...) Expand all Loading... |
418 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). | 408 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). |
419 | 409 |
420 // TODO(vmiura): Tests for ContextState::RestoreRenderbufferBindings(). | 410 // TODO(vmiura): Tests for ContextState::RestoreRenderbufferBindings(). |
421 | 411 |
422 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). | 412 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). |
423 | 413 |
424 // TODO(vmiura): Tests for ContextState::RestoreGlobalState(). | 414 // TODO(vmiura): Tests for ContextState::RestoreGlobalState(). |
425 | 415 |
426 } // namespace gles2 | 416 } // namespace gles2 |
427 } // namespace gpu | 417 } // namespace gpu |
OLD | NEW |