blob: 84dc9fc3ac70241fc97d8a0ae276b3e8d8fcd72c [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/ozone/common/linux/gbm_bo_wrapper.h"
#include <gbm.h>
#include "ui/gfx/native_pixmap_handle.h"
namespace ui {
GbmBoWrapper::GbmBoWrapper(gbm_bo* bo,
uint32_t format,
uint32_t flags,
uint64_t modifier,
std::vector<base::ScopedFD> fds,
const gfx::Size& size,
std::vector<gfx::NativePixmapPlane> planes)
: bo_(bo),
format_modifier_(modifier),
format_(format),
flags_(flags),
fds_(std::move(fds)),
size_(size),
planes_(std::move(planes)) {}
GbmBoWrapper::~GbmBoWrapper() {
if (bo_)
gbm_bo_destroy(bo_);
}
bool GbmBoWrapper::AreFdsValid() const {
if (fds_.empty())
return false;
for (const auto& fd : fds_) {
if (fd.get() == -1)
return false;
}
return true;
}
int GbmBoWrapper::GetFd(size_t index) const {
DCHECK_LT(index, fds_.size());
return fds_[index].get();
}
int GbmBoWrapper::GetStride(size_t index) const {
DCHECK_LT(index, planes_.size());
return planes_[index].stride;
}
int GbmBoWrapper::GetOffset(size_t index) const {
DCHECK_LT(index, planes_.size());
return planes_[index].offset;
}
size_t GbmBoWrapper::GetPlaneSize(size_t index) const {
DCHECK_LT(index, planes_.size());
return planes_[index].size;
}
uint32_t GbmBoWrapper::GetBoHandle() const {
return bo_ ? gbm_bo_get_handle(bo_).u32 : 0;
}
} // namespace ui