diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /gfx/angle/src/libANGLE/renderer/gl/glx/PbufferSurfaceGLX.cpp | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'gfx/angle/src/libANGLE/renderer/gl/glx/PbufferSurfaceGLX.cpp')
-rwxr-xr-x | gfx/angle/src/libANGLE/renderer/gl/glx/PbufferSurfaceGLX.cpp | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/gfx/angle/src/libANGLE/renderer/gl/glx/PbufferSurfaceGLX.cpp b/gfx/angle/src/libANGLE/renderer/gl/glx/PbufferSurfaceGLX.cpp new file mode 100755 index 000000000..a97021b40 --- /dev/null +++ b/gfx/angle/src/libANGLE/renderer/gl/glx/PbufferSurfaceGLX.cpp @@ -0,0 +1,143 @@ +// +// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// + +// PbufferSurfaceGLX.cpp: GLX implementation of egl::Surface for PBuffers + +#include "libANGLE/renderer/gl/glx/PbufferSurfaceGLX.h" + +#include "common/debug.h" +#include "libANGLE/renderer/gl/glx/DisplayGLX.h" +#include "libANGLE/renderer/gl/glx/FunctionsGLX.h" + +namespace rx +{ + +PbufferSurfaceGLX::PbufferSurfaceGLX(const egl::SurfaceState &state, + RendererGL *renderer, + EGLint width, + EGLint height, + bool largest, + const FunctionsGLX &glx, + glx::Context context, + glx::FBConfig fbConfig) + : SurfaceGLX(state, renderer), + mWidth(width), + mHeight(height), + mLargest(largest), + mGLX(glx), + mContext(context), + mFBConfig(fbConfig), + mPbuffer(0) +{ +} + +PbufferSurfaceGLX::~PbufferSurfaceGLX() +{ + if (mPbuffer) + { + mGLX.destroyPbuffer(mPbuffer); + } +} + +egl::Error PbufferSurfaceGLX::initialize() +{ + // Avoid creating 0-sized PBuffers as it fails on the Intel Mesa driver + // as commented on https://bugs.freedesktop.org/show_bug.cgi?id=38869 so we + // use (w, 1) or (1, h) instead. + int width = std::max(1, static_cast<int>(mWidth)); + int height = std::max(1, static_cast<int>(mHeight)); + + const int attribs[] = + { + GLX_PBUFFER_WIDTH, width, + GLX_PBUFFER_HEIGHT, height, + GLX_LARGEST_PBUFFER, mLargest, + None + }; + + mPbuffer = mGLX.createPbuffer(mFBConfig, attribs); + if (!mPbuffer) + { + return egl::Error(EGL_BAD_ALLOC, "Failed to create a native GLX pbuffer."); + } + + if (mLargest) + { + mGLX.queryDrawable(mPbuffer, GLX_WIDTH, &mWidth); + mGLX.queryDrawable(mPbuffer, GLX_HEIGHT, &mHeight); + } + + return egl::Error(EGL_SUCCESS); +} + +egl::Error PbufferSurfaceGLX::makeCurrent() +{ + if (mGLX.makeCurrent(mPbuffer, mContext) != True) + { + return egl::Error(EGL_BAD_DISPLAY); + } + return egl::Error(EGL_SUCCESS); +} + +egl::Error PbufferSurfaceGLX::swap() +{ + return egl::Error(EGL_SUCCESS); +} + +egl::Error PbufferSurfaceGLX::postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height) +{ + return egl::Error(EGL_SUCCESS); +} + +egl::Error PbufferSurfaceGLX::querySurfacePointerANGLE(EGLint attribute, void **value) +{ + UNIMPLEMENTED(); + return egl::Error(EGL_SUCCESS); +} + +egl::Error PbufferSurfaceGLX::bindTexImage(gl::Texture *texture, EGLint buffer) +{ + UNIMPLEMENTED(); + return egl::Error(EGL_SUCCESS); +} + +egl::Error PbufferSurfaceGLX::releaseTexImage(EGLint buffer) +{ + UNIMPLEMENTED(); + return egl::Error(EGL_SUCCESS); +} + +void PbufferSurfaceGLX::setSwapInterval(EGLint interval) +{ +} + +EGLint PbufferSurfaceGLX::getWidth() const +{ + return mWidth; +} + +EGLint PbufferSurfaceGLX::getHeight() const +{ + return mHeight; +} + +EGLint PbufferSurfaceGLX::isPostSubBufferSupported() const +{ + UNIMPLEMENTED(); + return EGL_FALSE; +} + +EGLint PbufferSurfaceGLX::getSwapBehavior() const +{ + return EGL_BUFFER_PRESERVED; +} + +egl::Error PbufferSurfaceGLX::checkForResize() +{ + // The size of pbuffers never change + return egl::Error(EGL_SUCCESS); +} +} |