1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrContextOptions_DEFINED
9 #define GrContextOptions_DEFINED
10 
11 #include "SkTypes.h"
12 
13 struct GrContextOptions {
GrContextOptionsGrContextOptions14     GrContextOptions()
15         : fDrawPathToCompressedTexture(false)
16         , fSuppressPrints(false)
17         , fMaxTextureSizeOverride(SK_MaxS32)
18         , fMaxTileSizeOverride(0)
19         , fSuppressDualSourceBlending(false)
20         , fGeometryBufferMapThreshold(-1)
21         , fUseDrawInsteadOfPartialRenderTargetWrite(false)
22         , fImmediateMode(false)
23         , fClipBatchToBounds(false)
24         , fDrawBatchBounds(false)
25         , fMaxBatchLookback(-1)
26         , fUseShaderSwizzling(false) {}
27 
28     // EXPERIMENTAL
29     // May be removed in the future, or may become standard depending
30     // on the outcomes of a variety of internal tests.
31     bool fDrawPathToCompressedTexture;
32 
33     // Suppress prints for the GrContext.
34     bool fSuppressPrints;
35 
36     /** Overrides: These options override feature detection using backend API queries. These
37         overrides can only reduce the feature set or limits, never increase them beyond the
38         detected values. */
39 
40     int  fMaxTextureSizeOverride;
41     /** If non-zero, overrides the maximum size of a tile for sw-backed images and bitmaps rendered
42         by SkGpuDevice. */
43     int  fMaxTileSizeOverride;
44     bool fSuppressDualSourceBlending;
45 
46     /** the threshold in bytes above which we will use a buffer mapping API to map vertex and index
47         buffers to CPU memory in order to update them.  A value of -1 means the GrContext should
48         deduce the optimal value for this platform. */
49     int  fGeometryBufferMapThreshold;
50 
51     /** some gpus have problems with partial writes of the rendertarget */
52     bool fUseDrawInsteadOfPartialRenderTargetWrite;
53 
54     /** The GrContext operates in immediate mode. It will issue all draws to the backend API
55         immediately. Intended to ease debugging. */
56     bool fImmediateMode;
57 
58     /** For debugging purposes turn each GrBatch's bounds into a clip rect. This is used to
59         verify that the clip bounds are conservative. */
60     bool fClipBatchToBounds;
61 
62     /** For debugging purposes draw a wireframe device bounds rect for each GrBatch. The wire
63         frame rect is draw before the GrBatch in order to visualize batches that draw outside
64         of their dev bounds. */
65     bool fDrawBatchBounds;
66 
67     /** For debugging, override the default maximum look-back window for GrBatch combining. */
68     int fMaxBatchLookback;
69 
70     /** Force us to do all swizzling manually in the shader and don't rely on extensions to do
71         swizzling. */
72     bool fUseShaderSwizzling;
73 };
74 
75 #endif
76