Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4b740ed authored by Mathias Agopian's avatar Mathias Agopian
Browse files

fix [2168528] enable glTexImage2D code path in SF for software-only buffers

parent b26af237
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ void DisplayHardware::init(uint32_t dpy)
    EGLint numConfigs=0;
    EGLSurface surface;
    EGLContext context;
    mFlags = 0;
    mFlags = CACHED_BUFFERS;

    // TODO: all the extensions below should be queried through
    // eglGetProcAddress().
@@ -239,12 +239,17 @@ void DisplayHardware::init(uint32_t dpy)

    eglMakeCurrent(display, surface, surface, context);
    const char* const  gl_extensions = (const char*)glGetString(GL_EXTENSIONS);
    const char* const  gl_renderer = (const char*)glGetString(GL_RENDERER);
    LOGI("OpenGL informations:");
    LOGI("vendor    : %s", glGetString(GL_VENDOR));
    LOGI("renderer  : %s", glGetString(GL_RENDERER));
    LOGI("renderer  : %s", gl_renderer);
    LOGI("version   : %s", glGetString(GL_VERSION));
    LOGI("extensions: %s", gl_extensions);

    if (strstr(gl_renderer, "PowerVR SGX 530")) {
        LOGD("Assuming uncached graphics buffers.");
        mFlags &= ~CACHED_BUFFERS;
    }
    if (strstr(gl_extensions, "GL_ARB_texture_non_power_of_two")) {
        mFlags |= NPOT_EXTENSION;
    }
+1 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ public:
        PARTIAL_UPDATES         = 0x00020000,   // video driver feature
        SLOW_CONFIG             = 0x00040000,   // software
        SWAP_RECTANGLE          = 0x00080000,
        CACHED_BUFFERS          = 0x00100000
    };

    DisplayHardware(
+14 −3
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ Layer::Layer(SurfaceFlinger* flinger, DisplayID display,
        const sp<Client>& c, int32_t i)
    :   LayerBaseClient(flinger, display, c, i),
        mSecure(false),
        mNoEGLImageForSwBuffers(false),
        mNeedsBlending(true),
        mNeedsDithering(false)
{
@@ -108,12 +109,14 @@ status_t Layer::setBuffers( uint32_t w, uint32_t h,
    const DisplayHardware& hw(graphicPlane(0).displayHardware());
    PixelFormatInfo displayInfo;
    getPixelFormatInfo(hw.getFormat(), &displayInfo);
    const uint32_t hwFlags = hw.getFlags();
    
    mFormat = format;
    mWidth = w;
    mHeight = h;
    mSecure = (flags & ISurfaceComposer::eSecure) ? true : false;
    mNeedsBlending = (info.h_alpha - info.l_alpha) > 0;
    mNoEGLImageForSwBuffers = !(hwFlags & DisplayHardware::CACHED_BUFFERS);
    
    // we use the red index
    int displayRedSize = displayInfo.getSize(PixelFormatInfo::INDEX_RED);
@@ -331,8 +334,16 @@ uint32_t Layer::getEffectiveUsage(uint32_t usage) const
    } else {
        // it's allowed to modify the usage flags here, but generally
        // the requested flags should be honored.
        if (mNoEGLImageForSwBuffers) {
            if (usage & GraphicBuffer::USAGE_HW_MASK) {
                // request EGLImage for h/w buffers only
                usage |= GraphicBuffer::USAGE_HW_TEXTURE;
            }
        } else {
            // request EGLImage for all buffers
            usage |= GraphicBuffer::USAGE_HW_TEXTURE;
        }
    }
    return usage;
}

+1 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ private:
    sp<Surface>             mSurface;

            bool            mSecure;
            bool            mNoEGLImageForSwBuffers;
            int32_t         mFrontBufferIndex;
            bool            mNeedsBlending;
            bool            mNeedsDithering;