Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(564)

Side by Side Diff: src/gpu/gl/GrGLGpu.cpp

Issue 2026393004: Add a caps bit to enable/disable the new manual mip-mapper (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/gl/GrGLCaps.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 4296 matching lines...) Expand 10 before | Expand all | Expand 10 after
4307 dstGLRect.fBottom, 4307 dstGLRect.fBottom,
4308 dstGLRect.fLeft + dstGLRect.fWidth, 4308 dstGLRect.fLeft + dstGLRect.fWidth,
4309 dstGLRect.fBottom + dstGLRect.fHeight, 4309 dstGLRect.fBottom + dstGLRect.fHeight,
4310 GR_GL_COLOR_BUFFER_BIT, GR_GL_NEAREST)); 4310 GR_GL_COLOR_BUFFER_BIT, GR_GL_NEAREST));
4311 this->unbindTextureFBOForCopy(GR_GL_DRAW_FRAMEBUFFER, dst); 4311 this->unbindTextureFBOForCopy(GR_GL_DRAW_FRAMEBUFFER, dst);
4312 this->unbindTextureFBOForCopy(GR_GL_READ_FRAMEBUFFER, src); 4312 this->unbindTextureFBOForCopy(GR_GL_READ_FRAMEBUFFER, src);
4313 this->didWriteToSurface(dst, &dstRect); 4313 this->didWriteToSurface(dst, &dstRect);
4314 return true; 4314 return true;
4315 } 4315 }
4316 4316
4317 bool gManualMipmaps = true;
4318
4319 // Manual implementation of mipmap generation, to work around driver bugs w/sRGB . 4317 // Manual implementation of mipmap generation, to work around driver bugs w/sRGB .
4320 // Uses draw calls to do a series of downsample operations to successive mips. 4318 // Uses draw calls to do a series of downsample operations to successive mips.
4321 // If this returns false, then the calling code falls back to using glGenerateMi pmap. 4319 // If this returns false, then the calling code falls back to using glGenerateMi pmap.
4322 bool GrGLGpu::generateMipmap(GrGLTexture* texture, bool gammaCorrect) { 4320 bool GrGLGpu::generateMipmap(GrGLTexture* texture, bool gammaCorrect) {
4323 // Global switch for manual mipmap generation: 4321 // Our iterative downsample requires the ability to limit which level we're sampling:
4324 if (!gManualMipmaps) { 4322 if (!this->glCaps().doManualMipmapping()) {
4325 return false; 4323 return false;
4326 } 4324 }
4327 4325
4328 // Mipmaps are only supported on 2D textures: 4326 // Mipmaps are only supported on 2D textures:
4329 if (GR_GL_TEXTURE_2D != texture->target()) { 4327 if (GR_GL_TEXTURE_2D != texture->target()) {
4330 return false; 4328 return false;
4331 } 4329 }
4332 4330
4333 // We need to be able to render to the texture for this to work: 4331 // We need to be able to render to the texture for this to work:
4334 if (!this->caps()->isConfigRenderable(texture->config(), false)) { 4332 if (!this->caps()->isConfigRenderable(texture->config(), false)) {
4335 return false; 4333 return false;
4336 } 4334 }
4337 4335
4338 // Our iterative downsample requires the ability to limit which level we're sampling:
4339 if (!this->glCaps().mipMapLevelAndLodControlSupport()) {
4340 return false;
4341 }
4342
4343 // If we're mipping an sRGB texture, we need to ensure FB sRGB is correct: 4336 // If we're mipping an sRGB texture, we need to ensure FB sRGB is correct:
4344 if (GrPixelConfigIsSRGB(texture->config())) { 4337 if (GrPixelConfigIsSRGB(texture->config())) {
4345 // If we have write-control, just set the state that we want: 4338 // If we have write-control, just set the state that we want:
4346 if (this->glCaps().srgbWriteControl()) { 4339 if (this->glCaps().srgbWriteControl()) {
4347 this->flushFramebufferSRGB(gammaCorrect); 4340 this->flushFramebufferSRGB(gammaCorrect);
4348 } else if (!gammaCorrect) { 4341 } else if (!gammaCorrect) {
4349 // If we don't have write-control we can't do non-gamma-correct mipm apping: 4342 // If we don't have write-control we can't do non-gamma-correct mipm apping:
4350 return false; 4343 return false;
4351 } 4344 }
4352 } 4345 }
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
4647 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || 4640 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() ||
4648 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { 4641 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) {
4649 copyParams->fFilter = GrTextureParams::kNone_FilterMode; 4642 copyParams->fFilter = GrTextureParams::kNone_FilterMode;
4650 copyParams->fWidth = texture->width(); 4643 copyParams->fWidth = texture->width();
4651 copyParams->fHeight = texture->height(); 4644 copyParams->fHeight = texture->height();
4652 return true; 4645 return true;
4653 } 4646 }
4654 } 4647 }
4655 return false; 4648 return false;
4656 } 4649 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLCaps.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698