aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar rmistry <rmistry@google.com>2014-10-17 06:07:08 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-10-17 06:07:08 -0700
commit63a9f842a12c8ce265ca7a8c43117e2e7129ac83 (patch)
tree8b3b4982483ea2fe65d13d5523099631b48a8063 /src
parent79b2b1fb12202d22411b607a095cb26c6e4fe8b7 (diff)
Revert of Revert of Support GLSL es 3.00 (patchset #1 id:1 of https://codereview.chromium.org/661603009/)
Reason for revert: DEPS roll still failing: https://codereview.chromium.org/661993002/ Reverting the revert. Original issue's description: > Revert of Support GLSL es 3.00 (patchset #5 id:80001 of https://codereview.chromium.org/659443007/) > > Reason for revert: > Trying to fix DEPS roll failure: > https://codereview.chromium.org/660113002/ > > Link to failing builds: > http://build.chromium.org/p/tryserver.blink/builders/linux_blink_rel/builds/29578 > http://build.chromium.org/p/tryserver.blink/builders/linux_blink_dbg/builds/29354 > > Original issue's description: > > Support GLSL es 3.00 > > > > BUG=skia: > > > > Committed: https://skia.googlesource.com/skia/+/62372bcc6abe3537dac98dd9b9172cf3b85afa2b > > TBR=bsalomon@google.com,joshualitt@google.com,joshualitt@chromium.org > NOTREECHECKS=true > NOTRY=true > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/79b2b1fb12202d22411b607a095cb26c6e4fe8b7 TBR=bsalomon@google.com,joshualitt@google.com,joshualitt@chromium.org NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/647043005
Diffstat (limited to 'src')
-rw-r--r--src/gpu/gl/GrGLCaps.cpp6
-rw-r--r--src/gpu/gl/GrGLContext.cpp10
-rw-r--r--src/gpu/gl/GrGLSL.cpp24
-rw-r--r--src/gpu/gl/GrGLSL.h8
-rw-r--r--src/gpu/gl/GrGLShaderVar.h3
-rw-r--r--src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp13
6 files changed, 51 insertions, 13 deletions
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 2fe38479de..b4cfad354a 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -199,9 +199,10 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) {
// can change based on which render target is bound
fTwoFormatLimit = kGLES_GrGLStandard == standard;
+ // Frag Coords Convention support is not part of ES
// Known issue on at least some Intel platforms:
// http://code.google.com/p/skia/issues/detail?id=946
- if (kIntel_GrGLVendor != ctxInfo.vendor()) {
+ if (kIntel_GrGLVendor != ctxInfo.vendor() && kGLES_GrGLStandard != standard) {
fFragCoordsConventionSupport = ctxInfo.glslGeneration() >= k150_GrGLSLGeneration ||
ctxInfo.hasExtension("GL_ARB_fragment_coord_conventions");
}
@@ -368,7 +369,8 @@ bool GrGLCaps::init(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) {
fGeometryShaderSupport = ctxInfo.version() >= GR_GL_VER(3,2) &&
ctxInfo.glslGeneration() >= k150_GrGLSLGeneration;
} else {
- fShaderDerivativeSupport = ctxInfo.hasExtension("GL_OES_standard_derivatives");
+ fShaderDerivativeSupport = ctxInfo.version() >= GR_GL_VER(3, 0) ||
+ ctxInfo.hasExtension("GL_OES_standard_derivatives");
}
if (GrGLCaps::kES_IMG_MsToTexture_MSFBOType == fMSFBOType) {
diff --git a/src/gpu/gl/GrGLContext.cpp b/src/gpu/gl/GrGLContext.cpp
index 537363493f..fc8b195fd3 100644
--- a/src/gpu/gl/GrGLContext.cpp
+++ b/src/gpu/gl/GrGLContext.cpp
@@ -47,6 +47,16 @@ bool GrGLContextInfo::initialize(const GrGLInterface* interface) {
fVendor = GrGLGetVendor(interface);
+ /*
+ * Qualcomm drivers have a horrendous bug with some drivers. Though they claim to
+ * support GLES 3.00, some perfectly valid GLSL300 shaders will only compile with
+ * #version 100, and will fail to compile with #version 300 es. In the long term, we
+ * need to lock this down to a specific driver version.
+ */
+ if (kQualcomm_GrGLVendor == fVendor) {
+ fGLSLGeneration = k110_GrGLSLGeneration;
+ }
+
fRenderer = GrGLGetRendererFromString(renderer);
fIsMesa = GrGLIsMesaFromVersionString(ver);
diff --git a/src/gpu/gl/GrGLSL.cpp b/src/gpu/gl/GrGLSL.cpp
index 866a0d13d3..34c805e21f 100644
--- a/src/gpu/gl/GrGLSL.cpp
+++ b/src/gpu/gl/GrGLSL.cpp
@@ -18,7 +18,9 @@ bool GrGetGLSLGeneration(const GrGLInterface* gl, GrGLSLGeneration* generation)
switch (gl->fStandard) {
case kGL_GrGLStandard:
SkASSERT(ver >= GR_GLSL_VER(1,10));
- if (ver >= GR_GLSL_VER(1,50)) {
+ if (ver >= GR_GLSL_VER(3,30)) {
+ *generation = k330_GrGLSLGeneration;
+ } else if (ver >= GR_GLSL_VER(1,50)) {
*generation = k150_GrGLSLGeneration;
} else if (ver >= GR_GLSL_VER(1,40)) {
*generation = k140_GrGLSLGeneration;
@@ -29,9 +31,15 @@ bool GrGetGLSLGeneration(const GrGLInterface* gl, GrGLSLGeneration* generation)
}
return true;
case kGLES_GrGLStandard:
- // version 1.00 of ES GLSL based on ver 1.20 of desktop GLSL
SkASSERT(ver >= GR_GL_VER(1,00));
- *generation = k110_GrGLSLGeneration;
+ if (ver >= GR_GLSL_VER(3,1)) {
+ *generation = k310es_GrGLSLGeneration;
+ }
+ else if (ver >= GR_GLSL_VER(3,0)) {
+ *generation = k330_GrGLSLGeneration;
+ } else {
+ *generation = k110_GrGLSLGeneration;
+ }
return true;
default:
SkFAIL("Unknown GL Standard");
@@ -63,6 +71,16 @@ const char* GrGetGLSLVersionDecl(const GrGLContextInfo& info) {
} else {
return "#version 150 compatibility\n";
}
+ case k330_GrGLSLGeneration:
+ if (kGLES_GrGLStandard == info.standard()) {
+ return "#version 300 es\n";
+ } else {
+ SkASSERT(kGL_GrGLStandard == info.standard());
+ return "#version 330 compatibility\n";
+ }
+ case k310es_GrGLSLGeneration:
+ SkASSERT(kGLES_GrGLStandard == info.standard());
+ return "#version 310 es\n";
default:
SkFAIL("Unknown GL version.");
return ""; // suppress warning
diff --git a/src/gpu/gl/GrGLSL.h b/src/gpu/gl/GrGLSL.h
index 3cbce9c546..b031a40a61 100644
--- a/src/gpu/gl/GrGLSL.h
+++ b/src/gpu/gl/GrGLSL.h
@@ -35,6 +35,14 @@ enum GrGLSLGeneration {
* Desktop GLSL 1.50
*/
k150_GrGLSLGeneration,
+ /**
+ * Desktop GLSL 3.30, and ES GLSL 3.00
+ */
+ k330_GrGLSLGeneration,
+ /**
+ * ES GLSL 3.10 only TODO Make GLSLCap objects to make this more granular
+ */
+ k310es_GrGLSLGeneration,
};
/**
diff --git a/src/gpu/gl/GrGLShaderVar.h b/src/gpu/gl/GrGLShaderVar.h
index 8e7e36e232..c7514f55bc 100644
--- a/src/gpu/gl/GrGLShaderVar.h
+++ b/src/gpu/gl/GrGLShaderVar.h
@@ -159,8 +159,7 @@ public:
out->append("layout(origin_upper_left) ");
}
if (this->getTypeModifier() != kNone_TypeModifier) {
- out->append(TypeModifierString(this->getTypeModifier(),
- ctxInfo.glslGeneration()));
+ out->append(TypeModifierString(this->getTypeModifier(), ctxInfo.glslGeneration()));
out->append(" ");
}
out->append(PrecisionString(fPrecision, ctxInfo.standard()));
diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp
index 488d07b8db..5d5741ef9b 100644
--- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp
+++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp
@@ -42,8 +42,7 @@ static void append_default_precision_qualifier(GrGLShaderVar::Precision p,
}
GrGLFragmentShaderBuilder::DstReadKey
-GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstCopy,
- const GrGLCaps& caps) {
+GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps& caps) {
uint32_t key = kYesDstRead_DstReadKeyBit;
if (caps.fbFetchSupport()) {
return key;
@@ -61,8 +60,7 @@ GrGLFragmentShaderBuilder::KeyForDstRead(const GrTexture* dstCopy,
}
GrGLFragmentShaderBuilder::FragPosKey
-GrGLFragmentShaderBuilder::KeyForFragmentPosition(const GrRenderTarget* dst,
- const GrGLCaps&) {
+GrGLFragmentShaderBuilder::KeyForFragmentPosition(const GrRenderTarget* dst, const GrGLCaps&) {
if (kTopLeft_GrSurfaceOrigin == dst->origin()) {
return kTopLeftFragPosRead_FragPosKey;
} else {
@@ -88,7 +86,8 @@ bool GrGLFragmentShaderBuilder::enableFeature(GLSLFeature feature) {
if (!gpu->glCaps().shaderDerivativeSupport()) {
return false;
}
- if (kGLES_GrGLStandard == gpu->glStandard()) {
+ if (kGLES_GrGLStandard == gpu->glStandard() &&
+ k110_GrGLSLGeneration == gpu->glslGeneration()) {
this->addFeature(1 << kStandardDerivatives_GLSLFeature,
"GL_OES_standard_derivatives");
}
@@ -326,7 +325,9 @@ bool GrGLFragmentShaderBuilder::compileAndAttachShaders(GrGLuint programId,
}
void GrGLFragmentShaderBuilder::bindFragmentShaderLocations(GrGLuint programID) {
- if (fHasCustomColorOutput) {
+ // ES 3.00 requires custom color output but doesn't support bindFragDataLocation
+ if (fHasCustomColorOutput &&
+ kGLES_GrGLStandard != fProgramBuilder->gpu()->ctxInfo().standard()) {
GL_CALL(BindFragDataLocation(programID, 0, declared_color_output_name()));
}
if (fHasSecondaryOutput) {