| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/drm/client_native_pixmap_factory_gbm.h" | 5 #include "ui/ozone/platform/drm/client_native_pixmap_factory_gbm.h" | 
| 6 | 6 | 
| 7 #include <utility> | 7 #include <utility> | 
| 8 | 8 | 
| 9 #include "base/macros.h" | 9 #include "base/macros.h" | 
| 10 #include "ui/gfx/native_pixmap_handle_ozone.h" | 10 #include "ui/gfx/native_pixmap_handle_ozone.h" | 
|  | 11 #include "ui/ozone/platform/drm/common/client_native_pixmap_dmabuf.h" | 
| 11 #include "ui/ozone/public/client_native_pixmap_factory.h" | 12 #include "ui/ozone/public/client_native_pixmap_factory.h" | 
| 12 | 13 | 
| 13 #if defined(USE_VGEM_MAP) |  | 
| 14 #include "ui/ozone/platform/drm/common/client_native_pixmap_vgem.h" |  | 
| 15 #endif |  | 
| 16 |  | 
| 17 namespace ui { | 14 namespace ui { | 
| 18 | 15 | 
| 19 namespace { | 16 namespace { | 
| 20 | 17 | 
| 21 class ClientNativePixmapGbm : public ClientNativePixmap { | 18 class ClientNativePixmapGbm : public ClientNativePixmap { | 
| 22  public: | 19  public: | 
| 23   ClientNativePixmapGbm() {} | 20   ClientNativePixmapGbm() {} | 
| 24   ~ClientNativePixmapGbm() override {} | 21   ~ClientNativePixmapGbm() override {} | 
| 25 | 22 | 
| 26   void* Map() override { | 23   void* Map() override { | 
| 27     NOTREACHED(); | 24     NOTREACHED(); | 
| 28     return nullptr; | 25     return nullptr; | 
| 29   } | 26   } | 
| 30   void Unmap() override { NOTREACHED(); } | 27   void Unmap() override { NOTREACHED(); } | 
| 31   void GetStride(int* stride) const override { NOTREACHED(); } | 28   void GetStride(int* stride) const override { NOTREACHED(); } | 
| 32 }; | 29 }; | 
| 33 | 30 | 
| 34 }  // namespace | 31 }  // namespace | 
| 35 | 32 | 
| 36 class ClientNativePixmapFactoryGbm : public ClientNativePixmapFactory { | 33 class ClientNativePixmapFactoryGbm : public ClientNativePixmapFactory { | 
| 37  public: | 34  public: | 
| 38   ClientNativePixmapFactoryGbm() {} | 35   ClientNativePixmapFactoryGbm() {} | 
| 39   ~ClientNativePixmapFactoryGbm() override {} | 36   ~ClientNativePixmapFactoryGbm() override {} | 
| 40 | 37 | 
| 41   // ClientNativePixmapFactory: | 38   // ClientNativePixmapFactory: | 
| 42   void Initialize(base::ScopedFD device_fd) override { |  | 
| 43 #if defined(USE_VGEM_MAP) |  | 
| 44     // It's called in IO thread. We rely on clients for thread-safety. |  | 
| 45     // Switching to an IPC message filter ensures thread-safety. |  | 
| 46     DCHECK_LT(vgem_fd_.get(), 0); |  | 
| 47     vgem_fd_ = std::move(device_fd); |  | 
| 48 #endif |  | 
| 49   } |  | 
| 50   bool IsConfigurationSupported(gfx::BufferFormat format, | 39   bool IsConfigurationSupported(gfx::BufferFormat format, | 
| 51                                 gfx::BufferUsage usage) const override { | 40                                 gfx::BufferUsage usage) const override { | 
| 52     switch (usage) { | 41     switch (usage) { | 
| 53       case gfx::BufferUsage::GPU_READ: | 42       case gfx::BufferUsage::GPU_READ: | 
| 54       case gfx::BufferUsage::SCANOUT: | 43       case gfx::BufferUsage::SCANOUT: | 
| 55         return format == gfx::BufferFormat::RGBA_8888 || | 44         return format == gfx::BufferFormat::RGBA_8888 || | 
| 56                format == gfx::BufferFormat::RGBX_8888 || | 45                format == gfx::BufferFormat::RGBX_8888 || | 
| 57                format == gfx::BufferFormat::BGRA_8888 || | 46                format == gfx::BufferFormat::BGRA_8888 || | 
| 58                format == gfx::BufferFormat::BGRX_8888; | 47                format == gfx::BufferFormat::BGRX_8888; | 
| 59       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE: | 48       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE: | 
| 60       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT: { | 49       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT: { | 
| 61 #if defined(USE_VGEM_MAP) | 50         return format == gfx::BufferFormat::BGRA_8888; | 
| 62         return vgem_fd_.is_valid() && format == gfx::BufferFormat::BGRA_8888; |  | 
| 63 #else |  | 
| 64         return false; |  | 
| 65 #endif |  | 
| 66       } | 51       } | 
| 67     } | 52     } | 
| 68     NOTREACHED(); | 53     NOTREACHED(); | 
| 69     return false; | 54     return false; | 
| 70   } | 55   } | 
| 71   scoped_ptr<ClientNativePixmap> ImportFromHandle( | 56   scoped_ptr<ClientNativePixmap> ImportFromHandle( | 
| 72       const gfx::NativePixmapHandle& handle, | 57       const gfx::NativePixmapHandle& handle, | 
| 73       const gfx::Size& size, | 58       const gfx::Size& size, | 
| 74       gfx::BufferUsage usage) override { | 59       gfx::BufferUsage usage) override { | 
| 75     base::ScopedFD scoped_fd(handle.fd.fd); | 60     base::ScopedFD scoped_fd(handle.fd.fd); | 
| 76 | 61 | 
| 77     switch (usage) { | 62     switch (usage) { | 
| 78       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE: | 63       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE: | 
| 79       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT: | 64       case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT: | 
| 80 #if defined(USE_VGEM_MAP) | 65         return ClientNativePixmapDmaBuf::ImportFromDmabuf( | 
| 81         // A valid |vgem_fd_| is required to acquire a VGEM bo. |vgem_fd_| is | 66             scoped_fd.get(), size, handle.stride); | 
| 82         // set before a widget is created. |  | 
| 83         DCHECK_GE(vgem_fd_.get(), 0); |  | 
| 84         return ClientNativePixmapVgem::ImportFromDmabuf( |  | 
| 85             vgem_fd_.get(), scoped_fd.get(), size, handle.stride); |  | 
| 86 #endif |  | 
| 87         NOTREACHED(); |  | 
| 88         return nullptr; |  | 
| 89       case gfx::BufferUsage::GPU_READ: | 67       case gfx::BufferUsage::GPU_READ: | 
| 90       case gfx::BufferUsage::SCANOUT: | 68       case gfx::BufferUsage::SCANOUT: | 
| 91         return make_scoped_ptr<ClientNativePixmapGbm>( | 69         return make_scoped_ptr<ClientNativePixmapGbm>( | 
| 92             new ClientNativePixmapGbm); | 70             new ClientNativePixmapGbm); | 
| 93     } | 71     } | 
| 94     NOTREACHED(); | 72     NOTREACHED(); | 
| 95     return nullptr; | 73     return nullptr; | 
| 96   } | 74   } | 
| 97 | 75 | 
| 98  private: |  | 
| 99 #if defined(USE_VGEM_MAP) |  | 
| 100   base::ScopedFD vgem_fd_; |  | 
| 101 #endif |  | 
| 102 |  | 
| 103   DISALLOW_COPY_AND_ASSIGN(ClientNativePixmapFactoryGbm); | 76   DISALLOW_COPY_AND_ASSIGN(ClientNativePixmapFactoryGbm); | 
| 104 }; | 77 }; | 
| 105 | 78 | 
| 106 ClientNativePixmapFactory* CreateClientNativePixmapFactoryGbm() { | 79 ClientNativePixmapFactory* CreateClientNativePixmapFactoryGbm() { | 
| 107   return new ClientNativePixmapFactoryGbm(); | 80   return new ClientNativePixmapFactoryGbm(); | 
| 108 } | 81 } | 
| 109 | 82 | 
| 110 }  // namespace ui | 83 }  // namespace ui | 
| OLD | NEW | 
|---|