| Index: src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp
|
| diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp
|
| index 488d07b8dbd21f0de7c8d2db4e9bd7ff722668af..5d5741ef9bc8f4cb04379b6e1dc60b73d34698de 100644
|
| --- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp
|
| +++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp
|
| @@ -42,8 +42,7 @@
|
| }
|
|
|
| GrGLFragmentShaderBuilder::DstReadKey
|
| -GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstCopy,
|
| - const GrGLCaps& caps) {
|
| +GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps& caps) {
|
| uint32_t key = kYesDstRead_DstReadKeyBit;
|
| if (caps.fbFetchSupport()) {
|
| return key;
|
| @@ -61,8 +60,7 @@
|
| }
|
|
|
| GrGLFragmentShaderBuilder::FragPosKey
|
| -GrGLFragmentShaderBuilder::KeyForFragmentPosition(const GrRenderTarget* dst,
|
| - const GrGLCaps&) {
|
| +GrGLFragmentShaderBuilder::KeyForFragmentPosition(const GrRenderTarget* dst, const GrGLCaps&) {
|
| if (kTopLeft_GrSurfaceOrigin == dst->origin()) {
|
| return kTopLeftFragPosRead_FragPosKey;
|
| } else {
|
| @@ -88,7 +86,8 @@
|
| if (!gpu->glCaps().shaderDerivativeSupport()) {
|
| return false;
|
| }
|
| - if (kGLES_GrGLStandard == gpu->glStandard()) {
|
| + if (kGLES_GrGLStandard == gpu->glStandard() &&
|
| + k110_GrGLSLGeneration == gpu->glslGeneration()) {
|
| this->addFeature(1 << kStandardDerivatives_GLSLFeature,
|
| "GL_OES_standard_derivatives");
|
| }
|
| @@ -326,7 +325,9 @@
|
| }
|
|
|
| void GrGLFragmentShaderBuilder::bindFragmentShaderLocations(GrGLuint programID) {
|
| - if (fHasCustomColorOutput) {
|
| + // ES 3.00 requires custom color output but doesn't support bindFragDataLocation
|
| + if (fHasCustomColorOutput &&
|
| + kGLES_GrGLStandard != fProgramBuilder->gpu()->ctxInfo().standard()) {
|
| GL_CALL(BindFragDataLocation(programID, 0, declared_color_output_name()));
|
| }
|
| if (fHasSecondaryOutput) {
|
|
|