| 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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 // Whether the original background texture is needed for the mask. | 217 // Whether the original background texture is needed for the mask. |
| 218 bool mask_for_background = false; | 218 bool mask_for_background = false; |
| 219 | 219 |
| 220 // Whether a color matrix needs to be applied by the shaders when drawing | 220 // Whether a color matrix needs to be applied by the shaders when drawing |
| 221 // the RPDQ. | 221 // the RPDQ. |
| 222 bool use_color_matrix = false; | 222 bool use_color_matrix = false; |
| 223 | 223 |
| 224 gfx::QuadF surface_quad; | 224 gfx::QuadF surface_quad; |
| 225 | 225 |
| 226 gfx::Transform contents_device_transform; | 226 gfx::Transform contents_device_transform; |
| 227 |
| 228 gfx::RectF tex_coord_rect; |
| 227 }; | 229 }; |
| 228 | 230 |
| 229 static GLint GetActiveTextureUnit(GLES2Interface* gl) { | 231 static GLint GetActiveTextureUnit(GLES2Interface* gl) { |
| 230 GLint active_unit = 0; | 232 GLint active_unit = 0; |
| 231 gl->GetIntegerv(GL_ACTIVE_TEXTURE, &active_unit); | 233 gl->GetIntegerv(GL_ACTIVE_TEXTURE, &active_unit); |
| 232 return active_unit; | 234 return active_unit; |
| 233 } | 235 } |
| 234 | 236 |
| 235 class GLRenderer::ScopedUseGrContext { | 237 class GLRenderer::ScopedUseGrContext { |
| 236 public: | 238 public: |
| (...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1028 } | 1030 } |
| 1029 | 1031 |
| 1030 void GLRenderer::DrawRenderPassQuad(const RenderPassDrawQuad* quad, | 1032 void GLRenderer::DrawRenderPassQuad(const RenderPassDrawQuad* quad, |
| 1031 const gfx::QuadF* clip_region) { | 1033 const gfx::QuadF* clip_region) { |
| 1032 auto bypass = render_pass_bypass_quads_.find(quad->render_pass_id); | 1034 auto bypass = render_pass_bypass_quads_.find(quad->render_pass_id); |
| 1033 DrawRenderPassDrawQuadParams params; | 1035 DrawRenderPassDrawQuadParams params; |
| 1034 params.quad = quad; | 1036 params.quad = quad; |
| 1035 params.clip_region = clip_region; | 1037 params.clip_region = clip_region; |
| 1036 params.window_matrix = current_frame()->window_matrix; | 1038 params.window_matrix = current_frame()->window_matrix; |
| 1037 params.projection_matrix = current_frame()->projection_matrix; | 1039 params.projection_matrix = current_frame()->projection_matrix; |
| 1040 params.tex_coord_rect = quad->tex_coord_rect; |
| 1038 if (bypass != render_pass_bypass_quads_.end()) { | 1041 if (bypass != render_pass_bypass_quads_.end()) { |
| 1039 TileDrawQuad* tile_quad = &bypass->second; | 1042 TileDrawQuad* tile_quad = &bypass->second; |
| 1040 // RGBA_8888 here is arbitrary and unused. | 1043 // RGBA_8888 here is arbitrary and unused. |
| 1041 Resource tile_resource(tile_quad->resource_id(), tile_quad->texture_size, | 1044 Resource tile_resource(tile_quad->resource_id(), tile_quad->texture_size, |
| 1042 ResourceFormat::RGBA_8888, | 1045 ResourceFormat::RGBA_8888, |
| 1043 current_frame()->current_render_pass->color_space); | 1046 current_frame()->current_render_pass->color_space); |
| 1044 // The projection matrix used by GLRenderer has a flip. As tile texture | 1047 // The projection matrix used by GLRenderer has a flip. As tile texture |
| 1045 // inputs are oriented opposite to framebuffer outputs, don't flip via | 1048 // inputs are oriented opposite to framebuffer outputs, don't flip via |
| 1046 // texture coords and let the projection matrix naturallyd o it. | 1049 // texture coords and let the projection matrix naturallyd o it. |
| 1047 params.flip_texture = false; | 1050 params.flip_texture = false; |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1235 ScopedUseGrContext::Create(this), resource_provider_, src_rect, | 1238 ScopedUseGrContext::Create(this), resource_provider_, src_rect, |
| 1236 params->dst_rect, quad->filters_scale, std::move(filter), | 1239 params->dst_rect, quad->filters_scale, std::move(filter), |
| 1237 params->contents_texture, &offset, &subset, params->flip_texture, | 1240 params->contents_texture, &offset, &subset, params->flip_texture, |
| 1238 quad->filters_origin); | 1241 quad->filters_origin); |
| 1239 if (!params->filter_image) | 1242 if (!params->filter_image) |
| 1240 return false; | 1243 return false; |
| 1241 params->dst_rect = | 1244 params->dst_rect = |
| 1242 gfx::RectF(src_rect.x() + offset.fX, src_rect.y() + offset.fY, | 1245 gfx::RectF(src_rect.x() + offset.fX, src_rect.y() + offset.fY, |
| 1243 subset.width(), subset.height()); | 1246 subset.width(), subset.height()); |
| 1244 params->src_offset.SetPoint(subset.x(), subset.y()); | 1247 params->src_offset.SetPoint(subset.x(), subset.y()); |
| 1248 gfx::RectF tex_rect = gfx::RectF(gfx::PointF(params->src_offset), |
| 1249 params->dst_rect.size()); |
| 1250 params->tex_coord_rect = tex_rect; |
| 1245 } | 1251 } |
| 1246 } | 1252 } |
| 1247 } | 1253 } |
| 1248 return true; | 1254 return true; |
| 1249 } | 1255 } |
| 1250 | 1256 |
| 1251 void GLRenderer::UpdateRPDQTexturesForSampling( | 1257 void GLRenderer::UpdateRPDQTexturesForSampling( |
| 1252 DrawRenderPassDrawQuadParams* params) { | 1258 DrawRenderPassDrawQuadParams* params) { |
| 1253 if (params->quad->mask_resource_id()) { | 1259 if (params->quad->mask_resource_id()) { |
| 1254 params->mask_resource_lock.reset(new ResourceProvider::ScopedSamplerGL( | 1260 params->mask_resource_lock.reset(new ResourceProvider::ScopedSamplerGL( |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1314 SetUseProgram(ProgramKey::RenderPass( | 1320 SetUseProgram(ProgramKey::RenderPass( |
| 1315 tex_coord_precision, sampler_type, shader_blend_mode, | 1321 tex_coord_precision, sampler_type, shader_blend_mode, |
| 1316 params->use_aa ? USE_AA : NO_AA, mask_mode, | 1322 params->use_aa ? USE_AA : NO_AA, mask_mode, |
| 1317 mask_for_background, params->use_color_matrix), | 1323 mask_for_background, params->use_color_matrix), |
| 1318 params->contents_resource_lock | 1324 params->contents_resource_lock |
| 1319 ? params->contents_resource_lock->color_space() | 1325 ? params->contents_resource_lock->color_space() |
| 1320 : gfx::ColorSpace()); | 1326 : gfx::ColorSpace()); |
| 1321 } | 1327 } |
| 1322 | 1328 |
| 1323 void GLRenderer::UpdateRPDQUniforms(DrawRenderPassDrawQuadParams* params) { | 1329 void GLRenderer::UpdateRPDQUniforms(DrawRenderPassDrawQuadParams* params) { |
| 1324 gfx::RectF tex_rect = params->quad->tex_coord_rect; | 1330 gfx::RectF tex_rect = params->tex_coord_rect; |
| 1325 if (tex_rect.IsEmpty()) { | |
| 1326 // TODO(sunxd): make this never be empty. | |
| 1327 tex_rect = | |
| 1328 gfx::RectF(gfx::PointF(params->src_offset), params->dst_rect.size()); | |
| 1329 } | |
| 1330 | 1331 |
| 1331 gfx::Size texture_size; | 1332 gfx::Size texture_size; |
| 1332 if (params->filter_image) { | 1333 if (params->filter_image) { |
| 1333 texture_size.set_width(params->filter_image->width()); | 1334 texture_size.set_width(params->filter_image->width()); |
| 1334 texture_size.set_height(params->filter_image->height()); | 1335 texture_size.set_height(params->filter_image->height()); |
| 1335 } else { | 1336 } else { |
| 1336 texture_size = params->contents_texture->size(); | 1337 texture_size = params->contents_texture->size(); |
| 1337 } | 1338 } |
| 1338 tex_rect.Scale(1.0f / texture_size.width(), 1.0f / texture_size.height()); | 1339 tex_rect.Scale(1.0f / texture_size.width(), 1.0f / texture_size.height()); |
| 1339 | 1340 |
| (...skipping 1983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3323 DCHECK(contents_texture); | 3324 DCHECK(contents_texture); |
| 3324 | 3325 |
| 3325 // Configure parameters as if drawing to a framebuffer the size of the | 3326 // Configure parameters as if drawing to a framebuffer the size of the |
| 3326 // screen. | 3327 // screen. |
| 3327 DrawRenderPassDrawQuadParams params; | 3328 DrawRenderPassDrawQuadParams params; |
| 3328 params.quad = ca_layer_overlay->rpdq; | 3329 params.quad = ca_layer_overlay->rpdq; |
| 3329 params.flip_texture = true; | 3330 params.flip_texture = true; |
| 3330 params.contents_texture = contents_texture; | 3331 params.contents_texture = contents_texture; |
| 3331 params.quad_to_target_transform = | 3332 params.quad_to_target_transform = |
| 3332 params.quad->shared_quad_state->quad_to_target_transform; | 3333 params.quad->shared_quad_state->quad_to_target_transform; |
| 3334 params.tex_coord_rect = params.quad->tex_coord_rect; |
| 3333 | 3335 |
| 3334 // Calculate projection and window matrices using InitializeViewport(). This | 3336 // Calculate projection and window matrices using InitializeViewport(). This |
| 3335 // requires creating a dummy DrawingFrame. | 3337 // requires creating a dummy DrawingFrame. |
| 3336 { | 3338 { |
| 3337 DrawingFrame dummy_frame; | 3339 DrawingFrame dummy_frame; |
| 3338 gfx::Rect frame_rect(current_frame()->device_viewport_size); | 3340 gfx::Rect frame_rect(current_frame()->device_viewport_size); |
| 3339 force_drawing_frame_framebuffer_unflipped_ = true; | 3341 force_drawing_frame_framebuffer_unflipped_ = true; |
| 3340 InitializeViewport(&dummy_frame, frame_rect, frame_rect, frame_rect.size()); | 3342 InitializeViewport(&dummy_frame, frame_rect, frame_rect, frame_rect.size()); |
| 3341 force_drawing_frame_framebuffer_unflipped_ = false; | 3343 force_drawing_frame_framebuffer_unflipped_ = false; |
| 3342 params.projection_matrix = dummy_frame.projection_matrix; | 3344 params.projection_matrix = dummy_frame.projection_matrix; |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3594 return; | 3596 return; |
| 3595 | 3597 |
| 3596 // Report GPU overdraw as a percentage of |max_result|. | 3598 // Report GPU overdraw as a percentage of |max_result|. |
| 3597 TRACE_COUNTER1( | 3599 TRACE_COUNTER1( |
| 3598 TRACE_DISABLED_BY_DEFAULT("cc.debug.overdraw"), "GPU Overdraw", | 3600 TRACE_DISABLED_BY_DEFAULT("cc.debug.overdraw"), "GPU Overdraw", |
| 3599 (std::accumulate(overdraw->begin(), overdraw->end(), 0) * 100) / | 3601 (std::accumulate(overdraw->begin(), overdraw->end(), 0) * 100) / |
| 3600 max_result); | 3602 max_result); |
| 3601 } | 3603 } |
| 3602 | 3604 |
| 3603 } // namespace cc | 3605 } // namespace cc |
| OLD | NEW |