From 97e398d98928f9497063594ebe633efe2d0f4968 Mon Sep 17 00:00:00 2001 From: brianosman Date: Thu, 9 Jun 2016 09:39:58 -0700 Subject: [PATCH] Add control of manual mipmapping to GrContextOptions BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2054623003 Review-Url: https://codereview.chromium.org/2054623003 --- include/gpu/GrContextOptions.h | 5 +++++ src/gpu/gl/GrGLCaps.cpp | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/gpu/GrContextOptions.h b/include/gpu/GrContextOptions.h index 7b62c94a44..5950000971 100644 --- a/include/gpu/GrContextOptions.h +++ b/include/gpu/GrContextOptions.h @@ -67,6 +67,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;