1 /*
2 * Copyright 2012 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
9 #include "GrGLSLCaps.h"
10
11 #include "GrContextOptions.h"
12
13 ////////////////////////////////////////////////////////////////////////////////////////////
14
GrGLSLCaps(const GrContextOptions & options)15 GrGLSLCaps::GrGLSLCaps(const GrContextOptions& options) {
16 fGLSLGeneration = k330_GrGLSLGeneration;
17
18 fDropsTileOnZeroDivide = false;
19 fFBFetchSupport = false;
20 fFBFetchNeedsCustomOutput = false;
21 fBindlessTextureSupport = false;
22 fUsesPrecisionModifiers = false;
23 fCanUseAnyFunctionInShader = true;
24 fCanUseMinAndAbsTogether = true;
25 fMustForceNegatedAtanParamToFloat = false;
26 fFlatInterpolationSupport = false;
27 fNoPerspectiveInterpolationSupport = false;
28 fSampleVariablesSupport = false;
29 fSampleMaskOverrideCoverageSupport = false;
30 fVersionDeclString = nullptr;
31 fShaderDerivativeExtensionString = nullptr;
32 fFragCoordConventionsExtensionString = nullptr;
33 fSecondaryOutputExtensionString = nullptr;
34 fExternalTextureExtensionString = nullptr;
35 fNoPerspectiveInterpolationExtensionString = nullptr;
36 fSampleVariablesExtensionString = nullptr;
37 fFBFetchColorName = nullptr;
38 fFBFetchExtensionString = nullptr;
39 fAdvBlendEqInteraction = kNotSupported_AdvBlendEqInteraction;
40 }
41
dump() const42 SkString GrGLSLCaps::dump() const {
43 SkString r = INHERITED::dump();
44
45 static const char* kAdvBlendEqInteractionStr[] = {
46 "Not Supported",
47 "Automatic",
48 "General Enable",
49 "Specific Enables",
50 };
51 GR_STATIC_ASSERT(0 == kNotSupported_AdvBlendEqInteraction);
52 GR_STATIC_ASSERT(1 == kAutomatic_AdvBlendEqInteraction);
53 GR_STATIC_ASSERT(2 == kGeneralEnable_AdvBlendEqInteraction);
54 GR_STATIC_ASSERT(3 == kSpecificEnables_AdvBlendEqInteraction);
55 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kAdvBlendEqInteractionStr) == kLast_AdvBlendEqInteraction + 1);
56
57 r.appendf("--- GLSL-Specific ---\n");
58
59 r.appendf("FB Fetch Support: %s\n", (fFBFetchSupport ? "YES" : "NO"));
60 r.appendf("Drops tile on zero divide: %s\n", (fDropsTileOnZeroDivide ? "YES" : "NO"));
61 r.appendf("Bindless texture support: %s\n", (fBindlessTextureSupport ? "YES" : "NO"));
62 r.appendf("Uses precision modifiers: %s\n", (fUsesPrecisionModifiers ? "YES" : "NO"));
63 r.appendf("Can use any() function: %s\n", (fCanUseAnyFunctionInShader ? "YES" : "NO"));
64 r.appendf("Can use min() and abs() together: %s\n", (fCanUseMinAndAbsTogether ? "YES" : "NO"));
65 r.appendf("Must force negated atan param to float: %s\n", (fMustForceNegatedAtanParamToFloat ?
66 "YES" : "NO"));
67 r.appendf("Flat interpolation support: %s\n", (fFlatInterpolationSupport ? "YES" : "NO"));
68 r.appendf("No perspective interpolation support: %s\n", (fNoPerspectiveInterpolationSupport ?
69 "YES" : "NO"));
70 r.appendf("Sample variables support: %s\n", (fSampleVariablesSupport ? "YES" : "NO"));
71 r.appendf("Sample mask override coverage support: %s\n", (fSampleMaskOverrideCoverageSupport ?
72 "YES" : "NO"));
73 r.appendf("Advanced blend equation interaction: %s\n",
74 kAdvBlendEqInteractionStr[fAdvBlendEqInteraction]);
75 return r;
76 }
77
onApplyOptionsOverrides(const GrContextOptions & options)78 void GrGLSLCaps::onApplyOptionsOverrides(const GrContextOptions& options) {
79 }
80
81