Index: ui/ozone/platform/dri/gbm_buffer.cc |
diff --git a/ui/ozone/platform/dri/gbm_buffer.cc b/ui/ozone/platform/dri/gbm_buffer.cc |
index 030dc3b341b09047a2141ec250a09ee8254b0b00..8eaccbf0edb5bf0cc8e732ec0678281464ae4b5f 100644 |
--- a/ui/ozone/platform/dri/gbm_buffer.cc |
+++ b/ui/ozone/platform/dri/gbm_buffer.cc |
@@ -4,9 +4,13 @@ |
#include "ui/ozone/platform/dri/gbm_buffer.h" |
+#include <drm.h> |
+#include <fcntl.h> |
#include <gbm.h> |
+#include <xf86drm.h> |
#include "base/logging.h" |
+#include "ui/ozone/platform/dri/dri_wrapper.h" |
namespace ui { |
@@ -60,22 +64,37 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer( |
return buffer; |
} |
-GbmPixmap::GbmPixmap(scoped_refptr<GbmBuffer> buffer) : buffer_(buffer) { |
+GbmPixmap::GbmPixmap(scoped_refptr<GbmBuffer> buffer) |
+ : buffer_(buffer), dma_buf_(-1) { |
+} |
+ |
+bool GbmPixmap::Initialize(DriWrapper* dri) { |
+ if (drmPrimeHandleToFD(dri->get_fd(), |
+ buffer_->GetHandle(), |
+ DRM_CLOEXEC, |
+ &dma_buf_)) { |
+ LOG(ERROR) << "Failed to export buffer to dma_buf"; |
+ return false; |
+ } |
+ |
+ return true; |
} |
GbmPixmap::~GbmPixmap() { |
+ if (dma_buf_ > 0) |
+ close(dma_buf_); |
} |
void* GbmPixmap::GetEGLClientBuffer() { |
- return buffer_->bo(); |
+ return NULL; |
} |
int GbmPixmap::GetDmaBufFd() { |
- return -1; |
+ return dma_buf_; |
} |
int GbmPixmap::GetDmaBufPitch() { |
- return -1; |
+ return gbm_bo_get_stride(buffer_->bo()); |
} |
} // namespace ui |