Index: ui/ozone/platform/drm/gpu/gbm_buffer_base.cc |
diff --git a/ui/ozone/platform/drm/gpu/gbm_buffer_base.cc b/ui/ozone/platform/drm/gpu/gbm_buffer_base.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c283a64db2c8a6ea2a6fa60a5cb09971ad3b8fed |
--- /dev/null |
+++ b/ui/ozone/platform/drm/gpu/gbm_buffer_base.cc |
@@ -0,0 +1,52 @@ |
+// Copyright 2014 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/platform/drm/gpu/gbm_buffer_base.h" |
+ |
+#include <gbm.h> |
+ |
+#include "base/logging.h" |
+#include "ui/ozone/platform/drm/gpu/drm_device.h" |
+ |
+namespace ui { |
+ |
+namespace { |
+ |
+// Pixel configuration for the current buffer format. |
+// TODO(dnicoara) These will need to change once we query the hardware for |
+// supported configurations. |
+const uint8_t kColorDepth = 24; |
+const uint8_t kPixelDepth = 32; |
+ |
+} // namespace |
+ |
+GbmBufferBase::GbmBufferBase(const scoped_refptr<DrmDevice>& drm, |
+ gbm_bo* bo, |
+ bool scanout) |
+ : drm_(drm), bo_(bo) { |
+ if (scanout && |
+ !drm_->AddFramebuffer(gbm_bo_get_width(bo), gbm_bo_get_height(bo), |
+ kColorDepth, kPixelDepth, gbm_bo_get_stride(bo), |
+ gbm_bo_get_handle(bo).u32, &framebuffer_)) |
+ PLOG(ERROR) << "Failed to register buffer"; |
+} |
+ |
+GbmBufferBase::~GbmBufferBase() { |
+ if (framebuffer_) |
+ drm_->RemoveFramebuffer(framebuffer_); |
+} |
+ |
+uint32_t GbmBufferBase::GetFramebufferId() const { |
+ return framebuffer_; |
+} |
+ |
+uint32_t GbmBufferBase::GetHandle() const { |
+ return gbm_bo_get_handle(bo_).u32; |
+} |
+ |
+gfx::Size GbmBufferBase::GetSize() const { |
+ return gfx::Size(gbm_bo_get_width(bo_), gbm_bo_get_height(bo_)); |
+} |
+ |
+} // namespace ui |