Chromium Code Reviews| Index: cc/resources/resource_provider.cc |
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
| index e58ed0b73b7c33c01b62ae654d8ec3bdf1664704..392b185d94842e1ce149d91e71d4699f54905d0d 100644 |
| --- a/cc/resources/resource_provider.cc |
| +++ b/cc/resources/resource_provider.cc |
| @@ -12,6 +12,7 @@ |
| #include "base/stl_util.h" |
| #include "base/strings/string_split.h" |
| #include "base/strings/string_util.h" |
| +#include "cc/base/switches.h" |
| #include "cc/base/util.h" |
| #include "cc/output/gl_renderer.h" // For the GLC() macro. |
| #include "cc/resources/platform_color.h" |
| @@ -412,10 +413,18 @@ SkCanvas* ResourceProvider::DirectRasterBuffer::DoLockForWrite() { |
| } |
| bool ResourceProvider::DirectRasterBuffer::DoUnlockForWrite() { |
| - // generationID returns a non-zero, unique value corresponding to the content |
| - // of surface. Hence, a change since DoLockForWrite was called means the |
| - // surface has changed. |
| - return surface_ ? surface_generation_id_ != surface_->generationID() : false; |
| + if (surface_) { |
| + // generationID returns a non-zero, unique value corresponding to the |
| + // content of surface. Hence, a change since DoLockForWrite was called |
| + // means the surface has changed. |
| + if (surface_generation_id_ != surface_->generationID()) { |
| + // Flush any pending or deferred work canvas or device might have. This |
| + // also resolves the potential MSAA. |
| + surface_->getCanvas()->flush(); |
| + return true; |
| + } |
| + } |
| + return false; |
| } |
| skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() { |
| @@ -432,6 +441,7 @@ skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() { |
| desc.fConfig = ToGrPixelConfig(resource()->format); |
| desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
| desc.fTextureHandle = resource()->gl_id; |
| + desc.fSampleCnt = resource_provider()->num_gpu_rasterization_samples(); |
|
nduca
2014/03/01 22:02:28
i think it woudl be better if you obtained this fr
|
| skia::RefPtr<GrTexture> gr_texture = |
| skia::AdoptRef(gr_context->wrapBackendTexture(desc)); |
| surface = skia::AdoptRef( |
| @@ -1217,6 +1227,7 @@ ResourceProvider::ResourceProvider(OutputSurface* output_surface, |
| use_compressed_texture_etc1_(false), |
| max_texture_size_(0), |
| best_texture_format_(RGBA_8888), |
| + num_gpu_rasterization_samples_(0), |
| use_rgba_4444_texture_format_(use_rgba_4444_texture_format), |
| id_allocation_chunk_size_(id_allocation_chunk_size) { |
| DCHECK(output_surface_->HasClient()); |
| @@ -1260,6 +1271,20 @@ bool ResourceProvider::InitializeGL() { |
| GLC(gl, gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size_)); |
| best_texture_format_ = PlatformColor::BestTextureFormat(use_bgra); |
| + switch (switches::GetGpuRasterizationType()) { |
| + default: |
| + NOTREACHED(); |
| + case switches::GpuRasterizationGpu: |
| + num_gpu_rasterization_samples_ = 0; |
| + break; |
| + case switches::GpuRasterizationMsaa4: |
| + num_gpu_rasterization_samples_ = 4; |
| + break; |
| + case switches::GpuRasterizationMsaa16: |
| + num_gpu_rasterization_samples_ = 16; |
| + break; |
| + } |
| + |
| texture_id_allocator_.reset( |
| new TextureIdAllocator(gl, id_allocation_chunk_size_)); |
| buffer_id_allocator_.reset( |