diff options
author | 2018-03-28 17:35:00 -0600 | |
---|---|---|
committer | 2018-03-29 13:23:35 +0000 | |
commit | 0090ef6a837f339ecc8b1d5e1e50697fbcd2e76a (patch) | |
tree | fe176963cb50c413c75d23580ea63cff56bdc6ec /src/gpu/gl/GrGLUtil.cpp | |
parent | f2590303b73b5fda90bf3873f380ba1739ca861c (diff) |
Don't use gl_FragCoord on legacy Tegra hardware
Bug: skia:7413
Bug: skia:7757
Change-Id: I588c49409fd630f4c15546d8be64fb46c87db3c3
Reviewed-on: https://skia-review.googlesource.com/117007
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu/gl/GrGLUtil.cpp')
-rw-r--r-- | src/gpu/gl/GrGLUtil.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp index 3de894db82..985bd4e304 100644 --- a/src/gpu/gl/GrGLUtil.cpp +++ b/src/gpu/gl/GrGLUtil.cpp @@ -284,12 +284,15 @@ static bool is_renderer_angle(const char* rendererString) { return 0 == strncmp(rendererString, kHeader, kHeaderLength); } -GrGLRenderer GrGLGetRendererFromString(const char* rendererString) { +GrGLRenderer GrGLGetRendererFromStrings(const char* rendererString, const char* extensionString) { if (rendererString) { - if (0 == strcmp(rendererString, "NVIDIA Tegra 3")) { - return kTegra3_GrGLRenderer; - } else if (0 == strcmp(rendererString, "NVIDIA Tegra")) { - return kTegra2_GrGLRenderer; + static const char kTegraStr[] = "NVIDIA Tegra"; + if (0 == strncmp(rendererString, kTegraStr, SK_ARRAY_COUNT(kTegraStr) - 1)) { + // Tegra strings are not very descriptive. We distinguish between the modern and legacy + // architectures by the presence of NV_path_rendering. + return (extensionString && strstr(extensionString, "GL_NV_path_rendering")) + ? kTegra_GrGLRenderer + : kTegra_PreK1_GrGLRenderer; } int lastDigit; int n = sscanf(rendererString, "PowerVR SGX 54%d", &lastDigit); @@ -462,9 +465,13 @@ GrGLVendor GrGLGetVendor(const GrGLInterface* gl) { } GrGLRenderer GrGLGetRenderer(const GrGLInterface* gl) { - const GrGLubyte* v; - GR_GL_CALL_RET(gl, v, GetString(GR_GL_RENDERER)); - return GrGLGetRendererFromString((const char*) v); + const GrGLubyte* rendererString; + GR_GL_CALL_RET(gl, rendererString, GetString(GR_GL_RENDERER)); + + const GrGLubyte* extensionString; + GR_GL_CALL_RET(gl, extensionString, GetString(GR_GL_EXTENSIONS)); + + return GrGLGetRendererFromStrings((const char*) rendererString, (const char*) extensionString); } GrGLenum GrToGLStencilFunc(GrStencilTest test) { |