| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 }; | 484 }; |
| 485 | 485 |
| 486 namespace { | 486 namespace { |
| 487 | 487 |
| 488 TEST_F(GLRendererWithDefaultHarnessTest, ExternalStencil) { | 488 TEST_F(GLRendererWithDefaultHarnessTest, ExternalStencil) { |
| 489 gfx::Size viewport_size(1, 1); | 489 gfx::Size viewport_size(1, 1); |
| 490 EXPECT_FALSE(renderer_->stencil_enabled()); | 490 EXPECT_FALSE(renderer_->stencil_enabled()); |
| 491 | 491 |
| 492 output_surface_->set_has_external_stencil_test(true); | 492 output_surface_->set_has_external_stencil_test(true); |
| 493 | 493 |
| 494 RenderPass* root_pass = | 494 RenderPass* root_pass = AddRenderPass( |
| 495 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 495 &render_passes_in_draw_order_, RenderPassId(1, 0), |
| 496 gfx::Rect(viewport_size), gfx::Transform()); | 496 gfx::Rect(viewport_size), gfx::Transform(), FilterOperations()); |
| 497 root_pass->has_transparent_background = false; | 497 root_pass->has_transparent_background = false; |
| 498 | 498 |
| 499 DrawFrame(renderer_.get(), viewport_size); | 499 DrawFrame(renderer_.get(), viewport_size); |
| 500 EXPECT_TRUE(renderer_->stencil_enabled()); | 500 EXPECT_TRUE(renderer_->stencil_enabled()); |
| 501 } | 501 } |
| 502 | 502 |
| 503 class ForbidSynchronousCallContext : public TestWebGraphicsContext3D { | 503 class ForbidSynchronousCallContext : public TestWebGraphicsContext3D { |
| 504 public: | 504 public: |
| 505 ForbidSynchronousCallContext() {} | 505 ForbidSynchronousCallContext() {} |
| 506 | 506 |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 FakeResourceProvider::Create(output_surface->context_provider(), | 683 FakeResourceProvider::Create(output_surface->context_provider(), |
| 684 shared_bitmap_manager.get()); | 684 shared_bitmap_manager.get()); |
| 685 | 685 |
| 686 RendererSettings settings; | 686 RendererSettings settings; |
| 687 FakeRendererGL renderer(&settings, output_surface.get(), | 687 FakeRendererGL renderer(&settings, output_surface.get(), |
| 688 resource_provider.get()); | 688 resource_provider.get()); |
| 689 renderer.Initialize(); | 689 renderer.Initialize(); |
| 690 renderer.SetVisible(true); | 690 renderer.SetVisible(true); |
| 691 | 691 |
| 692 gfx::Size viewport_size(1, 1); | 692 gfx::Size viewport_size(1, 1); |
| 693 RenderPass* root_pass = | 693 RenderPass* root_pass = AddRenderPass( |
| 694 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 694 &render_passes_in_draw_order_, RenderPassId(1, 0), |
| 695 gfx::Rect(viewport_size), gfx::Transform()); | 695 gfx::Rect(viewport_size), gfx::Transform(), FilterOperations()); |
| 696 root_pass->has_transparent_background = false; | 696 root_pass->has_transparent_background = false; |
| 697 | 697 |
| 698 // On DEBUG builds, render passes with opaque background clear to blue to | 698 // On DEBUG builds, render passes with opaque background clear to blue to |
| 699 // easily see regions that were not drawn on the screen. | 699 // easily see regions that were not drawn on the screen. |
| 700 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) | 700 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) |
| 701 .With(Args<2, 1>(ElementsAre(GL_COLOR_EXT))) | 701 .With(Args<2, 1>(ElementsAre(GL_COLOR_EXT))) |
| 702 .Times(1); | 702 .Times(1); |
| 703 #ifdef NDEBUG | 703 #ifdef NDEBUG |
| 704 EXPECT_CALL(*context, clear(_)).Times(0); | 704 EXPECT_CALL(*context, clear(_)).Times(0); |
| 705 #else | 705 #else |
| (...skipping 21 matching lines...) Expand all Loading... |
| 727 FakeResourceProvider::Create(output_surface->context_provider(), | 727 FakeResourceProvider::Create(output_surface->context_provider(), |
| 728 shared_bitmap_manager.get()); | 728 shared_bitmap_manager.get()); |
| 729 | 729 |
| 730 RendererSettings settings; | 730 RendererSettings settings; |
| 731 FakeRendererGL renderer(&settings, output_surface.get(), | 731 FakeRendererGL renderer(&settings, output_surface.get(), |
| 732 resource_provider.get()); | 732 resource_provider.get()); |
| 733 renderer.Initialize(); | 733 renderer.Initialize(); |
| 734 renderer.SetVisible(true); | 734 renderer.SetVisible(true); |
| 735 | 735 |
| 736 gfx::Size viewport_size(1, 1); | 736 gfx::Size viewport_size(1, 1); |
| 737 RenderPass* root_pass = | 737 RenderPass* root_pass = AddRenderPass( |
| 738 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 738 &render_passes_in_draw_order_, RenderPassId(1, 0), |
| 739 gfx::Rect(viewport_size), gfx::Transform()); | 739 gfx::Rect(viewport_size), gfx::Transform(), FilterOperations()); |
| 740 root_pass->has_transparent_background = true; | 740 root_pass->has_transparent_background = true; |
| 741 | 741 |
| 742 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, 1, _)).Times(1); | 742 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, 1, _)).Times(1); |
| 743 EXPECT_CALL(*context, clear(_)).Times(1); | 743 EXPECT_CALL(*context, clear(_)).Times(1); |
| 744 DrawFrame(&renderer, viewport_size); | 744 DrawFrame(&renderer, viewport_size); |
| 745 | 745 |
| 746 Mock::VerifyAndClearExpectations(context); | 746 Mock::VerifyAndClearExpectations(context); |
| 747 } | 747 } |
| 748 | 748 |
| 749 TEST_F(GLRendererTest, OffscreenOutputSurface) { | 749 TEST_F(GLRendererTest, OffscreenOutputSurface) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 765 shared_bitmap_manager.get()); | 765 shared_bitmap_manager.get()); |
| 766 | 766 |
| 767 RendererSettings settings; | 767 RendererSettings settings; |
| 768 FakeRendererGL renderer(&settings, output_surface.get(), | 768 FakeRendererGL renderer(&settings, output_surface.get(), |
| 769 resource_provider.get()); | 769 resource_provider.get()); |
| 770 renderer.Initialize(); | 770 renderer.Initialize(); |
| 771 renderer.SetVisible(true); | 771 renderer.SetVisible(true); |
| 772 | 772 |
| 773 gfx::Size viewport_size(1, 1); | 773 gfx::Size viewport_size(1, 1); |
| 774 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 774 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 775 gfx::Rect(viewport_size), gfx::Transform()); | 775 gfx::Rect(viewport_size), gfx::Transform(), FilterOperations()); |
| 776 | 776 |
| 777 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) | 777 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) |
| 778 .With(Args<2, 1>(ElementsAre(GL_COLOR_ATTACHMENT0))) | 778 .With(Args<2, 1>(ElementsAre(GL_COLOR_ATTACHMENT0))) |
| 779 .Times(1); | 779 .Times(1); |
| 780 EXPECT_CALL(*context, clear(_)).Times(AnyNumber()); | 780 EXPECT_CALL(*context, clear(_)).Times(AnyNumber()); |
| 781 DrawFrame(&renderer, viewport_size); | 781 DrawFrame(&renderer, viewport_size); |
| 782 Mock::VerifyAndClearExpectations(context); | 782 Mock::VerifyAndClearExpectations(context); |
| 783 } | 783 } |
| 784 | 784 |
| 785 class TextureStateTrackingContext : public TestWebGraphicsContext3D { | 785 class TextureStateTrackingContext : public TestWebGraphicsContext3D { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 FakeRendererGL renderer(&settings, output_surface.get(), | 827 FakeRendererGL renderer(&settings, output_surface.get(), |
| 828 resource_provider.get()); | 828 resource_provider.get()); |
| 829 renderer.Initialize(); | 829 renderer.Initialize(); |
| 830 renderer.SetVisible(true); | 830 renderer.SetVisible(true); |
| 831 | 831 |
| 832 // During initialization we are allowed to set any texture parameters. | 832 // During initialization we are allowed to set any texture parameters. |
| 833 EXPECT_CALL(*context, texParameteri(_, _, _)).Times(AnyNumber()); | 833 EXPECT_CALL(*context, texParameteri(_, _, _)).Times(AnyNumber()); |
| 834 | 834 |
| 835 RenderPass* root_pass = | 835 RenderPass* root_pass = |
| 836 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 1), | 836 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 1), |
| 837 gfx::Rect(100, 100), gfx::Transform()); | 837 gfx::Rect(100, 100), gfx::Transform(), FilterOperations()); |
| 838 gpu::SyncToken mailbox_sync_token; | 838 gpu::SyncToken mailbox_sync_token; |
| 839 AddOneOfEveryQuadType(root_pass, resource_provider.get(), RenderPassId(0, 0), | 839 AddOneOfEveryQuadType(root_pass, resource_provider.get(), RenderPassId(0, 0), |
| 840 &mailbox_sync_token); | 840 &mailbox_sync_token); |
| 841 | 841 |
| 842 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 842 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 843 | 843 |
| 844 // Set up expected texture filter state transitions that match the quads | 844 // Set up expected texture filter state transitions that match the quads |
| 845 // created in AppendOneOfEveryQuadType(). | 845 // created in AppendOneOfEveryQuadType(). |
| 846 Mock::VerifyAndClearExpectations(context); | 846 Mock::VerifyAndClearExpectations(context); |
| 847 { | 847 { |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 settings.should_clear_root_render_pass = false; | 911 settings.should_clear_root_render_pass = false; |
| 912 | 912 |
| 913 FakeRendererGL renderer(&settings, output_surface.get(), | 913 FakeRendererGL renderer(&settings, output_surface.get(), |
| 914 resource_provider.get()); | 914 resource_provider.get()); |
| 915 renderer.Initialize(); | 915 renderer.Initialize(); |
| 916 renderer.SetVisible(true); | 916 renderer.SetVisible(true); |
| 917 | 917 |
| 918 gfx::Size viewport_size(10, 10); | 918 gfx::Size viewport_size(10, 10); |
| 919 | 919 |
| 920 RenderPassId child_pass_id(2, 0); | 920 RenderPassId child_pass_id(2, 0); |
| 921 RenderPass* child_pass = | 921 RenderPass* child_pass = AddRenderPass( |
| 922 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, | 922 &render_passes_in_draw_order_, child_pass_id, gfx::Rect(viewport_size), |
| 923 gfx::Rect(viewport_size), gfx::Transform()); | 923 gfx::Transform(), FilterOperations()); |
| 924 AddQuad(child_pass, gfx::Rect(viewport_size), SK_ColorBLUE); | 924 AddQuad(child_pass, gfx::Rect(viewport_size), SK_ColorBLUE); |
| 925 | 925 |
| 926 RenderPassId root_pass_id(1, 0); | 926 RenderPassId root_pass_id(1, 0); |
| 927 RenderPass* root_pass = | 927 RenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 928 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 928 root_pass_id, gfx::Rect(viewport_size), |
| 929 gfx::Rect(viewport_size), gfx::Transform()); | 929 gfx::Transform(), FilterOperations()); |
| 930 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); | 930 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); |
| 931 | 931 |
| 932 AddRenderPassQuad(root_pass, child_pass); | 932 AddRenderPassQuad(root_pass, child_pass); |
| 933 | 933 |
| 934 #ifdef NDEBUG | 934 #ifdef NDEBUG |
| 935 GLint clear_bits = GL_COLOR_BUFFER_BIT; | 935 GLint clear_bits = GL_COLOR_BUFFER_BIT; |
| 936 #else | 936 #else |
| 937 GLint clear_bits = GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT; | 937 GLint clear_bits = GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT; |
| 938 #endif | 938 #endif |
| 939 | 939 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1001 renderer.Initialize(); | 1001 renderer.Initialize(); |
| 1002 EXPECT_FALSE(renderer.use_partial_swap()); | 1002 EXPECT_FALSE(renderer.use_partial_swap()); |
| 1003 renderer.SetVisible(true); | 1003 renderer.SetVisible(true); |
| 1004 | 1004 |
| 1005 gfx::Size viewport_size(1, 1); | 1005 gfx::Size viewport_size(1, 1); |
| 1006 | 1006 |
| 1007 gfx::Rect grand_child_rect(25, 25); | 1007 gfx::Rect grand_child_rect(25, 25); |
| 1008 RenderPassId grand_child_pass_id(3, 0); | 1008 RenderPassId grand_child_pass_id(3, 0); |
| 1009 RenderPass* grand_child_pass = | 1009 RenderPass* grand_child_pass = |
| 1010 AddRenderPass(&render_passes_in_draw_order_, grand_child_pass_id, | 1010 AddRenderPass(&render_passes_in_draw_order_, grand_child_pass_id, |
| 1011 grand_child_rect, gfx::Transform()); | 1011 grand_child_rect, gfx::Transform(), FilterOperations()); |
| 1012 AddClippedQuad(grand_child_pass, grand_child_rect, SK_ColorYELLOW); | 1012 AddClippedQuad(grand_child_pass, grand_child_rect, SK_ColorYELLOW); |
| 1013 | 1013 |
| 1014 gfx::Rect child_rect(50, 50); | 1014 gfx::Rect child_rect(50, 50); |
| 1015 RenderPassId child_pass_id(2, 0); | 1015 RenderPassId child_pass_id(2, 0); |
| 1016 RenderPass* child_pass = | 1016 RenderPass* child_pass = |
| 1017 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, child_rect, | 1017 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, child_rect, |
| 1018 gfx::Transform()); | 1018 gfx::Transform(), FilterOperations()); |
| 1019 AddQuad(child_pass, child_rect, SK_ColorBLUE); | 1019 AddQuad(child_pass, child_rect, SK_ColorBLUE); |
| 1020 | 1020 |
| 1021 RenderPassId root_pass_id(1, 0); | 1021 RenderPassId root_pass_id(1, 0); |
| 1022 RenderPass* root_pass = | 1022 RenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1023 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1023 root_pass_id, gfx::Rect(viewport_size), |
| 1024 gfx::Rect(viewport_size), gfx::Transform()); | 1024 gfx::Transform(), FilterOperations()); |
| 1025 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); | 1025 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); |
| 1026 | 1026 |
| 1027 AddRenderPassQuad(root_pass, child_pass); | 1027 AddRenderPassQuad(root_pass, child_pass); |
| 1028 AddRenderPassQuad(child_pass, grand_child_pass); | 1028 AddRenderPassQuad(child_pass, grand_child_pass); |
| 1029 | 1029 |
| 1030 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1030 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1031 DrawFrame(&renderer, viewport_size); | 1031 DrawFrame(&renderer, viewport_size); |
| 1032 } | 1032 } |
| 1033 | 1033 |
| 1034 class DiscardCheckingGLES2Interface : public TestGLES2Interface { | 1034 class DiscardCheckingGLES2Interface : public TestGLES2Interface { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 resource_provider.get()); | 1076 resource_provider.get()); |
| 1077 renderer.Initialize(); | 1077 renderer.Initialize(); |
| 1078 EXPECT_TRUE(renderer.use_partial_swap()); | 1078 EXPECT_TRUE(renderer.use_partial_swap()); |
| 1079 renderer.SetVisible(true); | 1079 renderer.SetVisible(true); |
| 1080 | 1080 |
| 1081 gfx::Size viewport_size(100, 100); | 1081 gfx::Size viewport_size(100, 100); |
| 1082 | 1082 |
| 1083 { | 1083 { |
| 1084 // Partial frame, should not discard. | 1084 // Partial frame, should not discard. |
| 1085 RenderPassId root_pass_id(1, 0); | 1085 RenderPassId root_pass_id(1, 0); |
| 1086 RenderPass* root_pass = | 1086 RenderPass* root_pass = AddRenderPass( |
| 1087 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1087 &render_passes_in_draw_order_, root_pass_id, gfx::Rect(viewport_size), |
| 1088 gfx::Rect(viewport_size), gfx::Transform()); | 1088 gfx::Transform(), FilterOperations()); |
| 1089 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); | 1089 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); |
| 1090 root_pass->damage_rect = gfx::Rect(2, 2, 3, 3); | 1090 root_pass->damage_rect = gfx::Rect(2, 2, 3, 3); |
| 1091 | 1091 |
| 1092 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1092 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1093 DrawFrame(&renderer, viewport_size); | 1093 DrawFrame(&renderer, viewport_size); |
| 1094 EXPECT_EQ(0, gl->discarded()); | 1094 EXPECT_EQ(0, gl->discarded()); |
| 1095 gl->reset_discarded(); | 1095 gl->reset_discarded(); |
| 1096 } | 1096 } |
| 1097 { | 1097 { |
| 1098 // Full frame, should discard. | 1098 // Full frame, should discard. |
| 1099 RenderPassId root_pass_id(1, 0); | 1099 RenderPassId root_pass_id(1, 0); |
| 1100 RenderPass* root_pass = | 1100 RenderPass* root_pass = AddRenderPass( |
| 1101 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1101 &render_passes_in_draw_order_, root_pass_id, gfx::Rect(viewport_size), |
| 1102 gfx::Rect(viewport_size), gfx::Transform()); | 1102 gfx::Transform(), FilterOperations()); |
| 1103 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); | 1103 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); |
| 1104 root_pass->damage_rect = root_pass->output_rect; | 1104 root_pass->damage_rect = root_pass->output_rect; |
| 1105 | 1105 |
| 1106 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1106 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1107 DrawFrame(&renderer, viewport_size); | 1107 DrawFrame(&renderer, viewport_size); |
| 1108 EXPECT_EQ(1, gl->discarded()); | 1108 EXPECT_EQ(1, gl->discarded()); |
| 1109 gl->reset_discarded(); | 1109 gl->reset_discarded(); |
| 1110 } | 1110 } |
| 1111 { | 1111 { |
| 1112 // Full frame, external scissor is set, should not discard. | 1112 // Full frame, external scissor is set, should not discard. |
| 1113 output_surface->set_has_external_stencil_test(true); | 1113 output_surface->set_has_external_stencil_test(true); |
| 1114 RenderPassId root_pass_id(1, 0); | 1114 RenderPassId root_pass_id(1, 0); |
| 1115 RenderPass* root_pass = | 1115 RenderPass* root_pass = AddRenderPass( |
| 1116 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1116 &render_passes_in_draw_order_, root_pass_id, gfx::Rect(viewport_size), |
| 1117 gfx::Rect(viewport_size), gfx::Transform()); | 1117 gfx::Transform(), FilterOperations()); |
| 1118 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); | 1118 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); |
| 1119 root_pass->damage_rect = root_pass->output_rect; | 1119 root_pass->damage_rect = root_pass->output_rect; |
| 1120 root_pass->has_transparent_background = false; | 1120 root_pass->has_transparent_background = false; |
| 1121 | 1121 |
| 1122 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1122 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1123 DrawFrame(&renderer, viewport_size); | 1123 DrawFrame(&renderer, viewport_size); |
| 1124 EXPECT_EQ(0, gl->discarded()); | 1124 EXPECT_EQ(0, gl->discarded()); |
| 1125 gl->reset_discarded(); | 1125 gl->reset_discarded(); |
| 1126 output_surface->set_has_external_stencil_test(false); | 1126 output_surface->set_has_external_stencil_test(false); |
| 1127 } | 1127 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1154 FakeRendererGL renderer(&settings, output_surface.get(), | 1154 FakeRendererGL renderer(&settings, output_surface.get(), |
| 1155 resource_provider.get()); | 1155 resource_provider.get()); |
| 1156 renderer.Initialize(); | 1156 renderer.Initialize(); |
| 1157 EXPECT_FALSE(renderer.use_partial_swap()); | 1157 EXPECT_FALSE(renderer.use_partial_swap()); |
| 1158 renderer.SetVisible(true); | 1158 renderer.SetVisible(true); |
| 1159 | 1159 |
| 1160 gfx::Size viewport_size(100, 100); | 1160 gfx::Size viewport_size(100, 100); |
| 1161 gfx::Rect quad_rect = gfx::Rect(20, 20, 20, 20); | 1161 gfx::Rect quad_rect = gfx::Rect(20, 20, 20, 20); |
| 1162 | 1162 |
| 1163 RenderPassId root_pass_id(1, 0); | 1163 RenderPassId root_pass_id(1, 0); |
| 1164 RenderPass* root_pass = | 1164 RenderPass* root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1165 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1165 root_pass_id, gfx::Rect(viewport_size), |
| 1166 gfx::Rect(viewport_size), gfx::Transform()); | 1166 gfx::Transform(), FilterOperations()); |
| 1167 AddClippedQuad(root_pass, quad_rect, SK_ColorGREEN); | 1167 AddClippedQuad(root_pass, quad_rect, SK_ColorGREEN); |
| 1168 | 1168 |
| 1169 unsigned fbo; | 1169 unsigned fbo; |
| 1170 gpu::gles2::GLES2Interface* gl = | 1170 gpu::gles2::GLES2Interface* gl = |
| 1171 output_surface->context_provider()->ContextGL(); | 1171 output_surface->context_provider()->ContextGL(); |
| 1172 gl->GenFramebuffers(1, &fbo); | 1172 gl->GenFramebuffers(1, &fbo); |
| 1173 output_surface->set_framebuffer(fbo, GL_RGB); | 1173 output_surface->set_framebuffer(fbo, GL_RGB); |
| 1174 | 1174 |
| 1175 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1175 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1176 DrawFrame(&renderer, viewport_size); | 1176 DrawFrame(&renderer, viewport_size); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1218 | 1218 |
| 1219 gfx::Transform transform_causing_aa; | 1219 gfx::Transform transform_causing_aa; |
| 1220 transform_causing_aa.Rotate(20.0); | 1220 transform_causing_aa.Rotate(20.0); |
| 1221 | 1221 |
| 1222 for (int i = 0; i <= LAST_BLEND_MODE; ++i) { | 1222 for (int i = 0; i <= LAST_BLEND_MODE; ++i) { |
| 1223 BlendMode blend_mode = static_cast<BlendMode>(i); | 1223 BlendMode blend_mode = static_cast<BlendMode>(i); |
| 1224 SkBlendMode xfer_mode = BlendModeToSkXfermode(blend_mode); | 1224 SkBlendMode xfer_mode = BlendModeToSkXfermode(blend_mode); |
| 1225 settings_.force_blending_with_shaders = (blend_mode != BLEND_MODE_NONE); | 1225 settings_.force_blending_with_shaders = (blend_mode != BLEND_MODE_NONE); |
| 1226 // RenderPassProgram | 1226 // RenderPassProgram |
| 1227 render_passes_in_draw_order_.clear(); | 1227 render_passes_in_draw_order_.clear(); |
| 1228 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1228 child_pass = |
| 1229 child_pass_id, | 1229 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, child_rect, |
| 1230 child_rect, | 1230 gfx::Transform(), FilterOperations()); |
| 1231 gfx::Transform()); | |
| 1232 | 1231 |
| 1233 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1232 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1234 gfx::Rect(viewport_size), gfx::Transform()); | 1233 gfx::Rect(viewport_size), gfx::Transform(), |
| 1234 FilterOperations()); |
| 1235 | 1235 |
| 1236 AddRenderPassQuad(root_pass, | 1236 AddRenderPassQuad(root_pass, |
| 1237 child_pass, | 1237 child_pass, |
| 1238 0, | 1238 0, |
| 1239 FilterOperations(), | |
| 1240 gfx::Transform(), | 1239 gfx::Transform(), |
| 1241 xfer_mode); | 1240 xfer_mode); |
| 1242 | 1241 |
| 1243 renderer_->DecideRenderPassAllocationsForFrame( | 1242 renderer_->DecideRenderPassAllocationsForFrame( |
| 1244 render_passes_in_draw_order_); | 1243 render_passes_in_draw_order_); |
| 1245 DrawFrame(renderer_.get(), viewport_size); | 1244 DrawFrame(renderer_.get(), viewport_size); |
| 1246 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1245 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1247 | 1246 |
| 1248 // RenderPassColorMatrixProgram | 1247 // RenderPassColorMatrixProgram |
| 1249 render_passes_in_draw_order_.clear(); | 1248 render_passes_in_draw_order_.clear(); |
| 1250 | 1249 |
| 1251 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1250 child_pass = AddRenderPass(&render_passes_in_draw_order_, child_pass_id, |
| 1252 child_pass_id, | 1251 child_rect, transform_causing_aa, filters); |
| 1253 child_rect, | |
| 1254 transform_causing_aa); | |
| 1255 | 1252 |
| 1256 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1253 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1257 gfx::Rect(viewport_size), gfx::Transform()); | 1254 gfx::Rect(viewport_size), gfx::Transform(), |
| 1255 FilterOperations()); |
| 1258 | 1256 |
| 1259 AddRenderPassQuad( | 1257 AddRenderPassQuad(root_pass, child_pass, 0, gfx::Transform(), xfer_mode); |
| 1260 root_pass, child_pass, 0, filters, gfx::Transform(), xfer_mode); | |
| 1261 | 1258 |
| 1262 renderer_->DecideRenderPassAllocationsForFrame( | 1259 renderer_->DecideRenderPassAllocationsForFrame( |
| 1263 render_passes_in_draw_order_); | 1260 render_passes_in_draw_order_); |
| 1264 DrawFrame(renderer_.get(), viewport_size); | 1261 DrawFrame(renderer_.get(), viewport_size); |
| 1265 TestRenderPassColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1262 TestRenderPassColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1266 | 1263 |
| 1267 // RenderPassMaskProgram | 1264 // RenderPassMaskProgram |
| 1268 render_passes_in_draw_order_.clear(); | 1265 render_passes_in_draw_order_.clear(); |
| 1269 | 1266 |
| 1270 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1267 child_pass = |
| 1271 child_pass_id, | 1268 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, child_rect, |
| 1272 child_rect, | 1269 gfx::Transform(), FilterOperations()); |
| 1273 gfx::Transform()); | |
| 1274 | 1270 |
| 1275 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1271 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1276 gfx::Rect(viewport_size), gfx::Transform()); | 1272 gfx::Rect(viewport_size), gfx::Transform(), |
| 1273 FilterOperations()); |
| 1277 | 1274 |
| 1278 AddRenderPassQuad(root_pass, | 1275 AddRenderPassQuad(root_pass, |
| 1279 child_pass, | 1276 child_pass, |
| 1280 mask, | 1277 mask, |
| 1281 FilterOperations(), | |
| 1282 gfx::Transform(), | 1278 gfx::Transform(), |
| 1283 xfer_mode); | 1279 xfer_mode); |
| 1284 | 1280 |
| 1285 renderer_->DecideRenderPassAllocationsForFrame( | 1281 renderer_->DecideRenderPassAllocationsForFrame( |
| 1286 render_passes_in_draw_order_); | 1282 render_passes_in_draw_order_); |
| 1287 DrawFrame(renderer_.get(), viewport_size); | 1283 DrawFrame(renderer_.get(), viewport_size); |
| 1288 TestRenderPassMaskProgram(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, | 1284 TestRenderPassMaskProgram(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, |
| 1289 blend_mode); | 1285 blend_mode); |
| 1290 | 1286 |
| 1291 // RenderPassMaskColorMatrixProgram | 1287 // RenderPassMaskColorMatrixProgram |
| 1292 render_passes_in_draw_order_.clear(); | 1288 render_passes_in_draw_order_.clear(); |
| 1293 | 1289 |
| 1294 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1290 child_pass = AddRenderPass(&render_passes_in_draw_order_, child_pass_id, |
| 1295 child_pass_id, | 1291 child_rect, gfx::Transform(), filters); |
| 1296 child_rect, | |
| 1297 gfx::Transform()); | |
| 1298 | 1292 |
| 1299 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1293 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1300 gfx::Rect(viewport_size), gfx::Transform()); | 1294 gfx::Rect(viewport_size), gfx::Transform(), |
| 1295 FilterOperations()); |
| 1301 | 1296 |
| 1302 AddRenderPassQuad( | 1297 AddRenderPassQuad(root_pass, child_pass, mask, gfx::Transform(), xfer_mode); |
| 1303 root_pass, child_pass, mask, filters, gfx::Transform(), xfer_mode); | |
| 1304 | 1298 |
| 1305 renderer_->DecideRenderPassAllocationsForFrame( | 1299 renderer_->DecideRenderPassAllocationsForFrame( |
| 1306 render_passes_in_draw_order_); | 1300 render_passes_in_draw_order_); |
| 1307 DrawFrame(renderer_.get(), viewport_size); | 1301 DrawFrame(renderer_.get(), viewport_size); |
| 1308 TestRenderPassMaskColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, | 1302 TestRenderPassMaskColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, |
| 1309 SAMPLER_TYPE_2D, blend_mode); | 1303 SAMPLER_TYPE_2D, blend_mode); |
| 1310 | 1304 |
| 1311 // RenderPassProgramAA | 1305 // RenderPassProgramAA |
| 1312 render_passes_in_draw_order_.clear(); | 1306 render_passes_in_draw_order_.clear(); |
| 1313 | 1307 |
| 1314 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1308 child_pass = |
| 1315 child_pass_id, | 1309 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, child_rect, |
| 1316 child_rect, | 1310 transform_causing_aa, FilterOperations()); |
| 1317 transform_causing_aa); | |
| 1318 | 1311 |
| 1319 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1312 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1320 gfx::Rect(viewport_size), gfx::Transform()); | 1313 gfx::Rect(viewport_size), gfx::Transform(), |
| 1314 FilterOperations()); |
| 1321 | 1315 |
| 1322 AddRenderPassQuad(root_pass, | 1316 AddRenderPassQuad(root_pass, |
| 1323 child_pass, | 1317 child_pass, |
| 1324 0, | 1318 0, |
| 1325 FilterOperations(), | |
| 1326 transform_causing_aa, | 1319 transform_causing_aa, |
| 1327 xfer_mode); | 1320 xfer_mode); |
| 1328 | 1321 |
| 1329 renderer_->DecideRenderPassAllocationsForFrame( | 1322 renderer_->DecideRenderPassAllocationsForFrame( |
| 1330 render_passes_in_draw_order_); | 1323 render_passes_in_draw_order_); |
| 1331 DrawFrame(renderer_.get(), viewport_size); | 1324 DrawFrame(renderer_.get(), viewport_size); |
| 1332 TestRenderPassProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1325 TestRenderPassProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1333 | 1326 |
| 1334 // RenderPassColorMatrixProgramAA | 1327 // RenderPassColorMatrixProgramAA |
| 1335 render_passes_in_draw_order_.clear(); | 1328 render_passes_in_draw_order_.clear(); |
| 1336 | 1329 |
| 1337 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1330 child_pass = AddRenderPass(&render_passes_in_draw_order_, child_pass_id, |
| 1338 child_pass_id, | 1331 child_rect, transform_causing_aa, filters); |
| 1339 child_rect, | |
| 1340 transform_causing_aa); | |
| 1341 | 1332 |
| 1342 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1333 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1343 gfx::Rect(viewport_size), gfx::Transform()); | 1334 gfx::Rect(viewport_size), gfx::Transform(), |
| 1335 FilterOperations()); |
| 1344 | 1336 |
| 1345 AddRenderPassQuad( | 1337 AddRenderPassQuad(root_pass, child_pass, 0, transform_causing_aa, |
| 1346 root_pass, child_pass, 0, filters, transform_causing_aa, xfer_mode); | 1338 xfer_mode); |
| 1347 | 1339 |
| 1348 renderer_->DecideRenderPassAllocationsForFrame( | 1340 renderer_->DecideRenderPassAllocationsForFrame( |
| 1349 render_passes_in_draw_order_); | 1341 render_passes_in_draw_order_); |
| 1350 DrawFrame(renderer_.get(), viewport_size); | 1342 DrawFrame(renderer_.get(), viewport_size); |
| 1351 TestRenderPassColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1343 TestRenderPassColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1352 | 1344 |
| 1353 // RenderPassMaskProgramAA | 1345 // RenderPassMaskProgramAA |
| 1354 render_passes_in_draw_order_.clear(); | 1346 render_passes_in_draw_order_.clear(); |
| 1355 | 1347 |
| 1356 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1348 child_pass = |
| 1357 child_pass_id, | 1349 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, child_rect, |
| 1358 child_rect, | 1350 transform_causing_aa, FilterOperations()); |
| 1359 transform_causing_aa); | |
| 1360 | 1351 |
| 1361 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1352 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1362 gfx::Rect(viewport_size), gfx::Transform()); | 1353 gfx::Rect(viewport_size), gfx::Transform(), |
| 1354 FilterOperations()); |
| 1363 | 1355 |
| 1364 AddRenderPassQuad(root_pass, | 1356 AddRenderPassQuad(root_pass, |
| 1365 child_pass, | 1357 child_pass, |
| 1366 mask, | 1358 mask, |
| 1367 FilterOperations(), | |
| 1368 transform_causing_aa, | 1359 transform_causing_aa, |
| 1369 xfer_mode); | 1360 xfer_mode); |
| 1370 | 1361 |
| 1371 renderer_->DecideRenderPassAllocationsForFrame( | 1362 renderer_->DecideRenderPassAllocationsForFrame( |
| 1372 render_passes_in_draw_order_); | 1363 render_passes_in_draw_order_); |
| 1373 DrawFrame(renderer_.get(), viewport_size); | 1364 DrawFrame(renderer_.get(), viewport_size); |
| 1374 TestRenderPassMaskProgramAA(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, | 1365 TestRenderPassMaskProgramAA(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, |
| 1375 blend_mode); | 1366 blend_mode); |
| 1376 | 1367 |
| 1377 // RenderPassMaskColorMatrixProgramAA | 1368 // RenderPassMaskColorMatrixProgramAA |
| 1378 render_passes_in_draw_order_.clear(); | 1369 render_passes_in_draw_order_.clear(); |
| 1379 | 1370 |
| 1380 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1371 child_pass = AddRenderPass(&render_passes_in_draw_order_, child_pass_id, |
| 1381 child_pass_id, | 1372 child_rect, transform_causing_aa, filters); |
| 1382 child_rect, | |
| 1383 transform_causing_aa); | |
| 1384 | 1373 |
| 1385 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1374 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1386 gfx::Rect(viewport_size), transform_causing_aa); | 1375 gfx::Rect(viewport_size), transform_causing_aa, |
| 1376 FilterOperations()); |
| 1387 | 1377 |
| 1388 AddRenderPassQuad( | 1378 AddRenderPassQuad(root_pass, child_pass, mask, transform_causing_aa, |
| 1389 root_pass, child_pass, mask, filters, transform_causing_aa, xfer_mode); | 1379 xfer_mode); |
| 1390 | 1380 |
| 1391 renderer_->DecideRenderPassAllocationsForFrame( | 1381 renderer_->DecideRenderPassAllocationsForFrame( |
| 1392 render_passes_in_draw_order_); | 1382 render_passes_in_draw_order_); |
| 1393 DrawFrame(renderer_.get(), viewport_size); | 1383 DrawFrame(renderer_.get(), viewport_size); |
| 1394 TestRenderPassMaskColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, | 1384 TestRenderPassMaskColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, |
| 1395 SAMPLER_TYPE_2D, blend_mode); | 1385 SAMPLER_TYPE_2D, blend_mode); |
| 1396 } | 1386 } |
| 1397 } | 1387 } |
| 1398 | 1388 |
| 1399 // At this time, the AA code path cannot be taken if the surface's rect would | 1389 // At this time, the AA code path cannot be taken if the surface's rect would |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1412 transform_preventing_aa.RotateAboutYAxis(-20.0); | 1402 transform_preventing_aa.RotateAboutYAxis(-20.0); |
| 1413 transform_preventing_aa.Scale(30.0, 1.0); | 1403 transform_preventing_aa.Scale(30.0, 1.0); |
| 1414 | 1404 |
| 1415 // Verify that the test transform and test rect actually do cause the clipped | 1405 // Verify that the test transform and test rect actually do cause the clipped |
| 1416 // flag to trigger. Otherwise we are not testing the intended scenario. | 1406 // flag to trigger. Otherwise we are not testing the intended scenario. |
| 1417 bool clipped = false; | 1407 bool clipped = false; |
| 1418 MathUtil::MapQuad(transform_preventing_aa, gfx::QuadF(gfx::RectF(child_rect)), | 1408 MathUtil::MapQuad(transform_preventing_aa, gfx::QuadF(gfx::RectF(child_rect)), |
| 1419 &clipped); | 1409 &clipped); |
| 1420 ASSERT_TRUE(clipped); | 1410 ASSERT_TRUE(clipped); |
| 1421 | 1411 |
| 1422 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1412 child_pass = |
| 1423 child_pass_id, | 1413 AddRenderPass(&render_passes_in_draw_order_, child_pass_id, child_rect, |
| 1424 child_rect, | 1414 transform_preventing_aa, FilterOperations()); |
| 1425 transform_preventing_aa); | |
| 1426 | 1415 |
| 1427 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1416 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1428 gfx::Rect(viewport_size), gfx::Transform()); | 1417 gfx::Rect(viewport_size), gfx::Transform(), |
| 1418 FilterOperations()); |
| 1429 | 1419 |
| 1430 AddRenderPassQuad(root_pass, child_pass, 0, FilterOperations(), | 1420 AddRenderPassQuad(root_pass, child_pass, 0, transform_preventing_aa, |
| 1431 transform_preventing_aa, SkBlendMode::kSrcOver); | 1421 SkBlendMode::kSrcOver); |
| 1432 | 1422 |
| 1433 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1423 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1434 DrawFrame(renderer_.get(), viewport_size); | 1424 DrawFrame(renderer_.get(), viewport_size); |
| 1435 | 1425 |
| 1436 // If use_aa incorrectly ignores clipping, it will use the | 1426 // If use_aa incorrectly ignores clipping, it will use the |
| 1437 // RenderPassProgramAA shader instead of the RenderPassProgram. | 1427 // RenderPassProgramAA shader instead of the RenderPassProgram. |
| 1438 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, BLEND_MODE_NONE); | 1428 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, BLEND_MODE_NONE); |
| 1439 } | 1429 } |
| 1440 | 1430 |
| 1441 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { | 1431 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { |
| 1442 gfx::Size viewport_size(1, 1); | 1432 gfx::Size viewport_size(1, 1); |
| 1443 RenderPassId root_pass_id(1, 0); | 1433 RenderPassId root_pass_id(1, 0); |
| 1444 RenderPass* root_pass; | 1434 RenderPass* root_pass; |
| 1445 | 1435 |
| 1446 gfx::Transform pixel_aligned_transform_causing_aa; | 1436 gfx::Transform pixel_aligned_transform_causing_aa; |
| 1447 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); | 1437 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); |
| 1448 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); | 1438 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); |
| 1449 | 1439 |
| 1450 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1440 root_pass = AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1451 gfx::Rect(viewport_size), gfx::Transform()); | 1441 gfx::Rect(viewport_size), gfx::Transform(), |
| 1442 FilterOperations()); |
| 1452 AddTransformedQuad(root_pass, gfx::Rect(viewport_size), SK_ColorYELLOW, | 1443 AddTransformedQuad(root_pass, gfx::Rect(viewport_size), SK_ColorYELLOW, |
| 1453 pixel_aligned_transform_causing_aa); | 1444 pixel_aligned_transform_causing_aa); |
| 1454 | 1445 |
| 1455 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1446 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1456 DrawFrame(renderer_.get(), viewport_size); | 1447 DrawFrame(renderer_.get(), viewport_size); |
| 1457 | 1448 |
| 1458 TestSolidColorProgramAA(); | 1449 TestSolidColorProgramAA(); |
| 1459 } | 1450 } |
| 1460 | 1451 |
| 1461 class OutputSurfaceMockContext : public TestWebGraphicsContext3D { | 1452 class OutputSurfaceMockContext : public TestWebGraphicsContext3D { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1527 renderer_->SetVisible(true); | 1518 renderer_->SetVisible(true); |
| 1528 Mock::VerifyAndClearExpectations(output_surface_.get()); | 1519 Mock::VerifyAndClearExpectations(output_surface_.get()); |
| 1529 } | 1520 } |
| 1530 | 1521 |
| 1531 void SwapBuffers() { renderer_->SwapBuffers(std::vector<ui::LatencyInfo>()); } | 1522 void SwapBuffers() { renderer_->SwapBuffers(std::vector<ui::LatencyInfo>()); } |
| 1532 | 1523 |
| 1533 void DrawFrame(float device_scale_factor, | 1524 void DrawFrame(float device_scale_factor, |
| 1534 const gfx::Size& viewport_size, | 1525 const gfx::Size& viewport_size, |
| 1535 bool transparent) { | 1526 bool transparent) { |
| 1536 RenderPassId render_pass_id(1, 0); | 1527 RenderPassId render_pass_id(1, 0); |
| 1537 RenderPass* render_pass = | 1528 RenderPass* render_pass = AddRenderPass( |
| 1538 AddRenderPass(&render_passes_in_draw_order_, render_pass_id, | 1529 &render_passes_in_draw_order_, render_pass_id, gfx::Rect(viewport_size), |
| 1539 gfx::Rect(viewport_size), gfx::Transform()); | 1530 gfx::Transform(), FilterOperations()); |
| 1540 AddQuad(render_pass, gfx::Rect(viewport_size), SK_ColorGREEN); | 1531 AddQuad(render_pass, gfx::Rect(viewport_size), SK_ColorGREEN); |
| 1541 render_pass->has_transparent_background = transparent; | 1532 render_pass->has_transparent_background = transparent; |
| 1542 | 1533 |
| 1543 EXPECT_CALL(*output_surface_, EnsureBackbuffer()).WillRepeatedly(Return()); | 1534 EXPECT_CALL(*output_surface_, EnsureBackbuffer()).WillRepeatedly(Return()); |
| 1544 | 1535 |
| 1545 EXPECT_CALL(*output_surface_, | 1536 EXPECT_CALL(*output_surface_, |
| 1546 Reshape(viewport_size, device_scale_factor, _, transparent)) | 1537 Reshape(viewport_size, device_scale_factor, _, transparent)) |
| 1547 .Times(1); | 1538 .Times(1); |
| 1548 | 1539 |
| 1549 EXPECT_CALL(*output_surface_, BindFramebuffer()).Times(1); | 1540 EXPECT_CALL(*output_surface_, BindFramebuffer()).Times(1); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1644 | 1635 |
| 1645 TestOverlayProcessor* processor = | 1636 TestOverlayProcessor* processor = |
| 1646 new TestOverlayProcessor(output_surface.get()); | 1637 new TestOverlayProcessor(output_surface.get()); |
| 1647 processor->Initialize(); | 1638 processor->Initialize(); |
| 1648 renderer.SetOverlayProcessor(processor); | 1639 renderer.SetOverlayProcessor(processor); |
| 1649 std::unique_ptr<TestOverlayProcessor::Validator> validator( | 1640 std::unique_ptr<TestOverlayProcessor::Validator> validator( |
| 1650 new TestOverlayProcessor::Validator); | 1641 new TestOverlayProcessor::Validator); |
| 1651 output_surface->SetOverlayCandidateValidator(validator.get()); | 1642 output_surface->SetOverlayCandidateValidator(validator.get()); |
| 1652 | 1643 |
| 1653 gfx::Size viewport_size(1, 1); | 1644 gfx::Size viewport_size(1, 1); |
| 1654 RenderPass* root_pass = | 1645 RenderPass* root_pass = AddRenderPass( |
| 1655 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 1646 &render_passes_in_draw_order_, RenderPassId(1, 0), |
| 1656 gfx::Rect(viewport_size), gfx::Transform()); | 1647 gfx::Rect(viewport_size), gfx::Transform(), FilterOperations()); |
| 1657 root_pass->has_transparent_background = false; | 1648 root_pass->has_transparent_background = false; |
| 1658 root_pass->copy_requests.push_back( | 1649 root_pass->copy_requests.push_back( |
| 1659 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult))); | 1650 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreCopyResult))); |
| 1660 | 1651 |
| 1661 TextureMailbox mailbox = | 1652 TextureMailbox mailbox = |
| 1662 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, | 1653 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, |
| 1663 gfx::Size(256, 256), true, false); | 1654 gfx::Size(256, 256), true, false); |
| 1664 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = | 1655 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = |
| 1665 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 1656 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
| 1666 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( | 1657 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1684 // any attempt to overlay, which there shouldn't be. We can't use the quad | 1675 // any attempt to overlay, which there shouldn't be. We can't use the quad |
| 1685 // list because the render pass is cleaned up by DrawFrame. | 1676 // list because the render pass is cleaned up by DrawFrame. |
| 1686 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); | 1677 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); |
| 1687 EXPECT_CALL(*validator, AllowCALayerOverlays()).Times(0); | 1678 EXPECT_CALL(*validator, AllowCALayerOverlays()).Times(0); |
| 1688 DrawFrame(&renderer, viewport_size); | 1679 DrawFrame(&renderer, viewport_size); |
| 1689 Mock::VerifyAndClearExpectations(processor->strategy_); | 1680 Mock::VerifyAndClearExpectations(processor->strategy_); |
| 1690 Mock::VerifyAndClearExpectations(validator.get()); | 1681 Mock::VerifyAndClearExpectations(validator.get()); |
| 1691 | 1682 |
| 1692 // Without a copy request Attempt() should be called once. | 1683 // Without a copy request Attempt() should be called once. |
| 1693 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 1684 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 1694 gfx::Rect(viewport_size), gfx::Transform()); | 1685 gfx::Rect(viewport_size), gfx::Transform(), |
| 1686 FilterOperations()); |
| 1695 root_pass->has_transparent_background = false; | 1687 root_pass->has_transparent_background = false; |
| 1696 | 1688 |
| 1697 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 1689 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 1698 overlay_quad->SetNew( | 1690 overlay_quad->SetNew( |
| 1699 root_pass->CreateAndAppendSharedQuadState(), gfx::Rect(viewport_size), | 1691 root_pass->CreateAndAppendSharedQuadState(), gfx::Rect(viewport_size), |
| 1700 gfx::Rect(viewport_size), gfx::Rect(viewport_size), resource_id, | 1692 gfx::Rect(viewport_size), gfx::Rect(viewport_size), resource_id, |
| 1701 premultiplied_alpha, gfx::PointF(0, 0), gfx::PointF(1, 1), | 1693 premultiplied_alpha, gfx::PointF(0, 0), gfx::PointF(1, 1), |
| 1702 SK_ColorTRANSPARENT, vertex_opacity, flipped, nearest_neighbor, false); | 1694 SK_ColorTRANSPARENT, vertex_opacity, flipped, nearest_neighbor, false); |
| 1703 EXPECT_CALL(*validator, AllowCALayerOverlays()) | 1695 EXPECT_CALL(*validator, AllowCALayerOverlays()) |
| 1704 .Times(1) | 1696 .Times(1) |
| 1705 .WillOnce(::testing::Return(false)); | 1697 .WillOnce(::testing::Return(false)); |
| 1706 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(1); | 1698 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(1); |
| 1707 DrawFrame(&renderer, viewport_size); | 1699 DrawFrame(&renderer, viewport_size); |
| 1708 | 1700 |
| 1709 // If the CALayerOverlay path is taken, then the ordinary overlay path should | 1701 // If the CALayerOverlay path is taken, then the ordinary overlay path should |
| 1710 // not be called. | 1702 // not be called. |
| 1711 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 1703 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 1712 gfx::Rect(viewport_size), gfx::Transform()); | 1704 gfx::Rect(viewport_size), gfx::Transform(), |
| 1705 FilterOperations()); |
| 1713 root_pass->has_transparent_background = false; | 1706 root_pass->has_transparent_background = false; |
| 1714 | 1707 |
| 1715 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 1708 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 1716 overlay_quad->SetNew( | 1709 overlay_quad->SetNew( |
| 1717 root_pass->CreateAndAppendSharedQuadState(), gfx::Rect(viewport_size), | 1710 root_pass->CreateAndAppendSharedQuadState(), gfx::Rect(viewport_size), |
| 1718 gfx::Rect(viewport_size), gfx::Rect(viewport_size), resource_id, | 1711 gfx::Rect(viewport_size), gfx::Rect(viewport_size), resource_id, |
| 1719 premultiplied_alpha, gfx::PointF(0, 0), gfx::PointF(1, 1), | 1712 premultiplied_alpha, gfx::PointF(0, 0), gfx::PointF(1, 1), |
| 1720 SK_ColorTRANSPARENT, vertex_opacity, flipped, nearest_neighbor, false); | 1713 SK_ColorTRANSPARENT, vertex_opacity, flipped, nearest_neighbor, false); |
| 1721 EXPECT_CALL(*validator, AllowCALayerOverlays()) | 1714 EXPECT_CALL(*validator, AllowCALayerOverlays()) |
| 1722 .Times(1) | 1715 .Times(1) |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1799 resource_provider.get(), mailbox_deleter.get()); | 1792 resource_provider.get(), mailbox_deleter.get()); |
| 1800 renderer.Initialize(); | 1793 renderer.Initialize(); |
| 1801 renderer.SetVisible(true); | 1794 renderer.SetVisible(true); |
| 1802 | 1795 |
| 1803 SingleOverlayOnTopProcessor* processor = | 1796 SingleOverlayOnTopProcessor* processor = |
| 1804 new SingleOverlayOnTopProcessor(output_surface.get()); | 1797 new SingleOverlayOnTopProcessor(output_surface.get()); |
| 1805 processor->Initialize(); | 1798 processor->Initialize(); |
| 1806 renderer.SetOverlayProcessor(processor); | 1799 renderer.SetOverlayProcessor(processor); |
| 1807 | 1800 |
| 1808 gfx::Size viewport_size(1, 1); | 1801 gfx::Size viewport_size(1, 1); |
| 1809 RenderPass* root_pass = | 1802 RenderPass* root_pass = AddRenderPass( |
| 1810 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 1803 &render_passes_in_draw_order_, RenderPassId(1, 0), |
| 1811 gfx::Rect(viewport_size), gfx::Transform()); | 1804 gfx::Rect(viewport_size), gfx::Transform(), FilterOperations()); |
| 1812 root_pass->has_transparent_background = false; | 1805 root_pass->has_transparent_background = false; |
| 1813 | 1806 |
| 1814 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, | 1807 gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, |
| 1815 gpu::CommandBufferId::FromUnsafeValue(0x123), 29); | 1808 gpu::CommandBufferId::FromUnsafeValue(0x123), 29); |
| 1816 TextureMailbox mailbox = | 1809 TextureMailbox mailbox = |
| 1817 TextureMailbox(gpu::Mailbox::Generate(), sync_token, GL_TEXTURE_2D, | 1810 TextureMailbox(gpu::Mailbox::Generate(), sync_token, GL_TEXTURE_2D, |
| 1818 gfx::Size(256, 256), true, false); | 1811 gfx::Size(256, 256), true, false); |
| 1819 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = | 1812 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = |
| 1820 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 1813 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
| 1821 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( | 1814 ResourceId resource_id = resource_provider->CreateResourceFromTextureMailbox( |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1885 FakeRendererGL renderer(&settings, output_surface.get(), | 1878 FakeRendererGL renderer(&settings, output_surface.get(), |
| 1886 resource_provider.get()); | 1879 resource_provider.get()); |
| 1887 renderer.Initialize(); | 1880 renderer.Initialize(); |
| 1888 EXPECT_EQ(partial_swap, renderer.use_partial_swap()); | 1881 EXPECT_EQ(partial_swap, renderer.use_partial_swap()); |
| 1889 renderer.SetVisible(true); | 1882 renderer.SetVisible(true); |
| 1890 | 1883 |
| 1891 gfx::Size viewport_size(100, 100); | 1884 gfx::Size viewport_size(100, 100); |
| 1892 | 1885 |
| 1893 { | 1886 { |
| 1894 RenderPassId root_pass_id(1, 0); | 1887 RenderPassId root_pass_id(1, 0); |
| 1895 RenderPass* root_pass = | 1888 RenderPass* root_pass = AddRenderPass( |
| 1896 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1889 &render_passes_in_draw_order_, root_pass_id, gfx::Rect(viewport_size), |
| 1897 gfx::Rect(viewport_size), gfx::Transform()); | 1890 gfx::Transform(), FilterOperations()); |
| 1898 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); | 1891 AddQuad(root_pass, gfx::Rect(viewport_size), SK_ColorGREEN); |
| 1899 | 1892 |
| 1900 testing::Sequence seq; | 1893 testing::Sequence seq; |
| 1901 // A bunch of initialization that happens. | 1894 // A bunch of initialization that happens. |
| 1902 EXPECT_CALL(*gl, Disable(GL_DEPTH_TEST)).InSequence(seq); | 1895 EXPECT_CALL(*gl, Disable(GL_DEPTH_TEST)).InSequence(seq); |
| 1903 EXPECT_CALL(*gl, Disable(GL_CULL_FACE)).InSequence(seq); | 1896 EXPECT_CALL(*gl, Disable(GL_CULL_FACE)).InSequence(seq); |
| 1904 EXPECT_CALL(*gl, Disable(GL_STENCIL_TEST)).InSequence(seq); | 1897 EXPECT_CALL(*gl, Disable(GL_STENCIL_TEST)).InSequence(seq); |
| 1905 EXPECT_CALL(*gl, Enable(GL_BLEND)).InSequence(seq); | 1898 EXPECT_CALL(*gl, Enable(GL_BLEND)).InSequence(seq); |
| 1906 EXPECT_CALL(*gl, Disable(GL_SCISSOR_TEST)).InSequence(seq); | 1899 EXPECT_CALL(*gl, Disable(GL_SCISSOR_TEST)).InSequence(seq); |
| 1907 EXPECT_CALL(*gl, Scissor(0, 0, 0, 0)).InSequence(seq); | 1900 EXPECT_CALL(*gl, Scissor(0, 0, 0, 0)).InSequence(seq); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1978 renderer_->SetVisible(true); | 1971 renderer_->SetVisible(true); |
| 1979 Mock::VerifyAndClearExpectations(context_support_ptr_); | 1972 Mock::VerifyAndClearExpectations(context_support_ptr_); |
| 1980 | 1973 |
| 1981 EXPECT_CALL(*context_support_ptr_, SetAggressivelyFreeResources(true)); | 1974 EXPECT_CALL(*context_support_ptr_, SetAggressivelyFreeResources(true)); |
| 1982 renderer_->SetVisible(false); | 1975 renderer_->SetVisible(false); |
| 1983 Mock::VerifyAndClearExpectations(context_support_ptr_); | 1976 Mock::VerifyAndClearExpectations(context_support_ptr_); |
| 1984 } | 1977 } |
| 1985 | 1978 |
| 1986 } // namespace | 1979 } // namespace |
| 1987 } // namespace cc | 1980 } // namespace cc |
| OLD | NEW |