aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/gpu/GrContextOptions.h8
-rw-r--r--src/gpu/gl/GrGLCaps.cpp3
2 files changed, 9 insertions, 2 deletions
diff --git a/include/gpu/GrContextOptions.h b/include/gpu/GrContextOptions.h
index 7b62c94a44..d5923a3280 100644
--- a/include/gpu/GrContextOptions.h
+++ b/include/gpu/GrContextOptions.h
@@ -23,7 +23,8 @@ struct GrContextOptions {
, fDrawBatchBounds(false)
, fMaxBatchLookback(-1)
, fMaxBatchLookahead(-1)
- , fUseShaderSwizzling(false) {}
+ , fUseShaderSwizzling(false)
+ , fDoManualMipmapping(false) {}
// Suppress prints for the GrContext.
bool fSuppressPrints;
@@ -67,6 +68,11 @@ struct GrContextOptions {
/** Force us to do all swizzling manually in the shader and don't rely on extensions to do
swizzling. */
bool fUseShaderSwizzling;
+
+ /** Construct mipmaps manually, via repeated downsampling draw-calls. This is used when
+ the driver's implementation (glGenerateMipmap) contains bugs. This requires mipmap
+ level and LOD control (ie desktop or ES3). */
+ bool fDoManualMipmapping;
};
#endif
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 260521187a..7ca2bf9a47 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -551,7 +551,8 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
// glGenerateMipmap. Our implementation requires mip-level sampling control. Additionally,
// it can be much slower (especially on mobile GPUs), so we opt-in only when necessary:
if (fMipMapLevelAndLodControlSupport &&
- ((kIntel_GrGLVendor == ctxInfo.vendor()) ||
+ (contextOptions.fDoManualMipmapping ||
+ (kIntel_GrGLVendor == ctxInfo.vendor()) ||
(kNVIDIA_GrGLDriver == ctxInfo.driver() && isMAC) ||
(kATI_GrGLVendor == ctxInfo.vendor()))) {
fDoManualMipmapping = true;