| OLD | NEW |
| 1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 #include "cc/quads/picture_draw_quad.h" | 42 #include "cc/quads/picture_draw_quad.h" |
| 43 #include "cc/quads/render_pass.h" | 43 #include "cc/quads/render_pass.h" |
| 44 #include "cc/quads/stream_video_draw_quad.h" | 44 #include "cc/quads/stream_video_draw_quad.h" |
| 45 #include "cc/quads/texture_draw_quad.h" | 45 #include "cc/quads/texture_draw_quad.h" |
| 46 #include "cc/raster/scoped_gpu_raster.h" | 46 #include "cc/raster/scoped_gpu_raster.h" |
| 47 #include "cc/resources/resource_pool.h" | 47 #include "cc/resources/resource_pool.h" |
| 48 #include "cc/resources/scoped_resource.h" | 48 #include "cc/resources/scoped_resource.h" |
| 49 #include "gpu/GLES2/gl2extchromium.h" | 49 #include "gpu/GLES2/gl2extchromium.h" |
| 50 #include "gpu/command_buffer/client/context_support.h" | 50 #include "gpu/command_buffer/client/context_support.h" |
| 51 #include "gpu/command_buffer/client/gles2_interface.h" | 51 #include "gpu/command_buffer/client/gles2_interface.h" |
| 52 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
| 52 #include "gpu/command_buffer/common/gpu_memory_allocation.h" | 53 #include "gpu/command_buffer/common/gpu_memory_allocation.h" |
| 53 #include "media/base/media_switches.h" | 54 #include "media/base/media_switches.h" |
| 54 #include "skia/ext/texture_handle.h" | 55 #include "skia/ext/texture_handle.h" |
| 55 #include "third_party/skia/include/core/SkBitmap.h" | 56 #include "third_party/skia/include/core/SkBitmap.h" |
| 56 #include "third_party/skia/include/core/SkColor.h" | 57 #include "third_party/skia/include/core/SkColor.h" |
| 57 #include "third_party/skia/include/core/SkColorFilter.h" | 58 #include "third_party/skia/include/core/SkColorFilter.h" |
| 58 #include "third_party/skia/include/core/SkImage.h" | 59 #include "third_party/skia/include/core/SkImage.h" |
| 59 #include "third_party/skia/include/core/SkSurface.h" | 60 #include "third_party/skia/include/core/SkSurface.h" |
| 60 #include "third_party/skia/include/gpu/GrContext.h" | 61 #include "third_party/skia/include/gpu/GrContext.h" |
| 61 #include "third_party/skia/include/gpu/gl/GrGLInterface.h" | 62 #include "third_party/skia/include/gpu/gl/GrGLInterface.h" |
| (...skipping 2866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2928 | 2929 |
| 2929 swapping_overlay_resources_.push_back(std::move(pending_overlay_resources_)); | 2930 swapping_overlay_resources_.push_back(std::move(pending_overlay_resources_)); |
| 2930 pending_overlay_resources_.clear(); | 2931 pending_overlay_resources_.clear(); |
| 2931 | 2932 |
| 2932 output_surface_->SwapBuffers(std::move(output_frame)); | 2933 output_surface_->SwapBuffers(std::move(output_frame)); |
| 2933 | 2934 |
| 2934 swap_buffer_rect_ = gfx::Rect(); | 2935 swap_buffer_rect_ = gfx::Rect(); |
| 2935 } | 2936 } |
| 2936 | 2937 |
| 2937 void GLRenderer::SwapBuffersComplete() { | 2938 void GLRenderer::SwapBuffersComplete() { |
| 2938 if (settings_->release_overlay_resources_after_gpu_query) { | 2939 if (swapping_overlay_resources_.size() > 1) { |
| 2939 // Once a resource has been swap-ACKed, send a query to the GPU process to | |
| 2940 // ask if the resource is no longer being consumed by the system compositor. | |
| 2941 // The response will come with the next swap-ACK. | |
| 2942 if (!swapping_overlay_resources_.empty()) { | |
| 2943 for (OverlayResourceLock& lock : swapping_overlay_resources_.front()) { | |
| 2944 unsigned texture = lock->texture_id(); | |
| 2945 if (swapped_and_acked_overlay_resources_.find(texture) == | |
| 2946 swapped_and_acked_overlay_resources_.end()) { | |
| 2947 swapped_and_acked_overlay_resources_[texture] = std::move(lock); | |
| 2948 } | |
| 2949 } | |
| 2950 swapping_overlay_resources_.pop_front(); | |
| 2951 } | |
| 2952 | |
| 2953 if (!swapped_and_acked_overlay_resources_.empty()) { | |
| 2954 std::vector<unsigned> textures; | |
| 2955 textures.reserve(swapped_and_acked_overlay_resources_.size()); | |
| 2956 for (auto& pair : swapped_and_acked_overlay_resources_) { | |
| 2957 textures.push_back(pair.first); | |
| 2958 } | |
| 2959 gl_->ScheduleCALayerInUseQueryCHROMIUM(textures.size(), textures.data()); | |
| 2960 } | |
| 2961 } else if (swapping_overlay_resources_.size() > 1) { | |
| 2962 // If a query is not needed to release the overlay buffers, we can assume | 2940 // If a query is not needed to release the overlay buffers, we can assume |
| 2963 // that once a swap buffer has completed we can remove the oldest buffers | 2941 // that once a swap buffer has completed we can remove the oldest buffers |
| 2964 // from the queue. | 2942 // from the queue. |
| 2965 swapping_overlay_resources_.pop_front(); | 2943 swapping_overlay_resources_.pop_front(); |
| 2966 } | 2944 } |
| 2967 } | 2945 } |
| 2968 | 2946 |
| 2969 void GLRenderer::DidReceiveTextureInUseResponses( | 2947 void GLRenderer::DidReceiveTextureInUseResponses( |
| 2970 const gpu::TextureInUseResponses& responses) { | 2948 const gpu::TextureInUseResponses& responses) { |
| 2971 DCHECK(settings_->release_overlay_resources_after_gpu_query); | 2949 DCHECK(settings_->release_overlay_resources_after_gpu_query); |
| 2972 for (const gpu::TextureInUseResponse& response : responses) { | 2950 for (const gpu::TextureInUseResponse& response : responses) { |
| 2973 if (!response.in_use) { | 2951 auto found = ca_layer_resources_.find(response.texture); |
| 2974 swapped_and_acked_overlay_resources_.erase(response.texture); | 2952 DCHECK(found != ca_layer_resources_.end()); |
| 2953 CALayerResourceLock& ca_layer_resource_lock = found->second; |
| 2954 DCHECK(ca_layer_resource_lock.outstanding_ack_count > 0); |
| 2955 |
| 2956 ca_layer_resource_lock.outstanding_ack_count -= 1; |
| 2957 ca_layer_resource_lock.in_use_valid = response.in_use_valid; |
| 2958 |
| 2959 // Requesting the GpuMemoryBuffer handle is expensive. We should do it only |
| 2960 // only once per resource. |
| 2961 if (!response.gpu_memory_buffer_handle.is_null()) { |
| 2962 DCHECK(!ca_layer_resource_lock.gpu_memory_buffer); |
| 2963 // The size and format for this resource do not matter. |
| 2964 gfx::Size dummy_size(256, 256); |
| 2965 gfx::BufferFormat dummy_format = gfx::BufferFormat::RGBA_8888; |
| 2966 DCHECK(response.gpu_memory_buffer_handle.type == |
| 2967 gfx::GpuMemoryBufferType::IO_SURFACE_BUFFER); |
| 2968 ca_layer_resource_lock.gpu_memory_buffer = |
| 2969 resource_provider_->gpu_memory_buffer_manager() |
| 2970 ->CreateGpuMemoryBufferFromHandle( |
| 2971 response.gpu_memory_buffer_handle, dummy_size, dummy_format); |
| 2975 } | 2972 } |
| 2976 } | 2973 } |
| 2974 |
| 2975 // Clear locks on resources that are no longer in use. |
| 2976 auto iter = ca_layer_resources_.begin(); |
| 2977 while (iter != ca_layer_resources_.end()) { |
| 2978 auto iter_old = iter++; |
| 2979 CALayerResourceLock& ca_layer_resource_lock = iter_old->second; |
| 2980 if (ca_layer_resource_lock.outstanding_ack_count == 0) { |
| 2981 if (!ca_layer_resource_lock.in_use_valid || |
| 2982 !ca_layer_resource_lock.gpu_memory_buffer || |
| 2983 !ca_layer_resource_lock.gpu_memory_buffer |
| 2984 ->IsInUseByMacOSWindowServer()) { |
| 2985 ca_layer_resources_.erase(iter_old); |
| 2986 } |
| 2987 } |
| 2988 } |
| 2989 |
| 2977 color_lut_cache_.Swap(); | 2990 color_lut_cache_.Swap(); |
| 2978 } | 2991 } |
| 2979 | 2992 |
| 2980 void GLRenderer::GetFramebufferPixelsAsync( | 2993 void GLRenderer::GetFramebufferPixelsAsync( |
| 2981 const DrawingFrame* frame, | 2994 const DrawingFrame* frame, |
| 2982 const gfx::Rect& rect, | 2995 const gfx::Rect& rect, |
| 2983 std::unique_ptr<CopyOutputRequest> request) { | 2996 std::unique_ptr<CopyOutputRequest> request) { |
| 2984 DCHECK(!request->IsEmpty()); | 2997 DCHECK(!request->IsEmpty()); |
| 2985 if (request->IsEmpty()) | 2998 if (request->IsEmpty()) |
| 2986 return; | 2999 return; |
| (...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3767 | 3780 |
| 3768 bool GLRenderer::IsContextLost() { | 3781 bool GLRenderer::IsContextLost() { |
| 3769 return gl_->GetGraphicsResetStatusKHR() != GL_NO_ERROR; | 3782 return gl_->GetGraphicsResetStatusKHR() != GL_NO_ERROR; |
| 3770 } | 3783 } |
| 3771 | 3784 |
| 3772 void GLRenderer::ScheduleCALayers(DrawingFrame* frame) { | 3785 void GLRenderer::ScheduleCALayers(DrawingFrame* frame) { |
| 3773 if (overlay_resource_pool_) { | 3786 if (overlay_resource_pool_) { |
| 3774 overlay_resource_pool_->CheckBusyResources(); | 3787 overlay_resource_pool_->CheckBusyResources(); |
| 3775 } | 3788 } |
| 3776 | 3789 |
| 3790 std::vector<unsigned> textures_and_handle_requests_for_in_use_query; |
| 3777 scoped_refptr<CALayerOverlaySharedState> shared_state; | 3791 scoped_refptr<CALayerOverlaySharedState> shared_state; |
| 3778 size_t copied_render_pass_count = 0; | 3792 size_t copied_render_pass_count = 0; |
| 3779 for (const CALayerOverlay& ca_layer_overlay : frame->ca_layer_overlay_list) { | 3793 for (const CALayerOverlay& ca_layer_overlay : frame->ca_layer_overlay_list) { |
| 3794 std::unique_ptr<ResourceProvider::ScopedReadLockGL> lock; |
| 3780 if (ca_layer_overlay.rpdq) { | 3795 if (ca_layer_overlay.rpdq) { |
| 3781 ScheduleRenderPassDrawQuad(&ca_layer_overlay, frame); | 3796 lock = ScheduleRenderPassDrawQuad(&ca_layer_overlay, frame); |
| 3782 shared_state = nullptr; | 3797 shared_state = nullptr; |
| 3783 ++copied_render_pass_count; | 3798 ++copied_render_pass_count; |
| 3784 continue; | 3799 } else { |
| 3800 ResourceId contents_resource_id = ca_layer_overlay.contents_resource_id; |
| 3801 unsigned texture_id = 0; |
| 3802 if (contents_resource_id) { |
| 3803 lock = base::MakeUnique<ResourceProvider::ScopedReadLockGL>( |
| 3804 resource_provider_, contents_resource_id); |
| 3805 texture_id = lock->texture_id(); |
| 3806 } |
| 3807 GLfloat contents_rect[4] = { |
| 3808 ca_layer_overlay.contents_rect.x(), |
| 3809 ca_layer_overlay.contents_rect.y(), |
| 3810 ca_layer_overlay.contents_rect.width(), |
| 3811 ca_layer_overlay.contents_rect.height(), |
| 3812 }; |
| 3813 GLfloat bounds_rect[4] = { |
| 3814 ca_layer_overlay.bounds_rect.x(), ca_layer_overlay.bounds_rect.y(), |
| 3815 ca_layer_overlay.bounds_rect.width(), |
| 3816 ca_layer_overlay.bounds_rect.height(), |
| 3817 }; |
| 3818 GLboolean is_clipped = ca_layer_overlay.shared_state->is_clipped; |
| 3819 GLfloat clip_rect[4] = { |
| 3820 ca_layer_overlay.shared_state->clip_rect.x(), |
| 3821 ca_layer_overlay.shared_state->clip_rect.y(), |
| 3822 ca_layer_overlay.shared_state->clip_rect.width(), |
| 3823 ca_layer_overlay.shared_state->clip_rect.height()}; |
| 3824 GLint sorting_context_id = |
| 3825 ca_layer_overlay.shared_state->sorting_context_id; |
| 3826 GLfloat transform[16]; |
| 3827 ca_layer_overlay.shared_state->transform.asColMajorf(transform); |
| 3828 unsigned filter = ca_layer_overlay.filter; |
| 3829 |
| 3830 if (ca_layer_overlay.shared_state != shared_state) { |
| 3831 shared_state = ca_layer_overlay.shared_state; |
| 3832 gl_->ScheduleCALayerSharedStateCHROMIUM( |
| 3833 ca_layer_overlay.shared_state->opacity, is_clipped, clip_rect, |
| 3834 sorting_context_id, transform); |
| 3835 } |
| 3836 gl_->ScheduleCALayerCHROMIUM( |
| 3837 texture_id, contents_rect, ca_layer_overlay.background_color, |
| 3838 ca_layer_overlay.edge_aa_mask, bounds_rect, filter); |
| 3785 } | 3839 } |
| 3840 if (lock) { |
| 3841 unsigned texture = lock->texture_id(); |
| 3842 CALayerResourceLock& ca_layer_resource_lock = |
| 3843 ca_layer_resources_[texture]; |
| 3786 | 3844 |
| 3787 ResourceId contents_resource_id = ca_layer_overlay.contents_resource_id; | 3845 textures_and_handle_requests_for_in_use_query.push_back(texture); |
| 3788 unsigned texture_id = 0; | 3846 textures_and_handle_requests_for_in_use_query.push_back( |
| 3789 if (contents_resource_id) { | 3847 !ca_layer_resource_lock.gpu_memory_buffer && |
| 3790 pending_overlay_resources_.push_back( | 3848 !ca_layer_resource_lock.outstanding_ack_count); |
| 3791 base::MakeUnique<ResourceProvider::ScopedReadLockGL>( | 3849 |
| 3792 resource_provider_, contents_resource_id)); | 3850 ca_layer_resource_lock.outstanding_ack_count += 1; |
| 3793 texture_id = pending_overlay_resources_.back()->texture_id(); | 3851 if (!ca_layer_resource_lock.lock) |
| 3852 ca_layer_resource_lock.lock = std::move(lock); |
| 3794 } | 3853 } |
| 3795 GLfloat contents_rect[4] = { | 3854 } |
| 3796 ca_layer_overlay.contents_rect.x(), ca_layer_overlay.contents_rect.y(), | |
| 3797 ca_layer_overlay.contents_rect.width(), | |
| 3798 ca_layer_overlay.contents_rect.height(), | |
| 3799 }; | |
| 3800 GLfloat bounds_rect[4] = { | |
| 3801 ca_layer_overlay.bounds_rect.x(), ca_layer_overlay.bounds_rect.y(), | |
| 3802 ca_layer_overlay.bounds_rect.width(), | |
| 3803 ca_layer_overlay.bounds_rect.height(), | |
| 3804 }; | |
| 3805 GLboolean is_clipped = ca_layer_overlay.shared_state->is_clipped; | |
| 3806 GLfloat clip_rect[4] = {ca_layer_overlay.shared_state->clip_rect.x(), | |
| 3807 ca_layer_overlay.shared_state->clip_rect.y(), | |
| 3808 ca_layer_overlay.shared_state->clip_rect.width(), | |
| 3809 ca_layer_overlay.shared_state->clip_rect.height()}; | |
| 3810 GLint sorting_context_id = | |
| 3811 ca_layer_overlay.shared_state->sorting_context_id; | |
| 3812 GLfloat transform[16]; | |
| 3813 ca_layer_overlay.shared_state->transform.asColMajorf(transform); | |
| 3814 unsigned filter = ca_layer_overlay.filter; | |
| 3815 | 3855 |
| 3816 if (ca_layer_overlay.shared_state != shared_state) { | 3856 // Schedule a query to open the GpuMemoryBuffers for all resources. |
| 3817 shared_state = ca_layer_overlay.shared_state; | 3857 // TODO: add the need_gmb_for_in_use_query argument to avoid creating extra |
| 3818 gl_->ScheduleCALayerSharedStateCHROMIUM( | 3858 // mach ports when it's unnecessary. |
| 3819 ca_layer_overlay.shared_state->opacity, is_clipped, clip_rect, | 3859 gl_->ScheduleCALayerInUseQueryCHROMIUM( |
| 3820 sorting_context_id, transform); | 3860 textures_and_handle_requests_for_in_use_query.size() / 2, |
| 3821 } | 3861 textures_and_handle_requests_for_in_use_query.data()); |
| 3822 gl_->ScheduleCALayerCHROMIUM( | |
| 3823 texture_id, contents_rect, ca_layer_overlay.background_color, | |
| 3824 ca_layer_overlay.edge_aa_mask, bounds_rect, filter); | |
| 3825 } | |
| 3826 | 3862 |
| 3827 // Take the number of copied render passes in this frame, and use 3 times that | 3863 // Take the number of copied render passes in this frame, and use 3 times that |
| 3828 // amount as the cache limit. | 3864 // amount as the cache limit. |
| 3829 if (overlay_resource_pool_) { | 3865 if (overlay_resource_pool_) { |
| 3830 overlay_resource_pool_->SetResourceUsageLimits( | 3866 overlay_resource_pool_->SetResourceUsageLimits( |
| 3831 std::numeric_limits<std::size_t>::max(), copied_render_pass_count * 5); | 3867 std::numeric_limits<std::size_t>::max(), copied_render_pass_count * 5); |
| 3832 } | 3868 } |
| 3833 } | 3869 } |
| 3834 | 3870 |
| 3835 void GLRenderer::ScheduleOverlays(DrawingFrame* frame) { | 3871 void GLRenderer::ScheduleOverlays(DrawingFrame* frame) { |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3989 UpdateRPDQUniforms(¶ms); | 4025 UpdateRPDQUniforms(¶ms); |
| 3990 | 4026 |
| 3991 // Prior to drawing, set up the destination framebuffer and viewport. | 4027 // Prior to drawing, set up the destination framebuffer and viewport. |
| 3992 gl_->BindFramebuffer(GL_FRAMEBUFFER, temp_fbo); | 4028 gl_->BindFramebuffer(GL_FRAMEBUFFER, temp_fbo); |
| 3993 gl_->Viewport(0, 0, updated_dst_rect.width(), updated_dst_rect.height()); | 4029 gl_->Viewport(0, 0, updated_dst_rect.width(), updated_dst_rect.height()); |
| 3994 | 4030 |
| 3995 DrawRPDQ(params); | 4031 DrawRPDQ(params); |
| 3996 gl_->DeleteFramebuffers(1, &temp_fbo); | 4032 gl_->DeleteFramebuffers(1, &temp_fbo); |
| 3997 } | 4033 } |
| 3998 | 4034 |
| 3999 void GLRenderer::ScheduleRenderPassDrawQuad( | 4035 std::unique_ptr<ResourceProvider::ScopedReadLockGL> |
| 4000 const CALayerOverlay* ca_layer_overlay, | 4036 GLRenderer::ScheduleRenderPassDrawQuad(const CALayerOverlay* ca_layer_overlay, |
| 4001 DrawingFrame* external_frame) { | 4037 DrawingFrame* external_frame) { |
| 4002 DCHECK(ca_layer_overlay->rpdq); | 4038 DCHECK(ca_layer_overlay->rpdq); |
| 4003 | 4039 |
| 4004 if (!overlay_resource_pool_) { | 4040 if (!overlay_resource_pool_) { |
| 4005 overlay_resource_pool_ = ResourcePool::CreateForGpuMemoryBufferResources( | 4041 overlay_resource_pool_ = ResourcePool::CreateForGpuMemoryBufferResources( |
| 4006 resource_provider_, base::ThreadTaskRunnerHandle::Get().get(), | 4042 resource_provider_, base::ThreadTaskRunnerHandle::Get().get(), |
| 4007 gfx::BufferUsage::SCANOUT, base::TimeDelta::FromSeconds(3)); | 4043 gfx::BufferUsage::SCANOUT, base::TimeDelta::FromSeconds(3)); |
| 4008 } | 4044 } |
| 4009 | 4045 |
| 4010 Resource* resource = nullptr; | 4046 Resource* resource = nullptr; |
| 4011 gfx::RectF new_bounds; | 4047 gfx::RectF new_bounds; |
| 4012 CopyRenderPassDrawQuadToOverlayResource(ca_layer_overlay, &resource, | 4048 CopyRenderPassDrawQuadToOverlayResource(ca_layer_overlay, &resource, |
| 4013 external_frame, &new_bounds); | 4049 external_frame, &new_bounds); |
| 4014 if (!resource || !resource->id()) | 4050 if (!resource || !resource->id()) |
| 4015 return; | 4051 return nullptr; |
| 4016 | 4052 |
| 4017 pending_overlay_resources_.push_back( | 4053 std::unique_ptr<ResourceProvider::ScopedReadLockGL> lock = |
| 4018 base::MakeUnique<ResourceProvider::ScopedReadLockGL>(resource_provider_, | 4054 base::MakeUnique<ResourceProvider::ScopedReadLockGL>(resource_provider_, |
| 4019 resource->id())); | 4055 resource->id()); |
| 4020 unsigned texture_id = pending_overlay_resources_.back()->texture_id(); | |
| 4021 | 4056 |
| 4022 // Once a resource is released, it is marked as "busy". It will be | 4057 // Once a resource is released, it is marked as "busy". It will be |
| 4023 // available for reuse after the ScopedReadLockGL is destroyed. | 4058 // available for reuse after the ScopedReadLockGL is destroyed. |
| 4024 overlay_resource_pool_->ReleaseResource(resource); | 4059 overlay_resource_pool_->ReleaseResource(resource); |
| 4025 | 4060 |
| 4026 GLfloat contents_rect[4] = { | 4061 GLfloat contents_rect[4] = { |
| 4027 ca_layer_overlay->contents_rect.x(), ca_layer_overlay->contents_rect.y(), | 4062 ca_layer_overlay->contents_rect.x(), ca_layer_overlay->contents_rect.y(), |
| 4028 ca_layer_overlay->contents_rect.width(), | 4063 ca_layer_overlay->contents_rect.width(), |
| 4029 ca_layer_overlay->contents_rect.height(), | 4064 ca_layer_overlay->contents_rect.height(), |
| 4030 }; | 4065 }; |
| 4031 GLfloat bounds_rect[4] = { | 4066 GLfloat bounds_rect[4] = { |
| 4032 new_bounds.x(), new_bounds.y(), new_bounds.width(), new_bounds.height(), | 4067 new_bounds.x(), new_bounds.y(), new_bounds.width(), new_bounds.height(), |
| 4033 }; | 4068 }; |
| 4034 GLboolean is_clipped = ca_layer_overlay->shared_state->is_clipped; | 4069 GLboolean is_clipped = ca_layer_overlay->shared_state->is_clipped; |
| 4035 GLfloat clip_rect[4] = {ca_layer_overlay->shared_state->clip_rect.x(), | 4070 GLfloat clip_rect[4] = {ca_layer_overlay->shared_state->clip_rect.x(), |
| 4036 ca_layer_overlay->shared_state->clip_rect.y(), | 4071 ca_layer_overlay->shared_state->clip_rect.y(), |
| 4037 ca_layer_overlay->shared_state->clip_rect.width(), | 4072 ca_layer_overlay->shared_state->clip_rect.width(), |
| 4038 ca_layer_overlay->shared_state->clip_rect.height()}; | 4073 ca_layer_overlay->shared_state->clip_rect.height()}; |
| 4039 GLint sorting_context_id = ca_layer_overlay->shared_state->sorting_context_id; | 4074 GLint sorting_context_id = ca_layer_overlay->shared_state->sorting_context_id; |
| 4040 SkMatrix44 transform = ca_layer_overlay->shared_state->transform; | 4075 SkMatrix44 transform = ca_layer_overlay->shared_state->transform; |
| 4041 GLfloat gl_transform[16]; | 4076 GLfloat gl_transform[16]; |
| 4042 transform.asColMajorf(gl_transform); | 4077 transform.asColMajorf(gl_transform); |
| 4043 unsigned filter = ca_layer_overlay->filter; | 4078 unsigned filter = ca_layer_overlay->filter; |
| 4044 | 4079 |
| 4045 // The alpha has already been applied when copying the RPDQ to an IOSurface. | 4080 // The alpha has already been applied when copying the RPDQ to an IOSurface. |
| 4046 GLfloat alpha = 1; | 4081 GLfloat alpha = 1; |
| 4047 gl_->ScheduleCALayerSharedStateCHROMIUM(alpha, is_clipped, clip_rect, | 4082 gl_->ScheduleCALayerSharedStateCHROMIUM(alpha, is_clipped, clip_rect, |
| 4048 sorting_context_id, gl_transform); | 4083 sorting_context_id, gl_transform); |
| 4049 gl_->ScheduleCALayerCHROMIUM( | 4084 gl_->ScheduleCALayerCHROMIUM( |
| 4050 texture_id, contents_rect, ca_layer_overlay->background_color, | 4085 lock->texture_id(), contents_rect, ca_layer_overlay->background_color, |
| 4051 ca_layer_overlay->edge_aa_mask, bounds_rect, filter); | 4086 ca_layer_overlay->edge_aa_mask, bounds_rect, filter); |
| 4087 return lock; |
| 4052 } | 4088 } |
| 4053 | 4089 |
| 4090 GLRenderer::CALayerResourceLock::CALayerResourceLock() = default; |
| 4091 GLRenderer::CALayerResourceLock::~CALayerResourceLock() = default; |
| 4092 GLRenderer::CALayerResourceLock::CALayerResourceLock( |
| 4093 CALayerResourceLock&& ca_layer_resource) = default; |
| 4094 |
| 4054 } // namespace cc | 4095 } // namespace cc |
| OLD | NEW |