summaryrefslogtreecommitdiff
path: root/chromium/components/display_compositor/buffer_queue.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/display_compositor/buffer_queue.cc')
-rw-r--r--chromium/components/display_compositor/buffer_queue.cc24
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(