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 |