| Index: ui/ozone/platform/drm/gpu/gbm_buffer.cc
|
| diff --git a/ui/ozone/platform/drm/gpu/gbm_buffer.cc b/ui/ozone/platform/drm/gpu/gbm_buffer.cc
|
| index 918303275a931692e309cbeab2207dff1b41ff6b..211f15a30db0592c0a7fecc7704fb5420b79a0be 100644
|
| --- a/ui/ozone/platform/drm/gpu/gbm_buffer.cc
|
| +++ b/ui/ozone/platform/drm/gpu/gbm_buffer.cc
|
| @@ -32,13 +32,15 @@ GbmBuffer::GbmBuffer(const scoped_refptr<GbmDevice>& gbm,
|
| gfx::BufferUsage usage,
|
| std::vector<base::ScopedFD>&& fds,
|
| const gfx::Size& size,
|
| - const std::vector<int>& strides)
|
| + const std::vector<int>& strides,
|
| + const std::vector<uint64_t>& modifiers)
|
| : GbmBufferBase(gbm, bo, format, usage),
|
| format_(format),
|
| usage_(usage),
|
| fds_(std::move(fds)),
|
| size_(size),
|
| - strides_(strides) {}
|
| + strides_(strides),
|
| + modifiers_(modifiers) {}
|
|
|
| GbmBuffer::~GbmBuffer() {
|
| if (bo())
|
| @@ -66,6 +68,11 @@ int GbmBuffer::GetStride(size_t plane) const {
|
| return strides_[plane];
|
| }
|
|
|
| +uint64_t GbmBuffer::GetFormatModifier(size_t plane) const {
|
| + DCHECK_LT(plane, modifiers_.size());
|
| + return modifiers_[plane];
|
| +}
|
| +
|
| // TODO(reveman): This should not be needed once crbug.com/597932 is fixed,
|
| // as the size would be queried directly from the underlying bo.
|
| gfx::Size GbmBuffer::GetSize() const {
|
| @@ -111,8 +118,10 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
|
| fds.emplace_back(std::move(fd));
|
| std::vector<int> strides;
|
| strides.push_back(gbm_bo_get_stride(bo));
|
| - scoped_refptr<GbmBuffer> buffer(
|
| - new GbmBuffer(gbm, bo, format, usage, std::move(fds), size, strides));
|
| + std::vector<uint64_t> modifiers;
|
| + modifiers.push_back(gbm_bo_get_format_modifier(bo));
|
| + scoped_refptr<GbmBuffer> buffer(new GbmBuffer(
|
| + gbm, bo, format, usage, std::move(fds), size, strides, modifiers));
|
| if (usage == gfx::BufferUsage::SCANOUT && !buffer->GetFramebufferId())
|
| return nullptr;
|
|
|
| @@ -129,11 +138,12 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBufferFromFds(
|
| TRACE_EVENT2("drm", "GbmBuffer::CreateBufferFromFD", "device",
|
| gbm->device_path().value(), "size", size.ToString());
|
| DCHECK_EQ(fds.size(), strides.size());
|
| + std::vector<uint64_t> modifiers;
|
| // TODO(reveman): Use gbm_bo_import after making buffers survive
|
| // GPU process crashes. crbug.com/597932
|
| - return make_scoped_refptr(new GbmBuffer(gbm, nullptr, format,
|
| - gfx::BufferUsage::GPU_READ,
|
| - std::move(fds), size, strides));
|
| + return make_scoped_refptr(
|
| + new GbmBuffer(gbm, nullptr, format, gfx::BufferUsage::GPU_READ,
|
| + std::move(fds), size, strides, modifiers));
|
| }
|
|
|
| GbmPixmap::GbmPixmap(GbmSurfaceFactory* surface_manager,
|
| @@ -181,6 +191,10 @@ int GbmPixmap::GetDmaBufPitch(size_t plane) const {
|
| return buffer_->GetStride(plane);
|
| }
|
|
|
| +uint64_t GbmPixmap::GetDmaBufModifier(size_t plane) const {
|
| + return buffer_->GetFormatModifier(plane);
|
| +}
|
| +
|
| gfx::BufferFormat GbmPixmap::GetBufferFormat() const {
|
| return buffer_->GetFormat();
|
| }
|
|
|