Chromium Code Reviews| Index: src/gpu/glsl/GrGLSLShaderVar.h |
| diff --git a/src/gpu/glsl/GrGLSLShaderVar.h b/src/gpu/glsl/GrGLSLShaderVar.h |
| index e26a75c0966794143980f48a66b7755f823bd806..c67d4822c09be26deab77c6e59f4c4e077b656a1 100644 |
| --- a/src/gpu/glsl/GrGLSLShaderVar.h |
| +++ b/src/gpu/glsl/GrGLSLShaderVar.h |
| @@ -51,7 +51,9 @@ public: |
| GrGLSLShaderVar(const GrGLSLShaderVar& var) |
| : GrShaderVar(var.c_str(), var.getType(), var.getTypeModifier(), |
| var.getArrayCount(), var.getPrecision()) |
| - , fUseUniformFloatArrays(var.fUseUniformFloatArrays) { |
| + , fUseUniformFloatArrays(var.fUseUniformFloatArrays) |
| + , fLayoutQualifier(var.fLayoutQualifier) |
| + , fExtraModifiers(var.fExtraModifiers) { |
| SkASSERT(kVoid_GrSLType != var.getType()); |
| } |
| @@ -71,11 +73,15 @@ public: |
| const SkString& name, |
| GrSLPrecision precision = kDefault_GrSLPrecision, |
| const char* layoutQualifier = nullptr, |
| + const char* extraModifiers = nullptr, |
| bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| SkASSERT(kVoid_GrSLType != type); |
| SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)); |
| INHERITED::set(type, name, typeModifier, precision); |
| fLayoutQualifier = layoutQualifier; |
| + if (extraModifiers) { |
| + fExtraModifiers.printf("%s ", extraModifiers); |
| + } |
| fUseUniformFloatArrays = useUniformFloatArrays; |
| } |
| @@ -87,11 +93,15 @@ public: |
| const char* name, |
| GrSLPrecision precision = kDefault_GrSLPrecision, |
| const char* layoutQualifier = nullptr, |
| + const char* extraModifiers = nullptr, |
| bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| SkASSERT(kVoid_GrSLType != type); |
| SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)); |
| INHERITED::set(type, name, typeModifier, precision); |
| fLayoutQualifier = layoutQualifier; |
| + if (extraModifiers) { |
| + fExtraModifiers.printf("%s ", extraModifiers); |
| + } |
| fUseUniformFloatArrays = useUniformFloatArrays; |
| } |
| @@ -104,11 +114,15 @@ public: |
| int count, |
| GrSLPrecision precision = kDefault_GrSLPrecision, |
| const char* layoutQualifier = nullptr, |
| + const char* extraModifiers = nullptr, |
| bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| SkASSERT(kVoid_GrSLType != type); |
| SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)); |
| INHERITED::set(type, name, typeModifier, precision, count); |
| fLayoutQualifier = layoutQualifier; |
| + if (extraModifiers) { |
| + fExtraModifiers.printf("%s ", extraModifiers); |
| + } |
| fUseUniformFloatArrays = useUniformFloatArrays; |
| } |
| @@ -121,11 +135,15 @@ public: |
| int count, |
| GrSLPrecision precision = kDefault_GrSLPrecision, |
| const char* layoutQualifier = nullptr, |
| + const char* extraModifiers = nullptr, |
| bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { |
| SkASSERT(kVoid_GrSLType != type); |
| SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)); |
| INHERITED::set(type, name, typeModifier, precision, count); |
| fLayoutQualifier = layoutQualifier; |
| + if (extraModifiers) { |
| + fExtraModifiers.printf("%s ", extraModifiers); |
| + } |
| fUseUniformFloatArrays = useUniformFloatArrays; |
| } |
| @@ -136,6 +154,10 @@ public: |
| fLayoutQualifier = layoutQualifier; |
| } |
| + void addModifier(const char* modifier) { |
| + fExtraModifiers.appendf("%s ", modifier); |
|
egdaniel
2016/02/12 03:55:07
to be safe should be have a null check around this
Chris Dalton
2016/02/12 16:25:28
Done.
|
| + } |
| + |
| /** |
| * Write a declaration of this variable to out. |
| */ |
| @@ -144,11 +166,8 @@ public: |
| if (!fLayoutQualifier.isEmpty()) { |
| out->appendf("layout(%s) ", fLayoutQualifier.c_str()); |
| } |
| + out->append(fExtraModifiers); |
| if (this->getTypeModifier() != kNone_TypeModifier) { |
| - if (GrSLTypeIsIntType(fType) && (this->getTypeModifier() == kVaryingIn_TypeModifier || |
| - this->getTypeModifier() == kVaryingOut_TypeModifier)) { |
| - out->append("flat "); |
| - } |
| out->append(TypeModifierString(glslCaps, this->getTypeModifier())); |
| out->append(" "); |
| } |
| @@ -234,9 +253,10 @@ private: |
| /// Work around driver bugs on some hardware that don't correctly |
| /// support uniform float [] |
| - bool fUseUniformFloatArrays; |
| + bool fUseUniformFloatArrays; |
| - SkString fLayoutQualifier; |
| + SkString fLayoutQualifier; |
| + SkString fExtraModifiers; |
| typedef GrShaderVar INHERITED; |
| }; |