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

Side by Side Diff: cc/output/gl_renderer.cc

Issue 14705008: cc: Cache highp_threshold in TexCoordPrecisionRequired (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase. Remove unnecessary statics. Allow min to vary. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/shader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 shared_geometry_quad_(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)), 121 shared_geometry_quad_(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)),
122 output_surface_(output_surface), 122 output_surface_(output_surface),
123 context_(output_surface->context3d()), 123 context_(output_surface->context3d()),
124 is_viewport_changed_(false), 124 is_viewport_changed_(false),
125 is_backbuffer_discarded_(false), 125 is_backbuffer_discarded_(false),
126 discard_backbuffer_when_not_visible_(false), 126 discard_backbuffer_when_not_visible_(false),
127 is_using_bind_uniform_(false), 127 is_using_bind_uniform_(false),
128 visible_(true), 128 visible_(true),
129 is_scissor_enabled_(false), 129 is_scissor_enabled_(false),
130 highp_threshold_min_(highp_threshold_min), 130 highp_threshold_min_(highp_threshold_min),
131 highp_threshold_cache_(0),
131 on_demand_tile_raster_resource_id_(0) { 132 on_demand_tile_raster_resource_id_(0) {
132 DCHECK(context_); 133 DCHECK(context_);
133 } 134 }
134 135
135 bool GLRenderer::Initialize() { 136 bool GLRenderer::Initialize() {
136 if (!context_->makeContextCurrent()) 137 if (!context_->makeContextCurrent())
137 return false; 138 return false;
138 139
139 context_->pushGroupMarkerEXT("CompositorContext"); 140 context_->pushGroupMarkerEXT("CompositorContext");
140 141
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 Context()->bindTexture(GL_TEXTURE_2D, texture->getTextureHandle()); 765 Context()->bindTexture(GL_TEXTURE_2D, texture->getTextureHandle());
765 } else { 766 } else {
766 contents_resource_lock = make_scoped_ptr( 767 contents_resource_lock = make_scoped_ptr(
767 new ResourceProvider::ScopedSamplerGL(resource_provider_, 768 new ResourceProvider::ScopedSamplerGL(resource_provider_,
768 contents_texture->id(), 769 contents_texture->id(),
769 GL_TEXTURE_2D, 770 GL_TEXTURE_2D,
770 GL_LINEAR)); 771 GL_LINEAR));
771 } 772 }
772 773
773 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 774 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
774 context_, highp_threshold_min_, 775 context_, &highp_threshold_cache_, highp_threshold_min_,
775 quad->shared_quad_state->visible_content_rect.bottom_right()); 776 quad->shared_quad_state->visible_content_rect.bottom_right());
776 777
777 int shader_quad_location = -1; 778 int shader_quad_location = -1;
778 int shader_edge_location = -1; 779 int shader_edge_location = -1;
779 int shader_mask_sampler_location = -1; 780 int shader_mask_sampler_location = -1;
780 int shader_mask_tex_coord_scale_location = -1; 781 int shader_mask_tex_coord_scale_location = -1;
781 int shader_mask_tex_coord_offset_location = -1; 782 int shader_mask_tex_coord_offset_location = -1;
782 int shader_matrix_location = -1; 783 int shader_matrix_location = -1;
783 int shader_alpha_location = -1; 784 int shader_alpha_location = -1;
784 int shader_color_matrix_location = -1; 785 int shader_color_matrix_location = -1;
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 clamp_tex_rect.Inset(tex_clamp_x, tex_clamp_y, tex_clamp_x, tex_clamp_y); 1245 clamp_tex_rect.Inset(tex_clamp_x, tex_clamp_y, tex_clamp_x, tex_clamp_y);
1245 1246
1246 // Map clamping rectangle to unit square. 1247 // Map clamping rectangle to unit square.
1247 float vertex_tex_translate_x = -clamp_geom_rect.x() / clamp_geom_rect.width(); 1248 float vertex_tex_translate_x = -clamp_geom_rect.x() / clamp_geom_rect.width();
1248 float vertex_tex_translate_y = 1249 float vertex_tex_translate_y =
1249 -clamp_geom_rect.y() / clamp_geom_rect.height(); 1250 -clamp_geom_rect.y() / clamp_geom_rect.height();
1250 float vertex_tex_scale_x = tile_rect.width() / clamp_geom_rect.width(); 1251 float vertex_tex_scale_x = tile_rect.width() / clamp_geom_rect.width();
1251 float vertex_tex_scale_y = tile_rect.height() / clamp_geom_rect.height(); 1252 float vertex_tex_scale_y = tile_rect.height() / clamp_geom_rect.height();
1252 1253
1253 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 1254 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
1254 context_, highp_threshold_min_, quad->texture_size); 1255 context_, &highp_threshold_cache_, highp_threshold_min_,
1256 quad->texture_size);
1255 1257
1256 // Map to normalized texture coordinates. 1258 // Map to normalized texture coordinates.
1257 gfx::Size texture_size = quad->texture_size; 1259 gfx::Size texture_size = quad->texture_size;
1258 float fragment_tex_translate_x = clamp_tex_rect.x() / texture_size.width(); 1260 float fragment_tex_translate_x = clamp_tex_rect.x() / texture_size.width();
1259 float fragment_tex_translate_y = clamp_tex_rect.y() / texture_size.height(); 1261 float fragment_tex_translate_y = clamp_tex_rect.y() / texture_size.height();
1260 float fragment_tex_scale_x = clamp_tex_rect.width() / texture_size.width(); 1262 float fragment_tex_scale_x = clamp_tex_rect.width() / texture_size.width();
1261 float fragment_tex_scale_y = clamp_tex_rect.height() / texture_size.height(); 1263 float fragment_tex_scale_y = clamp_tex_rect.height() / texture_size.height();
1262 1264
1263 gfx::Transform device_transform = 1265 gfx::Transform device_transform =
1264 frame->window_matrix * frame->projection_matrix * quad->quadTransform(); 1266 frame->window_matrix * frame->projection_matrix * quad->quadTransform();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1362 tile_rect.size()); 1364 tile_rect.size());
1363 DrawQuadGeometry( 1365 DrawQuadGeometry(
1364 frame, quad->quadTransform(), centered_rect, uniforms.matrix_location); 1366 frame, quad->quadTransform(), centered_rect, uniforms.matrix_location);
1365 } 1367 }
1366 1368
1367 void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame, 1369 void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame,
1368 const YUVVideoDrawQuad* quad) { 1370 const YUVVideoDrawQuad* quad) {
1369 SetBlendEnabled(quad->ShouldDrawWithBlending()); 1371 SetBlendEnabled(quad->ShouldDrawWithBlending());
1370 1372
1371 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 1373 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
1372 context_, highp_threshold_min_, 1374 context_, &highp_threshold_cache_, highp_threshold_min_,
1373 quad->shared_quad_state->visible_content_rect.bottom_right()); 1375 quad->shared_quad_state->visible_content_rect.bottom_right());
1374 1376
1375 const VideoYUVProgram* program = GetVideoYUVProgram(tex_coord_precision); 1377 const VideoYUVProgram* program = GetVideoYUVProgram(tex_coord_precision);
1376 DCHECK(program && (program->initialized() || IsContextLost())); 1378 DCHECK(program && (program->initialized() || IsContextLost()));
1377 1379
1378 GLC(Context(), Context()->activeTexture(GL_TEXTURE1)); 1380 GLC(Context(), Context()->activeTexture(GL_TEXTURE1));
1379 ResourceProvider::ScopedSamplerGL y_plane_lock( 1381 ResourceProvider::ScopedSamplerGL y_plane_lock(
1380 resource_provider_, quad->y_plane_resource_id, GL_TEXTURE_2D, GL_LINEAR); 1382 resource_provider_, quad->y_plane_resource_id, GL_TEXTURE_2D, GL_LINEAR);
1381 GLC(Context(), Context()->activeTexture(GL_TEXTURE2)); 1383 GLC(Context(), Context()->activeTexture(GL_TEXTURE2));
1382 ResourceProvider::ScopedSamplerGL u_plane_lock( 1384 ResourceProvider::ScopedSamplerGL u_plane_lock(
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 1436
1435 void GLRenderer::DrawStreamVideoQuad(const DrawingFrame* frame, 1437 void GLRenderer::DrawStreamVideoQuad(const DrawingFrame* frame,
1436 const StreamVideoDrawQuad* quad) { 1438 const StreamVideoDrawQuad* quad) {
1437 SetBlendEnabled(quad->ShouldDrawWithBlending()); 1439 SetBlendEnabled(quad->ShouldDrawWithBlending());
1438 1440
1439 static float gl_matrix[16]; 1441 static float gl_matrix[16];
1440 1442
1441 DCHECK(capabilities_.using_egl_image); 1443 DCHECK(capabilities_.using_egl_image);
1442 1444
1443 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 1445 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
1444 context_, highp_threshold_min_, 1446 context_, &highp_threshold_cache_, highp_threshold_min_,
1445 quad->shared_quad_state->visible_content_rect.bottom_right()); 1447 quad->shared_quad_state->visible_content_rect.bottom_right());
1446 1448
1447 const VideoStreamTextureProgram* program = 1449 const VideoStreamTextureProgram* program =
1448 GetVideoStreamTextureProgram(tex_coord_precision); 1450 GetVideoStreamTextureProgram(tex_coord_precision);
1449 SetUseProgram(program->program()); 1451 SetUseProgram(program->program());
1450 1452
1451 ToGLMatrix(&gl_matrix[0], quad->matrix); 1453 ToGLMatrix(&gl_matrix[0], quad->matrix);
1452 GLC(Context(), 1454 GLC(Context(),
1453 Context()->uniformMatrix4fv( 1455 Context()->uniformMatrix4fv(
1454 program->vertex_shader().tex_matrix_location(), 1, false, gl_matrix)); 1456 program->vertex_shader().tex_matrix_location(), 1, false, gl_matrix));
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1608 // Clear the cache. 1610 // Clear the cache.
1609 draw_cache_.program_id = 0; 1611 draw_cache_.program_id = 0;
1610 draw_cache_.uv_xform_data.resize(0); 1612 draw_cache_.uv_xform_data.resize(0);
1611 draw_cache_.vertex_opacity_data.resize(0); 1613 draw_cache_.vertex_opacity_data.resize(0);
1612 draw_cache_.matrix_data.resize(0); 1614 draw_cache_.matrix_data.resize(0);
1613 } 1615 }
1614 1616
1615 void GLRenderer::EnqueueTextureQuad(const DrawingFrame* frame, 1617 void GLRenderer::EnqueueTextureQuad(const DrawingFrame* frame,
1616 const TextureDrawQuad* quad) { 1618 const TextureDrawQuad* quad) {
1617 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 1619 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
1618 context_, highp_threshold_min_, 1620 context_, &highp_threshold_cache_, highp_threshold_min_,
1619 quad->shared_quad_state->visible_content_rect.bottom_right()); 1621 quad->shared_quad_state->visible_content_rect.bottom_right());
1620 1622
1621 // Choose the correct texture program binding 1623 // Choose the correct texture program binding
1622 TexTransformTextureProgramBinding binding; 1624 TexTransformTextureProgramBinding binding;
1623 if (quad->flipped) 1625 if (quad->flipped)
1624 binding.Set(GetTextureProgramFlip(tex_coord_precision), Context()); 1626 binding.Set(GetTextureProgramFlip(tex_coord_precision), Context());
1625 else 1627 else
1626 binding.Set(GetTextureProgram(tex_coord_precision), Context()); 1628 binding.Set(GetTextureProgram(tex_coord_precision), Context());
1627 1629
1628 int resource_id = quad->resource_id; 1630 int resource_id = quad->resource_id;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 quad_rect_matrix = frame->projection_matrix * quad_rect_matrix; 1665 quad_rect_matrix = frame->projection_matrix * quad_rect_matrix;
1664 1666
1665 Float16 m; 1667 Float16 m;
1666 quad_rect_matrix.matrix().asColMajorf(m.data); 1668 quad_rect_matrix.matrix().asColMajorf(m.data);
1667 draw_cache_.matrix_data.push_back(m); 1669 draw_cache_.matrix_data.push_back(m);
1668 } 1670 }
1669 1671
1670 void GLRenderer::DrawTextureQuad(const DrawingFrame* frame, 1672 void GLRenderer::DrawTextureQuad(const DrawingFrame* frame,
1671 const TextureDrawQuad* quad) { 1673 const TextureDrawQuad* quad) {
1672 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 1674 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
1673 context_, highp_threshold_min_, 1675 context_, &highp_threshold_cache_, highp_threshold_min_,
1674 quad->shared_quad_state->visible_content_rect.bottom_right()); 1676 quad->shared_quad_state->visible_content_rect.bottom_right());
1675 1677
1676 TexTransformTextureProgramBinding binding; 1678 TexTransformTextureProgramBinding binding;
1677 if (quad->flipped) 1679 if (quad->flipped)
1678 binding.Set(GetTextureProgramFlip(tex_coord_precision), Context()); 1680 binding.Set(GetTextureProgramFlip(tex_coord_precision), Context());
1679 else 1681 else
1680 binding.Set(GetTextureProgram(tex_coord_precision), Context()); 1682 binding.Set(GetTextureProgram(tex_coord_precision), Context());
1681 SetUseProgram(binding.program_id); 1683 SetUseProgram(binding.program_id);
1682 GLC(Context(), Context()->uniform1i(binding.sampler_location, 0)); 1684 GLC(Context(), Context()->uniform1i(binding.sampler_location, 0));
1683 gfx::PointF uv0 = quad->uv_top_left; 1685 gfx::PointF uv0 = quad->uv_top_left;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 1719
1718 if (!quad->premultiplied_alpha) 1720 if (!quad->premultiplied_alpha)
1719 GLC(context_, context_->blendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); 1721 GLC(context_, context_->blendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA));
1720 } 1722 }
1721 1723
1722 void GLRenderer::DrawIOSurfaceQuad(const DrawingFrame* frame, 1724 void GLRenderer::DrawIOSurfaceQuad(const DrawingFrame* frame,
1723 const IOSurfaceDrawQuad* quad) { 1725 const IOSurfaceDrawQuad* quad) {
1724 SetBlendEnabled(quad->ShouldDrawWithBlending()); 1726 SetBlendEnabled(quad->ShouldDrawWithBlending());
1725 1727
1726 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 1728 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
1727 context_, highp_threshold_min_, 1729 context_, &highp_threshold_cache_, highp_threshold_min_,
1728 quad->shared_quad_state->visible_content_rect.bottom_right()); 1730 quad->shared_quad_state->visible_content_rect.bottom_right());
1729 1731
1730 TexTransformTextureProgramBinding binding; 1732 TexTransformTextureProgramBinding binding;
1731 binding.Set(GetTextureIOSurfaceProgram(tex_coord_precision), Context()); 1733 binding.Set(GetTextureIOSurfaceProgram(tex_coord_precision), Context());
1732 1734
1733 SetUseProgram(binding.program_id); 1735 SetUseProgram(binding.program_id);
1734 GLC(Context(), Context()->uniform1i(binding.sampler_location, 0)); 1736 GLC(Context(), Context()->uniform1i(binding.sampler_location, 0));
1735 if (quad->orientation == IOSurfaceDrawQuad::FLIPPED) { 1737 if (quad->orientation == IOSurfaceDrawQuad::FLIPPED) {
1736 GLC(Context(), 1738 GLC(Context(),
1737 Context()->uniform4f(binding.tex_transform_location, 1739 Context()->uniform4f(binding.tex_transform_location,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1863 context_->uniformMatrix4fv(matrix_location, 1, false, &gl_matrix[0])); 1865 context_->uniformMatrix4fv(matrix_location, 1, false, &gl_matrix[0]));
1864 1866
1865 GLC(context_, context_->drawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0)); 1867 GLC(context_, context_->drawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0));
1866 } 1868 }
1867 1869
1868 void GLRenderer::CopyTextureToFramebuffer(const DrawingFrame* frame, 1870 void GLRenderer::CopyTextureToFramebuffer(const DrawingFrame* frame,
1869 int texture_id, 1871 int texture_id,
1870 gfx::Rect rect, 1872 gfx::Rect rect,
1871 const gfx::Transform& draw_matrix) { 1873 const gfx::Transform& draw_matrix) {
1872 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired( 1874 TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
1873 context_, highp_threshold_min_, rect.bottom_right()); 1875 context_, &highp_threshold_cache_, highp_threshold_min_,
1876 rect.bottom_right());
1874 const RenderPassProgram* program = GetRenderPassProgram(tex_coord_precision); 1877 const RenderPassProgram* program = GetRenderPassProgram(tex_coord_precision);
1875 1878
1876 GLC(Context(), Context()->bindTexture(GL_TEXTURE_2D, texture_id)); 1879 GLC(Context(), Context()->bindTexture(GL_TEXTURE_2D, texture_id));
1877 1880
1878 SetUseProgram(program->program()); 1881 SetUseProgram(program->program());
1879 GLC(Context(), 1882 GLC(Context(),
1880 Context()->uniform1i(program->fragment_shader().sampler_location(), 0)); 1883 Context()->uniform1i(program->fragment_shader().sampler_location(), 0));
1881 GLC(Context(), 1884 GLC(Context(),
1882 Context()->uniform4f(program->vertex_shader().tex_transform_location(), 1885 Context()->uniform4f(program->vertex_shader().tex_transform_location(),
1883 0.0f, 1886 0.0f,
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after
2782 resource_provider_->DeleteResource(on_demand_tile_raster_resource_id_); 2785 resource_provider_->DeleteResource(on_demand_tile_raster_resource_id_);
2783 2786
2784 ReleaseRenderPassTextures(); 2787 ReleaseRenderPassTextures();
2785 } 2788 }
2786 2789
2787 bool GLRenderer::IsContextLost() { 2790 bool GLRenderer::IsContextLost() {
2788 return (context_->getGraphicsResetStatusARB() != GL_NO_ERROR); 2791 return (context_->getGraphicsResetStatusARB() != GL_NO_ERROR);
2789 } 2792 }
2790 2793
2791 } // namespace cc 2794 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/shader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698