Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Side by Side Diff: src/gpu/glsl/GrGLSLShaderVar.h

Issue 1673093002: Use noperspective interpolation for 2D draws (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fName -> fVsOut Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/glsl/GrGLSLShaderBuilder.h ('k') | src/gpu/glsl/GrGLSLVarying.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrGLSLShaderVar_DEFINED 8 #ifndef GrGLSLShaderVar_DEFINED
9 #define GrGLSLShaderVar_DEFINED 9 #define GrGLSLShaderVar_DEFINED
10 10
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 GrGLSLShaderVar(const GrShaderVar& var) 45 GrGLSLShaderVar(const GrShaderVar& var)
46 : GrShaderVar(var) 46 : GrShaderVar(var)
47 , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS) { 47 , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS) {
48 SkASSERT(kVoid_GrSLType != var.getType()); 48 SkASSERT(kVoid_GrSLType != var.getType());
49 } 49 }
50 50
51 GrGLSLShaderVar(const GrGLSLShaderVar& var) 51 GrGLSLShaderVar(const GrGLSLShaderVar& var)
52 : GrShaderVar(var.c_str(), var.getType(), var.getTypeModifier(), 52 : GrShaderVar(var.c_str(), var.getType(), var.getTypeModifier(),
53 var.getArrayCount(), var.getPrecision()) 53 var.getArrayCount(), var.getPrecision())
54 , fUseUniformFloatArrays(var.fUseUniformFloatArrays) { 54 , fUseUniformFloatArrays(var.fUseUniformFloatArrays)
55 , fLayoutQualifier(var.fLayoutQualifier)
56 , fExtraModifiers(var.fExtraModifiers) {
55 SkASSERT(kVoid_GrSLType != var.getType()); 57 SkASSERT(kVoid_GrSLType != var.getType());
56 } 58 }
57 59
58 /** 60 /**
59 * Values for array count that have special meaning. We allow 1-sized arrays . 61 * Values for array count that have special meaning. We allow 1-sized arrays .
60 */ 62 */
61 enum { 63 enum {
62 kNonArray = 0, // not an array 64 kNonArray = 0, // not an array
63 kUnsizedArray = -1, // an unsized array (declared with []) 65 kUnsizedArray = -1, // an unsized array (declared with [])
64 }; 66 };
65 67
66 /** 68 /**
67 * Sets as a non-array. 69 * Sets as a non-array.
68 */ 70 */
69 void set(GrSLType type, 71 void set(GrSLType type,
70 TypeModifier typeModifier, 72 TypeModifier typeModifier,
71 const SkString& name, 73 const SkString& name,
72 GrSLPrecision precision = kDefault_GrSLPrecision, 74 GrSLPrecision precision = kDefault_GrSLPrecision,
73 const char* layoutQualifier = nullptr, 75 const char* layoutQualifier = nullptr,
76 const char* extraModifiers = nullptr,
74 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { 77 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
75 SkASSERT(kVoid_GrSLType != type); 78 SkASSERT(kVoid_GrSLType != type);
76 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ; 79 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ;
77 INHERITED::set(type, name, typeModifier, precision); 80 INHERITED::set(type, name, typeModifier, precision);
78 fLayoutQualifier = layoutQualifier; 81 fLayoutQualifier = layoutQualifier;
82 if (extraModifiers) {
83 fExtraModifiers.printf("%s ", extraModifiers);
84 }
79 fUseUniformFloatArrays = useUniformFloatArrays; 85 fUseUniformFloatArrays = useUniformFloatArrays;
80 } 86 }
81 87
82 /** 88 /**
83 * Sets as a non-array. 89 * Sets as a non-array.
84 */ 90 */
85 void set(GrSLType type, 91 void set(GrSLType type,
86 TypeModifier typeModifier, 92 TypeModifier typeModifier,
87 const char* name, 93 const char* name,
88 GrSLPrecision precision = kDefault_GrSLPrecision, 94 GrSLPrecision precision = kDefault_GrSLPrecision,
89 const char* layoutQualifier = nullptr, 95 const char* layoutQualifier = nullptr,
96 const char* extraModifiers = nullptr,
90 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { 97 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
91 SkASSERT(kVoid_GrSLType != type); 98 SkASSERT(kVoid_GrSLType != type);
92 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ; 99 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ;
93 INHERITED::set(type, name, typeModifier, precision); 100 INHERITED::set(type, name, typeModifier, precision);
94 fLayoutQualifier = layoutQualifier; 101 fLayoutQualifier = layoutQualifier;
102 if (extraModifiers) {
103 fExtraModifiers.printf("%s ", extraModifiers);
104 }
95 fUseUniformFloatArrays = useUniformFloatArrays; 105 fUseUniformFloatArrays = useUniformFloatArrays;
96 } 106 }
97 107
98 /** 108 /**
99 * Set all var options 109 * Set all var options
100 */ 110 */
101 void set(GrSLType type, 111 void set(GrSLType type,
102 TypeModifier typeModifier, 112 TypeModifier typeModifier,
103 const SkString& name, 113 const SkString& name,
104 int count, 114 int count,
105 GrSLPrecision precision = kDefault_GrSLPrecision, 115 GrSLPrecision precision = kDefault_GrSLPrecision,
106 const char* layoutQualifier = nullptr, 116 const char* layoutQualifier = nullptr,
117 const char* extraModifiers = nullptr,
107 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { 118 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
108 SkASSERT(kVoid_GrSLType != type); 119 SkASSERT(kVoid_GrSLType != type);
109 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ; 120 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ;
110 INHERITED::set(type, name, typeModifier, precision, count); 121 INHERITED::set(type, name, typeModifier, precision, count);
111 fLayoutQualifier = layoutQualifier; 122 fLayoutQualifier = layoutQualifier;
123 if (extraModifiers) {
124 fExtraModifiers.printf("%s ", extraModifiers);
125 }
112 fUseUniformFloatArrays = useUniformFloatArrays; 126 fUseUniformFloatArrays = useUniformFloatArrays;
113 } 127 }
114 128
115 /** 129 /**
116 * Set all var options 130 * Set all var options
117 */ 131 */
118 void set(GrSLType type, 132 void set(GrSLType type,
119 TypeModifier typeModifier, 133 TypeModifier typeModifier,
120 const char* name, 134 const char* name,
121 int count, 135 int count,
122 GrSLPrecision precision = kDefault_GrSLPrecision, 136 GrSLPrecision precision = kDefault_GrSLPrecision,
123 const char* layoutQualifier = nullptr, 137 const char* layoutQualifier = nullptr,
138 const char* extraModifiers = nullptr,
124 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { 139 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) {
125 SkASSERT(kVoid_GrSLType != type); 140 SkASSERT(kVoid_GrSLType != type);
126 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ; 141 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)) ;
127 INHERITED::set(type, name, typeModifier, precision, count); 142 INHERITED::set(type, name, typeModifier, precision, count);
128 fLayoutQualifier = layoutQualifier; 143 fLayoutQualifier = layoutQualifier;
144 if (extraModifiers) {
145 fExtraModifiers.printf("%s ", extraModifiers);
146 }
129 fUseUniformFloatArrays = useUniformFloatArrays; 147 fUseUniformFloatArrays = useUniformFloatArrays;
130 } 148 }
131 149
132 /** 150 /**
133 * Set the layout qualifier 151 * Set the layout qualifier
134 */ 152 */
135 void setLayoutQualifier(const char* layoutQualifier) { 153 void setLayoutQualifier(const char* layoutQualifier) {
136 fLayoutQualifier = layoutQualifier; 154 fLayoutQualifier = layoutQualifier;
137 } 155 }
138 156
157 void addModifier(const char* modifier) {
158 if (modifier) {
159 fExtraModifiers.appendf("%s ", modifier);
160 }
161 }
162
139 /** 163 /**
140 * Write a declaration of this variable to out. 164 * Write a declaration of this variable to out.
141 */ 165 */
142 void appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const { 166 void appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const {
143 SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeIsNumeric(fType )); 167 SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeIsNumeric(fType ));
144 if (!fLayoutQualifier.isEmpty()) { 168 if (!fLayoutQualifier.isEmpty()) {
145 out->appendf("layout(%s) ", fLayoutQualifier.c_str()); 169 out->appendf("layout(%s) ", fLayoutQualifier.c_str());
146 } 170 }
171 out->append(fExtraModifiers);
147 if (this->getTypeModifier() != kNone_TypeModifier) { 172 if (this->getTypeModifier() != kNone_TypeModifier) {
148 if (GrSLTypeIsIntType(fType) && (this->getTypeModifier() == kVarying In_TypeModifier ||
149 this->getTypeModifier() == kVarying Out_TypeModifier)) {
150 out->append("flat ");
151 }
152 out->append(TypeModifierString(glslCaps, this->getTypeModifier())); 173 out->append(TypeModifierString(glslCaps, this->getTypeModifier()));
153 out->append(" "); 174 out->append(" ");
154 } 175 }
155 GrSLType effectiveType = this->getType(); 176 GrSLType effectiveType = this->getType();
156 if (effectiveType != kBool_GrSLType) { 177 if (effectiveType != kBool_GrSLType) {
157 out->append(PrecisionString(glslCaps, fPrecision)); 178 out->append(PrecisionString(glslCaps, fPrecision));
158 } 179 }
159 if (this->isArray()) { 180 if (this->isArray()) {
160 if (this->isUnsizedArray()) { 181 if (this->isUnsizedArray()) {
161 out->appendf("%s %s[]", 182 out->appendf("%s %s[]",
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 case kVaryingOut_TypeModifier: 248 case kVaryingOut_TypeModifier:
228 return k110_GrGLSLGeneration == gen ? "varying" : "out"; 249 return k110_GrGLSLGeneration == gen ? "varying" : "out";
229 default: 250 default:
230 SkFAIL("Unknown shader variable type modifier."); 251 SkFAIL("Unknown shader variable type modifier.");
231 return ""; // suppress warning 252 return ""; // suppress warning
232 } 253 }
233 } 254 }
234 255
235 /// Work around driver bugs on some hardware that don't correctly 256 /// Work around driver bugs on some hardware that don't correctly
236 /// support uniform float [] 257 /// support uniform float []
237 bool fUseUniformFloatArrays; 258 bool fUseUniformFloatArrays;
238 259
239 SkString fLayoutQualifier; 260 SkString fLayoutQualifier;
261 SkString fExtraModifiers;
240 262
241 typedef GrShaderVar INHERITED; 263 typedef GrShaderVar INHERITED;
242 }; 264 };
243 265
244 #endif 266 #endif
OLDNEW
« no previous file with comments | « src/gpu/glsl/GrGLSLShaderBuilder.h ('k') | src/gpu/glsl/GrGLSLVarying.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698