| 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 <stdint.h> |
| 8 |
| 7 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 8 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 9 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 11 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 12 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 11 #include "gpu/command_buffer/service/cmd_buffer_engine.h" | 13 #include "gpu/command_buffer/service/cmd_buffer_engine.h" |
| 12 #include "gpu/command_buffer/service/context_group.h" | 14 #include "gpu/command_buffer/service/context_group.h" |
| 13 #include "gpu/command_buffer/service/context_state.h" | 15 #include "gpu/command_buffer/service/context_state.h" |
| 14 #include "gpu/command_buffer/service/gl_surface_mock.h" | 16 #include "gpu/command_buffer/service/gl_surface_mock.h" |
| 15 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" | 17 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" |
| 16 | 18 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 using namespace cmds; | 81 using namespace cmds; |
| 80 | 82 |
| 81 class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest { | 83 class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest { |
| 82 public: | 84 public: |
| 83 GLES2DecoderRestoreStateTest() {} | 85 GLES2DecoderRestoreStateTest() {} |
| 84 | 86 |
| 85 protected: | 87 protected: |
| 86 void AddExpectationsForActiveTexture(GLenum unit); | 88 void AddExpectationsForActiveTexture(GLenum unit); |
| 87 void AddExpectationsForBindTexture(GLenum target, GLuint id); | 89 void AddExpectationsForBindTexture(GLenum target, GLuint id); |
| 88 void InitializeContextState(ContextState* state, | 90 void InitializeContextState(ContextState* state, |
| 89 uint32 non_default_unit, | 91 uint32_t non_default_unit, |
| 90 uint32 active_unit); | 92 uint32_t active_unit); |
| 91 }; | 93 }; |
| 92 | 94 |
| 93 INSTANTIATE_TEST_CASE_P(Service, | 95 INSTANTIATE_TEST_CASE_P(Service, |
| 94 GLES2DecoderRestoreStateTest, | 96 GLES2DecoderRestoreStateTest, |
| 95 ::testing::Bool()); | 97 ::testing::Bool()); |
| 96 | 98 |
| 97 void GLES2DecoderRestoreStateTest::AddExpectationsForActiveTexture( | 99 void GLES2DecoderRestoreStateTest::AddExpectationsForActiveTexture( |
| 98 GLenum unit) { | 100 GLenum unit) { |
| 99 EXPECT_CALL(*gl_, ActiveTexture(unit)).Times(1).RetiresOnSaturation(); | 101 EXPECT_CALL(*gl_, ActiveTexture(unit)).Times(1).RetiresOnSaturation(); |
| 100 } | 102 } |
| 101 | 103 |
| 102 void GLES2DecoderRestoreStateTest::AddExpectationsForBindTexture(GLenum target, | 104 void GLES2DecoderRestoreStateTest::AddExpectationsForBindTexture(GLenum target, |
| 103 GLuint id) { | 105 GLuint id) { |
| 104 EXPECT_CALL(*gl_, BindTexture(target, id)).Times(1).RetiresOnSaturation(); | 106 EXPECT_CALL(*gl_, BindTexture(target, id)).Times(1).RetiresOnSaturation(); |
| 105 } | 107 } |
| 106 | 108 |
| 107 void GLES2DecoderRestoreStateTest::InitializeContextState( | 109 void GLES2DecoderRestoreStateTest::InitializeContextState( |
| 108 ContextState* state, | 110 ContextState* state, |
| 109 uint32 non_default_unit, | 111 uint32_t non_default_unit, |
| 110 uint32 active_unit) { | 112 uint32_t active_unit) { |
| 111 state->texture_units.resize(group().max_texture_units()); | 113 state->texture_units.resize(group().max_texture_units()); |
| 112 for (uint32 tt = 0; tt < state->texture_units.size(); ++tt) { | 114 for (uint32_t tt = 0; tt < state->texture_units.size(); ++tt) { |
| 113 TextureRef* ref_cube_map = | 115 TextureRef* ref_cube_map = |
| 114 group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP); | 116 group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP); |
| 115 state->texture_units[tt].bound_texture_cube_map = ref_cube_map; | 117 state->texture_units[tt].bound_texture_cube_map = ref_cube_map; |
| 116 TextureRef* ref_2d = | 118 TextureRef* ref_2d = |
| 117 (tt == non_default_unit) | 119 (tt == non_default_unit) |
| 118 ? group().texture_manager()->GetTexture(client_texture_id_) | 120 ? group().texture_manager()->GetTexture(client_texture_id_) |
| 119 : group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D); | 121 : group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D); |
| 120 state->texture_units[tt].bound_texture_2d = ref_2d; | 122 state->texture_units[tt].bound_texture_2d = ref_2d; |
| 121 } | 123 } |
| 122 state->active_texture_unit = active_unit; | 124 state->active_texture_unit = active_unit; |
| 123 } | 125 } |
| 124 | 126 |
| 125 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousStateBGR) { | 127 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousStateBGR) { |
| 126 InitState init; | 128 InitState init; |
| 127 init.bind_generates_resource = true; | 129 init.bind_generates_resource = true; |
| 128 InitDecoder(init); | 130 InitDecoder(init); |
| 129 SetupTexture(); | 131 SetupTexture(); |
| 130 | 132 |
| 131 InSequence sequence; | 133 InSequence sequence; |
| 132 // Expect to restore texture bindings for unit GL_TEXTURE0. | 134 // Expect to restore texture bindings for unit GL_TEXTURE0. |
| 133 AddExpectationsForActiveTexture(GL_TEXTURE0); | 135 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 134 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 136 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
| 135 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, | 137 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, |
| 136 TestHelper::kServiceDefaultTextureCubemapId); | 138 TestHelper::kServiceDefaultTextureCubemapId); |
| 137 | 139 |
| 138 // Expect to restore texture bindings for remaining units. | 140 // Expect to restore texture bindings for remaining units. |
| 139 for (uint32 i = 1; i < group().max_texture_units(); ++i) { | 141 for (uint32_t i = 1; i < group().max_texture_units(); ++i) { |
| 140 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); | 142 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); |
| 141 AddExpectationsForBindTexture(GL_TEXTURE_2D, | 143 AddExpectationsForBindTexture(GL_TEXTURE_2D, |
| 142 TestHelper::kServiceDefaultTexture2dId); | 144 TestHelper::kServiceDefaultTexture2dId); |
| 143 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, | 145 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, |
| 144 TestHelper::kServiceDefaultTextureCubemapId); | 146 TestHelper::kServiceDefaultTextureCubemapId); |
| 145 } | 147 } |
| 146 | 148 |
| 147 // Expect to restore the active texture unit to GL_TEXTURE0. | 149 // Expect to restore the active texture unit to GL_TEXTURE0. |
| 148 AddExpectationsForActiveTexture(GL_TEXTURE0); | 150 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 149 | 151 |
| 150 GetDecoder()->RestoreAllTextureUnitBindings(NULL); | 152 GetDecoder()->RestoreAllTextureUnitBindings(NULL); |
| 151 } | 153 } |
| 152 | 154 |
| 153 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousState) { | 155 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousState) { |
| 154 InitState init; | 156 InitState init; |
| 155 InitDecoder(init); | 157 InitDecoder(init); |
| 156 SetupTexture(); | 158 SetupTexture(); |
| 157 | 159 |
| 158 InSequence sequence; | 160 InSequence sequence; |
| 159 // Expect to restore texture bindings for unit GL_TEXTURE0. | 161 // Expect to restore texture bindings for unit GL_TEXTURE0. |
| 160 AddExpectationsForActiveTexture(GL_TEXTURE0); | 162 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 161 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 163 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
| 162 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); | 164 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); |
| 163 | 165 |
| 164 // Expect to restore texture bindings for remaining units. | 166 // Expect to restore texture bindings for remaining units. |
| 165 for (uint32 i = 1; i < group().max_texture_units(); ++i) { | 167 for (uint32_t i = 1; i < group().max_texture_units(); ++i) { |
| 166 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); | 168 AddExpectationsForActiveTexture(GL_TEXTURE0 + i); |
| 167 AddExpectationsForBindTexture(GL_TEXTURE_2D, 0); | 169 AddExpectationsForBindTexture(GL_TEXTURE_2D, 0); |
| 168 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); | 170 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0); |
| 169 } | 171 } |
| 170 | 172 |
| 171 // Expect to restore the active texture unit to GL_TEXTURE0. | 173 // Expect to restore the active texture unit to GL_TEXTURE0. |
| 172 AddExpectationsForActiveTexture(GL_TEXTURE0); | 174 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 173 | 175 |
| 174 GetDecoder()->RestoreAllTextureUnitBindings(NULL); | 176 GetDecoder()->RestoreAllTextureUnitBindings(NULL); |
| 175 } | 177 } |
| 176 | 178 |
| 177 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousStateBGR) { | 179 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousStateBGR) { |
| 178 InitState init; | 180 InitState init; |
| 179 init.bind_generates_resource = true; | 181 init.bind_generates_resource = true; |
| 180 InitDecoder(init); | 182 InitDecoder(init); |
| 181 SetupTexture(); | 183 SetupTexture(); |
| 182 | 184 |
| 183 // Construct a previous ContextState with all texture bindings | 185 // Construct a previous ContextState with all texture bindings |
| 184 // set to default textures. | 186 // set to default textures. |
| 185 ContextState prev_state(NULL, NULL, NULL); | 187 ContextState prev_state(NULL, NULL, NULL); |
| 186 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); | 188 InitializeContextState(&prev_state, std::numeric_limits<uint32_t>::max(), 0); |
| 187 | 189 |
| 188 InSequence sequence; | 190 InSequence sequence; |
| 189 // 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, |
| 190 // 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 |
| 191 // state and the |prev_state|. | 193 // state and the |prev_state|. |
| 192 AddExpectationsForActiveTexture(GL_TEXTURE0); | 194 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 193 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 195 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
| 194 | 196 |
| 195 // Expect to restore active texture unit to GL_TEXTURE0. | 197 // Expect to restore active texture unit to GL_TEXTURE0. |
| 196 AddExpectationsForActiveTexture(GL_TEXTURE0); | 198 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 197 | 199 |
| 198 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 200 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
| 199 } | 201 } |
| 200 | 202 |
| 201 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousState) { | 203 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousState) { |
| 202 InitState init; | 204 InitState init; |
| 203 InitDecoder(init); | 205 InitDecoder(init); |
| 204 SetupTexture(); | 206 SetupTexture(); |
| 205 | 207 |
| 206 // Construct a previous ContextState with all texture bindings | 208 // Construct a previous ContextState with all texture bindings |
| 207 // set to default textures. | 209 // set to default textures. |
| 208 ContextState prev_state(NULL, NULL, NULL); | 210 ContextState prev_state(NULL, NULL, NULL); |
| 209 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); | 211 InitializeContextState(&prev_state, std::numeric_limits<uint32_t>::max(), 0); |
| 210 | 212 |
| 211 InSequence sequence; | 213 InSequence sequence; |
| 212 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit, | 214 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit, |
| 213 // since the rest of the bindings haven't changed between the current | 215 // since the rest of the bindings haven't changed between the current |
| 214 // state and the |prev_state|. | 216 // state and the |prev_state|. |
| 215 AddExpectationsForActiveTexture(GL_TEXTURE0); | 217 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 216 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 218 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
| 217 | 219 |
| 218 // Expect to restore active texture unit to GL_TEXTURE0. | 220 // Expect to restore active texture unit to GL_TEXTURE0. |
| 219 AddExpectationsForActiveTexture(GL_TEXTURE0); | 221 AddExpectationsForActiveTexture(GL_TEXTURE0); |
| 220 | 222 |
| 221 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); | 223 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state); |
| 222 } | 224 } |
| 223 | 225 |
| 224 TEST_P(GLES2DecoderRestoreStateTest, ActiveUnit1) { | 226 TEST_P(GLES2DecoderRestoreStateTest, ActiveUnit1) { |
| 225 InitState init; | 227 InitState init; |
| 226 InitDecoder(init); | 228 InitDecoder(init); |
| 227 | 229 |
| 228 // Bind a non-default texture to GL_TEXTURE1 unit. | 230 // Bind a non-default texture to GL_TEXTURE1 unit. |
| 229 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); | 231 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); |
| 230 ActiveTexture cmd; | 232 ActiveTexture cmd; |
| 231 cmd.Init(GL_TEXTURE1); | 233 cmd.Init(GL_TEXTURE1); |
| 232 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 234 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 233 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 235 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 234 SetupTexture(); | 236 SetupTexture(); |
| 235 | 237 |
| 236 // Construct a previous ContextState with all texture bindings | 238 // Construct a previous ContextState with all texture bindings |
| 237 // set to default textures. | 239 // set to default textures. |
| 238 ContextState prev_state(NULL, NULL, NULL); | 240 ContextState prev_state(NULL, NULL, NULL); |
| 239 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0); | 241 InitializeContextState(&prev_state, std::numeric_limits<uint32_t>::max(), 0); |
| 240 | 242 |
| 241 InSequence sequence; | 243 InSequence sequence; |
| 242 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE1 unit, | 244 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE1 unit, |
| 243 // since the rest of the bindings haven't changed between the current | 245 // since the rest of the bindings haven't changed between the current |
| 244 // state and the |prev_state|. | 246 // state and the |prev_state|. |
| 245 AddExpectationsForActiveTexture(GL_TEXTURE1); | 247 AddExpectationsForActiveTexture(GL_TEXTURE1); |
| 246 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); | 248 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId); |
| 247 | 249 |
| 248 // Expect to restore active texture unit to GL_TEXTURE1. | 250 // Expect to restore active texture unit to GL_TEXTURE1. |
| 249 AddExpectationsForActiveTexture(GL_TEXTURE1); | 251 AddExpectationsForActiveTexture(GL_TEXTURE1); |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). | 471 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). |
| 470 | 472 |
| 471 // TODO(vmiura): Tests for ContextState::RestoreRenderbufferBindings(). | 473 // TODO(vmiura): Tests for ContextState::RestoreRenderbufferBindings(). |
| 472 | 474 |
| 473 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). | 475 // TODO(vmiura): Tests for ContextState::RestoreProgramBindings(). |
| 474 | 476 |
| 475 // TODO(vmiura): Tests for ContextState::RestoreGlobalState(). | 477 // TODO(vmiura): Tests for ContextState::RestoreGlobalState(). |
| 476 | 478 |
| 477 } // namespace gles2 | 479 } // namespace gles2 |
| 478 } // namespace gpu | 480 } // namespace gpu |
| OLD | NEW |