blob: 6fe1e2665d7c3a4129370ed9af2be00c8f4ac045 [file] [log] [blame]
jvanverthcba99b82015-06-24 06:59:57 -07001/*
2 * Copyright 2011 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
Brian Salomon94efbf52016-11-29 13:43:05 -05008#include "GrShaderCaps.h"
jvanverthcba99b82015-06-24 06:59:57 -07009#include "SkString.h"
Brian Salomon94efbf52016-11-29 13:43:05 -050010#include "../private/GrGLSL.h"
jvanverthcba99b82015-06-24 06:59:57 -070011
12bool GrGLSLSupportsNamedFragmentShaderOutputs(GrGLSLGeneration gen) {
13 switch (gen) {
14 case k110_GrGLSLGeneration:
15 return false;
16 case k130_GrGLSLGeneration:
17 case k140_GrGLSLGeneration:
18 case k150_GrGLSLGeneration:
19 case k330_GrGLSLGeneration:
cdalton33ad7012016-02-22 07:55:44 -080020 case k400_GrGLSLGeneration:
Brian Salomond327e8c2016-11-15 13:26:08 -050021 case k420_GrGLSLGeneration:
jvanverthcba99b82015-06-24 06:59:57 -070022 case k310es_GrGLSLGeneration:
cdalton33ad7012016-02-22 07:55:44 -080023 case k320es_GrGLSLGeneration:
jvanverthcba99b82015-06-24 06:59:57 -070024 return true;
25 }
26 return false;
27}
Brian Salomon1d816b92017-08-17 11:07:59 -040028
Robert Phillips8296e752017-08-25 08:45:21 -040029const char* GrGLSLTypeString(const GrShaderCaps* shaderCaps, GrSLType t) {
30 switch (t) {
31 case kVoid_GrSLType:
32 return "void";
33 case kFloat_GrSLType:
34 return "float";
35 case kVec2f_GrSLType:
36 return "float2";
37 case kVec3f_GrSLType:
38 return "float3";
39 case kVec4f_GrSLType:
40 return "float4";
41 case kVec2us_GrSLType:
42 if (shaderCaps->integerSupport()) {
43 return "uint2";
44 } else {
45 // uint2 (aka uvec2) isn't supported in GLSL ES 1.00/GLSL 1.20
46 return "float2";
47 }
48 case kVec2i_GrSLType:
49 return "int2";
50 case kVec3i_GrSLType:
51 return "int3";
52 case kVec4i_GrSLType:
53 return "int4";
54 case kMat22f_GrSLType:
55 return "float2x2";
56 case kMat33f_GrSLType:
57 return "float3x3";
58 case kMat44f_GrSLType:
59 return "float4x4";
60 case kTexture2DSampler_GrSLType:
61 return "sampler2D";
62 case kITexture2DSampler_GrSLType:
63 return "isampler2D";
64 case kTextureExternalSampler_GrSLType:
65 return "samplerExternalOES";
66 case kTexture2DRectSampler_GrSLType:
67 return "sampler2DRect";
68 case kBufferSampler_GrSLType:
69 return "samplerBuffer";
70 case kBool_GrSLType:
71 return "bool";
72 case kInt_GrSLType:
73 return "int";
74 case kUint_GrSLType:
75 return "uint";
76 case kTexture2D_GrSLType:
77 return "texture2D";
78 case kSampler_GrSLType:
79 return "sampler";
80 case kImageStorage2D_GrSLType:
81 return "image2D";
82 case kIImageStorage2D_GrSLType:
83 return "iimage2D";
84 }
85 SK_ABORT("Unknown shader var type.");
86 return ""; // suppress warning
87}
88
Brian Salomon1d816b92017-08-17 11:07:59 -040089void GrGLSLAppendDefaultFloatPrecisionDeclaration(GrSLPrecision p,
90 const GrShaderCaps& shaderCaps,
91 SkString* out) {
92 if (shaderCaps.usesPrecisionModifiers()) {
93 switch (p) {
94 case kHigh_GrSLPrecision:
95 out->append("precision highp float;\n");
96 break;
97 case kMedium_GrSLPrecision:
98 out->append("precision mediump float;\n");
99 break;
100 case kLow_GrSLPrecision:
101 out->append("precision lowp float;\n");
102 break;
103 default:
104 SK_ABORT("Unknown precision value.");
105 }
106 }
107}