| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2011 Google Inc. | 2  * Copyright 2011 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "GrGLGpu.h" | 8 #include "GrGLGpu.h" | 
| 9 #include "GrGLBuffer.h" | 9 #include "GrGLBuffer.h" | 
| 10 #include "GrGLGLSL.h" | 10 #include "GrGLGLSL.h" | 
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 187 static bool gPrintStartupSpew; | 187 static bool gPrintStartupSpew; | 
| 188 | 188 | 
| 189 GrGLGpu::GrGLGpu(GrGLContext* ctx, GrContext* context) | 189 GrGLGpu::GrGLGpu(GrGLContext* ctx, GrContext* context) | 
| 190     : GrGpu(context) | 190     : GrGpu(context) | 
| 191     , fGLContext(ctx) | 191     , fGLContext(ctx) | 
| 192     , fProgramCache(new ProgramCache(this)) | 192     , fProgramCache(new ProgramCache(this)) | 
| 193     , fHWProgramID(0) | 193     , fHWProgramID(0) | 
| 194     , fTempSrcFBOID(0) | 194     , fTempSrcFBOID(0) | 
| 195     , fTempDstFBOID(0) | 195     , fTempDstFBOID(0) | 
| 196     , fStencilClearFBOID(0) | 196     , fStencilClearFBOID(0) | 
|  | 197     , fHWMaxUsedBufferTextureUnit(-1) | 
| 197     , fHWPLSEnabled(false) | 198     , fHWPLSEnabled(false) | 
| 198     , fPLSHasBeenUsed(false) | 199     , fPLSHasBeenUsed(false) | 
| 199     , fHWMinSampleShading(0.0) { | 200     , fHWMinSampleShading(0.0) { | 
| 200     for (size_t i = 0; i < SK_ARRAY_COUNT(fCopyPrograms); ++i) { | 201     for (size_t i = 0; i < SK_ARRAY_COUNT(fCopyPrograms); ++i) { | 
| 201         fCopyPrograms[i].fProgram = 0; | 202         fCopyPrograms[i].fProgram = 0; | 
| 202     } | 203     } | 
| 203     fWireRectProgram.fProgram = 0; | 204     fWireRectProgram.fProgram = 0; | 
| 204     fPLSSetupProgram.fProgram = 0; | 205     fPLSSetupProgram.fProgram = 0; | 
| 205 | 206 | 
| 206     SkASSERT(ctx); | 207     SkASSERT(ctx); | 
| 207     fCaps.reset(SkRef(ctx->caps())); | 208     fCaps.reset(SkRef(ctx->caps())); | 
| 208 | 209 | 
| 209     fHWBoundTextureUniqueIDs.reset(this->glCaps().glslCaps()->maxCombinedSampler
      s()); | 210     fHWBoundTextureUniqueIDs.reset(this->glCaps().glslCaps()->maxCombinedSampler
      s()); | 
| 210 | 211 | 
| 211     fHWBufferState[kVertex_GrBufferType].fGLTarget = GR_GL_ARRAY_BUFFER; | 212     fHWBufferState[kVertex_GrBufferType].fGLTarget = GR_GL_ARRAY_BUFFER; | 
| 212     fHWBufferState[kIndex_GrBufferType].fGLTarget = GR_GL_ELEMENT_ARRAY_BUFFER; | 213     fHWBufferState[kIndex_GrBufferType].fGLTarget = GR_GL_ELEMENT_ARRAY_BUFFER; | 
| 213     fHWBufferState[kTexel_GrBufferType].fGLTarget = GR_GL_TEXTURE_BUFFER; | 214     fHWBufferState[kTexel_GrBufferType].fGLTarget = GR_GL_TEXTURE_BUFFER; | 
| 214     fHWBufferState[kDrawIndirect_GrBufferType].fGLTarget = GR_GL_DRAW_INDIRECT_B
      UFFER; | 215     fHWBufferState[kDrawIndirect_GrBufferType].fGLTarget = GR_GL_DRAW_INDIRECT_B
      UFFER; | 
| 215     if (GrGLCaps::kChromium_TransferBufferType == this->glCaps().transferBufferT
      ype()) { | 216     if (GrGLCaps::kChromium_TransferBufferType == this->glCaps().transferBufferT
      ype()) { | 
| 216         fHWBufferState[kXferCpuToGpu_GrBufferType].fGLTarget = | 217         fHWBufferState[kXferCpuToGpu_GrBufferType].fGLTarget = | 
| 217             GR_GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM; | 218             GR_GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM; | 
| 218         fHWBufferState[kXferGpuToCpu_GrBufferType].fGLTarget = | 219         fHWBufferState[kXferGpuToCpu_GrBufferType].fGLTarget = | 
| 219             GR_GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM; | 220             GR_GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM; | 
| 220     } else { | 221     } else { | 
| 221         fHWBufferState[kXferCpuToGpu_GrBufferType].fGLTarget = GR_GL_PIXEL_UNPAC
      K_BUFFER; | 222         fHWBufferState[kXferCpuToGpu_GrBufferType].fGLTarget = GR_GL_PIXEL_UNPAC
      K_BUFFER; | 
| 222         fHWBufferState[kXferGpuToCpu_GrBufferType].fGLTarget = GR_GL_PIXEL_PACK_
      BUFFER; | 223         fHWBufferState[kXferGpuToCpu_GrBufferType].fGLTarget = GR_GL_PIXEL_PACK_
      BUFFER; | 
| 223     } | 224     } | 
| 224     GR_STATIC_ASSERT(6 == SK_ARRAY_COUNT(fHWBufferState)); | 225     GR_STATIC_ASSERT(6 == SK_ARRAY_COUNT(fHWBufferState)); | 
| 225 | 226 | 
|  | 227     if (this->caps()->shaderCaps()->texelBufferSupport()) { | 
|  | 228         fHWBufferTextures.reset(this->glCaps().glslCaps()->maxCombinedSamplers()
      ); | 
|  | 229     } | 
|  | 230 | 
| 226     if (this->glCaps().shaderCaps()->pathRenderingSupport()) { | 231     if (this->glCaps().shaderCaps()->pathRenderingSupport()) { | 
| 227         fPathRendering.reset(new GrGLPathRendering(this)); | 232         fPathRendering.reset(new GrGLPathRendering(this)); | 
| 228     } | 233     } | 
| 229 | 234 | 
| 230     GrGLClearErr(this->glInterface()); | 235     GrGLClearErr(this->glInterface()); | 
| 231     if (gPrintStartupSpew) { | 236     if (gPrintStartupSpew) { | 
| 232         const GrGLubyte* vendor; | 237         const GrGLubyte* vendor; | 
| 233         const GrGLubyte* renderer; | 238         const GrGLubyte* renderer; | 
| 234         const GrGLubyte* version; | 239         const GrGLubyte* version; | 
| 235         GL_CALL_RET(vendor, GetString(GR_GL_VENDOR)); | 240         GL_CALL_RET(vendor, GetString(GR_GL_VENDOR)); | 
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 515             GL_CALL(CoverageModulation(GR_GL_RGBA)); | 520             GL_CALL(CoverageModulation(GR_GL_RGBA)); | 
| 516         } | 521         } | 
| 517     } | 522     } | 
| 518 | 523 | 
| 519     fHWActiveTextureUnitIdx = -1; // invalid | 524     fHWActiveTextureUnitIdx = -1; // invalid | 
| 520 | 525 | 
| 521     if (resetBits & kTextureBinding_GrGLBackendState) { | 526     if (resetBits & kTextureBinding_GrGLBackendState) { | 
| 522         for (int s = 0; s < fHWBoundTextureUniqueIDs.count(); ++s) { | 527         for (int s = 0; s < fHWBoundTextureUniqueIDs.count(); ++s) { | 
| 523             fHWBoundTextureUniqueIDs[s] = SK_InvalidUniqueID; | 528             fHWBoundTextureUniqueIDs[s] = SK_InvalidUniqueID; | 
| 524         } | 529         } | 
|  | 530         for (int b = 0; b < fHWBufferTextures.count(); ++b) { | 
|  | 531             SkASSERT(this->caps()->shaderCaps()->texelBufferSupport()); | 
|  | 532             fHWBufferTextures[b].fKnownBound = false; | 
|  | 533         } | 
| 525     } | 534     } | 
| 526 | 535 | 
| 527     if (resetBits & kBlend_GrGLBackendState) { | 536     if (resetBits & kBlend_GrGLBackendState) { | 
| 528         fHWBlendState.invalidate(); | 537         fHWBlendState.invalidate(); | 
| 529     } | 538     } | 
| 530 | 539 | 
| 531     if (resetBits & kView_GrGLBackendState) { | 540     if (resetBits & kView_GrGLBackendState) { | 
| 532         fHWScissorSettings.invalidate(); | 541         fHWScissorSettings.invalidate(); | 
| 533         fHWViewport.invalidate(); | 542         fHWViewport.invalidate(); | 
| 534     } | 543     } | 
| (...skipping 1510 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2045         fHWProgramID = programID; | 2054         fHWProgramID = programID; | 
| 2046     } | 2055     } | 
| 2047 | 2056 | 
| 2048     if (blendInfo.fWriteColor) { | 2057     if (blendInfo.fWriteColor) { | 
| 2049         // Swizzle the blend to match what the shader will output. | 2058         // Swizzle the blend to match what the shader will output. | 
| 2050         const GrSwizzle& swizzle = this->glCaps().glslCaps()->configOutputSwizzl
      e( | 2059         const GrSwizzle& swizzle = this->glCaps().glslCaps()->configOutputSwizzl
      e( | 
| 2051             pipeline.getRenderTarget()->config()); | 2060             pipeline.getRenderTarget()->config()); | 
| 2052         this->flushBlend(blendInfo, swizzle); | 2061         this->flushBlend(blendInfo, swizzle); | 
| 2053     } | 2062     } | 
| 2054 | 2063 | 
| 2055     SkSTArray<8, const GrTextureAccess*> textureAccesses; | 2064     program->setData(primProc, pipeline, pipeline.getAllowSRGBInputs()); | 
| 2056     program->setData(primProc, pipeline, &textureAccesses); |  | 
| 2057 |  | 
| 2058     int numTextureAccesses = textureAccesses.count(); |  | 
| 2059     for (int i = 0; i < numTextureAccesses; i++) { |  | 
| 2060         this->bindTexture(i, textureAccesses[i]->getParams(), pipeline.getAllowS
      RGBInputs(), |  | 
| 2061                           static_cast<GrGLTexture*>(textureAccesses[i]->getTextu
      re())); |  | 
| 2062     } |  | 
| 2063 | 2065 | 
| 2064     GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(pipeline.getRenderTa
      rget()); | 2066     GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(pipeline.getRenderTa
      rget()); | 
| 2065     this->flushStencil(pipeline.getStencil()); | 2067     this->flushStencil(pipeline.getStencil()); | 
| 2066     this->flushScissor(pipeline.getScissorState(), glRT->getViewport(), glRT->or
      igin()); | 2068     this->flushScissor(pipeline.getScissorState(), glRT->getViewport(), glRT->or
      igin()); | 
| 2067     this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !pipeline.getStenc
      il().isDisabled()); | 2069     this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !pipeline.getStenc
      il().isDisabled()); | 
| 2068 | 2070 | 
| 2069     // This must come after textures are flushed because a texture may need | 2071     // This must come after textures are flushed because a texture may need | 
| 2070     // to be msaa-resolved (which will modify bound FBO state). | 2072     // to be msaa-resolved (which will modify bound FBO state). | 
| 2071     this->flushRenderTarget(glRT, nullptr, pipeline.getDisableOutputConversionTo
      SRGB()); | 2073     this->flushRenderTarget(glRT, nullptr, pipeline.getDisableOutputConversionTo
      SRGB()); | 
| 2072 | 2074 | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2140         if (!buffer->isCPUBacked() || !bufferState.fBufferZeroKnownBound) { | 2142         if (!buffer->isCPUBacked() || !bufferState.fBufferZeroKnownBound) { | 
| 2141             GL_CALL(BindBuffer(bufferState.fGLTarget, buffer->bufferID())); | 2143             GL_CALL(BindBuffer(bufferState.fGLTarget, buffer->bufferID())); | 
| 2142             bufferState.fBufferZeroKnownBound = buffer->isCPUBacked(); | 2144             bufferState.fBufferZeroKnownBound = buffer->isCPUBacked(); | 
| 2143         } | 2145         } | 
| 2144         bufferState.fBoundBufferUniqueID = buffer->getUniqueID(); | 2146         bufferState.fBoundBufferUniqueID = buffer->getUniqueID(); | 
| 2145     } | 2147     } | 
| 2146 | 2148 | 
| 2147     return bufferState.fGLTarget; | 2149     return bufferState.fGLTarget; | 
| 2148 } | 2150 } | 
| 2149 | 2151 | 
|  | 2152 void GrGLGpu::notifyBufferReleased(const GrGLBuffer* buffer) { | 
|  | 2153     if (buffer->hasAttachedToTexture()) { | 
|  | 2154         // Detach this buffer from any textures to ensure the underlying memory 
      is freed. | 
|  | 2155         uint32_t uniqueID = buffer->getUniqueID(); | 
|  | 2156         for (int i = fHWMaxUsedBufferTextureUnit; i >= 0; --i) { | 
|  | 2157             auto& buffTex = fHWBufferTextures[i]; | 
|  | 2158             if (uniqueID != buffTex.fAttachedBufferUniqueID) { | 
|  | 2159                 continue; | 
|  | 2160             } | 
|  | 2161             if (i == fHWMaxUsedBufferTextureUnit) { | 
|  | 2162                 --fHWMaxUsedBufferTextureUnit; | 
|  | 2163             } | 
|  | 2164 | 
|  | 2165             this->setTextureUnit(i); | 
|  | 2166             if (!buffTex.fKnownBound) { | 
|  | 2167                 SkASSERT(buffTex.fTextureID); | 
|  | 2168                 GL_CALL(BindTexture(GR_GL_TEXTURE_BUFFER, buffTex.fTextureID)); | 
|  | 2169                 buffTex.fKnownBound = true; | 
|  | 2170             } | 
|  | 2171             GL_CALL(TexBuffer(GR_GL_TEXTURE_BUFFER, | 
|  | 2172                               this->glCaps().configSizedInternalFormat(buffTex.f
      TexelConfig), 0)); | 
|  | 2173         } | 
|  | 2174     } | 
|  | 2175 } | 
|  | 2176 | 
| 2150 void GrGLGpu::disableScissor() { | 2177 void GrGLGpu::disableScissor() { | 
| 2151     if (kNo_TriState != fHWScissorSettings.fEnabled) { | 2178     if (kNo_TriState != fHWScissorSettings.fEnabled) { | 
| 2152         GL_CALL(Disable(GR_GL_SCISSOR_TEST)); | 2179         GL_CALL(Disable(GR_GL_SCISSOR_TEST)); | 
| 2153         fHWScissorSettings.fEnabled = kNo_TriState; | 2180         fHWScissorSettings.fEnabled = kNo_TriState; | 
| 2154         return; | 2181         return; | 
| 2155     } | 2182     } | 
| 2156 } | 2183 } | 
| 2157 | 2184 | 
| 2158 void GrGLGpu::onClear(GrRenderTarget* target, const SkIRect& rect, GrColor color
      ) { | 2185 void GrGLGpu::onClear(GrRenderTarget* target, const SkIRect& rect, GrColor color
      ) { | 
| 2159     // parent class should never let us get here with no RT | 2186     // parent class should never let us get here with no RT | 
| (...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3257         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_S, newTexParams.fWrapS)
      ); | 3284         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_S, newTexParams.fWrapS)
      ); | 
| 3258     } | 3285     } | 
| 3259     if (setAll || newTexParams.fWrapT != oldTexParams.fWrapT) { | 3286     if (setAll || newTexParams.fWrapT != oldTexParams.fWrapT) { | 
| 3260         this->setTextureUnit(unitIdx); | 3287         this->setTextureUnit(unitIdx); | 
| 3261         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_T, newTexParams.fWrapT)
      ); | 3288         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_T, newTexParams.fWrapT)
      ); | 
| 3262     } | 3289     } | 
| 3263     if (this->glCaps().textureSwizzleSupport() && | 3290     if (this->glCaps().textureSwizzleSupport() && | 
| 3264         (setAll || memcmp(newTexParams.fSwizzleRGBA, | 3291         (setAll || memcmp(newTexParams.fSwizzleRGBA, | 
| 3265                           oldTexParams.fSwizzleRGBA, | 3292                           oldTexParams.fSwizzleRGBA, | 
| 3266                           sizeof(newTexParams.fSwizzleRGBA)))) { | 3293                           sizeof(newTexParams.fSwizzleRGBA)))) { | 
| 3267         this->setTextureUnit(unitIdx); | 3294         this->setTextureSwizzle(unitIdx, target, newTexParams.fSwizzleRGBA); | 
| 3268         if (this->glStandard() == kGLES_GrGLStandard) { |  | 
| 3269             // ES3 added swizzle support but not GL_TEXTURE_SWIZZLE_RGBA. |  | 
| 3270             const GrGLenum* swizzle = newTexParams.fSwizzleRGBA; |  | 
| 3271             GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_R, swizzle[0])); |  | 
| 3272             GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_G, swizzle[1])); |  | 
| 3273             GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_B, swizzle[2])); |  | 
| 3274             GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_A, swizzle[3])); |  | 
| 3275         } else { |  | 
| 3276             GR_STATIC_ASSERT(sizeof(newTexParams.fSwizzleRGBA[0]) == sizeof(GrGL
      int)); |  | 
| 3277             const GrGLint* swizzle = reinterpret_cast<const GrGLint*>(newTexPara
      ms.fSwizzleRGBA); |  | 
| 3278             GL_CALL(TexParameteriv(target, GR_GL_TEXTURE_SWIZZLE_RGBA, swizzle))
      ; |  | 
| 3279         } |  | 
| 3280     } | 3295     } | 
| 3281     texture->setCachedTexParams(newTexParams, this->getResetTimestamp()); | 3296     texture->setCachedTexParams(newTexParams, this->getResetTimestamp()); | 
| 3282 } | 3297 } | 
| 3283 | 3298 | 
|  | 3299 void GrGLGpu::bindTexelBuffer(int unitIdx, intptr_t offsetInBytes, GrPixelConfig
       texelConfig, | 
|  | 3300                               GrGLBuffer* buffer) { | 
|  | 3301     SkASSERT(this->glCaps().canUseConfigWithTexelBuffer(texelConfig)); | 
|  | 3302     SkASSERT(unitIdx >= 0 && unitIdx < fHWBufferTextures.count()); | 
|  | 3303     SkASSERT(offsetInBytes >= 0 && offsetInBytes < (intptr_t) buffer->glSizeInBy
      tes()); | 
|  | 3304 | 
|  | 3305     BufferTexture& buffTex = fHWBufferTextures[unitIdx]; | 
|  | 3306 | 
|  | 3307     if (!buffTex.fKnownBound) { | 
|  | 3308         if (!buffTex.fTextureID) { | 
|  | 3309             GL_CALL(GenTextures(1, &buffTex.fTextureID)); | 
|  | 3310             if (!buffTex.fTextureID) { | 
|  | 3311                 return; | 
|  | 3312             } | 
|  | 3313         } | 
|  | 3314 | 
|  | 3315         this->setTextureUnit(unitIdx); | 
|  | 3316         GL_CALL(BindTexture(GR_GL_TEXTURE_BUFFER, buffTex.fTextureID)); | 
|  | 3317 | 
|  | 3318         buffTex.fKnownBound = true; | 
|  | 3319     } | 
|  | 3320 | 
|  | 3321     if (buffer->getUniqueID() != buffTex.fAttachedBufferUniqueID || | 
|  | 3322         buffTex.fOffsetInBytes != offsetInBytes || | 
|  | 3323         buffTex.fTexelConfig != texelConfig || | 
|  | 3324         buffTex.fAttachedSizeInBytes != buffer->glSizeInBytes() - offsetInBytes)
       { | 
|  | 3325 | 
|  | 3326         size_t attachmentSizeInBytes = buffer->glSizeInBytes() - offsetInBytes; | 
|  | 3327 | 
|  | 3328         this->setTextureUnit(unitIdx); | 
|  | 3329         GL_CALL(TexBufferRange(GR_GL_TEXTURE_BUFFER, | 
|  | 3330                                this->glCaps().configSizedInternalFormat(texelCon
      fig), | 
|  | 3331                                buffer->bufferID(), | 
|  | 3332                                offsetInBytes, | 
|  | 3333                                attachmentSizeInBytes)); | 
|  | 3334 | 
|  | 3335         buffTex.fOffsetInBytes = offsetInBytes; | 
|  | 3336         buffTex.fTexelConfig = texelConfig; | 
|  | 3337         buffTex.fAttachedSizeInBytes = attachmentSizeInBytes; | 
|  | 3338         buffTex.fAttachedBufferUniqueID = buffer->getUniqueID(); | 
|  | 3339 | 
|  | 3340         if (this->glCaps().textureSwizzleSupport() && | 
|  | 3341             this->glCaps().configSwizzle(texelConfig) != buffTex.fSwizzle) { | 
|  | 3342             GrGLenum glSwizzle[4]; | 
|  | 3343             get_tex_param_swizzle(texelConfig, this->glCaps(), glSwizzle); | 
|  | 3344             this->setTextureSwizzle(unitIdx, GR_GL_TEXTURE_BUFFER, glSwizzle); | 
|  | 3345             buffTex.fSwizzle = this->glCaps().configSwizzle(texelConfig); | 
|  | 3346         } | 
|  | 3347 | 
|  | 3348         buffer->setHasAttachedToTexture(); | 
|  | 3349         fHWMaxUsedBufferTextureUnit = SkTMax(unitIdx, fHWMaxUsedBufferTextureUni
      t); | 
|  | 3350     } | 
|  | 3351 } | 
|  | 3352 | 
|  | 3353 void GrGLGpu::setTextureSwizzle(int unitIdx, GrGLenum target, const GrGLenum swi
      zzle[]) { | 
|  | 3354     this->setTextureUnit(unitIdx); | 
|  | 3355     if (this->glStandard() == kGLES_GrGLStandard) { | 
|  | 3356         // ES3 added swizzle support but not GL_TEXTURE_SWIZZLE_RGBA. | 
|  | 3357         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_R, swizzle[0])); | 
|  | 3358         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_G, swizzle[1])); | 
|  | 3359         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_B, swizzle[2])); | 
|  | 3360         GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_A, swizzle[3])); | 
|  | 3361     } else { | 
|  | 3362         GR_STATIC_ASSERT(sizeof(swizzle[0]) == sizeof(GrGLint)); | 
|  | 3363         GL_CALL(TexParameteriv(target, GR_GL_TEXTURE_SWIZZLE_RGBA, | 
|  | 3364                                reinterpret_cast<const GrGLint*>(swizzle))); | 
|  | 3365     } | 
|  | 3366 } | 
|  | 3367 | 
| 3284 void GrGLGpu::flushColorWrite(bool writeColor) { | 3368 void GrGLGpu::flushColorWrite(bool writeColor) { | 
| 3285     if (!writeColor) { | 3369     if (!writeColor) { | 
| 3286         if (kNo_TriState != fHWWriteToColor) { | 3370         if (kNo_TriState != fHWWriteToColor) { | 
| 3287             GL_CALL(ColorMask(GR_GL_FALSE, GR_GL_FALSE, | 3371             GL_CALL(ColorMask(GR_GL_FALSE, GR_GL_FALSE, | 
| 3288                               GR_GL_FALSE, GR_GL_FALSE)); | 3372                               GR_GL_FALSE, GR_GL_FALSE)); | 
| 3289             fHWWriteToColor = kNo_TriState; | 3373             fHWWriteToColor = kNo_TriState; | 
| 3290         } | 3374         } | 
| 3291     } else { | 3375     } else { | 
| 3292         if (kYes_TriState != fHWWriteToColor) { | 3376         if (kYes_TriState != fHWWriteToColor) { | 
| 3293             GL_CALL(ColorMask(GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE)); | 3377             GL_CALL(ColorMask(GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE)); | 
| (...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4233         if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || | 4317         if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || | 
| 4234             GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { | 4318             GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { | 
| 4235             copyParams->fFilter = GrTextureParams::kNone_FilterMode; | 4319             copyParams->fFilter = GrTextureParams::kNone_FilterMode; | 
| 4236             copyParams->fWidth = texture->width(); | 4320             copyParams->fWidth = texture->width(); | 
| 4237             copyParams->fHeight = texture->height(); | 4321             copyParams->fHeight = texture->height(); | 
| 4238             return true; | 4322             return true; | 
| 4239         } | 4323         } | 
| 4240     } | 4324     } | 
| 4241     return false; | 4325     return false; | 
| 4242 } | 4326 } | 
| OLD | NEW | 
|---|