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

Commit c6015add authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "get rid of dependency on copybit HAL module"

parents d806f818 9cdb01da
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()
{