OLD | NEW |
---|---|
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/error_state_mock.h" | 5 #include "gpu/command_buffer/service/error_state_mock.h" |
6 #include "gpu/command_buffer/service/framebuffer_manager.h" | 6 #include "gpu/command_buffer/service/framebuffer_manager.h" |
7 #include "gpu/command_buffer/service/feature_info.h" | 7 #include "gpu/command_buffer/service/feature_info.h" |
8 #include "gpu/command_buffer/service/gpu_service_test.h" | 8 #include "gpu/command_buffer/service/gpu_service_test.h" |
9 #include "gpu/command_buffer/service/renderbuffer_manager.h" | 9 #include "gpu/command_buffer/service/renderbuffer_manager.h" |
10 #include "gpu/command_buffer/service/test_helper.h" | 10 #include "gpu/command_buffer/service/test_helper.h" |
(...skipping 16 matching lines...) Expand all Loading... | |
27 const GLint kMaxSamples = 4; | 27 const GLint kMaxSamples = 4; |
28 const uint32 kMaxDrawBuffers = 16; | 28 const uint32 kMaxDrawBuffers = 16; |
29 const uint32 kMaxColorAttachments = 16; | 29 const uint32 kMaxColorAttachments = 16; |
30 const bool kUseDefaultTextures = false; | 30 const bool kUseDefaultTextures = false; |
31 | 31 |
32 } // namespace | 32 } // namespace |
33 | 33 |
34 class FramebufferManagerTest : public GpuServiceTest { | 34 class FramebufferManagerTest : public GpuServiceTest { |
35 public: | 35 public: |
36 FramebufferManagerTest() | 36 FramebufferManagerTest() |
37 : manager_(1, 1, ContextGroup::CONTEXT_TYPE_UNDEFINED), | 37 : manager_(1, |
38 1, | |
39 ContextGroup::CONTEXT_TYPE_UNDEFINED, | |
40 new FramebufferCompletenessCache), | |
38 feature_info_(new FeatureInfo()) { | 41 feature_info_(new FeatureInfo()) { |
39 texture_manager_.reset(new TextureManager(NULL, | 42 texture_manager_.reset(new TextureManager(NULL, |
40 feature_info_.get(), | 43 feature_info_.get(), |
41 kMaxTextureSize, | 44 kMaxTextureSize, |
42 kMaxCubemapSize, | 45 kMaxCubemapSize, |
43 kMaxRectangleTextureSize, | 46 kMaxRectangleTextureSize, |
44 kMax3DTextureSize, | 47 kMax3DTextureSize, |
45 kUseDefaultTextures)); | 48 kUseDefaultTextures)); |
46 renderbuffer_manager_.reset(new RenderbufferManager(NULL, | 49 renderbuffer_manager_.reset(new RenderbufferManager(NULL, |
47 kMaxRenderbufferSize, | 50 kMaxRenderbufferSize, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
104 framebuffer1 = manager_.GetFramebuffer(kClient1Id); | 107 framebuffer1 = manager_.GetFramebuffer(kClient1Id); |
105 ASSERT_TRUE(framebuffer1 == NULL); | 108 ASSERT_TRUE(framebuffer1 == NULL); |
106 } | 109 } |
107 | 110 |
108 class FramebufferInfoTestBase : public GpuServiceTest { | 111 class FramebufferInfoTestBase : public GpuServiceTest { |
109 public: | 112 public: |
110 static const GLuint kClient1Id = 1; | 113 static const GLuint kClient1Id = 1; |
111 static const GLuint kService1Id = 11; | 114 static const GLuint kService1Id = 11; |
112 | 115 |
113 explicit FramebufferInfoTestBase(ContextGroup::ContextType context_type) | 116 explicit FramebufferInfoTestBase(ContextGroup::ContextType context_type) |
114 : manager_(kMaxDrawBuffers, kMaxColorAttachments, context_type), | 117 : manager_(kMaxDrawBuffers, |
118 kMaxColorAttachments, | |
119 context_type, | |
120 new FramebufferCompletenessCache), | |
115 feature_info_(new FeatureInfo()) { | 121 feature_info_(new FeatureInfo()) { |
116 texture_manager_.reset(new TextureManager(NULL, | 122 texture_manager_.reset(new TextureManager(NULL, |
117 feature_info_.get(), | 123 feature_info_.get(), |
118 kMaxTextureSize, | 124 kMaxTextureSize, |
119 kMaxCubemapSize, | 125 kMaxCubemapSize, |
120 kMaxRectangleTextureSize, | 126 kMaxRectangleTextureSize, |
121 kMax3DTextureSize, | 127 kMax3DTextureSize, |
122 kUseDefaultTextures)); | 128 kUseDefaultTextures)); |
123 renderbuffer_manager_.reset(new RenderbufferManager(NULL, | 129 renderbuffer_manager_.reset(new RenderbufferManager(NULL, |
124 kMaxRenderbufferSize, | 130 kMaxRenderbufferSize, |
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
825 ASSERT_TRUE(renderbuffer1 != NULL); | 831 ASSERT_TRUE(renderbuffer1 != NULL); |
826 texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id); | 832 texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id); |
827 scoped_refptr<TextureRef> texture2( | 833 scoped_refptr<TextureRef> texture2( |
828 texture_manager_->GetTexture(kTextureClient2Id)); | 834 texture_manager_->GetTexture(kTextureClient2Id)); |
829 ASSERT_TRUE(texture2.get() != NULL); | 835 ASSERT_TRUE(texture2.get() != NULL); |
830 texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D); | 836 texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D); |
831 | 837 |
832 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) | 838 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) |
833 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | 839 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
834 .RetiresOnSaturation(); | 840 .RetiresOnSaturation(); |
835 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); | 841 ASSERT_EQ((GLenum)GL_FRAMEBUFFER_COMPLETE, |
836 | 842 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER)); |
837 // Check a second call for the same type does not call anything | |
838 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { | |
839 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) | |
840 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | |
841 .RetiresOnSaturation(); | |
842 } | |
843 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); | |
no sievers
2015/08/19 00:43:13
I think all of these GetStatus() calls are importa
Tobias Sargeant
2015/08/19 11:33:13
Done, and tested that it fails if the cache is uns
| |
844 | 843 |
845 // Check changing the attachments calls CheckFramebufferStatus. | 844 // Check changing the attachments calls CheckFramebufferStatus. |
846 framebuffer_->AttachTexture( | 845 framebuffer_->AttachTexture( |
847 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1); | 846 GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1); |
848 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) | 847 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) |
849 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)).RetiresOnSaturation(); | 848 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)).RetiresOnSaturation(); |
850 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); | 849 ASSERT_EQ((GLenum)GL_FRAMEBUFFER_COMPLETE, |
851 | 850 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER)); |
852 // Check a second call for the same type does not call anything. | |
853 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { | |
854 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)) | |
855 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | |
856 .RetiresOnSaturation(); | |
857 } | |
858 framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER); | |
859 | 851 |
860 // Check a second call with a different target calls CheckFramebufferStatus. | 852 // Check a second call with a different target calls CheckFramebufferStatus. |
861 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | 853 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) |
862 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | 854 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
863 .RetiresOnSaturation(); | 855 .RetiresOnSaturation(); |
864 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | 856 ASSERT_EQ( |
865 | 857 (GLenum)GL_FRAMEBUFFER_COMPLETE, |
866 // Check a second call for the same type does not call anything. | 858 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER)); |
867 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { | |
868 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | |
869 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | |
870 .RetiresOnSaturation(); | |
871 } | |
872 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | |
873 | 859 |
874 // Check adding another attachment calls CheckFramebufferStatus. | 860 // Check adding another attachment calls CheckFramebufferStatus. |
875 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1); | 861 framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1); |
876 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | 862 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) |
877 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | 863 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
878 .RetiresOnSaturation(); | 864 .RetiresOnSaturation(); |
879 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | 865 ASSERT_EQ( |
880 | 866 (GLenum)GL_FRAMEBUFFER_COMPLETE, |
881 // Check a second call for the same type does not call anything. | 867 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER)); |
882 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { | |
883 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | |
884 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | |
885 .RetiresOnSaturation(); | |
886 } | |
887 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | |
888 | 868 |
889 // Check changing the format calls CheckFramebuffferStatus. | 869 // Check changing the format calls CheckFramebuffferStatus. |
890 TestHelper::SetTexParameteriWithExpectations(gl_.get(), | 870 TestHelper::SetTexParameteriWithExpectations(gl_.get(), |
891 error_state_.get(), | 871 error_state_.get(), |
892 texture_manager_.get(), | 872 texture_manager_.get(), |
893 texture2.get(), | 873 texture2.get(), |
894 GL_TEXTURE_WRAP_S, | 874 GL_TEXTURE_WRAP_S, |
895 GL_CLAMP_TO_EDGE, | 875 GL_CLAMP_TO_EDGE, |
896 GL_NO_ERROR); | 876 GL_NO_ERROR); |
897 | 877 |
898 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | 878 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) |
899 .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)) | 879 .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)) |
900 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | 880 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) |
901 .RetiresOnSaturation(); | 881 .RetiresOnSaturation(); |
902 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | 882 ASSERT_EQ( |
883 (GLenum)GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT, | |
884 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER)); | |
903 | 885 |
904 // Check since it did not return FRAMEBUFFER_COMPLETE that it calls | 886 // Check that incomplete framebuffer statuses are not cached. |
905 // CheckFramebufferStatus | 887 ASSERT_EQ( |
906 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | 888 (GLenum)GL_FRAMEBUFFER_COMPLETE, |
907 | 889 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER)); |
908 // Check putting it back does not call CheckFramebufferStatus. | |
909 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { | |
910 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | |
911 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | |
912 .RetiresOnSaturation(); | |
913 } | |
914 TestHelper::SetTexParameteriWithExpectations(gl_.get(), | |
915 error_state_.get(), | |
916 texture_manager_.get(), | |
917 texture2.get(), | |
918 GL_TEXTURE_WRAP_S, | |
919 GL_REPEAT, | |
920 GL_NO_ERROR); | |
921 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | |
922 | |
923 // Check Unbinding does not call CheckFramebufferStatus | |
924 framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1); | |
925 if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) { | |
926 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) | |
927 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) | |
928 .RetiresOnSaturation(); | |
929 } | |
930 framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER); | |
931 } | 890 } |
932 | 891 |
933 class FramebufferInfoES3Test : public FramebufferInfoTestBase { | 892 class FramebufferInfoES3Test : public FramebufferInfoTestBase { |
934 public: | 893 public: |
935 FramebufferInfoES3Test() | 894 FramebufferInfoES3Test() |
936 : FramebufferInfoTestBase(ContextGroup::CONTEXT_TYPE_WEBGL2) { | 895 : FramebufferInfoTestBase(ContextGroup::CONTEXT_TYPE_WEBGL2) { |
937 } | 896 } |
938 }; | 897 }; |
939 | 898 |
940 TEST_F(FramebufferInfoES3Test, DifferentDimensions) { | 899 TEST_F(FramebufferInfoES3Test, DifferentDimensions) { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
998 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId); | 957 renderbuffer_manager_->GetRenderbuffer(kRenderbufferClientId); |
999 ASSERT_TRUE(renderbuffer != NULL); | 958 ASSERT_TRUE(renderbuffer != NULL); |
1000 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer); | 959 framebuffer_->AttachRenderbuffer(GL_COLOR_ATTACHMENT1, renderbuffer); |
1001 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment()); | 960 EXPECT_TRUE(framebuffer_->GetReadBufferAttachment()); |
1002 } | 961 } |
1003 | 962 |
1004 } // namespace gles2 | 963 } // namespace gles2 |
1005 } // namespace gpu | 964 } // namespace gpu |
1006 | 965 |
1007 | 966 |
OLD | NEW |