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

Unified Diff: cc/output/gl_renderer.cc

Issue 683113005: Update from chromium https://crrev.com/302282 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/gl_renderer.cc
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index b93ddcfd93b4a2aa1ee61f8b8ae80f23fb18427f..a73c4af824b7b1a0245ade5288df9fbc878fef84 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -49,35 +49,6 @@ using gpu::gles2::GLES2Interface;
namespace cc {
namespace {
-class FallbackFence : public ResourceProvider::Fence {
- public:
- explicit FallbackFence(gpu::gles2::GLES2Interface* gl)
- : gl_(gl), has_passed_(true) {}
-
- // Overridden from ResourceProvider::Fence:
- void Set() override { has_passed_ = false; }
- bool HasPassed() override {
- if (!has_passed_) {
- has_passed_ = true;
- Synchronize();
- }
- return true;
- }
-
- private:
- ~FallbackFence() override {}
-
- void Synchronize() {
- TRACE_EVENT0("cc", "FallbackFence::Synchronize");
- gl_->Finish();
- }
-
- gpu::gles2::GLES2Interface* gl_;
- bool has_passed_;
-
- DISALLOW_COPY_AND_ASSIGN(FallbackFence);
-};
-
bool NeedsIOSurfaceReadbackWorkaround() {
#if defined(OS_MACOSX)
// This isn't strictly required in DumpRenderTree-mode when Mesa is used,
@@ -293,6 +264,10 @@ class GLRenderer::SyncQuery {
query_->Set();
}
bool HasPassed() override { return !query_ || !query_->IsPending(); }
+ void Wait() override {
+ if (query_)
+ query_->Wait();
+ }
private:
~Fence() override {}
@@ -465,9 +440,6 @@ static ResourceProvider::ResourceId WaitOnResourceSyncPoints(
}
void GLRenderer::BeginDrawingFrame(DrawingFrame* frame) {
- if (frame->device_viewport_rect.IsEmpty())
- return;
-
TRACE_EVENT0("cc", "GLRenderer::BeginDrawingFrame");
scoped_refptr<ResourceProvider::Fence> read_lock_fence;
@@ -494,7 +466,8 @@ void GLRenderer::BeginDrawingFrame(DrawingFrame* frame) {
read_lock_fence = current_sync_query_->Begin();
} else {
- read_lock_fence = make_scoped_refptr(new FallbackFence(gl_));
+ read_lock_fence =
+ make_scoped_refptr(new ResourceProvider::SynchronousFence(gl_));
}
resource_provider_->SetReadLockFence(read_lock_fence.get());
@@ -503,10 +476,9 @@ void GLRenderer::BeginDrawingFrame(DrawingFrame* frame) {
DrawQuad::ResourceIteratorCallback wait_on_resource_syncpoints_callback =
base::Bind(&WaitOnResourceSyncPoints, resource_provider_);
- for (size_t i = 0; i < frame->render_passes_in_draw_order->size(); ++i) {
- RenderPass* pass = frame->render_passes_in_draw_order->at(i);
- for (auto& quad : pass->quad_list)
- quad.IterateResources(wait_on_resource_syncpoints_callback);
+ for (const auto& pass : *frame->render_passes_in_draw_order) {
+ for (const auto& quad : pass->quad_list)
+ quad->IterateResources(wait_on_resource_syncpoints_callback);
}
// TODO(enne): Do we need to reinitialize all of this state per frame?
@@ -1183,8 +1155,8 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
: BlendModeNormal;
if (use_aa && mask_texture_id && !use_color_matrix) {
- const RenderPassMaskProgramAA* program =
- GetRenderPassMaskProgramAA(tex_coord_precision, shader_blend_mode);
+ const RenderPassMaskProgramAA* program = GetRenderPassMaskProgramAA(
+ tex_coord_precision, mask_sampler, shader_blend_mode);
SetUseProgram(program->program());
GLC(gl_, gl_->Uniform1i(program->fragment_shader().sampler_location(), 0));
@@ -1205,8 +1177,8 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
shader_backdrop_rect_location =
program->fragment_shader().backdrop_rect_location();
} else if (!use_aa && mask_texture_id && !use_color_matrix) {
- const RenderPassMaskProgram* program =
- GetRenderPassMaskProgram(tex_coord_precision, shader_blend_mode);
+ const RenderPassMaskProgram* program = GetRenderPassMaskProgram(
+ tex_coord_precision, mask_sampler, shader_blend_mode);
SetUseProgram(program->program());
GLC(gl_, gl_->Uniform1i(program->fragment_shader().sampler_location(), 0));
@@ -1241,8 +1213,8 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
program->fragment_shader().backdrop_rect_location();
} else if (use_aa && mask_texture_id && use_color_matrix) {
const RenderPassMaskColorMatrixProgramAA* program =
- GetRenderPassMaskColorMatrixProgramAA(tex_coord_precision,
- shader_blend_mode);
+ GetRenderPassMaskColorMatrixProgramAA(
+ tex_coord_precision, mask_sampler, shader_blend_mode);
SetUseProgram(program->program());
GLC(gl_, gl_->Uniform1i(program->fragment_shader().sampler_location(), 0));
@@ -1289,8 +1261,8 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
program->fragment_shader().backdrop_rect_location();
} else if (!use_aa && mask_texture_id && use_color_matrix) {
const RenderPassMaskColorMatrixProgram* program =
- GetRenderPassMaskColorMatrixProgram(tex_coord_precision,
- shader_blend_mode);
+ GetRenderPassMaskColorMatrixProgram(
+ tex_coord_precision, mask_sampler, shader_blend_mode);
SetUseProgram(program->program());
GLC(gl_, gl_->Uniform1i(program->fragment_shader().sampler_location(), 0));
@@ -1361,14 +1333,16 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame,
-tex_scale_y));
GLint last_texture_unit = 0;
- scoped_ptr<ResourceProvider::ScopedSamplerGL> shader_mask_sampler_lock;
if (shader_mask_sampler_location != -1) {
DCHECK_NE(shader_mask_tex_coord_scale_location, 1);
DCHECK_NE(shader_mask_tex_coord_offset_location, 1);
- DCHECK_EQ(SamplerType2D, mask_sampler);
GLC(gl_, gl_->Uniform1i(shader_mask_sampler_location, 1));
gfx::RectF mask_uv_rect = quad->MaskUVRect();
+ if (mask_sampler != SamplerType2D) {
+ mask_uv_rect.Scale(quad->mask_texture_size.width(),
+ quad->mask_texture_size.height());
+ }
// Mask textures are oriented vertically flipped relative to the framebuffer
// and the RenderPass contents texture, so we flip the tex coords from the
@@ -2913,38 +2887,40 @@ const GLRenderer::RenderPassProgramAA* GLRenderer::GetRenderPassProgramAA(
const GLRenderer::RenderPassMaskProgram* GLRenderer::GetRenderPassMaskProgram(
TexCoordPrecision precision,
+ SamplerType sampler,
BlendMode blend_mode) {
DCHECK_GE(precision, 0);
DCHECK_LT(precision, NumTexCoordPrecisions);
+ DCHECK_GE(sampler, 0);
+ DCHECK_LT(sampler, NumSamplerTypes);
DCHECK_GE(blend_mode, 0);
DCHECK_LT(blend_mode, NumBlendModes);
RenderPassMaskProgram* program =
- &render_pass_mask_program_[precision][blend_mode];
+ &render_pass_mask_program_[precision][sampler][blend_mode];
if (!program->initialized()) {
TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgram::initialize");
- program->Initialize(output_surface_->context_provider(),
- precision,
- SamplerType2D,
- blend_mode);
+ program->Initialize(
+ output_surface_->context_provider(), precision, sampler, blend_mode);
}
return program;
}
const GLRenderer::RenderPassMaskProgramAA*
GLRenderer::GetRenderPassMaskProgramAA(TexCoordPrecision precision,
+ SamplerType sampler,
BlendMode blend_mode) {
DCHECK_GE(precision, 0);
DCHECK_LT(precision, NumTexCoordPrecisions);
+ DCHECK_GE(sampler, 0);
+ DCHECK_LT(sampler, NumSamplerTypes);
DCHECK_GE(blend_mode, 0);
DCHECK_LT(blend_mode, NumBlendModes);
RenderPassMaskProgramAA* program =
- &render_pass_mask_program_aa_[precision][blend_mode];
+ &render_pass_mask_program_aa_[precision][sampler][blend_mode];
if (!program->initialized()) {
TRACE_EVENT0("cc", "GLRenderer::renderPassMaskProgramAA::initialize");
- program->Initialize(output_surface_->context_provider(),
- precision,
- SamplerType2D,
- blend_mode);
+ program->Initialize(
+ output_surface_->context_provider(), precision, sampler, blend_mode);
}
return program;
}
@@ -2990,40 +2966,43 @@ GLRenderer::GetRenderPassColorMatrixProgramAA(TexCoordPrecision precision,
const GLRenderer::RenderPassMaskColorMatrixProgram*
GLRenderer::GetRenderPassMaskColorMatrixProgram(TexCoordPrecision precision,
+ SamplerType sampler,
BlendMode blend_mode) {
DCHECK_GE(precision, 0);
DCHECK_LT(precision, NumTexCoordPrecisions);
+ DCHECK_GE(sampler, 0);
+ DCHECK_LT(sampler, NumSamplerTypes);
DCHECK_GE(blend_mode, 0);
DCHECK_LT(blend_mode, NumBlendModes);
RenderPassMaskColorMatrixProgram* program =
- &render_pass_mask_color_matrix_program_[precision][blend_mode];
+ &render_pass_mask_color_matrix_program_[precision][sampler][blend_mode];
if (!program->initialized()) {
TRACE_EVENT0("cc",
"GLRenderer::renderPassMaskColorMatrixProgram::initialize");
- program->Initialize(output_surface_->context_provider(),
- precision,
- SamplerType2D,
- blend_mode);
+ program->Initialize(
+ output_surface_->context_provider(), precision, sampler, blend_mode);
}
return program;
}
const GLRenderer::RenderPassMaskColorMatrixProgramAA*
GLRenderer::GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision,
+ SamplerType sampler,
BlendMode blend_mode) {
DCHECK_GE(precision, 0);
DCHECK_LT(precision, NumTexCoordPrecisions);
+ DCHECK_GE(sampler, 0);
+ DCHECK_LT(sampler, NumSamplerTypes);
DCHECK_GE(blend_mode, 0);
DCHECK_LT(blend_mode, NumBlendModes);
RenderPassMaskColorMatrixProgramAA* program =
- &render_pass_mask_color_matrix_program_aa_[precision][blend_mode];
+ &render_pass_mask_color_matrix_program_aa_[precision][sampler]
+ [blend_mode];
if (!program->initialized()) {
TRACE_EVENT0("cc",
"GLRenderer::renderPassMaskColorMatrixProgramAA::initialize");
- program->Initialize(output_surface_->context_provider(),
- precision,
- SamplerType2D,
- blend_mode);
+ program->Initialize(
+ output_surface_->context_provider(), precision, sampler, blend_mode);
}
return program;
}
@@ -3248,16 +3227,19 @@ void GLRenderer::CleanupSharedObjects() {
tile_program_swizzle_opaque_[i][j].Cleanup(gl_);
tile_program_aa_[i][j].Cleanup(gl_);
tile_program_swizzle_aa_[i][j].Cleanup(gl_);
+
+ for (int k = 0; k < NumBlendModes; k++) {
+ render_pass_mask_program_[i][j][k].Cleanup(gl_);
+ render_pass_mask_program_aa_[i][j][k].Cleanup(gl_);
+ render_pass_mask_color_matrix_program_aa_[i][j][k].Cleanup(gl_);
+ render_pass_mask_color_matrix_program_[i][j][k].Cleanup(gl_);
+ }
}
for (int j = 0; j < NumBlendModes; j++) {
- render_pass_mask_program_[i][j].Cleanup(gl_);
render_pass_program_[i][j].Cleanup(gl_);
- render_pass_mask_program_aa_[i][j].Cleanup(gl_);
render_pass_program_aa_[i][j].Cleanup(gl_);
render_pass_color_matrix_program_[i][j].Cleanup(gl_);
- render_pass_mask_color_matrix_program_aa_[i][j].Cleanup(gl_);
render_pass_color_matrix_program_aa_[i][j].Cleanup(gl_);
- render_pass_mask_color_matrix_program_[i][j].Cleanup(gl_);
}
texture_program_[i].Cleanup(gl_);
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698