Roll back http://code.google.com/p/skia/source/detail?r=3622 to deal with http://crbug.com/125596 ('M20 windows renderer stability maze')
git-svn-id: http://skia.googlecode.com/svn/trunk@3800 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
8790fc635e
commit
0048469578
@ -59,7 +59,6 @@
|
||||
'../tests/QuickRejectTest.cpp',
|
||||
'../tests/Reader32Test.cpp',
|
||||
'../tests/ReadPixelsTest.cpp',
|
||||
'../tests/ReadWriteAlphaTest.cpp',
|
||||
'../tests/RefDictTest.cpp',
|
||||
'../tests/RegionTest.cpp',
|
||||
'../tests/ScalarTest.cpp',
|
||||
|
@ -300,8 +300,6 @@
|
||||
#define GR_GL_PALETTE8_RGBA8 0x8B96
|
||||
#define GR_GL_ALPHA8 0x803C
|
||||
|
||||
#define GR_GL_R8 0x8229
|
||||
|
||||
/* PixelType */
|
||||
/* GL_UNSIGNED_BYTE */
|
||||
#define GR_GL_UNSIGNED_SHORT_4_4_4_4 0x8033
|
||||
|
@ -33,7 +33,6 @@ void GrGLCaps::reset() {
|
||||
fPackFlipYSupport = false;
|
||||
fTextureUsageSupport = false;
|
||||
fTexStorageSupport = false;
|
||||
fTextureRedSupport = false;
|
||||
}
|
||||
|
||||
GrGLCaps::GrGLCaps(const GrGLCaps& caps) {
|
||||
@ -59,7 +58,6 @@ GrGLCaps& GrGLCaps::operator = (const GrGLCaps& caps) {
|
||||
fPackFlipYSupport = caps.fPackFlipYSupport;
|
||||
fTextureUsageSupport = caps.fTextureUsageSupport;
|
||||
fTexStorageSupport = caps.fTexStorageSupport;
|
||||
fTextureRedSupport = caps.fTextureRedSupport;
|
||||
|
||||
return *this;
|
||||
}
|
||||
@ -137,14 +135,6 @@ void GrGLCaps::init(const GrGLContextInfo& ctxInfo) {
|
||||
ctxInfo.hasExtension("GL_ARB_texture_storage") ||
|
||||
ctxInfo.hasExtension("GL_EXT_texture_storage");
|
||||
|
||||
// ARB_texture_rg is part of OpenGL 3.0
|
||||
if (kDesktop_GrGLBinding == binding) {
|
||||
fTextureRedSupport = version >= GR_GL_VER(3,0) ||
|
||||
ctxInfo.hasExtension("GL_ARB_texture_rg");
|
||||
} else {
|
||||
fTextureRedSupport = ctxInfo.hasExtension("GL_EXT_texture_rg");
|
||||
}
|
||||
|
||||
this->initFSAASupport(ctxInfo);
|
||||
this->initStencilFormats(ctxInfo);
|
||||
}
|
||||
|
@ -206,9 +206,6 @@ public:
|
||||
/// Is there support for glTexStorage
|
||||
bool texStorageSupport() const { return fTexStorageSupport; }
|
||||
|
||||
/// Is there support for GL_RED and GL_R8
|
||||
bool textureRedSupport() const { return fTextureRedSupport; }
|
||||
|
||||
private:
|
||||
/**
|
||||
* Maintains a bit per GrPixelConfig. It is used to avoid redundantly
|
||||
@ -276,7 +273,6 @@ private:
|
||||
bool fPackFlipYSupport : 1;
|
||||
bool fTextureUsageSupport : 1;
|
||||
bool fTexStorageSupport : 1;
|
||||
bool fTextureRedSupport : 1;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1942,17 +1942,11 @@ void GrGLProgram::genStageCode(const GrGLContextInfo& gl,
|
||||
const char* swizzle = "";
|
||||
if (desc.fInConfigFlags & StageDesc::kSwapRAndB_InConfigFlag) {
|
||||
GrAssert(!(desc.fInConfigFlags & StageDesc::kSmearAlpha_InConfigFlag));
|
||||
GrAssert(!(desc.fInConfigFlags & StageDesc::kSmearRed_InConfigFlag));
|
||||
swizzle = ".bgra";
|
||||
} else if (desc.fInConfigFlags & StageDesc::kSmearAlpha_InConfigFlag) {
|
||||
GrAssert(!(desc.fInConfigFlags & kMulByAlphaMask));
|
||||
GrAssert(!(desc.fInConfigFlags & StageDesc::kSmearRed_InConfigFlag));
|
||||
swizzle = ".aaaa";
|
||||
} else if (desc.fInConfigFlags & StageDesc::kSmearRed_InConfigFlag) {
|
||||
GrAssert(!(desc.fInConfigFlags & kMulByAlphaMask));
|
||||
GrAssert(!(desc.fInConfigFlags & StageDesc::kSmearAlpha_InConfigFlag));
|
||||
swizzle = ".rrrr";
|
||||
}
|
||||
}
|
||||
|
||||
GrStringBuilder modulate;
|
||||
if (NULL != fsInColor) {
|
||||
@ -2002,8 +1996,6 @@ void GrGLProgram::genStageCode(const GrGLContextInfo& gl,
|
||||
GrAssert(GrIsPow2(kMulByAlphaMask & desc.fInConfigFlags));
|
||||
GrAssert(!(desc.fInConfigFlags &
|
||||
StageDesc::kSmearAlpha_InConfigFlag));
|
||||
GrAssert(!(desc.fInConfigFlags &
|
||||
StageDesc::kSmearRed_InConfigFlag));
|
||||
segments->fFSCode.appendf("\t%s = %s(%s, %s)%s;\n",
|
||||
fsOutColor, texFunc.c_str(),
|
||||
samplerName, sampleCoords.c_str(),
|
||||
|
@ -122,7 +122,7 @@ public:
|
||||
described are performed after reading a texel.
|
||||
*/
|
||||
enum InConfigFlags {
|
||||
kNone_InConfigFlag = 0x00,
|
||||
kNone_InConfigFlag = 0x0,
|
||||
|
||||
/**
|
||||
Swap the R and B channels. This is incompatible with
|
||||
@ -130,24 +130,15 @@ public:
|
||||
the shader using GL_ARB_texture_swizzle if possible rather
|
||||
than setting this flag.
|
||||
*/
|
||||
kSwapRAndB_InConfigFlag = 0x01,
|
||||
kSwapRAndB_InConfigFlag = 0x1,
|
||||
|
||||
/**
|
||||
Smear alpha across all four channels. This is incompatible with
|
||||
kSwapRAndB, kMulRGBByAlpha* and kSmearRed. It is prefereable
|
||||
to perform the smear outside the shader using
|
||||
GL_ARB_texture_swizzle if possible rather than setting this
|
||||
flag.
|
||||
kSwapRAndB and kMulRGBByAlpha*. It is prefereable to perform
|
||||
the smear outside the shader using GL_ARB_texture_swizzle if
|
||||
possible rather than setting this flag.
|
||||
*/
|
||||
kSmearAlpha_InConfigFlag = 0x02,
|
||||
|
||||
/**
|
||||
Smear the red channel across all four channels. This flag is
|
||||
incompatible with kSwapRAndB, kMulRGBByAlpha*and kSmearAlpha.
|
||||
It is preferable to use GL_ARB_texture_swizzle instead of this
|
||||
flag.
|
||||
*/
|
||||
kSmearRed_InConfigFlag = 0x04,
|
||||
kSmearAlpha_InConfigFlag = 0x2,
|
||||
|
||||
/**
|
||||
Multiply r,g,b by a after texture reads. This flag incompatible
|
||||
@ -158,8 +149,8 @@ public:
|
||||
of 1/255.0 and the other rounds down. At most one of these
|
||||
flags may be set.
|
||||
*/
|
||||
kMulRGBByAlpha_RoundUp_InConfigFlag = 0x08,
|
||||
kMulRGBByAlpha_RoundDown_InConfigFlag = 0x10,
|
||||
kMulRGBByAlpha_RoundUp_InConfigFlag = 0x4,
|
||||
kMulRGBByAlpha_RoundDown_InConfigFlag = 0x8,
|
||||
|
||||
kDummyInConfigFlag,
|
||||
kInConfigBitMask = (kDummyInConfigFlag-1) |
|
||||
|
@ -322,8 +322,7 @@ void GrGpuGL::fillInConfigRenderableTable() {
|
||||
}
|
||||
} else {
|
||||
// On ES we can only hope for R8
|
||||
fConfigRenderSupport[kAlpha_8_GrPixelConfig] =
|
||||
this->glCaps().textureRedSupport();
|
||||
fConfigRenderSupport[kAlpha_8_GrPixelConfig] = false;
|
||||
}
|
||||
|
||||
if (kDesktop_GrGLBinding != this->glBinding()) {
|
||||
@ -2044,20 +2043,12 @@ unsigned gr_to_gl_filter(GrSamplerState::Filter filter) {
|
||||
}
|
||||
}
|
||||
|
||||
// get_swizzle is only called from this .cpp so it is OK to inline it here
|
||||
inline const GrGLenum* get_swizzle(GrPixelConfig config,
|
||||
const GrSamplerState& sampler,
|
||||
const GrGLCaps& glCaps) {
|
||||
const GrGLenum* get_swizzle(GrPixelConfig config,
|
||||
const GrSamplerState& sampler) {
|
||||
if (GrPixelConfigIsAlphaOnly(config)) {
|
||||
if (glCaps.textureRedSupport()) {
|
||||
static const GrGLenum gRedSmear[] = { GR_GL_RED, GR_GL_RED,
|
||||
GR_GL_RED, GR_GL_RED };
|
||||
return gRedSmear;
|
||||
} else {
|
||||
static const GrGLenum gAlphaSmear[] = { GR_GL_ALPHA, GR_GL_ALPHA,
|
||||
GR_GL_ALPHA, GR_GL_ALPHA };
|
||||
return gAlphaSmear;
|
||||
}
|
||||
static const GrGLenum gAlphaSmear[] = { GR_GL_ALPHA, GR_GL_ALPHA,
|
||||
GR_GL_ALPHA, GR_GL_ALPHA };
|
||||
return gAlphaSmear;
|
||||
} else if (sampler.swapsRAndB()) {
|
||||
static const GrGLenum gRedBlueSwap[] = { GR_GL_BLUE, GR_GL_GREEN,
|
||||
GR_GL_RED, GR_GL_ALPHA };
|
||||
@ -2137,7 +2128,7 @@ bool GrGpuGL::flushGLStateCommon(GrPrimitiveType type) {
|
||||
newTexParams.fWrapS = wraps[sampler.getWrapX()];
|
||||
newTexParams.fWrapT = wraps[sampler.getWrapY()];
|
||||
memcpy(newTexParams.fSwizzleRGBA,
|
||||
get_swizzle(nextTexture->config(), sampler, this->glCaps()),
|
||||
get_swizzle(nextTexture->config(), sampler),
|
||||
sizeof(newTexParams.fSwizzleRGBA));
|
||||
if (setAll || newTexParams.fFilter != oldTexParams.fFilter) {
|
||||
setTextureUnit(s);
|
||||
@ -2379,25 +2370,14 @@ bool GrGpuGL::configToGLFormats(GrPixelConfig config,
|
||||
}
|
||||
break;
|
||||
case kAlpha_8_GrPixelConfig:
|
||||
if (this->glCaps().textureRedSupport()) {
|
||||
*internalFormat = GR_GL_RED;
|
||||
*externalFormat = GR_GL_RED;
|
||||
if (getSizedInternalFormat) {
|
||||
*internalFormat = GR_GL_R8;
|
||||
} else {
|
||||
*internalFormat = GR_GL_RED;
|
||||
}
|
||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
||||
*internalFormat = GR_GL_ALPHA;
|
||||
*externalFormat = GR_GL_ALPHA;
|
||||
if (getSizedInternalFormat) {
|
||||
*internalFormat = GR_GL_ALPHA8;
|
||||
} else {
|
||||
*internalFormat = GR_GL_ALPHA;
|
||||
*externalFormat = GR_GL_ALPHA;
|
||||
if (getSizedInternalFormat) {
|
||||
*internalFormat = GR_GL_ALPHA8;
|
||||
} else {
|
||||
*internalFormat = GR_GL_ALPHA;
|
||||
}
|
||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
||||
}
|
||||
*externalType = GR_GL_UNSIGNED_BYTE;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
|
@ -181,7 +181,6 @@ bool GrGpuGLShaders::programUnitTest() {
|
||||
StageDesc::kMulRGBByAlpha_RoundUp_InConfigFlag,
|
||||
StageDesc::kMulRGBByAlpha_RoundDown_InConfigFlag,
|
||||
StageDesc::kSmearAlpha_InConfigFlag,
|
||||
StageDesc::kSmearRed_InConfigFlag,
|
||||
};
|
||||
GrGLProgram program;
|
||||
ProgramDesc& pdesc = program.fProgramDesc;
|
||||
@ -277,7 +276,6 @@ bool GrGpuGLShaders::programUnitTest() {
|
||||
static const uint32_t kMulByAlphaMask =
|
||||
StageDesc::kMulRGBByAlpha_RoundUp_InConfigFlag |
|
||||
StageDesc::kMulRGBByAlpha_RoundDown_InConfigFlag;
|
||||
|
||||
switch (stage.fFetchMode) {
|
||||
case StageDesc::kSingle_FetchMode:
|
||||
stage.fKernelWidth = 0;
|
||||
@ -1172,17 +1170,9 @@ void GrGpuGLShaders::buildProgram(GrPrimitiveType type,
|
||||
if (!this->glCaps().textureSwizzleSupport()) {
|
||||
if (GrPixelConfigIsAlphaOnly(texture->config())) {
|
||||
// if we don't have texture swizzle support then
|
||||
// the shader must smear the single channel after
|
||||
// reading the texture
|
||||
if (this->glCaps().textureRedSupport()) {
|
||||
// we can use R8 textures so use kSmearRed
|
||||
stage.fInConfigFlags |=
|
||||
StageDesc::kSmearRed_InConfigFlag;
|
||||
} else {
|
||||
// we can use A8 textures so use kSmearAlpha
|
||||
stage.fInConfigFlags |=
|
||||
StageDesc::kSmearAlpha_InConfigFlag;
|
||||
}
|
||||
// the shader must do an alpha smear after reading
|
||||
// the texture
|
||||
stage.fInConfigFlags |= StageDesc::kSmearAlpha_InConfigFlag;
|
||||
} else if (sampler.swapsRAndB()) {
|
||||
stage.fInConfigFlags |= StageDesc::kSwapRAndB_InConfigFlag;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user