Chromium Code Reviews| Index: ui/ozone/platform/drm/gpu/drm_thread.cc |
| diff --git a/ui/ozone/platform/drm/gpu/drm_thread.cc b/ui/ozone/platform/drm/gpu/drm_thread.cc |
| index c323227514f78b9e5280673652cd119ed9260726..acd6831517b6f44f8c2bd0c46551e4a2328616c9 100644 |
| --- a/ui/ozone/platform/drm/gpu/drm_thread.cc |
| +++ b/ui/ozone/platform/drm/gpu/drm_thread.cc |
| @@ -4,6 +4,7 @@ |
| #include "ui/ozone/platform/drm/gpu/drm_thread.h" |
| +#include <gbm.h> |
| #include <utility> |
| #include "base/command_line.h" |
| @@ -11,6 +12,7 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "services/service_manager/public/cpp/connection.h" |
| +#include "ui/ozone/platform/drm/common/drm_util.h" |
| #include "ui/ozone/platform/drm/gpu/drm_buffer.h" |
| #include "ui/ozone/platform/drm/gpu/drm_device_generator.h" |
| #include "ui/ozone/platform/drm/gpu/drm_device_manager.h" |
| @@ -35,11 +37,11 @@ class GbmBufferGenerator : public ScanoutBufferGenerator { |
| // ScanoutBufferGenerator: |
| scoped_refptr<ScanoutBuffer> Create(const scoped_refptr<DrmDevice>& drm, |
| - gfx::BufferFormat format, |
| + uint32_t format, |
| const gfx::Size& size) override { |
| scoped_refptr<GbmDevice> gbm(static_cast<GbmDevice*>(drm.get())); |
| return GbmBuffer::CreateBuffer(gbm, format, size, |
| - gfx::BufferUsage::SCANOUT); |
| + GBM_BO_USE_SCANOUT | GBM_BO_USE_LINEAR); |
| } |
| protected: |
| @@ -108,7 +110,22 @@ void DrmThread::CreateBuffer(gfx::AcceleratedWidget widget, |
| scoped_refptr<GbmDevice> gbm = |
| static_cast<GbmDevice*>(device_manager_->GetDrmDevice(widget).get()); |
| DCHECK(gbm); |
| - *buffer = GbmBuffer::CreateBuffer(gbm, format, size, usage); |
| + |
| + unsigned flags = 0; |
|
dnicoara
2016/11/30 15:12:01
nit: Make this a uint32_t.
Daniele Castagna
2016/11/30 18:41:38
Done.
|
| + switch (usage) { |
| + case gfx::BufferUsage::GPU_READ: |
| + break; |
| + case gfx::BufferUsage::SCANOUT: |
| + flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING; |
| + break; |
| + case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE: |
| + case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT: |
| + flags = GBM_BO_USE_LINEAR; |
| + break; |
| + } |
| + |
| + *buffer = GbmBuffer::CreateBuffer( |
| + gbm, ui::GetFourCCFormatFromBufferFormat(format), size, flags); |
| } |
| void DrmThread::CreateBufferFromFds( |
| @@ -121,8 +138,9 @@ void DrmThread::CreateBufferFromFds( |
| scoped_refptr<GbmDevice> gbm = |
| static_cast<GbmDevice*>(device_manager_->GetDrmDevice(widget).get()); |
| DCHECK(gbm); |
| - *buffer = |
| - GbmBuffer::CreateBufferFromFds(gbm, format, size, std::move(fds), planes); |
| + *buffer = GbmBuffer::CreateBufferFromFds( |
| + gbm, ui::GetFourCCFormatFromBufferFormat(format), size, std::move(fds), |
| + planes); |
| } |
| void DrmThread::GetScanoutFormats( |