Back out 2175db811fad (bug 734081) due to Android reftest failures.
This commit is contained in:
@@ -42,9 +42,6 @@
|
|||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Util.h"
|
#include "mozilla/Util.h"
|
||||||
|
|
||||||
#include "nsIScreen.h"
|
|
||||||
#include "nsIScreenManager.h"
|
|
||||||
|
|
||||||
#if defined(XP_UNIX)
|
#if defined(XP_UNIX)
|
||||||
|
|
||||||
#ifdef MOZ_WIDGET_GTK2
|
#ifdef MOZ_WIDGET_GTK2
|
||||||
@@ -2193,6 +2190,13 @@ static const EGLint kEGLConfigAttribsRGBA32[] = {
|
|||||||
LOCAL_EGL_NONE
|
LOCAL_EGL_NONE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// This struct is used only by CreateConfig below, but ISO C++98 forbids
|
||||||
|
// instantiating a template dependent on a locally-defined type. Boo-urns!
|
||||||
|
struct EGLAttribs {
|
||||||
|
gfxASurface::gfxImageFormat mFormat;
|
||||||
|
const EGLint* mAttribs;
|
||||||
|
};
|
||||||
|
|
||||||
// Return true if a suitable EGLConfig was found and pass it out
|
// Return true if a suitable EGLConfig was found and pass it out
|
||||||
// through aConfig. Return false otherwise.
|
// through aConfig. Return false otherwise.
|
||||||
//
|
//
|
||||||
@@ -2201,41 +2205,47 @@ static const EGLint kEGLConfigAttribsRGBA32[] = {
|
|||||||
static bool
|
static bool
|
||||||
CreateConfig(EGLConfig* aConfig)
|
CreateConfig(EGLConfig* aConfig)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIScreenManager> screenMgr = do_GetService("@mozilla.org/gfx/screenmanager;1");
|
EGLAttribs attribsToTry[] = {
|
||||||
nsCOMPtr<nsIScreen> screen;
|
#ifdef MOZ_GFX_OPTIMIZE_MOBILE
|
||||||
screenMgr->GetPrimaryScreen(getter_AddRefs(screen));
|
// Prefer r5g6b5 for potential savings in memory bandwidth.
|
||||||
PRInt32 depth = 24;
|
// This needs to be reevaluated for newer devices.
|
||||||
screen->GetColorDepth(&depth);
|
{ gfxASurface::ImageFormatRGB16_565, kEGLConfigAttribsRGB16 },
|
||||||
|
#endif
|
||||||
|
{ gfxASurface::ImageFormatARGB32, kEGLConfigAttribsRGBA32 },
|
||||||
|
};
|
||||||
|
|
||||||
EGLConfig configs[64];
|
EGLConfig configs[64];
|
||||||
gfxASurface::gfxImageFormat format;
|
for (unsigned i = 0; i < ArrayLength(attribsToTry); ++i) {
|
||||||
const EGLint* attribs = depth == 16 ? kEGLConfigAttribsRGB16 :
|
const EGLAttribs& attribs = attribsToTry[i];
|
||||||
kEGLConfigAttribsRGBA32;
|
EGLint ncfg = ArrayLength(configs);
|
||||||
EGLint ncfg = ArrayLength(configs);
|
|
||||||
|
|
||||||
if (!sEGLLibrary.fChooseConfig(EGL_DISPLAY(), attribs,
|
if (!sEGLLibrary.fChooseConfig(EGL_DISPLAY(), attribs.mAttribs,
|
||||||
configs, ncfg, &ncfg) ||
|
configs, ncfg, &ncfg) ||
|
||||||
ncfg < 1) {
|
ncfg < 1)
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int j = 0; j < ncfg; ++j) {
|
|
||||||
EGLConfig config = configs[j];
|
|
||||||
EGLint r, g, b, a;
|
|
||||||
|
|
||||||
if (sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
|
||||||
LOCAL_EGL_RED_SIZE, &r) &&
|
|
||||||
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
|
||||||
LOCAL_EGL_GREEN_SIZE, &g) &&
|
|
||||||
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
|
||||||
LOCAL_EGL_BLUE_SIZE, &b) &&
|
|
||||||
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
|
||||||
LOCAL_EGL_ALPHA_SIZE, &a) &&
|
|
||||||
((depth == 16 && r == 5 && g == 6 && b == 5) ||
|
|
||||||
(depth == 24 && r == 8 && g == 8 && b == 8 && a == 8)))
|
|
||||||
{
|
{
|
||||||
*aConfig = config;
|
continue;
|
||||||
return true;
|
}
|
||||||
|
|
||||||
|
for (int j = 0; j < ncfg; ++j) {
|
||||||
|
EGLConfig config = configs[j];
|
||||||
|
EGLint r, g, b, a;
|
||||||
|
|
||||||
|
if (sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
||||||
|
LOCAL_EGL_RED_SIZE, &r) &&
|
||||||
|
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
||||||
|
LOCAL_EGL_GREEN_SIZE, &g) &&
|
||||||
|
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
||||||
|
LOCAL_EGL_BLUE_SIZE, &b) &&
|
||||||
|
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
|
||||||
|
LOCAL_EGL_ALPHA_SIZE, &a) &&
|
||||||
|
((gfxASurface::ImageFormatRGB16_565 == attribs.mFormat &&
|
||||||
|
r == 5 && g == 6 && b == 5) ||
|
||||||
|
(gfxASurface::ImageFormatARGB32 == attribs.mFormat &&
|
||||||
|
r == 8 && g == 8 && b == 8 && a == 8)))
|
||||||
|
{
|
||||||
|
*aConfig = config;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ nsScreenAndroid::GetPixelDepth(PRInt32 *aPixelDepth)
|
|||||||
{
|
{
|
||||||
// XXX do we need to lie here about 16bpp? Or
|
// XXX do we need to lie here about 16bpp? Or
|
||||||
// should we actually check and return the right thing?
|
// should we actually check and return the right thing?
|
||||||
*aPixelDepth = 16;
|
*aPixelDepth = 24;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -510,7 +510,9 @@ nsScreenGonk::GetAvailRect(PRInt32 *outLeft, PRInt32 *outTop,
|
|||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsScreenGonk::GetPixelDepth(PRInt32 *aPixelDepth)
|
nsScreenGonk::GetPixelDepth(PRInt32 *aPixelDepth)
|
||||||
{
|
{
|
||||||
*aPixelDepth = gNativeWindow->getDevice()->format == GGL_PIXEL_FORMAT_RGB_565 ? 16 : 24;
|
// XXX do we need to lie here about 16bpp? Or
|
||||||
|
// should we actually check and return the right thing?
|
||||||
|
*aPixelDepth = 24;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user