| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 }; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 fUseUniformFloatArrays = useUniformFloatArrays; | 131 fUseUniformFloatArrays = useUniformFloatArrays; |
| 130 } | 132 } |
| 131 | 133 |
| 132 /** | 134 /** |
| 133 * Set the layout qualifier | 135 * Set the layout qualifier |
| 134 */ | 136 */ |
| 135 void setLayoutQualifier(const char* layoutQualifier) { | 137 void setLayoutQualifier(const char* layoutQualifier) { |
| 136 fLayoutQualifier = layoutQualifier; | 138 fLayoutQualifier = layoutQualifier; |
| 137 } | 139 } |
| 138 | 140 |
| 141 void addModifier(const char* modifier) { |
| 142 fExtraModifiers.appendf("%s ", modifier); |
| 143 } |
| 144 |
| 139 /** | 145 /** |
| 140 * Write a declaration of this variable to out. | 146 * Write a declaration of this variable to out. |
| 141 */ | 147 */ |
| 142 void appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const { | 148 void appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const { |
| 143 SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeIsNumeric(fType
)); | 149 SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeIsNumeric(fType
)); |
| 144 if (!fLayoutQualifier.isEmpty()) { | 150 if (!fLayoutQualifier.isEmpty()) { |
| 145 out->appendf("layout(%s) ", fLayoutQualifier.c_str()); | 151 out->appendf("layout(%s) ", fLayoutQualifier.c_str()); |
| 146 } | 152 } |
| 153 out->append(fExtraModifiers); |
| 147 if (this->getTypeModifier() != kNone_TypeModifier) { | 154 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())); | 155 out->append(TypeModifierString(glslCaps, this->getTypeModifier())); |
| 153 out->append(" "); | 156 out->append(" "); |
| 154 } | 157 } |
| 155 GrSLType effectiveType = this->getType(); | 158 GrSLType effectiveType = this->getType(); |
| 156 if (effectiveType != kBool_GrSLType) { | 159 if (effectiveType != kBool_GrSLType) { |
| 157 out->append(PrecisionString(glslCaps, fPrecision)); | 160 out->append(PrecisionString(glslCaps, fPrecision)); |
| 158 } | 161 } |
| 159 if (this->isArray()) { | 162 if (this->isArray()) { |
| 160 if (this->isUnsizedArray()) { | 163 if (this->isUnsizedArray()) { |
| 161 out->appendf("%s %s[]", | 164 out->appendf("%s %s[]", |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 case kVaryingOut_TypeModifier: | 230 case kVaryingOut_TypeModifier: |
| 228 return k110_GrGLSLGeneration == gen ? "varying" : "out"; | 231 return k110_GrGLSLGeneration == gen ? "varying" : "out"; |
| 229 default: | 232 default: |
| 230 SkFAIL("Unknown shader variable type modifier."); | 233 SkFAIL("Unknown shader variable type modifier."); |
| 231 return ""; // suppress warning | 234 return ""; // suppress warning |
| 232 } | 235 } |
| 233 } | 236 } |
| 234 | 237 |
| 235 /// Work around driver bugs on some hardware that don't correctly | 238 /// Work around driver bugs on some hardware that don't correctly |
| 236 /// support uniform float [] | 239 /// support uniform float [] |
| 237 bool fUseUniformFloatArrays; | 240 bool fUseUniformFloatArrays; |
| 238 | 241 |
| 239 SkString fLayoutQualifier; | 242 SkString fLayoutQualifier; |
| 243 SkString fExtraModifiers; |
| 240 | 244 |
| 241 typedef GrShaderVar INHERITED; | 245 typedef GrShaderVar INHERITED; |
| 242 }; | 246 }; |
| 243 | 247 |
| 244 #endif | 248 #endif |
| OLD | NEW |