Index: ui/ozone/platform/drm/gpu/drm_buffer.cc |
diff --git a/ui/ozone/platform/drm/gpu/drm_buffer.cc b/ui/ozone/platform/drm/gpu/drm_buffer.cc |
index 35e20976a25be5aae29206f5f5001bc3196e9d3a..ec3d99a545a5e3b2e124ef3d1cd9ad99ed93c57d 100644 |
--- a/ui/ozone/platform/drm/gpu/drm_buffer.cc |
+++ b/ui/ozone/platform/drm/gpu/drm_buffer.cc |
@@ -4,6 +4,8 @@ |
#include "ui/ozone/platform/drm/gpu/drm_buffer.h" |
+#include <drm_fourcc.h> |
+ |
#include "base/logging.h" |
#include "ui/ozone/platform/drm/gpu/drm_device.h" |
@@ -32,6 +34,26 @@ uint8_t GetColorDepth(SkColorType type) { |
} |
} |
+// We always ignore Alpha. |
+uint32_t GetFourCCCodeForSkColorType(SkColorType type) { |
+ switch (type) { |
+ case kUnknown_SkColorType: |
+ case kAlpha_8_SkColorType: |
+ return 0; |
+ case kIndex_8_SkColorType: |
+ return DRM_FORMAT_C8; |
+ case kRGB_565_SkColorType: |
+ return DRM_FORMAT_RGB565; |
+ case kARGB_4444_SkColorType: |
+ return DRM_FORMAT_XRGB4444; |
+ case kN32_SkColorType: |
+ return DRM_FORMAT_XRGB8888; |
+ default: |
+ NOTREACHED(); |
+ return 0; |
+ } |
+} |
+ |
} // namespace |
DrmBuffer::DrmBuffer(const scoped_refptr<DrmDevice>& drm) : drm_(drm) { |
@@ -64,12 +86,15 @@ bool DrmBuffer::Initialize(const SkImageInfo& info, |
return false; |
} |
- if (should_register_framebuffer && |
- !drm_->AddFramebuffer( |
- info.width(), info.height(), GetColorDepth(info.colorType()), |
- info.bytesPerPixel() << 3, stride_, handle_, &framebuffer_)) { |
- PLOG(ERROR) << "DrmBuffer: AddFramebuffer: handle " << handle_; |
- return false; |
+ if (should_register_framebuffer) { |
+ if (!drm_->AddFramebuffer( |
+ info.width(), info.height(), GetColorDepth(info.colorType()), |
+ info.bytesPerPixel() << 3, stride_, handle_, &framebuffer_)) { |
+ PLOG(ERROR) << "DrmBuffer: AddFramebuffer: handle " << handle_; |
+ return false; |
+ } |
+ |
+ fb_pixel_format_ = GetFourCCCodeForSkColorType(info.colorType()); |
} |
surface_ = |
@@ -90,6 +115,10 @@ uint32_t DrmBuffer::GetFramebufferId() const { |
return framebuffer_; |
} |
+uint32_t DrmBuffer::GetFramebufferPixelFormat() const { |
+ return fb_pixel_format_; |
+} |
+ |
uint32_t DrmBuffer::GetHandle() const { |
return handle_; |
} |
@@ -98,10 +127,6 @@ gfx::Size DrmBuffer::GetSize() const { |
return gfx::Size(surface_->width(), surface_->height()); |
} |
-uint32_t DrmBuffer::GetFormat() const { |
- return 0; |
-} |
- |
DrmBufferGenerator::DrmBufferGenerator() { |
} |