| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_GFX_NATIVE_PIXMAP_H_ |
| #define UI_GFX_NATIVE_PIXMAP_H_ |
| |
| #include "base/bind.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "ui/gfx/buffer_types.h" |
| #include "ui/gfx/geometry/size.h" |
| #include "ui/gfx/native_pixmap_handle.h" |
| #include "ui/gfx/native_widget_types.h" |
| |
| namespace gfx { |
| struct OverlayPlaneData; |
| class GpuFence; |
| |
| // This represents a buffer that can be directly imported via GL for |
| // rendering, or exported via dma-buf fds. |
| class NativePixmap : public base::RefCountedThreadSafe<NativePixmap> { |
| public: |
| NativePixmap() {} |
| |
| NativePixmap(const NativePixmap&) = delete; |
| NativePixmap& operator=(const NativePixmap&) = delete; |
| |
| virtual bool AreDmaBufFdsValid() const = 0; |
| virtual int GetDmaBufFd(size_t plane) const = 0; |
| virtual uint32_t GetDmaBufPitch(size_t plane) const = 0; |
| virtual size_t GetDmaBufOffset(size_t plane) const = 0; |
| virtual size_t GetDmaBufPlaneSize(size_t plane) const = 0; |
| // Return the number of non-interleaved "color" planes. |
| virtual size_t GetNumberOfPlanes() const = 0; |
| |
| // The following methods return format, modifier and size of the buffer, |
| // respectively. |
| virtual gfx::BufferFormat GetBufferFormat() const = 0; |
| virtual uint64_t GetBufferFormatModifier() const = 0; |
| virtual gfx::Size GetBufferSize() const = 0; |
| |
| // Return an id that is guaranteed to be unique and equal for all instances |
| // of this NativePixmap backed by the same buffer, for the duration of its |
| // lifetime. If such id cannot be generated, 0 (an invalid id) is returned. |
| // |
| // TODO(posciak): crbug.com/771863, remove this once a different mechanism |
| // for protected shared memory buffers is implemented. |
| virtual uint32_t GetUniqueId() const = 0; |
| |
| // Sets the overlay plane to switch to at the next page flip. |
| // |widget| specifies the screen to display this overlay plane on. |
| // |acquire_fences| specifies gpu fences to wait on before the pixmap is ready |
| // to be displayed. These fence are fired when the gpu has finished writing to |
| // the pixmap. |
| // |release_fences| specifies gpu fences that are signalled when the pixmap |
| // has been displayed and is ready for reuse. |
| // |overlay_plane_data| specifies overlay data such as opacity, z_order, size, |
| // etc. |
| virtual bool ScheduleOverlayPlane( |
| gfx::AcceleratedWidget widget, |
| const gfx::OverlayPlaneData& overlay_plane_data, |
| std::vector<gfx::GpuFence> acquire_fences, |
| std::vector<gfx::GpuFence> release_fences) = 0; |
| |
| // Export the buffer for sharing across processes. |
| // Any file descriptors in the exported handle are owned by the caller. |
| virtual gfx::NativePixmapHandle ExportHandle() = 0; |
| |
| protected: |
| virtual ~NativePixmap() {} |
| |
| private: |
| friend class base::RefCountedThreadSafe<NativePixmap>; |
| }; |
| |
| } // namespace gfx |
| |
| #endif // UI_GFX_NATIVE_PIXMAP_H_ |