Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: ui/ozone/platform/dri/gbm_buffer.cc

Issue 393233005: [Ozone-DRI] Convert HardwareDisplayController to use scanout buffers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/ozone/platform/dri/gbm_buffer.h ('k') | ui/ozone/platform/dri/gbm_surface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/ozone/platform/dri/gbm_buffer.h" 5 #include "ui/ozone/platform/dri/gbm_buffer.h"
6 6
7 #include <gbm.h> 7 #include <gbm.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "ui/ozone/platform/dri/dri_wrapper.h"
11 #include "ui/ozone/platform/dri/hardware_display_controller.h"
12 10
13 namespace ui { 11 namespace ui {
12
14 namespace { 13 namespace {
15 // Pixel configuration for the current buffer format.
16 // TODO(dnicoara) These will need to change once we query the hardware for
17 // supported configurations.
18 const uint8_t kColorDepth = 24;
19 const uint8_t kPixelDepth = 32;
20 14
21 int GetGbmFormatFromBufferFormat(SurfaceFactoryOzone::BufferFormat fmt) { 15 int GetGbmFormatFromBufferFormat(SurfaceFactoryOzone::BufferFormat fmt) {
22 switch (fmt) { 16 switch (fmt) {
23 case SurfaceFactoryOzone::UNKNOWN: 17 case SurfaceFactoryOzone::UNKNOWN:
24 return 0; 18 return 0;
25 // TODO(alexst): Setting this to XRGB for now to allow presentation 19 // TODO(alexst): Setting this to XRGB for now to allow presentation
26 // as a primary plane but disallowing overlay transparency. Address this 20 // as a primary plane but disallowing overlay transparency. Address this
27 // to allow both use cases. 21 // to allow both use cases.
28 case SurfaceFactoryOzone::RGBA_8888: 22 case SurfaceFactoryOzone::RGBA_8888:
29 return GBM_FORMAT_XRGB8888; 23 return GBM_FORMAT_XRGB8888;
30 case SurfaceFactoryOzone::RGB_888: 24 case SurfaceFactoryOzone::RGB_888:
31 return GBM_FORMAT_RGB888; 25 return GBM_FORMAT_RGB888;
32 } 26 }
33 return 0; 27 return 0;
34 } 28 }
35 }
36 29
37 GbmBuffer::GbmBuffer(gbm_device* device, DriWrapper* dri, const gfx::Size& size) 30 } // namespace
38 : gbm_device_(device), 31
39 bo_(NULL), 32 GbmBuffer::GbmBuffer(DriWrapper* dri, gbm_bo* bo, bool scanout)
40 handle_(0), 33 : GbmBufferBase(dri, bo, scanout) {
41 framebuffer_(0),
42 dri_(dri),
43 size_(size) {
44 } 34 }
45 35
46 GbmBuffer::~GbmBuffer() { 36 GbmBuffer::~GbmBuffer() {
47 if (framebuffer_) 37 if (bo())
48 dri_->RemoveFramebuffer(framebuffer_); 38 gbm_bo_destroy(bo());
49 if (bo_)
50 gbm_bo_destroy(bo_);
51 } 39 }
52 40
53 bool GbmBuffer::InitializeBuffer(SurfaceFactoryOzone::BufferFormat format, 41 // static
54 bool scanout) { 42 scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
43 DriWrapper* dri,
44 gbm_device* device,
45 SurfaceFactoryOzone::BufferFormat format,
46 const gfx::Size& size,
47 bool scanout) {
55 unsigned flags = GBM_BO_USE_RENDERING; 48 unsigned flags = GBM_BO_USE_RENDERING;
56 if (scanout) 49 if (scanout)
57 flags |= GBM_BO_USE_SCANOUT; 50 flags |= GBM_BO_USE_SCANOUT;
58 bo_ = gbm_bo_create(gbm_device_, 51 gbm_bo* bo = gbm_bo_create(device,
59 size_.width(), 52 size.width(),
60 size_.height(), 53 size.height(),
61 GetGbmFormatFromBufferFormat(format), 54 GetGbmFormatFromBufferFormat(format),
62 flags); 55 flags);
63 if (!bo_) 56 if (!bo)
64 return false; 57 return NULL;
65 58
66 gbm_bo_set_user_data(bo_, this, NULL); 59 scoped_refptr<GbmBuffer> buffer(new GbmBuffer(dri, bo, scanout));
67 handle_ = gbm_bo_get_handle(bo_).u32; 60 if (scanout && !buffer->GetFramebufferId())
61 return NULL;
68 62
69 if (scanout && 63 return buffer;
70 !dri_->AddFramebuffer(size_.width(),
71 size_.height(),
72 kColorDepth,
73 kPixelDepth,
74 gbm_bo_get_stride(bo_),
75 handle_,
76 &framebuffer_)) {
77 return false;
78 }
79 return true;
80 } 64 }
81 65
82 bool GbmBuffer::Initialize() { 66 GbmPixmap::GbmPixmap(scoped_refptr<GbmBuffer> buffer) : buffer_(buffer) {
83 return bo_ != NULL;
84 }
85
86 uint32_t GbmBuffer::GetFramebufferId() const {
87 return framebuffer_;
88 }
89
90 uint32_t GbmBuffer::GetHandle() const {
91 return handle_;
92 }
93
94 gfx::Size GbmBuffer::Size() const {
95 return size_;
96 }
97
98 void GbmBuffer::PreSwapBuffers() {
99 }
100
101 void GbmBuffer::SwapBuffers() {
102 }
103
104 GbmPixmap::GbmPixmap(gbm_device* device, DriWrapper* dri, const gfx::Size& size)
105 : buffer_(device, dri, size) {
106 } 67 }
107 68
108 GbmPixmap::~GbmPixmap() { 69 GbmPixmap::~GbmPixmap() {
109 } 70 }
110 71
111 void* GbmPixmap::GetEGLClientBuffer() { 72 void* GbmPixmap::GetEGLClientBuffer() {
112 return buffer_.bo(); 73 return buffer_->bo();
113 } 74 }
114 75
115 int GbmPixmap::GetDmaBufFd() { 76 int GbmPixmap::GetDmaBufFd() {
77 NOTIMPLEMENTED();
116 return -1; 78 return -1;
117 } 79 }
118 80
119 } // namespace ui 81 } // namespace ui
OLDNEW
« no previous file with comments | « ui/ozone/platform/dri/gbm_buffer.h ('k') | ui/ozone/platform/dri/gbm_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698