Index: ui/ozone/platform/drm/gpu/gbm_surface_factory.cc |
diff --git a/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc b/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc |
index fb9157bc9a8c451910725be872aa1cf7b80d56a4..28ba6b1b1148e399b812223ca5ac27760592c78e 100644 |
--- a/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc |
+++ b/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc |
@@ -10,6 +10,7 @@ |
#include "build/build_config.h" |
#include "third_party/khronos/EGL/egl.h" |
#include "ui/ozone/common/egl_util.h" |
+#include "ui/ozone/platform/drm/common/drm_util.h" |
#include "ui/ozone/platform/drm/gpu/drm_thread_proxy.h" |
#include "ui/ozone/platform/drm/gpu/drm_window_proxy.h" |
#include "ui/ozone/platform/drm/gpu/gbm_buffer.h" |
@@ -103,6 +104,33 @@ GbmSurfaceFactory::CreateSurfacelessEGLSurfaceForWidget( |
new GbmSurfaceless(drm_thread_->CreateDrmWindowProxy(widget), this)); |
} |
+bool GbmSurfaceFactory::GetSupportedFormats( |
spang
2016/01/20 18:52:24
Why does this take a usage parameter?
This is che
william.xie
2016/01/21 02:14:02
Thanks Michael, I documented the concern in the AP
|
+ gfx::BufferUsage buffer_usage, |
+ std::vector<gfx::BufferFormat>* support_formats) { |
+ auto it = support_formats_map_.find(buffer_usage); |
+ if (it != support_formats_map_.end()) { |
+ *support_formats = it->second; |
+ return true; |
+ } |
+ |
+ switch (buffer_usage) { |
+ case gfx::BufferUsage::SCANOUT: |
+ if (drm_thread_ != nullptr) { |
+ std::vector<uint32_t> fourcc_formats; |
+ drm_thread_->GetSupportedFormats(&fourcc_formats); |
+ for (auto& fourcc : fourcc_formats) |
+ support_formats->push_back(GetBufferFormatFromFourCCFormat(fourcc)); |
+ support_formats_map_.insert( |
+ std::make_pair(buffer_usage, *support_formats)); |
+ return true; |
+ } |
+ default: |
+ return false; |
+ } |
+ |
+ return false; |
+} |
+ |
scoped_refptr<ui::NativePixmap> GbmSurfaceFactory::CreateNativePixmap( |
gfx::AcceleratedWidget widget, |
gfx::Size size, |