From b9a5baf42b15da16419b32c0a84dca71c4c13487 Mon Sep 17 00:00:00 2001 From: Guy Zadickario Date: Tue, 16 Aug 2011 12:14:02 +0300 Subject: [PATCH] opengles emulator: code cleanup removing dead code This change removes the 'blitFromPbuffer' path in the renderer which uses binding pbuffer to texture. This path does not work on all platforms and is not relavent any more. It simplifies a lot the FBConfig filtering code. Also, added a check to fail the renderer initialization if the translator plugin does not support EGL_KHR_gl_texture_2d_image and GL_OES_EGL_IMAGE (by both GLES implementations [1 and 2]) since our implementation requires it. Change-Id: Ifd4c66943a8da56308cfb7e38914c962b4f5befe --- .../host/libs/libOpenglRender/FBConfig.cpp | 93 +++---------------- .../host/libs/libOpenglRender/FBConfig.h | 3 +- .../host/libs/libOpenglRender/FrameBuffer.cpp | 19 ++-- .../host/libs/libOpenglRender/FrameBuffer.h | 1 - .../libs/libOpenglRender/WindowSurface.cpp | 69 ++------------ 5 files changed, 36 insertions(+), 149 deletions(-) diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp index 4622161b9..089f1dae0 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp @@ -87,88 +87,22 @@ InitConfigStatus FBConfig::initConfigList(FrameBuffer *fb) s_egl.eglGetConfigs(dpy, configs, nConfigs, &nConfigs); // - // Find number of usable configs which support pbuffer rendering - // for each ES and ES2 as well as number of configs supporting - // EGL_BIND_TO_TEXTURE_RGBA for each of ES and ES2. + // copy the config attributes, filter out + // configs we do not want to support. // - const int GL = 0; - const int GL1 = 1; - const int GL2 = 2; - int numPbuf[3] = {0, 0, 0}; - int numBindToTexture[3] = {0, 0, 0}; - for (int i=0; i 0 && stencilSize > 0 && - (surfaceType & EGL_PBUFFER_BIT) != 0) { - - numPbuf[GL]++; - - if ((renderType & EGL_OPENGL_ES_BIT) != 0) { - numPbuf[GL1]++; - } - - if ((renderType & EGL_OPENGL_ES2_BIT) != 0) { - numPbuf[GL2]++; - } - - s_egl.eglGetConfigAttrib(dpy, configs[i], - EGL_BIND_TO_TEXTURE_RGBA, &bindToTexture); - if (bindToTexture) { - numBindToTexture[GL]++; - if ((renderType & EGL_OPENGL_ES_BIT) != 0) { - numBindToTexture[GL1]++; - } - - if ((renderType & EGL_OPENGL_ES2_BIT) != 0) { - numBindToTexture[GL2]++; - } - } - } - } - - bool useOnlyPbuf = false; - bool useOnlyBindToTexture = false; - int numConfigs = nConfigs; - if ( numPbuf[GL1] > 0 && - (!caps.hasGL2 || numPbuf[GL2] > 0)) { - useOnlyPbuf = true; - numConfigs = numPbuf[GL]; - } - if (useOnlyPbuf && - !(caps.has_eglimage_texture_2d && - caps.has_eglimage_renderbuffer) && - numBindToTexture[GL1] > 0 && - (!caps.hasGL2 || numBindToTexture[GL2] > 0)) { - useOnlyBindToTexture = true; - numConfigs = numBindToTexture[GL]; - ret = INIT_CONFIG_HAS_BIND_TO_TEXTURE; - } - else { - ret = INIT_CONFIG_PASSED; - } - int j = 0; s_fbConfigs = new FBConfig*[nConfigs]; for (int i=0; i 0 ? INIT_CONFIG_PASSED : INIT_CONFIG_FAILED; } const FBConfig *FBConfig::get(int p_config) diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h index 8e0356a88..638854958 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h @@ -23,8 +23,7 @@ class FrameBuffer; enum InitConfigStatus { INIT_CONFIG_FAILED = 0, - INIT_CONFIG_PASSED = 1, - INIT_CONFIG_HAS_BIND_TO_TEXTURE = 2 + INIT_CONFIG_PASSED = 1 }; class FBConfig diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp index 516ae20f6..3609a7768 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp @@ -275,6 +275,18 @@ bool FrameBuffer::initialize(int width, int height) fb->m_caps.has_eglimage_renderbuffer = false; } + // + // Fail initialization if not all of the following extensions + // exist: + // EGL_KHR_gl_texture_2d_image + // GL_OES_EGL_IMAGE (by both GLES implementations [1 and 2]) + // + if (!fb->m_caps.has_eglimage_texture_2d) { + ERR("Failed: Missing egl_image related extension(s)\n"); + delete fb; + return false; + } + // // Initialize set of configs // @@ -316,13 +328,6 @@ bool FrameBuffer::initialize(int width, int height) fb->m_caps.hasGL2 = false; } - // - // update Pbuffer bind to texture capability based on configs - // - fb->m_caps.has_BindToTexture = - (configStatus == INIT_CONFIG_HAS_BIND_TO_TEXTURE); - - // // Initialize some GL state // diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h index 2a3eb5c04..b415efe73 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h @@ -35,7 +35,6 @@ struct FrameBufferCaps bool hasGL2; bool has_eglimage_texture_2d; bool has_eglimage_renderbuffer; - bool has_BindToTexture; EGLint eglMajor; EGLint eglMinor; }; diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp index 14f38be33..b8d1bd280 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp @@ -35,9 +35,7 @@ WindowSurface::WindowSurface() : m_width(0), m_height(0), m_pbufWidth(0), - m_pbufHeight(0), - m_useEGLImage(false), - m_useBindToTexture(false) + m_pbufHeight(0) { } @@ -64,31 +62,10 @@ WindowSurface *WindowSurface::create(int p_config, int p_width, int p_height) const FrameBufferCaps &caps = fb->getCaps(); // - // We can use eglimage and prevent copies if: - // GL_KHR_gl_texture_2D_image is present. - // and either there is no need for depth or stencil buffer - // or GL_KHR_gl_renderbuffer_image present. + // Create a pbuffer to be used as the egl surface + // for that window. // -#if 0 - //XXX: This path should be implemented - win->m_useEGLImage = - (caps.has_eglimage_texture_2d && - (caps.has_eglimage_renderbuffer || - (fbconf->getDepthSize() + fbconf->getStencilSize() == 0)) ); -#else - win->m_useEGLImage = false; -#endif - - if (win->m_useEGLImage) { - } - else if (0 != (fbconf->getSurfaceType() & EGL_PBUFFER_BIT)) { - if (!win->resizePbuffer(p_width, p_height)) { - delete win; - return NULL; - } - } - else { - // no EGLImage support and not Pbuffer support - fail + if (!win->resizePbuffer(p_width, p_height)) { delete win; return NULL; } @@ -108,20 +85,8 @@ void WindowSurface::flushColorBuffer() { if (m_attachedColorBuffer.Ptr() != NULL) { - if (!m_useEGLImage) { - bool copied = false; - if (m_useBindToTexture) { - copied = m_attachedColorBuffer->blitFromPbuffer(m_eglSurface); - } - - if (!copied) { - //copyToColorBuffer(); - blitToColorBuffer(); - } - } - else { - //TODO: EGLImage - } + //copyToColorBuffer(); + blitToColorBuffer(); } } @@ -175,9 +140,6 @@ void WindowSurface::bind(RenderContextPtr p_ctx, SurfaceBindType p_bindType) return; // bad param } - if (m_useEGLImage) { - // XXX: should be implemented - } } void WindowSurface::copyToColorBuffer() @@ -323,27 +285,14 @@ bool WindowSurface::resizePbuffer(unsigned int p_width, unsigned int p_height) const FrameBufferCaps &caps = fb->getCaps(); // - // Create pbuffer surface, if possible - // set it such that it will be able to be bound to a texture - // later to prevent readback. + // Create pbuffer surface. // - EGLint pbufAttribs[12]; + EGLint pbufAttribs[5]; pbufAttribs[0] = EGL_WIDTH; pbufAttribs[1] = p_width; pbufAttribs[2] = EGL_HEIGHT; pbufAttribs[3] = p_height; - - if (caps.has_BindToTexture) { - pbufAttribs[4] = EGL_TEXTURE_FORMAT; - pbufAttribs[5] = EGL_TEXTURE_RGBA; - pbufAttribs[6] = EGL_TEXTURE_TARGET; - pbufAttribs[7] = EGL_TEXTURE_2D; - pbufAttribs[8] = EGL_NONE; - m_useBindToTexture = true; - } - else { - pbufAttribs[4] = EGL_NONE; - } + pbufAttribs[4] = EGL_NONE; m_eglSurface = s_egl.eglCreatePbufferSurface(fb->getDisplay(), m_fbconf->getEGLConfig(),