From ae47418936933c9dd7f4be93fab7c3a42d7a7bd9 Mon Sep 17 00:00:00 2001 From: egdaniel Date: Thu, 21 Jan 2016 11:19:52 -0800 Subject: [PATCH] Add ability to add general layout qualifiers GrGLSLShaderVar BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1610853002 Review URL: https://codereview.chromium.org/1610853002 --- src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp | 2 +- src/gpu/glsl/GrGLSLShaderVar.h | 49 +++++++--------------------- 2 files changed, 13 insertions(+), 38 deletions(-) diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp index 54e0b7f..90e2043 100644 --- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp +++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp @@ -129,7 +129,7 @@ const char* GrGLSLFragmentShaderBuilder::fragmentPosition() { GrGLSLShaderVar::kIn_TypeModifier, "gl_FragCoord", kDefault_GrSLPrecision, - GrGLSLShaderVar::kUpperLeft_Origin); + "origin_upper_left"); fSetupFragPosition = true; } return "gl_FragCoord"; diff --git a/src/gpu/glsl/GrGLSLShaderVar.h b/src/gpu/glsl/GrGLSLShaderVar.h index a8b2c9b..a8a9a47 100644 --- a/src/gpu/glsl/GrGLSLShaderVar.h +++ b/src/gpu/glsl/GrGLSLShaderVar.h @@ -20,43 +20,30 @@ class GrGLSLShaderVar : public GrShaderVar { public: /** - * See GL_ARB_fragment_coord_conventions. - */ - enum Origin { - kDefault_Origin, // when set to kDefault the origin field is ignored. - kUpperLeft_Origin, // only used to declare vec4 in gl_FragCoord. - }; - - /** * Defaults to a float with no precision specifier */ GrGLSLShaderVar() : GrShaderVar() - , fOrigin(kDefault_Origin) , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS) { } GrGLSLShaderVar(const char* name, GrSLType type, int arrayCount = kNonArray, GrSLPrecision precision = kDefault_GrSLPrecision) : GrShaderVar(name, type, arrayCount, precision) - , fOrigin(kDefault_Origin) , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS) { SkASSERT(kVoid_GrSLType != type); - fOrigin = kDefault_Origin; fUseUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS; } GrGLSLShaderVar(const char* name, GrSLType type, TypeModifier typeModifier, int arrayCount = kNonArray, GrSLPrecision precision = kDefault_GrSLPrecision) : GrShaderVar(name, type, typeModifier, arrayCount, precision) - , fOrigin(kDefault_Origin) , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS) { SkASSERT(kVoid_GrSLType != type); } GrGLSLShaderVar(const GrShaderVar& var) : GrShaderVar(var) - , fOrigin(kDefault_Origin) , fUseUniformFloatArrays(USE_UNIFORM_FLOAT_ARRAYS) { SkASSERT(kVoid_GrSLType != var.getType()); } @@ -64,7 +51,6 @@ public: GrGLSLShaderVar(const GrGLSLShaderVar& var) : GrShaderVar(var.c_str(), var.getType(), var.getTypeModifier(), var.getArrayCount(), var.getPrecision()) - , fOrigin(var.fOrigin) , fUseUniformFloatArrays(var.fUseUniformFloatArrays) { SkASSERT(kVoid_GrSLType != var.getType()); } @@ -84,12 +70,12 @@ public: TypeModifier typeModifier, const SkString& name, GrSLPrecision precision = kDefault_GrSLPrecision, - Origin origin = kDefault_Origin, + const char* layoutQualifier = nullptr, bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { SkASSERT(kVoid_GrSLType != type); SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type)); INHERITED::set(type, name, typeModifier, precision); - fOrigin = origin; + fLayoutQualifier = layoutQualifier; fUseUniformFloatArrays = useUniformFloatArrays; } @@ -100,12 +86,12 @@ public: TypeModifier typeModifier, const char* name, GrSLPrecision precision = kDefault_GrSLPrecision, - Origin origin = kDefault_Origin, + const char* layoutQualifier = nullptr, bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { SkASSERT(kVoid_GrSLType != type); SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type)); INHERITED::set(type, name, typeModifier, precision); - fOrigin = origin; + fLayoutQualifier = layoutQualifier; fUseUniformFloatArrays = useUniformFloatArrays; } @@ -117,12 +103,12 @@ public: const SkString& name, int count, GrSLPrecision precision = kDefault_GrSLPrecision, - Origin origin = kDefault_Origin, + const char* layoutQualifier = nullptr, bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { SkASSERT(kVoid_GrSLType != type); SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type)); INHERITED::set(type, name, typeModifier, precision, count); - fOrigin = origin; + fLayoutQualifier = layoutQualifier; fUseUniformFloatArrays = useUniformFloatArrays; } @@ -134,34 +120,22 @@ public: const char* name, int count, GrSLPrecision precision = kDefault_GrSLPrecision, - Origin origin = kDefault_Origin, + const char* layoutQualifier = nullptr, bool useUniformFloatArrays = USE_UNIFORM_FLOAT_ARRAYS) { SkASSERT(kVoid_GrSLType != type); SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type)); INHERITED::set(type, name, typeModifier, precision, count); - fOrigin = origin; + fLayoutQualifier = layoutQualifier; fUseUniformFloatArrays = useUniformFloatArrays; } /** - * Get the origin of the var - */ - Origin getOrigin() const { return fOrigin; } - - /** - * Set the origin of the var - */ - void setOrigin(Origin origin) { fOrigin = origin; } - - /** * Write a declaration of this variable to out. */ void appendDecl(const GrGLSLCaps* glslCaps, SkString* out) const { SkASSERT(kDefault_GrSLPrecision == fPrecision || GrSLTypeIsFloatType(fType)); - if (kUpperLeft_Origin == fOrigin) { - // this is the only place where we specify a layout modifier. If we use other layout - // modifiers in the future then they should be placed in a list. - out->append("layout(origin_upper_left) "); + if (!fLayoutQualifier.isEmpty()) { + out->appendf("layout(%s) ", fLayoutQualifier.c_str()); } if (this->getTypeModifier() != kNone_TypeModifier) { out->append(TypeModifierString(glslCaps, this->getTypeModifier())); @@ -245,11 +219,12 @@ private: } } - Origin fOrigin; /// Work around driver bugs on some hardware that don't correctly /// support uniform float [] bool fUseUniformFloatArrays; + SkString fLayoutQualifier; + typedef GrShaderVar INHERITED; }; -- 2.7.4