diff options
Diffstat (limited to 'chromium/components/display_compositor/buffer_queue.cc')
-rw-r--r-- | chromium/components/display_compositor/buffer_queue.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/chromium/components/display_compositor/buffer_queue.cc b/chromium/components/display_compositor/buffer_queue.cc index be5840706a2..fafdb406b4f 100644 --- a/chromium/components/display_compositor/buffer_queue.cc +++ b/chromium/components/display_compositor/buffer_queue.cc @@ -14,6 +14,7 @@ #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" #include "third_party/skia/include/core/SkRect.h" #include "third_party/skia/include/core/SkRegion.h" +#include "ui/display/types/display_snapshot.h" #include "ui/gfx/gpu_memory_buffer.h" #include "ui/gfx/skia_util.h" @@ -22,6 +23,7 @@ namespace display_compositor { BufferQueue::BufferQueue(gpu::gles2::GLES2Interface* gl, uint32_t texture_target, uint32_t internal_format, + gfx::BufferFormat format, GLHelper* gl_helper, gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, gpu::SurfaceHandle surface_handle) @@ -30,9 +32,13 @@ BufferQueue::BufferQueue(gpu::gles2::GLES2Interface* gl, allocated_count_(0), texture_target_(texture_target), internal_format_(internal_format), + format_(format), gl_helper_(gl_helper), gpu_memory_buffer_manager_(gpu_memory_buffer_manager), - surface_handle_(surface_handle) {} + surface_handle_(surface_handle) { + DCHECK(gpu::IsImageFormatCompatibleWithGpuMemoryBufferFormat(internal_format, + format_)); +} BufferQueue::~BufferQueue() { FreeAllSurfaces(); @@ -107,8 +113,10 @@ void BufferQueue::SwapBuffers(const gfx::Rect& damage) { gl_->BindFramebuffer(GL_FRAMEBUFFER, fbo_); } -void BufferQueue::Reshape(const gfx::Size& size, float scale_factor) { - if (size == size_) +void BufferQueue::Reshape(const gfx::Size& size, + float scale_factor, + const gfx::ColorSpace& color_space) { + if (size == size_ && color_space == color_space_) return; #if !defined(OS_MACOSX) // TODO(ccameron): This assert is being hit on Mac try jobs. Determine if that @@ -117,6 +125,7 @@ void BufferQueue::Reshape(const gfx::Size& size, float scale_factor) { DCHECK(!current_surface_); #endif size_ = size; + color_space_ = color_space; // TODO: add stencil buffer when needed. gl_->BindFramebuffer(GL_FRAMEBUFFER, fbo_); @@ -208,16 +217,15 @@ std::unique_ptr<BufferQueue::AllocatedSurface> BufferQueue::GetNextSurface() { // We don't want to allow anything more than triple buffering. DCHECK_LT(allocated_count_, 4U); - std::unique_ptr<gfx::GpuMemoryBuffer> buffer( gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer( - size_, gpu::DefaultBufferFormatForImageFormat(internal_format_), - gfx::BufferUsage::SCANOUT, surface_handle_)); + size_, format_, gfx::BufferUsage::SCANOUT, surface_handle_)); if (!buffer.get()) { gl_->DeleteTextures(1, &texture); DLOG(ERROR) << "Failed to allocate GPU memory buffer"; return nullptr; } + buffer->SetColorSpaceForScanout(color_space_); uint32_t id = gl_->CreateImageCHROMIUM(buffer->AsClientBuffer(), size_.width(), @@ -231,8 +239,8 @@ std::unique_ptr<BufferQueue::AllocatedSurface> BufferQueue::GetNextSurface() { allocated_count_++; gl_->BindTexture(texture_target_, texture); gl_->BindTexImage2DCHROMIUM(texture_target_, id); - return base::WrapUnique(new AllocatedSurface(this, std::move(buffer), texture, - id, gfx::Rect(size_))); + return base::MakeUnique<AllocatedSurface>(this, std::move(buffer), texture, + id, gfx::Rect(size_)); } BufferQueue::AllocatedSurface::AllocatedSurface( |