summaryrefslogtreecommitdiffstats
path: root/libs/surfaceflinger
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaceflinger')
-rw-r--r--libs/surfaceflinger/Android.mk12
-rw-r--r--libs/surfaceflinger/Layer.cpp12
-rw-r--r--libs/surfaceflinger/LayerBase.cpp60
-rw-r--r--libs/surfaceflinger/LayerBuffer.cpp14
-rw-r--r--libs/surfaceflinger/LayerDim.cpp13
-rw-r--r--libs/surfaceflinger/SurfaceFlinger.cpp39
-rw-r--r--libs/surfaceflinger/SurfaceFlinger.h11
7 files changed, 34 insertions, 127 deletions
diff --git a/libs/surfaceflinger/Android.mk b/libs/surfaceflinger/Android.mk
index bef01d8..86eb78d 100644
--- a/libs/surfaceflinger/Android.mk
+++ b/libs/surfaceflinger/Android.mk
@@ -19,6 +19,10 @@ LOCAL_SRC_FILES:= \
LOCAL_CFLAGS:= -DLOG_TAG=\"SurfaceFlinger\"
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
+ifeq ($(TARGET_BOARD_PLATFORM), msm7k)
+ LOCAL_CFLAGS += -DDIM_WITH_TEXTURE
+endif
+
# need "-lrt" on Linux simulator to pick up clock_gettime
ifeq ($(TARGET_SIMULATOR),true)
ifeq ($(HOST_OS),linux)
@@ -34,12 +38,8 @@ LOCAL_SHARED_LIBRARIES := \
libEGL \
libGLESv1_CM \
libbinder \
- libui
-
-ifneq ($(BOARD_USES_ECLAIR_LIBCAMERA),true)
- LOCAL_SHARED_LIBRARIES += \
- libsurfaceflinger_client
-endif
+ libui \
+ libsurfaceflinger_client
LOCAL_C_INCLUDES := \
$(call include-path-for, corecg graphics)
diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp
index 2c7b4af..ce7e9aa 100644
--- a/libs/surfaceflinger/Layer.cpp
+++ b/libs/surfaceflinger/Layer.cpp
@@ -133,14 +133,10 @@ status_t Layer::setBuffers( uint32_t w, uint32_t h,
mNeedsBlending = (info.h_alpha - info.l_alpha) > 0;
mNoEGLImageForSwBuffers = !(hwFlags & DisplayHardware::CACHED_BUFFERS);
- if (mFlinger->getUseDithering()) {
- // we use the red index
- int displayRedSize = displayInfo.getSize(PixelFormatInfo::INDEX_RED);
- int layerRedsize = info.getSize(PixelFormatInfo::INDEX_RED);
- mNeedsDithering = layerRedsize > displayRedSize;
- } else {
- mNeedsDithering = false;
- }
+ // we use the red index
+ int displayRedSize = displayInfo.getSize(PixelFormatInfo::INDEX_RED);
+ int layerRedsize = info.getSize(PixelFormatInfo::INDEX_RED);
+ mNeedsDithering = layerRedsize > displayRedSize;
for (size_t i=0 ; i<NUM_BUFFERS ; i++) {
mBuffers[i] = new GraphicBuffer();
diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp
index 046c7c3..a8b735e 100644
--- a/libs/surfaceflinger/LayerBase.cpp
+++ b/libs/surfaceflinger/LayerBase.cpp
@@ -33,15 +33,6 @@
#include "SurfaceFlinger.h"
#include "DisplayHardware/DisplayHardware.h"
-#define RENDER_EFFECT_NIGHT 1
-#define RENDER_EFFECT_TERMINAL 2
-#define RENDER_EFFECT_BLUE 3
-#define RENDER_EFFECT_AMBER 4
-#define RENDER_EFFECT_SALMON 5
-#define RENDER_EFFECT_FUSCIA 6
-#define RENDER_EFFECT_N1_CALIBRATED_N 7
-#define RENDER_EFFECT_N1_CALIBRATED_R 8
-#define RENDER_EFFECT_N1_CALIBRATED_C 9
namespace android {
@@ -410,14 +401,7 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
glEnable(GL_TEXTURE_2D);
- int renderEffect = mFlinger->getRenderEffect();
- int renderColorR = mFlinger->getRenderColorR();
- int renderColorG = mFlinger->getRenderColorG();
- int renderColorB = mFlinger->getRenderColorB();
-
- bool noEffect = renderEffect == 0;
-
- if (UNLIKELY(s.alpha < 0xFF) && noEffect) {
+ if (UNLIKELY(s.alpha < 0xFF)) {
// We have an alpha-modulation. We need to modulate all
// texture components by alpha because we're always using
// premultiplied alpha.
@@ -439,7 +423,7 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
glEnable(GL_BLEND);
glBlendFunc(src, GL_ONE_MINUS_SRC_ALPHA);
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, env);
- } else if (noEffect) {
+ } else {
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glColor4x(0x10000, 0x10000, 0x10000, 0x10000);
if (needsBlending()) {
@@ -449,44 +433,6 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
} else {
glDisable(GL_BLEND);
}
- } else {
- // Apply a render effect, which is simple color masks for now.
- GLenum env, src;
- env = GL_MODULATE;
- src = mPremultipliedAlpha ? GL_ONE : GL_SRC_ALPHA;
- const GGLfixed alpha = (s.alpha << 16)/255;
- switch (renderEffect) {
- case RENDER_EFFECT_NIGHT:
- glColor4x(alpha, 0, 0, alpha);
- break;
- case RENDER_EFFECT_TERMINAL:
- glColor4x(0, alpha, 0, alpha);
- break;
- case RENDER_EFFECT_BLUE:
- glColor4x(0, 0, alpha, alpha);
- break;
- case RENDER_EFFECT_AMBER:
- glColor4x(alpha, alpha*0.75, 0, alpha);
- break;
- case RENDER_EFFECT_SALMON:
- glColor4x(alpha, alpha*0.5, alpha*0.5, alpha);
- break;
- case RENDER_EFFECT_FUSCIA:
- glColor4x(alpha, 0, alpha*0.5, alpha);
- break;
- case RENDER_EFFECT_N1_CALIBRATED_N:
- glColor4x(alpha*renderColorR/1000, alpha*renderColorG/1000, alpha*renderColorB/1000, alpha);
- break;
- case RENDER_EFFECT_N1_CALIBRATED_R:
- glColor4x(alpha*(renderColorR-50)/1000, alpha*renderColorG/1000, alpha*(renderColorB-30)/1000, alpha);
- break;
- case RENDER_EFFECT_N1_CALIBRATED_C:
- glColor4x(alpha*renderColorR/1000, alpha*renderColorG/1000, alpha*(renderColorB+30)/1000, alpha);
- break;
- }
- glEnable(GL_BLEND);
- glBlendFunc(src, GL_ONE_MINUS_SRC_ALPHA);
- glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, env);
}
Region::const_iterator it = clip.begin();
@@ -880,4 +826,4 @@ sp<OverlayRef> LayerBaseClient::Surface::createOverlay(
// ---------------------------------------------------------------------------
-}; // namespace android \ No newline at end of file
+}; // namespace android
diff --git a/libs/surfaceflinger/LayerBuffer.cpp b/libs/surfaceflinger/LayerBuffer.cpp
index 0869283..7be3981 100644
--- a/libs/surfaceflinger/LayerBuffer.cpp
+++ b/libs/surfaceflinger/LayerBuffer.cpp
@@ -365,6 +365,14 @@ LayerBuffer::BufferSource::BufferSource(LayerBuffer& layer,
return;
}
+ const DisplayHardware& hw(mLayer.mFlinger->
+ graphicPlane(0).displayHardware());
+ int flags = hw.getFlags();
+ if(flags & DisplayHardware::SLOW_CONFIG)
+ mUseEGLImageDirectly = true;
+ else
+ mUseEGLImageDirectly = false;
+
mBufferHeap = buffers;
mLayer.setNeedsBlending((info.h_alpha - info.l_alpha) > 0);
mBufferSize = info.getScanlineSize(buffers.hor_stride)*buffers.ver_stride;
@@ -474,22 +482,22 @@ void LayerBuffer::BufferSource::onDraw(const Region& clip) const
// there are constraints on buffers used by the GPU and these may not
// be honored here. We need to change the API so the buffers
// are allocated with gralloc. For now disable this code-path
-#if 0
+
// First, try to use the buffer as an EGLImage directly
if (mUseEGLImageDirectly) {
// NOTE: Assume the buffer is allocated with the proper USAGE flags
sp<GraphicBuffer> buffer = new GraphicBuffer(
- src.img.w, src.img.h, src.img.format,
+ src.crop.r, src.crop.b, src.img.format,
GraphicBuffer::USAGE_HW_TEXTURE,
src.img.w, src.img.handle, false);
+ buffer->setVerticalStride(src.img.h);
err = mLayer.initializeEglImage(buffer, &mTexture);
if (err != NO_ERROR) {
mUseEGLImageDirectly = false;
}
}
-#endif
copybit_device_t* copybit = mLayer.mBlitEngine;
if (copybit && err != NO_ERROR) {
diff --git a/libs/surfaceflinger/LayerDim.cpp b/libs/surfaceflinger/LayerDim.cpp
index 54c5d9f..0825916 100644
--- a/libs/surfaceflinger/LayerDim.cpp
+++ b/libs/surfaceflinger/LayerDim.cpp
@@ -55,6 +55,10 @@ void LayerDim::initDimmer(SurfaceFlinger* flinger, uint32_t w, uint32_t h)
sHeight = h;
sUseTexture = false;
+#if defined(DIM_WITH_TEXTURE) && defined(EGL_ANDROID_image_native_buffer)
+
+#warning "using a texture to implement LayerDim"
+
/* On some h/w like msm7K, it is faster to use a texture because the
* software renderer will defer to copybit, for this to work we need to
* use an EGLImage texture so copybit can actually make use of it.
@@ -64,8 +68,7 @@ void LayerDim::initDimmer(SurfaceFlinger* flinger, uint32_t w, uint32_t h)
const DisplayHardware& hw(flinger->graphicPlane(0).displayHardware());
uint32_t flags = hw.getFlags();
- if (LIKELY((flags & DisplayHardware::DIRECT_TEXTURE) &&
- (flags & DisplayHardware::SLOW_CONFIG))) {
+ if (LIKELY(flags & DisplayHardware::DIRECT_TEXTURE)) {
sp<GraphicBuffer> buffer = new GraphicBuffer(w, h, PIXEL_FORMAT_RGB_565,
GraphicBuffer::USAGE_SW_WRITE_OFTEN |
GraphicBuffer::USAGE_HW_TEXTURE);
@@ -98,6 +101,7 @@ void LayerDim::initDimmer(SurfaceFlinger* flinger, uint32_t w, uint32_t h)
buffer->unlock();
sUseTexture = true;
}
+#endif
}
LayerDim::~LayerDim()
@@ -113,13 +117,13 @@ void LayerDim::onDraw(const Region& clip) const
const DisplayHardware& hw(graphicPlane(0).displayHardware());
const GGLfixed alpha = (s.alpha << 16)/255;
const uint32_t fbHeight = hw.getHeight();
- const uint32_t flags = hw.getFlags();
glDisable(GL_DITHER);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glColor4x(0, 0, 0, alpha);
- if (sUseTexture && (flags & DisplayHardware::SLOW_CONFIG)) {
+#if defined(DIM_WITH_TEXTURE) && defined(EGL_ANDROID_image_native_buffer)
+ if (sUseTexture) {
glBindTexture(GL_TEXTURE_2D, sTexId);
glEnable(GL_TEXTURE_2D);
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
@@ -134,6 +138,7 @@ void LayerDim::onDraw(const Region& clip) const
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_SHORT, 0, texCoords);
} else
+#endif
{
glDisable(GL_TEXTURE_2D);
}
diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp
index b9ab1c0..0722fda 100644
--- a/libs/surfaceflinger/SurfaceFlinger.cpp
+++ b/libs/surfaceflinger/SurfaceFlinger.cpp
@@ -184,18 +184,13 @@ SurfaceFlinger::SurfaceFlinger()
mFreezeDisplayTime(0),
mDebugRegion(0),
mDebugBackground(0),
- mRenderEffect(0),
- mRenderColorR(0),
- mRenderColorG(0),
- mRenderColorB(0),
mDebugInSwapBuffers(0),
mLastSwapBufferTime(0),
mDebugInTransaction(0),
mLastTransactionTime(0),
mBootFinished(false),
mConsoleSignals(0),
- mSecureFrameBuffer(0),
- mUseDithering(true)
+ mSecureFrameBuffer(0)
{
init();
}
@@ -210,23 +205,9 @@ void SurfaceFlinger::init()
mDebugRegion = atoi(value);
property_get("debug.sf.showbackground", value, "0");
mDebugBackground = atoi(value);
- property_get("debug.sf.render_effect", value, "0");
- mRenderEffect = atoi(value);
-
- // default calibration color set (disabled by default)
- property_get("debug.sf.render_color_red", value, "975");
- mRenderColorR = atoi(value);
- property_get("debug.sf.render_color_green", value, "937");
- mRenderColorG = atoi(value);
- property_get("debug.sf.render_color_blue", value, "824");
- mRenderColorB = atoi(value);
-
- property_get("persist.sys.use_dithering", value, "0");
- mUseDithering = atoi(value) == 1;
LOGI_IF(mDebugRegion, "showupdates enabled");
LOGI_IF(mDebugBackground, "showbackground enabled");
- LOGI_IF(mUseDithering, "dithering enabled");
}
SurfaceFlinger::~SurfaceFlinger()
@@ -1711,30 +1692,12 @@ status_t SurfaceFlinger::onTransact(
reply->writeInt32(0);
reply->writeInt32(mDebugRegion);
reply->writeInt32(mDebugBackground);
- reply->writeInt32(mRenderEffect);
return NO_ERROR;
case 1013: {
Mutex::Autolock _l(mStateLock);
const DisplayHardware& hw(graphicPlane(0).displayHardware());
reply->writeInt32(hw.getPageFlipCount());
}
- case 1014: { // RENDER_EFFECT
- // TODO: filter to only allow valid effects
- mRenderEffect = data.readInt32();
- return NO_ERROR;
- }
- case 1015: { // RENDER_COLOR_RED
- mRenderColorR = data.readInt32();
- return NO_ERROR;
- }
- case 1016: { // RENDER_COLOR_GREEN
- mRenderColorG = data.readInt32();
- return NO_ERROR;
- }
- case 1017: { // RENDER_COLOR_BLUE
- mRenderColorB = data.readInt32();
- return NO_ERROR;
- }
return NO_ERROR;
}
}
diff --git a/libs/surfaceflinger/SurfaceFlinger.h b/libs/surfaceflinger/SurfaceFlinger.h
index 1bfdb1b..d75dc15 100644
--- a/libs/surfaceflinger/SurfaceFlinger.h
+++ b/libs/surfaceflinger/SurfaceFlinger.h
@@ -174,12 +174,6 @@ public:
overlay_control_device_t* getOverlayEngine() const;
- inline int getRenderEffect() const { return mRenderEffect; }
- inline int getRenderColorR() const { return mRenderColorR; }
- inline int getRenderColorG() const { return mRenderColorG; }
- inline int getRenderColorB() const { return mRenderColorB; }
- inline int getUseDithering() const { return mUseDithering; }
-
status_t removeLayer(const sp<LayerBase>& layer);
status_t addLayer(const sp<LayerBase>& layer);
@@ -360,10 +354,6 @@ private:
// don't use a lock for these, we don't care
int mDebugRegion;
int mDebugBackground;
- int mRenderEffect;
- int mRenderColorR;
- int mRenderColorG;
- int mRenderColorB;
volatile nsecs_t mDebugInSwapBuffers;
nsecs_t mLastSwapBufferTime;
volatile nsecs_t mDebugInTransaction;
@@ -382,7 +372,6 @@ private:
// only written in the main thread, only read in other threads
volatile int32_t mSecureFrameBuffer;
- bool mUseDithering;
};
// ---------------------------------------------------------------------------