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

Commit 9cdb01da authored by Mathias Agopian's avatar Mathias Agopian
Browse files

get rid of dependency on copybit HAL module

Change-Id: Ia608099a2426c11a91d33063ba53c93e1eccb428
parent e960d3a8
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
#endif

#include <private/pixelflinger/ggl_context.h>
#include <hardware/copybit.h>
#include <hardware/gralloc.h>

#include <GLES/gl.h>
@@ -606,7 +605,6 @@ struct prims_t {

struct copybits_context_t {
    // A handle to the blit engine, if it exists, else NULL.
    copybit_device_t*       blitEngine;
    int32_t                 minScale;
    int32_t                 maxScale;
    android_native_buffer_t* drawSurfaceBuffer;
+0 −23
Original line number Diff line number Diff line
@@ -24,8 +24,6 @@

#include <ui/Rect.h>

#include <hardware/copybit.h>

namespace android {
// ---------------------------------------------------------------------------

@@ -183,27 +181,6 @@ Region& Region::operator -= (const Region& rhs) {
Region& Region::operator += (const Point& pt) {
    return translateSelf(pt.x, pt.y);
}

// ---------------------------------------------------------------------------

struct region_iterator : public copybit_region_t {
    region_iterator(const Region& region)
        : b(region.begin()), e(region.end()) {
        this->next = iterate;
    }
private:
    static int iterate(copybit_region_t const * self, copybit_rect_t* rect) {
        region_iterator const* me = static_cast<region_iterator const*>(self);
        if (me->b != me->e) {
            *reinterpret_cast<Rect*>(rect) = *me->b++;
            return 1;
        }
        return 0;
    }
    mutable Region::const_iterator b;
    Region::const_iterator const e;
};

// ---------------------------------------------------------------------------
}; // namespace android

+27 −86
Original line number Diff line number Diff line
@@ -41,8 +41,6 @@

#include <private/ui/android_natives_priv.h>

#include <hardware/copybit.h>

#include "context.h"
#include "state.h"
#include "texture.h"
@@ -238,7 +236,6 @@ private:
    android_native_buffer_t*   buffer;
    android_native_buffer_t*   previousBuffer;
    gralloc_module_t const*    module;
    copybit_device_t*          blitengine;
    int width;
    int height;
    void* bits;
@@ -324,24 +321,6 @@ private:
        ssize_t count;
    };
    
    struct region_iterator : public copybit_region_t {
        region_iterator(const Region& region)
            : b(region.begin()), e(region.end()) {
            this->next = iterate;
        }
    private:
        static int iterate(copybit_region_t const * self, copybit_rect_t* rect) {
            region_iterator const* me = static_cast<region_iterator const*>(self);
            if (me->b != me->e) {
                *reinterpret_cast<Rect*>(rect) = *me->b++;
                return 1;
            }
            return 0;
        }
        mutable Region::const_iterator b;
        Region::const_iterator const e;
    };

    void copyBlt(
            android_native_buffer_t* dst, void* dst_vaddr,
            android_native_buffer_t* src, void const* src_vaddr,
@@ -357,16 +336,8 @@ egl_window_surface_v2_t::egl_window_surface_v2_t(EGLDisplay dpy,
        ANativeWindow* window)
    : egl_surface_t(dpy, config, depthFormat), 
    nativeWindow(window), buffer(0), previousBuffer(0), module(0),
    blitengine(0), bits(NULL)
    bits(NULL)
{
    hw_module_t const* pModule;
    hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &pModule);
    module = reinterpret_cast<gralloc_module_t const*>(pModule);

    if (hw_get_module(COPYBIT_HARDWARE_MODULE_ID, &pModule) == 0) {
        copybit_open(pModule, &blitengine);
    }

    pixelFormatTable = gglGetPixelFormatTable();
    
    // keep a reference on the window
@@ -383,9 +354,6 @@ egl_window_surface_v2_t::~egl_window_surface_v2_t() {
        previousBuffer->common.decRef(&previousBuffer->common); 
    }
    nativeWindow->common.decRef(&nativeWindow->common);
    if (blitengine) {
        copybit_close(blitengine);
    }
}

EGLBoolean egl_window_surface_v2_t::connect() 
@@ -475,32 +443,6 @@ void egl_window_surface_v2_t::copyBlt(
    // FIXME: use copybit if possible
    // NOTE: dst and src must be the same format
    
    status_t err = NO_ERROR;
    copybit_device_t* const copybit = blitengine;
    if (copybit)  {
        copybit_image_t simg;
        simg.w = src->stride;
        simg.h = src->height;
        simg.format = src->format;
        simg.handle = const_cast<native_handle_t*>(src->handle);

        copybit_image_t dimg;
        dimg.w = dst->stride;
        dimg.h = dst->height;
        dimg.format = dst->format;
        dimg.handle = const_cast<native_handle_t*>(dst->handle);
        
        copybit->set_parameter(copybit, COPYBIT_TRANSFORM, 0);
        copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, 255);
        copybit->set_parameter(copybit, COPYBIT_DITHER, COPYBIT_DISABLE);
        region_iterator it(clip);
        err = copybit->blit(copybit, &dimg, &simg, &it);
        if (err != NO_ERROR) {
            LOGE("copybit failed (%s)", strerror(err));
        }
    }

    if (!copybit || err) {
    Region::const_iterator cur = clip.begin();
    Region::const_iterator end = clip.end();

@@ -530,7 +472,6 @@ void egl_window_surface_v2_t::copyBlt(
        } while (--h > 0);
    }
}
}

EGLBoolean egl_window_surface_v2_t::swapBuffers()
{
+1623 −1682
Original line number Diff line number Diff line
@@ -30,8 +30,6 @@

#include <private/ui/android_natives_priv.h>

#include <hardware/copybit.h>

#include "gles2context.h"

// ----------------------------------------------------------------------------
@@ -219,7 +217,6 @@ private:
    android_native_buffer_t*   buffer;
    android_native_buffer_t*   previousBuffer;
    gralloc_module_t const*    module;
   copybit_device_t*          blitengine;
    int width;
    int height;
    void* bits;
@@ -309,24 +306,6 @@ private:
        ssize_t count;
    };

   struct region_iterator : public copybit_region_t {
      region_iterator(const Region& region)
            : b(region.begin()), e(region.end()) {
         this->next = iterate;
      }
private:
      static int iterate(copybit_region_t const * self, copybit_rect_t* rect) {
         region_iterator const* me = static_cast<region_iterator const*>(self);
         if (me->b != me->e) {
            *reinterpret_cast<Rect*>(rect) = *me->b++;
            return 1;
         }
         return 0;
      }
      mutable Region::const_iterator b;
      Region::const_iterator const e;
   };

    void copyBlt(
            android_native_buffer_t* dst, void* dst_vaddr,
            android_native_buffer_t* src, void const* src_vaddr,
@@ -342,16 +321,8 @@ egl_window_surface_v2_t::egl_window_surface_v2_t(EGLDisplay dpy,
        ANativeWindow* window)
: egl_surface_t(dpy, config, depthFormat),
  nativeWindow(window), buffer(0), previousBuffer(0), module(0),
      blitengine(0), bits(NULL)
  bits(NULL)
{
   hw_module_t const* pModule;
   hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &pModule);
   module = reinterpret_cast<gralloc_module_t const*>(pModule);

   if (hw_get_module(COPYBIT_HARDWARE_MODULE_ID, &pModule) == 0) {
      copybit_open(pModule, &blitengine);
   }

    pixelFormatTable = gglGetPixelFormatTable();

    // keep a reference on the window
@@ -373,9 +344,6 @@ egl_window_surface_v2_t::~egl_window_surface_v2_t()
        previousBuffer->common.decRef(&previousBuffer->common);
    }
    nativeWindow->common.decRef(&nativeWindow->common);
   if (blitengine) {
      copybit_close(blitengine);
   }
}

EGLBoolean egl_window_surface_v2_t::connect()
@@ -467,32 +435,6 @@ void egl_window_surface_v2_t::copyBlt(
    // FIXME: use copybit if possible
    // NOTE: dst and src must be the same format

   status_t err = NO_ERROR;
   copybit_device_t* const copybit = blitengine;
   if (copybit)  {
      copybit_image_t simg;
      simg.w = src->stride;
      simg.h = src->height;
      simg.format = src->format;
      simg.handle = const_cast<native_handle_t*>(src->handle);

      copybit_image_t dimg;
      dimg.w = dst->stride;
      dimg.h = dst->height;
      dimg.format = dst->format;
      dimg.handle = const_cast<native_handle_t*>(dst->handle);

      copybit->set_parameter(copybit, COPYBIT_TRANSFORM, 0);
      copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, 255);
      copybit->set_parameter(copybit, COPYBIT_DITHER, COPYBIT_DISABLE);
      region_iterator it(clip);
      err = copybit->blit(copybit, &dimg, &simg, &it);
      if (err != NO_ERROR) {
         LOGE("copybit failed (%s)", strerror(err));
      }
   }

   if (!copybit || err) {
    Region::const_iterator cur = clip.begin();
    Region::const_iterator end = clip.end();

@@ -522,7 +464,6 @@ void egl_window_surface_v2_t::copyBlt(
        } while (--h > 0);
    }
}
}

EGLBoolean egl_window_surface_v2_t::swapBuffers()
{