• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // DmaBufImageSiblingEGL.cpp: Defines the DmaBufImageSiblingEGL to wrap EGL images
8 // created from dma_buf objects
9 
10 #include "libANGLE/renderer/gl/egl/DmaBufImageSiblingEGL.h"
11 
12 namespace rx
13 {
DmaBufImageSiblingEGL(const egl::AttributeMap & attribs)14 DmaBufImageSiblingEGL::DmaBufImageSiblingEGL(const egl::AttributeMap &attribs)
15     : mAttribs(attribs), mFormat(GL_NONE)
16 {
17     ASSERT(mAttribs.contains(EGL_WIDTH));
18     mSize.width = mAttribs.getAsInt(EGL_WIDTH);
19     ASSERT(mAttribs.contains(EGL_HEIGHT));
20     mSize.height = mAttribs.getAsInt(EGL_HEIGHT);
21     mSize.depth  = 1;
22 
23     // TODO(geofflang):  Implement a conversion table from DRM_FORMAT_* to GL format to expose a
24     // valid mFormat to know if this image can be rendered to. For now it's fine to always say we're
25     // RGBA8. http://anglebug.com/4529
26     mFormat = gl::Format(GL_RGBA8);
27 }
28 
~DmaBufImageSiblingEGL()29 DmaBufImageSiblingEGL::~DmaBufImageSiblingEGL() {}
30 
initialize(const egl::Display * display)31 egl::Error DmaBufImageSiblingEGL::initialize(const egl::Display *display)
32 {
33     return egl::NoError();
34 }
35 
getFormat() const36 gl::Format DmaBufImageSiblingEGL::getFormat() const
37 {
38     return mFormat;
39 }
40 
isRenderable(const gl::Context * context) const41 bool DmaBufImageSiblingEGL::isRenderable(const gl::Context *context) const
42 {
43     return true;
44 }
45 
isTexturable(const gl::Context * context) const46 bool DmaBufImageSiblingEGL::isTexturable(const gl::Context *context) const
47 {
48     return true;
49 }
50 
getSize() const51 gl::Extents DmaBufImageSiblingEGL::getSize() const
52 {
53     return mSize;
54 }
55 
getSamples() const56 size_t DmaBufImageSiblingEGL::getSamples() const
57 {
58     return 0;
59 }
60 
getBuffer() const61 EGLClientBuffer DmaBufImageSiblingEGL::getBuffer() const
62 {
63     return nullptr;
64 }
65 
getImageCreationAttributes(std::vector<EGLint> * outAttributes) const66 void DmaBufImageSiblingEGL::getImageCreationAttributes(std::vector<EGLint> *outAttributes) const
67 {
68     EGLenum kForwardedAttribs[] = {EGL_WIDTH,
69                                    EGL_HEIGHT,
70                                    EGL_LINUX_DRM_FOURCC_EXT,
71                                    EGL_DMA_BUF_PLANE0_FD_EXT,
72                                    EGL_DMA_BUF_PLANE0_OFFSET_EXT,
73                                    EGL_DMA_BUF_PLANE0_PITCH_EXT,
74                                    EGL_DMA_BUF_PLANE1_FD_EXT,
75                                    EGL_DMA_BUF_PLANE1_OFFSET_EXT,
76                                    EGL_DMA_BUF_PLANE1_PITCH_EXT,
77                                    EGL_DMA_BUF_PLANE2_FD_EXT,
78                                    EGL_DMA_BUF_PLANE2_OFFSET_EXT,
79                                    EGL_DMA_BUF_PLANE2_PITCH_EXT,
80                                    EGL_YUV_COLOR_SPACE_HINT_EXT,
81                                    EGL_SAMPLE_RANGE_HINT_EXT,
82                                    EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT,
83                                    EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT,
84 
85                                    EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT,
86                                    EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT,
87                                    EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT,
88                                    EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT,
89                                    EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT,
90                                    EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT,
91                                    EGL_DMA_BUF_PLANE3_FD_EXT,
92                                    EGL_DMA_BUF_PLANE3_OFFSET_EXT,
93                                    EGL_DMA_BUF_PLANE3_PITCH_EXT,
94                                    EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT,
95                                    EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT};
96 
97     for (EGLenum forwardedAttrib : kForwardedAttribs)
98     {
99         if (mAttribs.contains(forwardedAttrib))
100         {
101             outAttributes->push_back(forwardedAttrib);
102             outAttributes->push_back(mAttribs.getAsInt(forwardedAttrib));
103         }
104     }
105 }
106 
107 }  // namespace rx
108