xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrShaderCaps.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2012 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 GrShaderCaps_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrShaderCaps_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAssert.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/sksl/SkSLUtil.h"
13*c8dee2aaSAndroid Build Coastguard Worker 
14*c8dee2aaSAndroid Build Coastguard Worker class SkJSONWriter;
15*c8dee2aaSAndroid Build Coastguard Worker struct GrContextOptions;
16*c8dee2aaSAndroid Build Coastguard Worker 
17*c8dee2aaSAndroid Build Coastguard Worker struct GrShaderCaps : SkSL::ShaderCaps {
GrShaderCapsGrShaderCaps18*c8dee2aaSAndroid Build Coastguard Worker     GrShaderCaps() {}
19*c8dee2aaSAndroid Build Coastguard Worker 
20*c8dee2aaSAndroid Build Coastguard Worker     void dumpJSON(SkJSONWriter*) const;
21*c8dee2aaSAndroid Build Coastguard Worker 
noperspectiveInterpolationExtensionStringGrShaderCaps22*c8dee2aaSAndroid Build Coastguard Worker     const char* noperspectiveInterpolationExtensionString() const {
23*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(this->fNoPerspectiveInterpolationSupport);
24*c8dee2aaSAndroid Build Coastguard Worker         return fNoPerspectiveInterpolationExtensionString;
25*c8dee2aaSAndroid Build Coastguard Worker     }
26*c8dee2aaSAndroid Build Coastguard Worker 
sampleVariablesExtensionStringGrShaderCaps27*c8dee2aaSAndroid Build Coastguard Worker     const char* sampleVariablesExtensionString() const {
28*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(this->fSampleMaskSupport);
29*c8dee2aaSAndroid Build Coastguard Worker         return fSampleVariablesExtensionString;
30*c8dee2aaSAndroid Build Coastguard Worker     }
31*c8dee2aaSAndroid Build Coastguard Worker 
32*c8dee2aaSAndroid Build Coastguard Worker     void applyOptionsOverrides(const GrContextOptions& options);
33*c8dee2aaSAndroid Build Coastguard Worker 
34*c8dee2aaSAndroid Build Coastguard Worker     bool fDstReadInShaderSupport = false;
35*c8dee2aaSAndroid Build Coastguard Worker     bool fPreferFlatInterpolation = false;
36*c8dee2aaSAndroid Build Coastguard Worker     bool fVertexIDSupport = false;
37*c8dee2aaSAndroid Build Coastguard Worker     // Returns true if `expr` in `myArray[expr]` can be any integer expression. If false, `expr`
38*c8dee2aaSAndroid Build Coastguard Worker     // must be a constant-index-expression as defined in the OpenGL ES2 specification, Appendix A.5.
39*c8dee2aaSAndroid Build Coastguard Worker     bool fNonconstantArrayIndexSupport = false;
40*c8dee2aaSAndroid Build Coastguard Worker     // frexp(), ldexp(), findMSB(), findLSB().
41*c8dee2aaSAndroid Build Coastguard Worker     bool fBitManipulationSupport = false;
42*c8dee2aaSAndroid Build Coastguard Worker     bool fHalfIs32Bits = false;
43*c8dee2aaSAndroid Build Coastguard Worker     bool fHasLowFragmentPrecision = false;
44*c8dee2aaSAndroid Build Coastguard Worker     // Use a reduced set of rendering algorithms or less optimal effects in order to reduce the
45*c8dee2aaSAndroid Build Coastguard Worker     // number of unique shaders generated.
46*c8dee2aaSAndroid Build Coastguard Worker     bool fReducedShaderMode = false;
47*c8dee2aaSAndroid Build Coastguard Worker 
48*c8dee2aaSAndroid Build Coastguard Worker     // Used for specific driver bug workarounds
49*c8dee2aaSAndroid Build Coastguard Worker     bool fRequiresLocalOutputColorForFBFetch = false;
50*c8dee2aaSAndroid Build Coastguard Worker     // Workaround for Mali GPU opacity bug with uniform colors.
51*c8dee2aaSAndroid Build Coastguard Worker     bool fMustObfuscateUniformColor = false;
52*c8dee2aaSAndroid Build Coastguard Worker     // On Nexus 6, the GL context can get lost if a shader does not write a value to gl_FragColor.
53*c8dee2aaSAndroid Build Coastguard Worker     // https://bugs.chromium.org/p/chromium/issues/detail?id=445377
54*c8dee2aaSAndroid Build Coastguard Worker     bool fMustWriteToFragColor = false;
55*c8dee2aaSAndroid Build Coastguard Worker     // When we have the option of using either dFdx or dfDy in a shader, this returns whether we
56*c8dee2aaSAndroid Build Coastguard Worker     // should avoid using dFdx. We have found some drivers have bugs or lower precision when using
57*c8dee2aaSAndroid Build Coastguard Worker     // dFdx.
58*c8dee2aaSAndroid Build Coastguard Worker     bool fAvoidDfDxForGradientsWhenPossible = false;
59*c8dee2aaSAndroid Build Coastguard Worker 
60*c8dee2aaSAndroid Build Coastguard Worker     // This contains the name of an extension that must be enabled in the shader, if such a thing is
61*c8dee2aaSAndroid Build Coastguard Worker     // required in order to use a secondary output in the shader. This returns a nullptr if no such
62*c8dee2aaSAndroid Build Coastguard Worker     // extension is required. However, the return value of this function does not say whether dual
63*c8dee2aaSAndroid Build Coastguard Worker     // source blending is supported.
64*c8dee2aaSAndroid Build Coastguard Worker     const char* fSecondaryOutputExtensionString = nullptr;
65*c8dee2aaSAndroid Build Coastguard Worker 
66*c8dee2aaSAndroid Build Coastguard Worker     const char* fNoPerspectiveInterpolationExtensionString = nullptr;
67*c8dee2aaSAndroid Build Coastguard Worker     const char* fSampleVariablesExtensionString = nullptr;
68*c8dee2aaSAndroid Build Coastguard Worker 
69*c8dee2aaSAndroid Build Coastguard Worker     const char* fFBFetchExtensionString = nullptr;
70*c8dee2aaSAndroid Build Coastguard Worker 
71*c8dee2aaSAndroid Build Coastguard Worker     int fMaxFragmentSamplers = 0;
72*c8dee2aaSAndroid Build Coastguard Worker };
73*c8dee2aaSAndroid Build Coastguard Worker 
74*c8dee2aaSAndroid Build Coastguard Worker #endif
75