Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc

Issue 118203002: During virtual context switches only restore texture units that have changed from the previous cont… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor unittests Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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"
11 #include "gpu/command_buffer/common/id_allocator.h" 11 #include "gpu/command_buffer/common/id_allocator.h"
12 #include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h" 12 #include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
13 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" 13 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
14 #include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h" 14 #include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
15 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 15 #include "gpu/command_buffer/service/cmd_buffer_engine.h"
16 #include "gpu/command_buffer/service/context_group.h" 16 #include "gpu/command_buffer/service/context_group.h"
17 #include "gpu/command_buffer/service/context_state.h"
17 #include "gpu/command_buffer/service/gl_surface_mock.h" 18 #include "gpu/command_buffer/service/gl_surface_mock.h"
18 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h" 19 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
19 #include "gpu/command_buffer/service/gpu_switches.h" 20 #include "gpu/command_buffer/service/gpu_switches.h"
20 #include "gpu/command_buffer/service/image_manager.h" 21 #include "gpu/command_buffer/service/image_manager.h"
21 #include "gpu/command_buffer/service/mailbox_manager.h" 22 #include "gpu/command_buffer/service/mailbox_manager.h"
22 #include "gpu/command_buffer/service/mocks.h" 23 #include "gpu/command_buffer/service/mocks.h"
23 #include "gpu/command_buffer/service/program_manager.h" 24 #include "gpu/command_buffer/service/program_manager.h"
24 #include "gpu/command_buffer/service/stream_texture_manager_mock.h" 25 #include "gpu/command_buffer/service/stream_texture_manager_mock.h"
25 #include "gpu/command_buffer/service/stream_texture_mock.h" 26 #include "gpu/command_buffer/service/stream_texture_mock.h"
26 #include "gpu/command_buffer/service/test_helper.h" 27 #include "gpu/command_buffer/service/test_helper.h"
(...skipping 8786 matching lines...) Expand 10 before | Expand all | Expand 10 after
8813 DiscardFramebufferEXTImmediate& cmd = 8814 DiscardFramebufferEXTImmediate& cmd =
8814 *GetImmediateAs<DiscardFramebufferEXTImmediate>(); 8815 *GetImmediateAs<DiscardFramebufferEXTImmediate>();
8815 cmd.Init(target, count, attachments); 8816 cmd.Init(target, count, attachments);
8816 8817
8817 // Should not result into a call into GL. 8818 // Should not result into a call into GL.
8818 EXPECT_EQ(error::kNoError, 8819 EXPECT_EQ(error::kNoError,
8819 ExecuteImmediateCmd(cmd, sizeof(attachments))); 8820 ExecuteImmediateCmd(cmd, sizeof(attachments)));
8820 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); 8821 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
8821 } 8822 }
8822 8823
8824 TEST_F(GLES2DecoderManualInitTest, RestoreState) {
8825 InitDecoder(
8826 "", // extensions
8827 false, // has alpha
8828 false, // has depth
8829 false, // has stencil
8830 false, // request alpha
8831 false, // request depth
8832 false, // request stencil
8833 false); // bind generates resource
8834 SetupTexture();
8835
8836 InSequence sequence;
8837 // Expect to restore texture bindings for unit GL_TEXTURE0.
8838 AddExpectationsForActiveTexture(GL_TEXTURE0);
8839 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8840 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP,
8841 TestHelper::kServiceDefaultTextureCubemapId);
8842
8843 // Expect to restore texture bindings for remaining units.
8844 for (uint32 i = 1; i < group().max_texture_units() ; ++i) {
8845 AddExpectationsForActiveTexture(GL_TEXTURE0 + i);
8846 AddExpectationsForBindTexture(GL_TEXTURE_2D,
8847 TestHelper::kServiceDefaultTexture2dId);
8848 AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP,
8849 TestHelper::kServiceDefaultTextureCubemapId);
8850 }
8851
8852 // Expect to restore the active texture unit to GL_TEXTURE0.
8853 AddExpectationsForActiveTexture(GL_TEXTURE0);
8854
8855 GetDecoder()->RestoreAllTextureUnitBindings(NULL);
8856 }
8857
8858 TEST_F(GLES2DecoderManualInitTest, RestoreStateWithPreviousState) {
8859 InitDecoder(
8860 "", // extensions
8861 false, // has alpha
8862 false, // has depth
8863 false, // has stencil
8864 false, // request alpha
8865 false, // request depth
8866 false, // request stencil
8867 false); // bind generates resource
8868 SetupTexture();
8869
8870 // Construct a previous ContextState with all texture bindings
8871 // set to default textures.
8872 ContextState prev_state(NULL, NULL);
8873 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
8874
8875 InSequence sequence;
8876 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit,
8877 // since the rest of the bindings haven't changed between the current
8878 // state and the |prev_state|.
8879 AddExpectationsForActiveTexture(GL_TEXTURE0);
8880 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8881
8882 // Expect to restore active texture unit to GL_TEXTURE0.
8883 AddExpectationsForActiveTexture(GL_TEXTURE0);
8884
8885 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
8886 }
8887
8888 TEST_F(GLES2DecoderManualInitTest, RestoreStateActiveUnit1) {
8889 InitDecoder(
8890 "", // extensions
8891 false, // has alpha
8892 false, // has depth
8893 false, // has stencil
8894 false, // request alpha
8895 false, // request depth
8896 false, // request stencil
8897 false); // bind generates resource
8898
8899 // Bind a non-default texture to GL_TEXTURE1 unit.
8900 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
8901 SpecializedSetup<ActiveTexture, 0>(true);
no sievers 2014/01/13 22:06:29 I don't see the specialization for this anywhere (
kaanb 2014/01/14 22:04:22 Removed.
8902 ActiveTexture cmd;
8903 cmd.Init(GL_TEXTURE1);
8904 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8905 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8906 SetupTexture();
8907
8908 // Construct a previous ContextState with all texture bindings
8909 // set to default textures.
8910 ContextState prev_state(NULL, NULL);
8911 InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
8912
8913 InSequence sequence;
8914 // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE1 unit,
8915 // since the rest of the bindings haven't changed between the current
8916 // state and the |prev_state|.
8917 AddExpectationsForActiveTexture(GL_TEXTURE1);
8918 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8919
8920 // Expect to restore active texture unit to GL_TEXTURE1.
8921 AddExpectationsForActiveTexture(GL_TEXTURE1);
8922
8923 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
8924 }
8925
8926 TEST_F(GLES2DecoderManualInitTest, RestoreStateNonDefaultUnit0) {
8927 InitDecoder(
8928 "", // extensions
8929 false, // has alpha
8930 false, // has depth
8931 false, // has stencil
8932 false, // request alpha
8933 false, // request depth
8934 false, // request stencil
8935 false); // bind generates resource
8936
8937 // Bind a non-default texture to GL_TEXTURE1 unit.
8938 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
8939 SpecializedSetup<ActiveTexture, 0>(true);
8940 ActiveTexture cmd;
8941 cmd.Init(GL_TEXTURE1);
8942 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8943 EXPECT_EQ(GL_NO_ERROR, GetGLError());
8944 SetupTexture();
8945
8946 // Construct a previous ContextState with GL_TEXTURE_2D target in
8947 // GL_TEXTURE0 unit bound to a non-default texture and the rest
8948 // set to default textures.
8949 ContextState prev_state(NULL, NULL);
8950 InitializeContextState(&prev_state, 0, 0);
no sievers 2014/01/13 22:06:29 nit: This would break if kServiceDefaultTexture2dI
kaanb 2014/01/14 22:04:22 Done.
8951
8952 InSequence sequence;
8953 // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE0 unit to
8954 // a default texture.
8955 AddExpectationsForActiveTexture(GL_TEXTURE0);
8956 AddExpectationsForBindTexture(GL_TEXTURE_2D,
8957 TestHelper::kServiceDefaultTexture2dId);
8958
8959 // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE1 unit to
8960 // non-default.
8961 AddExpectationsForActiveTexture(GL_TEXTURE1);
8962 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8963
8964 // Expect to restore active texture unit to GL_TEXTURE1.
8965 AddExpectationsForActiveTexture(GL_TEXTURE1);
8966
8967 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
8968 }
8969
8970 TEST_F(GLES2DecoderManualInitTest, RestoreStateNonDefaultUnit1) {
8971 InitDecoder(
8972 "", // extensions
8973 false, // has alpha
8974 false, // has depth
8975 false, // has stencil
8976 false, // request alpha
8977 false, // request depth
8978 false, // request stencil
8979 false); // bind generates resource
8980
8981 // Bind a non-default texture to GL_TEXTURE0 unit.
8982 SetupTexture();
8983
8984 // Construct a previous ContextState with GL_TEXTURE_2D target in
8985 // GL_TEXTURE1 unit bound to a non-default texture and the rest
8986 // set to default textures.
8987 ContextState prev_state(NULL, NULL);
8988 InitializeContextState(&prev_state, 1, 0);
no sievers 2014/01/13 22:06:29 nit: here also use a real id (not 0).
kaanb 2014/01/14 22:04:22 Done.
8989
8990 InSequence sequence;
8991 // Expect to restore GL_TEXTURE_2D binding to the non-default texture
8992 // for GL_TEXTURE0 unit.
8993 AddExpectationsForActiveTexture(GL_TEXTURE0);
8994 AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
8995
8996 // Expect to restore GL_TEXTURE_2D binding to the default texture
8997 // for GL_TEXTURE1 unit.
8998 AddExpectationsForActiveTexture(GL_TEXTURE1);
8999 AddExpectationsForBindTexture(GL_TEXTURE_2D,
9000 TestHelper::kServiceDefaultTexture2dId);
9001
9002 // Expect to restore active texture unit to GL_TEXTURE0.
9003 AddExpectationsForActiveTexture(GL_TEXTURE0);
9004
9005 GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
9006 }
9007
8823 // TODO(gman): Complete this test. 9008 // TODO(gman): Complete this test.
8824 // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) { 9009 // TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) {
8825 // } 9010 // }
8826 9011
8827 // TODO(gman): BufferData 9012 // TODO(gman): BufferData
8828 9013
8829 // TODO(gman): BufferDataImmediate 9014 // TODO(gman): BufferDataImmediate
8830 9015
8831 // TODO(gman): BufferSubData 9016 // TODO(gman): BufferSubData
8832 9017
(...skipping 16 matching lines...) Expand all
8849 // TODO(gman): TexImage2DImmediate 9034 // TODO(gman): TexImage2DImmediate
8850 9035
8851 // TODO(gman): TexSubImage2DImmediate 9036 // TODO(gman): TexSubImage2DImmediate
8852 9037
8853 // TODO(gman): UseProgram 9038 // TODO(gman): UseProgram
8854 9039
8855 // TODO(gman): SwapBuffers 9040 // TODO(gman): SwapBuffers
8856 9041
8857 } // namespace gles2 9042 } // namespace gles2
8858 } // namespace gpu 9043 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698