1 //
2 // Copyright 2016 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 // SurfaceGbm.cpp: Gbm implementation of egl::SurfaceGL
8 
9 #include "libANGLE/renderer/gl/egl/gbm/SurfaceGbm.h"
10 
11 #include "libANGLE/renderer/gl/FramebufferGL.h"
12 #include "libANGLE/renderer/gl/egl/gbm/DisplayGbm.h"
13 
14 namespace rx
15 {
16 
SurfaceGbm(const egl::SurfaceState & state,DisplayGbm::Buffer * buffer)17 SurfaceGbm::SurfaceGbm(const egl::SurfaceState &state, DisplayGbm::Buffer *buffer)
18     : SurfaceGL(state), mBuffer(buffer)
19 {}
20 
~SurfaceGbm()21 SurfaceGbm::~SurfaceGbm()
22 {
23     delete mBuffer;
24 }
25 
initialize(const egl::Display * display)26 egl::Error SurfaceGbm::initialize(const egl::Display *display)
27 {
28     return egl::NoError();
29 }
30 
createDefaultFramebuffer(const gl::Context * context,const gl::FramebufferState & state)31 FramebufferImpl *SurfaceGbm::createDefaultFramebuffer(const gl::Context *context,
32                                                       const gl::FramebufferState &state)
33 {
34     return mBuffer->framebufferGL(context, state);
35 }
36 
makeCurrent(const gl::Context * context)37 egl::Error SurfaceGbm::makeCurrent(const gl::Context *context)
38 {
39     return egl::NoError();
40 }
41 
swap(const gl::Context * context)42 egl::Error SurfaceGbm::swap(const gl::Context *context)
43 {
44     mBuffer->present(context);
45     return egl::NoError();
46 }
47 
postSubBuffer(const gl::Context * context,EGLint x,EGLint y,EGLint width,EGLint height)48 egl::Error SurfaceGbm::postSubBuffer(const gl::Context *context,
49                                      EGLint x,
50                                      EGLint y,
51                                      EGLint width,
52                                      EGLint height)
53 {
54     UNIMPLEMENTED();
55     return egl::NoError();
56 }
57 
querySurfacePointerANGLE(EGLint attribute,void ** value)58 egl::Error SurfaceGbm::querySurfacePointerANGLE(EGLint attribute, void **value)
59 {
60     UNIMPLEMENTED();
61     return egl::NoError();
62 }
63 
bindTexImage(const gl::Context * context,gl::Texture * texture,EGLint buffer)64 egl::Error SurfaceGbm::bindTexImage(const gl::Context *context, gl::Texture *texture, EGLint buffer)
65 {
66     mBuffer->bindTexImage();
67     return egl::NoError();
68 }
69 
releaseTexImage(const gl::Context * context,EGLint buffer)70 egl::Error SurfaceGbm::releaseTexImage(const gl::Context *context, EGLint buffer)
71 {
72     return egl::NoError();
73 }
74 
setSwapInterval(EGLint interval)75 void SurfaceGbm::setSwapInterval(EGLint interval)
76 {
77     mSwapControl.targetSwapInterval = interval;
78 }
79 
getWidth() const80 EGLint SurfaceGbm::getWidth() const
81 {
82     return mBuffer->getWidth();
83 }
84 
getHeight() const85 EGLint SurfaceGbm::getHeight() const
86 {
87     return mBuffer->getHeight();
88 }
89 
isPostSubBufferSupported() const90 EGLint SurfaceGbm::isPostSubBufferSupported() const
91 {
92     UNIMPLEMENTED();
93     return EGL_FALSE;
94 }
95 
getSwapBehavior() const96 EGLint SurfaceGbm::getSwapBehavior() const
97 {
98     return EGL_BUFFER_PRESERVED;
99 }
100 }  // namespace rx
101