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