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

Unified Diff: cc/resources/resource_provider.cc

Issue 2332143002: cc: Populate SkColorSpace for raster from resource gfx::ColorSpace (Closed)
Patch Set: Review feedback Created 4 years, 3 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/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 2ebeb8d37944913bcf16b76d7e0a3a218dbddf1d..5782ede4e466170f21622ee95b52f921bf1c6118 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -41,6 +41,7 @@
#include "third_party/skia/include/gpu/gl/GrGLTypes.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/vector2d.h"
+#include "ui/gfx/icc_profile.h"
#include "ui/gl/trace_util.h"
using gpu::gles2::GLES2Interface;
@@ -391,6 +392,7 @@ ResourceProvider::ResourceProvider(
size_t id_allocation_chunk_size,
bool delegated_sync_points_required,
bool use_gpu_memory_buffer_resources,
+ bool enable_color_correct_rendering,
const BufferToTextureTargetMap& buffer_to_texture_target_map)
: compositor_context_provider_(compositor_context_provider),
shared_bitmap_manager_(shared_bitmap_manager),
@@ -412,6 +414,7 @@ ResourceProvider::ResourceProvider(
max_texture_size_(0),
best_texture_format_(RGBA_8888),
best_render_buffer_format_(RGBA_8888),
+ enable_color_correct_rendering_(enable_color_correct_rendering),
id_allocation_chunk_size_(id_allocation_chunk_size),
use_sync_query_(false),
buffer_to_texture_target_map_(buffer_to_texture_target_map),
@@ -820,8 +823,8 @@ ResourceProvider::TextureHint ResourceProvider::GetTextureHint(ResourceId id) {
return GetResource(id)->hint;
}
-static sk_sp<SkColorSpace> ColorSpaceToSkColorSpace(
- const gfx::ColorSpace& color_space) {
+sk_sp<SkColorSpace> ResourceProvider::GetResourceSkColorSpace(
+ const Resource* resource) const {
// TODO(crbug.com/634102): Implement conversion for skia-based compositing to
// be color-managed
return nullptr;
@@ -847,9 +850,9 @@ void ResourceProvider::CopyToResource(ResourceId id,
DCHECK_EQ(RESOURCE_TYPE_BITMAP, resource->type);
DCHECK(resource->allocated);
DCHECK_EQ(RGBA_8888, resource->format);
- SkImageInfo source_info = SkImageInfo::MakeN32Premul(
- image_size.width(), image_size.height(),
- ColorSpaceToSkColorSpace(resource->color_space));
+ SkImageInfo source_info =
+ SkImageInfo::MakeN32Premul(image_size.width(), image_size.height(),
+ GetResourceSkColorSpace(resource));
size_t image_stride = image_size.width() * 4;
ScopedWriteLockSoftware lock(this, id);
@@ -1097,6 +1100,7 @@ ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL(
format_ = resource->format;
size_ = resource->size;
mailbox_ = resource->mailbox();
+ sk_color_space_ = resource_provider->GetResourceSkColorSpace(resource);
}
ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() {
@@ -1161,7 +1165,8 @@ ResourceProvider::ScopedSkSurfaceProvider::ScopedSkSurfaceProvider(
SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType);
}
sk_surface_ = SkSurface::MakeFromBackendTextureAsRenderTarget(
- context_provider->GrContext(), desc, &surface_props);
+ context_provider->GrContext(), desc, resource_lock->sk_color_space(),
+ &surface_props);
}
ResourceProvider::ScopedSkSurfaceProvider::~ScopedSkSurfaceProvider() {
@@ -1176,7 +1181,7 @@ void ResourceProvider::PopulateSkBitmapWithResource(SkBitmap* sk_bitmap,
DCHECK_EQ(RGBA_8888, resource->format);
SkImageInfo info = SkImageInfo::MakeN32Premul(
resource->size.width(), resource->size.height(),
- ColorSpaceToSkColorSpace(resource->color_space));
+ GetResourceSkColorSpace(resource));
sk_bitmap->installPixels(info, resource->pixels, info.minRowBytes());
}
@@ -1185,7 +1190,7 @@ ResourceProvider::ScopedReadLockSoftware::ScopedReadLockSoftware(
ResourceId resource_id)
: resource_provider_(resource_provider), resource_id_(resource_id) {
const Resource* resource = resource_provider->LockForRead(resource_id);
- ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap_, resource);
+ resource_provider->PopulateSkBitmapWithResource(&sk_bitmap_, resource);
}
ResourceProvider::ScopedReadLockSoftware::~ScopedReadLockSoftware() {
@@ -1210,11 +1215,11 @@ ResourceProvider::ScopedReadLockSkImage::ScopedReadLockSkImage(
desc.fTextureHandle = skia::GrGLTextureInfoToGrBackendObject(texture_info);
sk_image_ = SkImage::MakeFromTexture(
resource_provider->compositor_context_provider_->GrContext(), desc,
- kPremul_SkAlphaType, ColorSpaceToSkColorSpace(resource->color_space),
- nullptr, nullptr);
+ kPremul_SkAlphaType,
+ resource_provider->GetResourceSkColorSpace(resource), nullptr, nullptr);
} else if (resource->pixels) {
SkBitmap sk_bitmap;
- ResourceProvider::PopulateSkBitmapWithResource(&sk_bitmap, resource);
+ resource_provider->PopulateSkBitmapWithResource(&sk_bitmap, resource);
sk_bitmap.setImmutable();
sk_image_ = SkImage::MakeFromBitmap(sk_bitmap);
} else {
@@ -1236,7 +1241,7 @@ ResourceProvider::ScopedWriteLockSoftware::ScopedWriteLockSoftware(
ResourceProvider* resource_provider,
ResourceId resource_id)
: resource_provider_(resource_provider), resource_id_(resource_id) {
- ResourceProvider::PopulateSkBitmapWithResource(
+ resource_provider->PopulateSkBitmapWithResource(
&sk_bitmap_, resource_provider->LockForWrite(resource_id));
DCHECK(valid());
}
@@ -1268,6 +1273,8 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
Resource* resource = resource_provider_->GetResource(resource_id_);
DCHECK(resource);
if (gpu_memory_buffer_) {
+ if (resource_provider_->enable_color_correct_rendering_)
+ gpu_memory_buffer_->SetColorSpaceForScanout(resource->color_space);
DCHECK(!resource->gpu_memory_buffer);
resource_provider_->LazyCreate(resource);
resource->gpu_memory_buffer = std::move(gpu_memory_buffer_);
@@ -1849,6 +1856,11 @@ void ResourceProvider::LazyAllocate(Resource* resource) {
gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(
size, BufferFormat(format), resource->usage,
gpu::kNullSurfaceHandle);
+ if (resource->gpu_memory_buffer && enable_color_correct_rendering_) {
+ resource->gpu_memory_buffer->SetColorSpaceForScanout(
+ resource->color_space);
+ }
+
LazyCreateImage(resource);
resource->dirty_image = true;
resource->is_overlay_candidate = true;
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698