| 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/common/client_native_pixmap_factory_gbm.h" | 5 #include "ui/ozone/platform/drm/common/client_native_pixmap_factory_gbm.h" |
| 6 | 6 |
| 7 #include <fcntl.h> | 7 #include <fcntl.h> |
| 8 | 8 |
| 9 #include "base/file_descriptor_posix.h" | 9 #include "base/file_descriptor_posix.h" |
| 10 #include "ui/ozone/public/client_native_pixmap_factory.h" | 10 #include "ui/ozone/public/client_native_pixmap_factory.h" |
| 11 | 11 |
| 12 #if defined(OZONE_USE_VGEM_MAP) | 12 #if defined(OZONE_USE_VGEM_MAP) |
| 13 #include "ui/ozone/platform/drm/gpu/client_native_pixmap_vgem.h" | 13 #include "ui/ozone/platform/drm/gpu/client_native_pixmap_vgem.h" |
| 14 |
| 15 #include "base/command_line.h" |
| 16 #include "ui/ozone/platform/drm/gpu/intel_drm_pixmap.h" |
| 17 #include "ui/ozone/public/ozone_switches.h" |
| 14 #endif | 18 #endif |
| 15 | 19 |
| 16 namespace ui { | 20 namespace ui { |
| 17 | 21 |
| 18 namespace { | 22 namespace { |
| 19 | 23 |
| 20 class ClientNativePixmapFactoryGbm : public ClientNativePixmapFactory { | 24 class ClientNativePixmapFactoryGbm : public ClientNativePixmapFactory { |
| 21 public: | 25 public: |
| 22 ClientNativePixmapFactoryGbm() { | 26 ClientNativePixmapFactoryGbm() { |
| 23 #if defined(OZONE_USE_VGEM_MAP) | 27 #if defined(OZONE_USE_VGEM_MAP) |
| 24 // TODO(dshwang): remove ad-hoc file open. crrev.com/1248713002 | 28 // TODO(dshwang): remove ad-hoc file open. crrev.com/1248713002 |
| 29 static const char kRenderNodePath[] = "/dev/dri/renderD128"; |
| 25 static const char kVgemPath[] = "/dev/dri/renderD129"; | 30 static const char kVgemPath[] = "/dev/dri/renderD129"; |
| 26 int vgem_fd = open(kVgemPath, O_RDWR | O_CLOEXEC); | 31 bool enable_intel_drm = base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 32 switches::kOzoneUseIntelDrm); |
| 33 int vgem_fd = open(enable_intel_drm ? kRenderNodePath : kVgemPath, |
| 34 O_RDWR | O_CLOEXEC); |
| 27 if (vgem_fd < 0) { | 35 if (vgem_fd < 0) { |
| 28 PLOG(ERROR) << "Failed to open: " << kVgemPath; | 36 PLOG(ERROR) << "Failed to open: " |
| 37 << (enable_intel_drm ? kRenderNodePath : kVgemPath); |
| 29 return; | 38 return; |
| 30 } | 39 } |
| 31 vgem_fd_.reset(vgem_fd); | 40 vgem_fd_.reset(vgem_fd); |
| 32 #endif | 41 #endif |
| 33 } | 42 } |
| 34 ~ClientNativePixmapFactoryGbm() override {} | 43 ~ClientNativePixmapFactoryGbm() override {} |
| 35 | 44 |
| 36 // ClientNativePixmapFactory: | 45 // ClientNativePixmapFactory: |
| 37 std::vector<Configuration> GetSupportedConfigurations() const override { | 46 std::vector<Configuration> GetSupportedConfigurations() const override { |
| 38 const Configuration kConfiguratioins[] = { | 47 const Configuration kConfiguratioins[] = { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 56 gfx::BufferUsage usage) override { | 65 gfx::BufferUsage usage) override { |
| 57 if (usage == gfx::BufferUsage::SCANOUT) { | 66 if (usage == gfx::BufferUsage::SCANOUT) { |
| 58 DCHECK(handle.fd.auto_close); | 67 DCHECK(handle.fd.auto_close); |
| 59 base::ScopedFD close_fd(handle.fd.fd); | 68 base::ScopedFD close_fd(handle.fd.fd); |
| 60 return nullptr; | 69 return nullptr; |
| 61 } | 70 } |
| 62 #if defined(OZONE_USE_VGEM_MAP) | 71 #if defined(OZONE_USE_VGEM_MAP) |
| 63 DCHECK_GE(vgem_fd_.get(), 0); | 72 DCHECK_GE(vgem_fd_.get(), 0); |
| 64 DCHECK(format == gfx::BufferFormat::BGRA_8888); | 73 DCHECK(format == gfx::BufferFormat::BGRA_8888); |
| 65 DCHECK(usage == gfx::BufferUsage::MAP); | 74 DCHECK(usage == gfx::BufferUsage::MAP); |
| 75 |
| 76 bool enable_intel_drm = base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 77 switches::kOzoneUseIntelDrm); |
| 78 if (enable_intel_drm) { |
| 79 return IntelDrmClientPixmap::CreateFromHandle( |
| 80 handle, base::FileDescriptor(vgem_fd_.get(), false), format, size); |
| 81 } |
| 82 |
| 66 return ClientNativePixmapVgem::Create( | 83 return ClientNativePixmapVgem::Create( |
| 67 handle, base::FileDescriptor(vgem_fd_.get(), false), size); | 84 handle, base::FileDescriptor(vgem_fd_.get(), false), size); |
| 68 #else | 85 #else |
| 69 NOTREACHED(); | 86 NOTREACHED(); |
| 70 return nullptr; | 87 return nullptr; |
| 71 #endif | 88 #endif |
| 72 } | 89 } |
| 73 | 90 |
| 74 private: | 91 private: |
| 75 base::ScopedFD vgem_fd_; | 92 base::ScopedFD vgem_fd_; |
| 76 | 93 |
| 77 DISALLOW_COPY_AND_ASSIGN(ClientNativePixmapFactoryGbm); | 94 DISALLOW_COPY_AND_ASSIGN(ClientNativePixmapFactoryGbm); |
| 78 }; | 95 }; |
| 79 | 96 |
| 80 } // namespace | 97 } // namespace |
| 81 | 98 |
| 82 ClientNativePixmapFactory* CreateClientNativePixmapFactoryGbm() { | 99 ClientNativePixmapFactory* CreateClientNativePixmapFactoryGbm() { |
| 83 return new ClientNativePixmapFactoryGbm(); | 100 return new ClientNativePixmapFactoryGbm(); |
| 84 } | 101 } |
| 85 | 102 |
| 86 } // namespace ui | 103 } // namespace ui |
| OLD | NEW |