| OLD | NEW |
| 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 /** | 80 /** |
| 81 * Sets as a non-array. | 81 * Sets as a non-array. |
| 82 */ | 82 */ |
| 83 void set(GrSLType type, | 83 void set(GrSLType type, |
| 84 TypeModifier typeModifier, | 84 TypeModifier typeModifier, |
| 85 const SkString& name, | 85 const SkString& name, |
| 86 GrSLPrecision precision = kDefault_GrSLPrecision, | 86 GrSLPrecision precision = kDefault_GrSLPrecision, |
| 87 Origin origin = kDefault_Origin, | 87 Origin origin = kDefault_Origin, |
| 88 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { | 88 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| 89 SkASSERT(kVoid_GrSLType != type); | 89 SkASSERT(kVoid_GrSLType != type); |
| 90 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type
)); | 90 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type))
; |
| 91 INHERITED::set(type, name, typeModifier, precision); | 91 INHERITED::set(type, name, typeModifier, precision); |
| 92 fOrigin = origin; | 92 fOrigin = origin; |
| 93 fUseUniformFloatArrays = useUniformFloatArrays; | 93 fUseUniformFloatArrays = useUniformFloatArrays; |
| 94 } | 94 } |
| 95 | 95 |
| 96 /** | 96 /** |
| 97 * Sets as a non-array. | 97 * Sets as a non-array. |
| 98 */ | 98 */ |
| 99 void set(GrSLType type, | 99 void set(GrSLType type, |
| 100 TypeModifier typeModifier, | 100 TypeModifier typeModifier, |
| 101 const char* name, | 101 const char* name, |
| 102 GrSLPrecision precision = kDefault_GrSLPrecision, | 102 GrSLPrecision precision = kDefault_GrSLPrecision, |
| 103 Origin origin = kDefault_Origin, | 103 Origin origin = kDefault_Origin, |
| 104 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { | 104 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| 105 SkASSERT(kVoid_GrSLType != type); | 105 SkASSERT(kVoid_GrSLType != type); |
| 106 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type
)); | 106 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type))
; |
| 107 INHERITED::set(type, name, typeModifier, precision); | 107 INHERITED::set(type, name, typeModifier, precision); |
| 108 fOrigin = origin; | 108 fOrigin = origin; |
| 109 fUseUniformFloatArrays = useUniformFloatArrays; | 109 fUseUniformFloatArrays = useUniformFloatArrays; |
| 110 } | 110 } |
| 111 | 111 |
| 112 /** | 112 /** |
| 113 * Set all var options | 113 * Set all var options |
| 114 */ | 114 */ |
| 115 void set(GrSLType type, | 115 void set(GrSLType type, |
| 116 TypeModifier typeModifier, | 116 TypeModifier typeModifier, |
| 117 const SkString& name, | 117 const SkString& name, |
| 118 int count, | 118 int count, |
| 119 GrSLPrecision precision = kDefault_GrSLPrecision, | 119 GrSLPrecision precision = kDefault_GrSLPrecision, |
| 120 Origin origin = kDefault_Origin, | 120 Origin origin = kDefault_Origin, |
| 121 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { | 121 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| 122 SkASSERT(kVoid_GrSLType != type); | 122 SkASSERT(kVoid_GrSLType != type); |
| 123 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type
)); | 123 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type))
; |
| 124 INHERITED::set(type, name, typeModifier, precision, count); | 124 INHERITED::set(type, name, typeModifier, precision, count); |
| 125 fOrigin = origin; | 125 fOrigin = origin; |
| 126 fUseUniformFloatArrays = useUniformFloatArrays; | 126 fUseUniformFloatArrays = useUniformFloatArrays; |
| 127 } | 127 } |
| 128 | 128 |
| 129 /** | 129 /** |
| 130 * Set all var options | 130 * Set all var options |
| 131 */ | 131 */ |
| 132 void set(GrSLType type, | 132 void set(GrSLType type, |
| 133 TypeModifier typeModifier, | 133 TypeModifier typeModifier, |
| 134 const char* name, | 134 const char* name, |
| 135 int count, | 135 int count, |
| 136 GrSLPrecision precision = kDefault_GrSLPrecision, | 136 GrSLPrecision precision = kDefault_GrSLPrecision, |
| 137 Origin origin = kDefault_Origin, | 137 Origin origin = kDefault_Origin, |
| 138 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { | 138 bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| 139 SkASSERT(kVoid_GrSLType != type); | 139 SkASSERT(kVoid_GrSLType != type); |
| 140 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type
)); | 140 SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type))
; |
| 141 INHERITED::set(type, name, typeModifier, precision, count); | 141 INHERITED::set(type, name, typeModifier, precision, count); |
| 142 fOrigin = origin; | 142 fOrigin = origin; |
| 143 fUseUniformFloatArrays = useUniformFloatArrays; | 143 fUseUniformFloatArrays = useUniformFloatArrays; |
| 144 } | 144 } |
| 145 | 145 |
| 146 /** | 146 /** |
| 147 * Get the origin of the var | 147 * Get the origin of the var |
| 148 */ | 148 */ |
| 149 Origin getOrigin() const { return fOrigin; } | 149 Origin getOrigin() const { return fOrigin; } |
| 150 | 150 |
| 151 /** | 151 /** |
| 152 * Set the origin of the var | 152 * Set the origin of the var |
| 153 */ | 153 */ |
| 154 void setOrigin(Origin origin) { fOrigin = origin; } | 154 void setOrigin(Origin origin) { fOrigin = origin; } |
| 155 | 155 |
| 156 /** | 156 /** |
| 157 * Write a declaration of this variable to out. | 157 * Write a declaration of this variable to out. |
| 158 */ | 158 */ |
| 159 void appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const { | 159 void appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const { |
| 160 SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeIsFloatType(fTy
pe)); | 160 SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeIsNumeric(fType
)); |
| 161 if (kUpperLeft_Origin == fOrigin) { | 161 if (kUpperLeft_Origin == fOrigin) { |
| 162 // this is the only place where we specify a layout modifier. If we
use other layout | 162 // this is the only place where we specify a layout modifier. If we
use other layout |
| 163 // modifiers in the future then they should be placed in a list. | 163 // modifiers in the future then they should be placed in a list. |
| 164 out->append("layout(origin_upper_left) "); | 164 out->append("layout(origin_upper_left) "); |
| 165 } | 165 } |
| 166 if (this->getTypeModifier() != kNone_TypeModifier) { | 166 if (this->getTypeModifier() != kNone_TypeModifier) { |
| 167 out->append(TypeModifierString(glslCaps, this->getTypeModifier())); | 167 if (fType == kInt_GrSLType && (this->getTypeModifier() == kVaryingIn
_TypeModifier || |
| 168 out->append(" "); | 168 this->getTypeModifier() == kVaryingOu
t_TypeModifier)) { |
| 169 out->append("flat "); |
| 170 } |
| 171 out->append(TypeModifierString(glslCaps, this->getTypeModifier())); |
| 172 out->append(" "); |
| 169 } | 173 } |
| 170 out->append(PrecisionString(glslCaps, fPrecision)); | |
| 171 GrSLType effectiveType = this->getType(); | 174 GrSLType effectiveType = this->getType(); |
| 175 if (effectiveType != kBool_GrSLType) { |
| 176 out->append(PrecisionString(glslCaps, fPrecision)); |
| 177 } |
| 172 if (this->isArray()) { | 178 if (this->isArray()) { |
| 173 if (this->isUnsizedArray()) { | 179 if (this->isUnsizedArray()) { |
| 174 out->appendf("%s %s[]", | 180 out->appendf("%s %s[]", |
| 175 GrGLSLTypeString(effectiveType), | 181 GrGLSLTypeString(effectiveType), |
| 176 this->getName().c_str()); | 182 this->getName().c_str()); |
| 177 } else { | 183 } else { |
| 178 SkASSERT(this->getArrayCount() > 0); | 184 SkASSERT(this->getArrayCount() > 0); |
| 179 out->appendf("%s %s[%d]", | 185 out->appendf("%s %s[%d]", |
| 180 GrGLSLTypeString(effectiveType), | 186 GrGLSLTypeString(effectiveType), |
| 181 this->getName().c_str(), | 187 this->getName().c_str(), |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 | 253 |
| 248 Origin fOrigin; | 254 Origin fOrigin; |
| 249 /// Work around driver bugs on some hardware that don't correctly | 255 /// Work around driver bugs on some hardware that don't correctly |
| 250 /// support uniform float [] | 256 /// support uniform float [] |
| 251 bool fUseUniformFloatArrays; | 257 bool fUseUniformFloatArrays; |
| 252 | 258 |
| 253 typedef GrShaderVar INHERITED; | 259 typedef GrShaderVar INHERITED; |
| 254 }; | 260 }; |
| 255 | 261 |
| 256 #endif | 262 #endif |
| OLD | NEW |