1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2015 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrContextOptions_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrContextOptions_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkData.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ShaderErrorHandler.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrDriverBugWorkarounds.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrTypes.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/ganesh/GrTypesPriv.h" 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker #include <optional> 20*c8dee2aaSAndroid Build Coastguard Worker #include <vector> 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker class SkExecutor; 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker struct SK_API GrContextOptions { 25*c8dee2aaSAndroid Build Coastguard Worker enum class Enable { 26*c8dee2aaSAndroid Build Coastguard Worker /** Forces an option to be disabled. */ 27*c8dee2aaSAndroid Build Coastguard Worker kNo, 28*c8dee2aaSAndroid Build Coastguard Worker /** Forces an option to be enabled. */ 29*c8dee2aaSAndroid Build Coastguard Worker kYes, 30*c8dee2aaSAndroid Build Coastguard Worker /** 31*c8dee2aaSAndroid Build Coastguard Worker * Uses Skia's default behavior, which may use runtime properties (e.g. driver version). 32*c8dee2aaSAndroid Build Coastguard Worker */ 33*c8dee2aaSAndroid Build Coastguard Worker kDefault 34*c8dee2aaSAndroid Build Coastguard Worker }; 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker enum class ShaderCacheStrategy { 37*c8dee2aaSAndroid Build Coastguard Worker kSkSL, 38*c8dee2aaSAndroid Build Coastguard Worker kBackendSource, 39*c8dee2aaSAndroid Build Coastguard Worker kBackendBinary, 40*c8dee2aaSAndroid Build Coastguard Worker }; 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker /** 43*c8dee2aaSAndroid Build Coastguard Worker * Abstract class which stores Skia data in a cache that persists between sessions. Currently, 44*c8dee2aaSAndroid Build Coastguard Worker * Skia stores compiled shader binaries (only when glProgramBinary / glGetProgramBinary are 45*c8dee2aaSAndroid Build Coastguard Worker * supported) when provided a persistent cache, but this may extend to other data in the future. 46*c8dee2aaSAndroid Build Coastguard Worker */ 47*c8dee2aaSAndroid Build Coastguard Worker class SK_API PersistentCache { 48*c8dee2aaSAndroid Build Coastguard Worker public: 49*c8dee2aaSAndroid Build Coastguard Worker virtual ~PersistentCache() = default; 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker /** 52*c8dee2aaSAndroid Build Coastguard Worker * Returns the data for the key if it exists in the cache, otherwise returns null. 53*c8dee2aaSAndroid Build Coastguard Worker */ 54*c8dee2aaSAndroid Build Coastguard Worker virtual sk_sp<SkData> load(const SkData& key) = 0; 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker // Placeholder until all clients override the 3-parameter store(), then remove this, and 57*c8dee2aaSAndroid Build Coastguard Worker // make that version pure virtual. storeGrContextOptions58*c8dee2aaSAndroid Build Coastguard Worker virtual void store(const SkData& /*key*/, const SkData& /*data*/) { SkASSERT(false); } 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker /** 61*c8dee2aaSAndroid Build Coastguard Worker * Stores data in the cache, indexed by key. description provides a human-readable 62*c8dee2aaSAndroid Build Coastguard Worker * version of the key. 63*c8dee2aaSAndroid Build Coastguard Worker */ storeGrContextOptions64*c8dee2aaSAndroid Build Coastguard Worker virtual void store(const SkData& key, const SkData& data, const SkString& /*description*/) { 65*c8dee2aaSAndroid Build Coastguard Worker this->store(key, data); 66*c8dee2aaSAndroid Build Coastguard Worker } 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker protected: 69*c8dee2aaSAndroid Build Coastguard Worker PersistentCache() = default; 70*c8dee2aaSAndroid Build Coastguard Worker PersistentCache(const PersistentCache&) = delete; 71*c8dee2aaSAndroid Build Coastguard Worker PersistentCache& operator=(const PersistentCache&) = delete; 72*c8dee2aaSAndroid Build Coastguard Worker }; 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker using ShaderErrorHandler = skgpu::ShaderErrorHandler; 75*c8dee2aaSAndroid Build Coastguard Worker GrContextOptionsGrContextOptions76*c8dee2aaSAndroid Build Coastguard Worker GrContextOptions() {} 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Worker /** 79*c8dee2aaSAndroid Build Coastguard Worker * If Skia is creating a default VMA allocator for the Vulkan backend this value will be used 80*c8dee2aaSAndroid Build Coastguard Worker * for the preferredLargeHeapBlockSize. If the value is not set, then Skia will use an 81*c8dee2aaSAndroid Build Coastguard Worker * inernally defined default size. 82*c8dee2aaSAndroid Build Coastguard Worker * 83*c8dee2aaSAndroid Build Coastguard Worker * However, it is highly discouraged to have Skia make a default allocator (and support for 84*c8dee2aaSAndroid Build Coastguard Worker * doing so will be removed soon, b/321962001). Instead clients should create their own 85*c8dee2aaSAndroid Build Coastguard Worker * allocator to pass into Skia where they can fine tune this value themeselves. 86*c8dee2aaSAndroid Build Coastguard Worker */ 87*c8dee2aaSAndroid Build Coastguard Worker std::optional<uint64_t> fVulkanVMALargeHeapBlockSize; 88*c8dee2aaSAndroid Build Coastguard Worker 89*c8dee2aaSAndroid Build Coastguard Worker /** 90*c8dee2aaSAndroid Build Coastguard Worker * Optional callback that can be passed into the GrDirectContext which will be called when the 91*c8dee2aaSAndroid Build Coastguard Worker * GrDirectContext is about to be destroyed. When this call is made, it will be safe for the 92*c8dee2aaSAndroid Build Coastguard Worker * client to delete the GPU backend context that is backing the GrDirectContext. The 93*c8dee2aaSAndroid Build Coastguard Worker * GrDirectContextDestroyedContext will be passed back to the client in the callback. 94*c8dee2aaSAndroid Build Coastguard Worker */ 95*c8dee2aaSAndroid Build Coastguard Worker GrDirectContextDestroyedContext fContextDeleteContext = nullptr; 96*c8dee2aaSAndroid Build Coastguard Worker GrDirectContextDestroyedProc fContextDeleteProc = nullptr; 97*c8dee2aaSAndroid Build Coastguard Worker 98*c8dee2aaSAndroid Build Coastguard Worker /** 99*c8dee2aaSAndroid Build Coastguard Worker * Executor to handle threaded work within Ganesh. If this is nullptr, then all work will be 100*c8dee2aaSAndroid Build Coastguard Worker * done serially on the main thread. To have worker threads assist with various tasks, set this 101*c8dee2aaSAndroid Build Coastguard Worker * to a valid SkExecutor instance. Currently, used for software path rendering, but may be used 102*c8dee2aaSAndroid Build Coastguard Worker * for other tasks. 103*c8dee2aaSAndroid Build Coastguard Worker */ 104*c8dee2aaSAndroid Build Coastguard Worker SkExecutor* fExecutor = nullptr; 105*c8dee2aaSAndroid Build Coastguard Worker 106*c8dee2aaSAndroid Build Coastguard Worker /** 107*c8dee2aaSAndroid Build Coastguard Worker * Cache in which to store compiled shader binaries between runs. 108*c8dee2aaSAndroid Build Coastguard Worker */ 109*c8dee2aaSAndroid Build Coastguard Worker PersistentCache* fPersistentCache = nullptr; 110*c8dee2aaSAndroid Build Coastguard Worker 111*c8dee2aaSAndroid Build Coastguard Worker /** 112*c8dee2aaSAndroid Build Coastguard Worker * If present, use this object to report shader compilation failures. If not, report failures 113*c8dee2aaSAndroid Build Coastguard Worker * via SkDebugf and assert. 114*c8dee2aaSAndroid Build Coastguard Worker */ 115*c8dee2aaSAndroid Build Coastguard Worker ShaderErrorHandler* fShaderErrorHandler = nullptr; 116*c8dee2aaSAndroid Build Coastguard Worker 117*c8dee2aaSAndroid Build Coastguard Worker /** Default minimum size to use when allocating buffers for uploading data to textures. The 118*c8dee2aaSAndroid Build Coastguard Worker larger the value the more uploads can be packed into one buffer, but at the cost of 119*c8dee2aaSAndroid Build Coastguard Worker more gpu memory allocated that may not be used. Uploads larger than the minimum will still 120*c8dee2aaSAndroid Build Coastguard Worker work by allocating a dedicated buffer. */ 121*c8dee2aaSAndroid Build Coastguard Worker size_t fMinimumStagingBufferSize = 64 * 1024; 122*c8dee2aaSAndroid Build Coastguard Worker 123*c8dee2aaSAndroid Build Coastguard Worker /** 124*c8dee2aaSAndroid Build Coastguard Worker * The maximum size of cache textures used for Skia's Glyph cache. 125*c8dee2aaSAndroid Build Coastguard Worker */ 126*c8dee2aaSAndroid Build Coastguard Worker size_t fGlyphCacheTextureMaximumBytes = 2048 * 1024 * 4; 127*c8dee2aaSAndroid Build Coastguard Worker 128*c8dee2aaSAndroid Build Coastguard Worker /** 129*c8dee2aaSAndroid Build Coastguard Worker * Controls whether we check for GL errors after functions that allocate resources (e.g. 130*c8dee2aaSAndroid Build Coastguard Worker * glTexImage2D), at the end of a GPU submission, or checking framebuffer completeness. The 131*c8dee2aaSAndroid Build Coastguard Worker * results of shader compilation and program linking are always checked, regardless of this 132*c8dee2aaSAndroid Build Coastguard Worker * option. Ignored on backends other than GL. 133*c8dee2aaSAndroid Build Coastguard Worker */ 134*c8dee2aaSAndroid Build Coastguard Worker Enable fSkipGLErrorChecks = Enable::kDefault; 135*c8dee2aaSAndroid Build Coastguard Worker 136*c8dee2aaSAndroid Build Coastguard Worker /** 137*c8dee2aaSAndroid Build Coastguard Worker * Can the glyph atlas use multiple textures. If allowed, the each texture's size is bound by 138*c8dee2aaSAndroid Build Coastguard Worker * fGlypheCacheTextureMaximumBytes. 139*c8dee2aaSAndroid Build Coastguard Worker */ 140*c8dee2aaSAndroid Build Coastguard Worker Enable fAllowMultipleGlyphCacheTextures = Enable::kDefault; 141*c8dee2aaSAndroid Build Coastguard Worker 142*c8dee2aaSAndroid Build Coastguard Worker /** 143*c8dee2aaSAndroid Build Coastguard Worker * Enables driver workaround to use draws instead of HW clears, e.g. glClear on the GL backend. 144*c8dee2aaSAndroid Build Coastguard Worker */ 145*c8dee2aaSAndroid Build Coastguard Worker Enable fUseDrawInsteadOfClear = Enable::kDefault; 146*c8dee2aaSAndroid Build Coastguard Worker 147*c8dee2aaSAndroid Build Coastguard Worker /** 148*c8dee2aaSAndroid Build Coastguard Worker * Allow Ganesh to more aggressively reorder operations to reduce the number of render passes. 149*c8dee2aaSAndroid Build Coastguard Worker * Offscreen draws will be done upfront instead of interrupting the main render pass when 150*c8dee2aaSAndroid Build Coastguard Worker * possible. May increase VRAM usage, but still observes the resource cache limit. 151*c8dee2aaSAndroid Build Coastguard Worker * Enabled by default. 152*c8dee2aaSAndroid Build Coastguard Worker */ 153*c8dee2aaSAndroid Build Coastguard Worker Enable fReduceOpsTaskSplitting = Enable::kDefault; 154*c8dee2aaSAndroid Build Coastguard Worker 155*c8dee2aaSAndroid Build Coastguard Worker /** 156*c8dee2aaSAndroid Build Coastguard Worker * This affects the usage of the PersistentCache. We can cache SkSL, backend source (GLSL), or 157*c8dee2aaSAndroid Build Coastguard Worker * backend binaries (GL program binaries). By default we cache binaries, but if the driver's 158*c8dee2aaSAndroid Build Coastguard Worker * binary loading/storing is believed to have bugs, this can be limited to caching GLSL. 159*c8dee2aaSAndroid Build Coastguard Worker * Caching GLSL strings still saves CPU work when a GL program is created. 160*c8dee2aaSAndroid Build Coastguard Worker */ 161*c8dee2aaSAndroid Build Coastguard Worker ShaderCacheStrategy fShaderCacheStrategy = ShaderCacheStrategy::kBackendBinary; 162*c8dee2aaSAndroid Build Coastguard Worker 163*c8dee2aaSAndroid Build Coastguard Worker /** Overrides: These options override feature detection using backend API queries. These 164*c8dee2aaSAndroid Build Coastguard Worker overrides can only reduce the feature set or limits, never increase them beyond the 165*c8dee2aaSAndroid Build Coastguard Worker detected values. */ 166*c8dee2aaSAndroid Build Coastguard Worker 167*c8dee2aaSAndroid Build Coastguard Worker int fMaxTextureSizeOverride = SK_MaxS32; 168*c8dee2aaSAndroid Build Coastguard Worker 169*c8dee2aaSAndroid Build Coastguard Worker /** the threshold in bytes above which we will use a buffer mapping API to map vertex and index 170*c8dee2aaSAndroid Build Coastguard Worker buffers to CPU memory in order to update them. A value of -1 means the GrContext should 171*c8dee2aaSAndroid Build Coastguard Worker deduce the optimal value for this platform. */ 172*c8dee2aaSAndroid Build Coastguard Worker int fBufferMapThreshold = -1; 173*c8dee2aaSAndroid Build Coastguard Worker 174*c8dee2aaSAndroid Build Coastguard Worker /** 175*c8dee2aaSAndroid Build Coastguard Worker * Maximum number of GPU programs or pipelines to keep active in the runtime cache. 176*c8dee2aaSAndroid Build Coastguard Worker */ 177*c8dee2aaSAndroid Build Coastguard Worker int fRuntimeProgramCacheSize = 256; 178*c8dee2aaSAndroid Build Coastguard Worker 179*c8dee2aaSAndroid Build Coastguard Worker /** 180*c8dee2aaSAndroid Build Coastguard Worker * Specifies the number of samples Ganesh should use when performing internal draws with MSAA 181*c8dee2aaSAndroid Build Coastguard Worker * (hardware capabilities permitting). 182*c8dee2aaSAndroid Build Coastguard Worker * 183*c8dee2aaSAndroid Build Coastguard Worker * If 0, Ganesh will disable internal code paths that use multisampling. 184*c8dee2aaSAndroid Build Coastguard Worker */ 185*c8dee2aaSAndroid Build Coastguard Worker int fInternalMultisampleCount = 4; 186*c8dee2aaSAndroid Build Coastguard Worker 187*c8dee2aaSAndroid Build Coastguard Worker /** 188*c8dee2aaSAndroid Build Coastguard Worker * In Skia's vulkan backend a single GrContext submit equates to the submission of a single 189*c8dee2aaSAndroid Build Coastguard Worker * primary command buffer to the VkQueue. This value specifies how many vulkan secondary command 190*c8dee2aaSAndroid Build Coastguard Worker * buffers we will cache for reuse on a given primary command buffer. A single submit may use 191*c8dee2aaSAndroid Build Coastguard Worker * more than this many secondary command buffers, but after the primary command buffer is 192*c8dee2aaSAndroid Build Coastguard Worker * finished on the GPU it will only hold on to this many secondary command buffers for reuse. 193*c8dee2aaSAndroid Build Coastguard Worker * 194*c8dee2aaSAndroid Build Coastguard Worker * A value of -1 means we will pick a limit value internally. 195*c8dee2aaSAndroid Build Coastguard Worker */ 196*c8dee2aaSAndroid Build Coastguard Worker int fMaxCachedVulkanSecondaryCommandBuffers = -1; 197*c8dee2aaSAndroid Build Coastguard Worker 198*c8dee2aaSAndroid Build Coastguard Worker /** 199*c8dee2aaSAndroid Build Coastguard Worker * Below this threshold size in device space distance field fonts won't be used. Distance field 200*c8dee2aaSAndroid Build Coastguard Worker * fonts don't support hinting which is more important at smaller sizes. 201*c8dee2aaSAndroid Build Coastguard Worker */ 202*c8dee2aaSAndroid Build Coastguard Worker float fMinDistanceFieldFontSize = 18; 203*c8dee2aaSAndroid Build Coastguard Worker 204*c8dee2aaSAndroid Build Coastguard Worker /** 205*c8dee2aaSAndroid Build Coastguard Worker * Above this threshold size in device space glyphs are drawn as individual paths. 206*c8dee2aaSAndroid Build Coastguard Worker */ 207*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_BUILD_FOR_ANDROID) 208*c8dee2aaSAndroid Build Coastguard Worker float fGlyphsAsPathsFontSize = 384; 209*c8dee2aaSAndroid Build Coastguard Worker #elif defined(SK_BUILD_FOR_MAC) 210*c8dee2aaSAndroid Build Coastguard Worker float fGlyphsAsPathsFontSize = 256; 211*c8dee2aaSAndroid Build Coastguard Worker #else 212*c8dee2aaSAndroid Build Coastguard Worker float fGlyphsAsPathsFontSize = 324; 213*c8dee2aaSAndroid Build Coastguard Worker #endif 214*c8dee2aaSAndroid Build Coastguard Worker 215*c8dee2aaSAndroid Build Coastguard Worker GrDriverBugWorkarounds fDriverBugWorkarounds; 216*c8dee2aaSAndroid Build Coastguard Worker 217*c8dee2aaSAndroid Build Coastguard Worker /** Construct mipmaps manually, via repeated downsampling draw-calls. This is used when 218*c8dee2aaSAndroid Build Coastguard Worker the driver's implementation (glGenerateMipmap) contains bugs. This requires mipmap 219*c8dee2aaSAndroid Build Coastguard Worker level control (ie desktop or ES3). */ 220*c8dee2aaSAndroid Build Coastguard Worker bool fDoManualMipmapping = false; 221*c8dee2aaSAndroid Build Coastguard Worker 222*c8dee2aaSAndroid Build Coastguard Worker /** 223*c8dee2aaSAndroid Build Coastguard Worker * Disables the use of coverage counting shortcuts to render paths. Coverage counting can cause 224*c8dee2aaSAndroid Build Coastguard Worker * artifacts along shared edges if care isn't taken to ensure both contours wind in the same 225*c8dee2aaSAndroid Build Coastguard Worker * direction. 226*c8dee2aaSAndroid Build Coastguard Worker */ 227*c8dee2aaSAndroid Build Coastguard Worker // FIXME: Once this is removed from Chrome and Android, rename to fEnable"". 228*c8dee2aaSAndroid Build Coastguard Worker bool fDisableCoverageCountingPaths = true; 229*c8dee2aaSAndroid Build Coastguard Worker 230*c8dee2aaSAndroid Build Coastguard Worker /** 231*c8dee2aaSAndroid Build Coastguard Worker * Disables distance field rendering for paths. Distance field computation can be expensive, 232*c8dee2aaSAndroid Build Coastguard Worker * and yields no benefit if a path is not rendered multiple times with different transforms. 233*c8dee2aaSAndroid Build Coastguard Worker */ 234*c8dee2aaSAndroid Build Coastguard Worker bool fDisableDistanceFieldPaths = false; 235*c8dee2aaSAndroid Build Coastguard Worker 236*c8dee2aaSAndroid Build Coastguard Worker /** 237*c8dee2aaSAndroid Build Coastguard Worker * If true this allows path mask textures to be cached. This is only really useful if paths 238*c8dee2aaSAndroid Build Coastguard Worker * are commonly rendered at the same scale and fractional translation. 239*c8dee2aaSAndroid Build Coastguard Worker */ 240*c8dee2aaSAndroid Build Coastguard Worker bool fAllowPathMaskCaching = true; 241*c8dee2aaSAndroid Build Coastguard Worker 242*c8dee2aaSAndroid Build Coastguard Worker /** 243*c8dee2aaSAndroid Build Coastguard Worker * If true, the GPU will not be used to perform YUV -> RGB conversion when generating 244*c8dee2aaSAndroid Build Coastguard Worker * textures from codec-backed images. 245*c8dee2aaSAndroid Build Coastguard Worker */ 246*c8dee2aaSAndroid Build Coastguard Worker bool fDisableGpuYUVConversion = false; 247*c8dee2aaSAndroid Build Coastguard Worker 248*c8dee2aaSAndroid Build Coastguard Worker /** 249*c8dee2aaSAndroid Build Coastguard Worker * Bugs on certain drivers cause stencil buffers to leak. This flag causes Skia to avoid 250*c8dee2aaSAndroid Build Coastguard Worker * allocating stencil buffers and use alternate rasterization paths, avoiding the leak. 251*c8dee2aaSAndroid Build Coastguard Worker */ 252*c8dee2aaSAndroid Build Coastguard Worker bool fAvoidStencilBuffers = false; 253*c8dee2aaSAndroid Build Coastguard Worker 254*c8dee2aaSAndroid Build Coastguard Worker /** 255*c8dee2aaSAndroid Build Coastguard Worker * If true, texture fetches from mip-mapped textures will be biased to read larger MIP levels. 256*c8dee2aaSAndroid Build Coastguard Worker * This has the effect of sharpening those textures, at the cost of some aliasing, and possible 257*c8dee2aaSAndroid Build Coastguard Worker * performance impact. 258*c8dee2aaSAndroid Build Coastguard Worker */ 259*c8dee2aaSAndroid Build Coastguard Worker bool fSharpenMipmappedTextures = true; 260*c8dee2aaSAndroid Build Coastguard Worker 261*c8dee2aaSAndroid Build Coastguard Worker /** 262*c8dee2aaSAndroid Build Coastguard Worker * Some ES3 contexts report the ES2 external image extension, but not the ES3 version. 263*c8dee2aaSAndroid Build Coastguard Worker * If support for external images is critical, enabling this option will cause Ganesh to limit 264*c8dee2aaSAndroid Build Coastguard Worker * shaders to the ES2 shading language in that situation. 265*c8dee2aaSAndroid Build Coastguard Worker */ 266*c8dee2aaSAndroid Build Coastguard Worker bool fPreferExternalImagesOverES3 = false; 267*c8dee2aaSAndroid Build Coastguard Worker 268*c8dee2aaSAndroid Build Coastguard Worker /** 269*c8dee2aaSAndroid Build Coastguard Worker * Disables correctness workarounds that are enabled for particular GPUs, OSes, or drivers. 270*c8dee2aaSAndroid Build Coastguard Worker * This does not affect code path choices that are made for perfomance reasons nor does it 271*c8dee2aaSAndroid Build Coastguard Worker * override other GrContextOption settings. 272*c8dee2aaSAndroid Build Coastguard Worker */ 273*c8dee2aaSAndroid Build Coastguard Worker bool fDisableDriverCorrectnessWorkarounds = false; 274*c8dee2aaSAndroid Build Coastguard Worker 275*c8dee2aaSAndroid Build Coastguard Worker /** 276*c8dee2aaSAndroid Build Coastguard Worker * If true, the caps will never support mipmaps. 277*c8dee2aaSAndroid Build Coastguard Worker */ 278*c8dee2aaSAndroid Build Coastguard Worker bool fSuppressMipmapSupport = false; 279*c8dee2aaSAndroid Build Coastguard Worker 280*c8dee2aaSAndroid Build Coastguard Worker /** 281*c8dee2aaSAndroid Build Coastguard Worker * If true, the TessellationPathRenderer will not be used for path rendering. 282*c8dee2aaSAndroid Build Coastguard Worker * If false, will fallback to any driver workarounds, if set. 283*c8dee2aaSAndroid Build Coastguard Worker */ 284*c8dee2aaSAndroid Build Coastguard Worker bool fDisableTessellationPathRenderer = false; 285*c8dee2aaSAndroid Build Coastguard Worker 286*c8dee2aaSAndroid Build Coastguard Worker /** 287*c8dee2aaSAndroid Build Coastguard Worker * If true, and if supported, enables hardware tessellation in the caps. 288*c8dee2aaSAndroid Build Coastguard Worker * DEPRECATED: This value is ignored; experimental hardware tessellation is always disabled. 289*c8dee2aaSAndroid Build Coastguard Worker */ 290*c8dee2aaSAndroid Build Coastguard Worker bool fEnableExperimentalHardwareTessellation = false; 291*c8dee2aaSAndroid Build Coastguard Worker 292*c8dee2aaSAndroid Build Coastguard Worker /** 293*c8dee2aaSAndroid Build Coastguard Worker * If true, then add 1 pixel padding to all glyph masks in the atlas to support bi-lerp 294*c8dee2aaSAndroid Build Coastguard Worker * rendering of all glyphs. This must be set to true to use Slugs. 295*c8dee2aaSAndroid Build Coastguard Worker */ 296*c8dee2aaSAndroid Build Coastguard Worker bool fSupportBilerpFromGlyphAtlas = false; 297*c8dee2aaSAndroid Build Coastguard Worker 298*c8dee2aaSAndroid Build Coastguard Worker /** 299*c8dee2aaSAndroid Build Coastguard Worker * Uses a reduced variety of shaders. May perform less optimally in steady state but can reduce 300*c8dee2aaSAndroid Build Coastguard Worker * jank due to shader compilations. 301*c8dee2aaSAndroid Build Coastguard Worker */ 302*c8dee2aaSAndroid Build Coastguard Worker bool fReducedShaderVariations = false; 303*c8dee2aaSAndroid Build Coastguard Worker 304*c8dee2aaSAndroid Build Coastguard Worker /** 305*c8dee2aaSAndroid Build Coastguard Worker * If true, then allow to enable MSAA on new Intel GPUs. 306*c8dee2aaSAndroid Build Coastguard Worker */ 307*c8dee2aaSAndroid Build Coastguard Worker bool fAllowMSAAOnNewIntel = false; 308*c8dee2aaSAndroid Build Coastguard Worker 309*c8dee2aaSAndroid Build Coastguard Worker /** 310*c8dee2aaSAndroid Build Coastguard Worker * Currently on ARM Android we disable the use of GL TexStorage because of memory regressions. 311*c8dee2aaSAndroid Build Coastguard Worker * However, some clients may still want to use TexStorage. For example, TexStorage support is 312*c8dee2aaSAndroid Build Coastguard Worker * required for creating protected textures. 313*c8dee2aaSAndroid Build Coastguard Worker * 314*c8dee2aaSAndroid Build Coastguard Worker * This flag has no impact on non GL backends. 315*c8dee2aaSAndroid Build Coastguard Worker */ 316*c8dee2aaSAndroid Build Coastguard Worker bool fAlwaysUseTexStorageWhenAvailable = false; 317*c8dee2aaSAndroid Build Coastguard Worker 318*c8dee2aaSAndroid Build Coastguard Worker // Suppress prints for the GrContext. 319*c8dee2aaSAndroid Build Coastguard Worker bool fSuppressPrints = false; 320*c8dee2aaSAndroid Build Coastguard Worker 321*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS) 322*c8dee2aaSAndroid Build Coastguard Worker /** 323*c8dee2aaSAndroid Build Coastguard Worker * Private options that are only meant for testing within Skia's tools. 324*c8dee2aaSAndroid Build Coastguard Worker */ 325*c8dee2aaSAndroid Build Coastguard Worker 326*c8dee2aaSAndroid Build Coastguard Worker /** 327*c8dee2aaSAndroid Build Coastguard Worker * Include or exclude specific GPU path renderers. 328*c8dee2aaSAndroid Build Coastguard Worker */ 329*c8dee2aaSAndroid Build Coastguard Worker GpuPathRenderers fGpuPathRenderers = GpuPathRenderers::kDefault; 330*c8dee2aaSAndroid Build Coastguard Worker 331*c8dee2aaSAndroid Build Coastguard Worker /** 332*c8dee2aaSAndroid Build Coastguard Worker * Specify the GPU resource cache limit. Equivalent to calling `setResourceCacheLimit` on the 333*c8dee2aaSAndroid Build Coastguard Worker * context at construction time. 334*c8dee2aaSAndroid Build Coastguard Worker * 335*c8dee2aaSAndroid Build Coastguard Worker * A value of -1 means use the default limit value. 336*c8dee2aaSAndroid Build Coastguard Worker */ 337*c8dee2aaSAndroid Build Coastguard Worker int fResourceCacheLimitOverride = -1; 338*c8dee2aaSAndroid Build Coastguard Worker 339*c8dee2aaSAndroid Build Coastguard Worker /** 340*c8dee2aaSAndroid Build Coastguard Worker * Maximum width and height of internal texture atlases. 341*c8dee2aaSAndroid Build Coastguard Worker */ 342*c8dee2aaSAndroid Build Coastguard Worker int fMaxTextureAtlasSize = 2048; 343*c8dee2aaSAndroid Build Coastguard Worker 344*c8dee2aaSAndroid Build Coastguard Worker /** 345*c8dee2aaSAndroid Build Coastguard Worker * Testing-only mode to exercise allocation failures in the flush-time callback objects. 346*c8dee2aaSAndroid Build Coastguard Worker * For now it only simulates allocation failure during the preFlush callback. 347*c8dee2aaSAndroid Build Coastguard Worker */ 348*c8dee2aaSAndroid Build Coastguard Worker bool fFailFlushTimeCallbacks = false; 349*c8dee2aaSAndroid Build Coastguard Worker 350*c8dee2aaSAndroid Build Coastguard Worker /** 351*c8dee2aaSAndroid Build Coastguard Worker * Prevents use of dual source blending, to test that all xfer modes work correctly without it. 352*c8dee2aaSAndroid Build Coastguard Worker */ 353*c8dee2aaSAndroid Build Coastguard Worker bool fSuppressDualSourceBlending = false; 354*c8dee2aaSAndroid Build Coastguard Worker 355*c8dee2aaSAndroid Build Coastguard Worker /** 356*c8dee2aaSAndroid Build Coastguard Worker * Prevents the use of non-coefficient-based blend equations, for testing dst reads, barriers, 357*c8dee2aaSAndroid Build Coastguard Worker * and in-shader blending. 358*c8dee2aaSAndroid Build Coastguard Worker */ 359*c8dee2aaSAndroid Build Coastguard Worker bool fSuppressAdvancedBlendEquations = false; 360*c8dee2aaSAndroid Build Coastguard Worker 361*c8dee2aaSAndroid Build Coastguard Worker /** 362*c8dee2aaSAndroid Build Coastguard Worker * Prevents the use of framebuffer fetches, for testing dst reads and texture barriers. 363*c8dee2aaSAndroid Build Coastguard Worker */ 364*c8dee2aaSAndroid Build Coastguard Worker bool fSuppressFramebufferFetch = false; 365*c8dee2aaSAndroid Build Coastguard Worker 366*c8dee2aaSAndroid Build Coastguard Worker /** 367*c8dee2aaSAndroid Build Coastguard Worker * If true, then all paths are processed as if "setIsVolatile" had been called. 368*c8dee2aaSAndroid Build Coastguard Worker */ 369*c8dee2aaSAndroid Build Coastguard Worker bool fAllPathsVolatile = false; 370*c8dee2aaSAndroid Build Coastguard Worker 371*c8dee2aaSAndroid Build Coastguard Worker /** 372*c8dee2aaSAndroid Build Coastguard Worker * Render everything in wireframe 373*c8dee2aaSAndroid Build Coastguard Worker */ 374*c8dee2aaSAndroid Build Coastguard Worker bool fWireframeMode = false; 375*c8dee2aaSAndroid Build Coastguard Worker 376*c8dee2aaSAndroid Build Coastguard Worker /** 377*c8dee2aaSAndroid Build Coastguard Worker * Enforces clearing of all textures when they're created. 378*c8dee2aaSAndroid Build Coastguard Worker */ 379*c8dee2aaSAndroid Build Coastguard Worker bool fClearAllTextures = false; 380*c8dee2aaSAndroid Build Coastguard Worker 381*c8dee2aaSAndroid Build Coastguard Worker /** 382*c8dee2aaSAndroid Build Coastguard Worker * Randomly generate a (false) GL_OUT_OF_MEMORY error 383*c8dee2aaSAndroid Build Coastguard Worker */ 384*c8dee2aaSAndroid Build Coastguard Worker bool fRandomGLOOM = false; 385*c8dee2aaSAndroid Build Coastguard Worker 386*c8dee2aaSAndroid Build Coastguard Worker /** 387*c8dee2aaSAndroid Build Coastguard Worker * Force off support for write/transfer pixels row bytes in caps. 388*c8dee2aaSAndroid Build Coastguard Worker */ 389*c8dee2aaSAndroid Build Coastguard Worker bool fDisallowWriteAndTransferPixelRowBytes = false; 390*c8dee2aaSAndroid Build Coastguard Worker 391*c8dee2aaSAndroid Build Coastguard Worker #endif 392*c8dee2aaSAndroid Build Coastguard Worker 393*c8dee2aaSAndroid Build Coastguard Worker }; 394*c8dee2aaSAndroid Build Coastguard Worker 395*c8dee2aaSAndroid Build Coastguard Worker #endif 396