diff options
author | 2018-01-18 15:06:50 -0700 | |
---|---|---|
committer | 2018-01-19 17:38:03 +0000 | |
commit | 0a94e4cc1073daf3bb3cd8d92fc3d8c62bdb35f3 (patch) | |
tree | b2bd4ebd5cb9df51f57b938f27b7181636c658dd /src/gpu/gl | |
parent | e3429e62b0d020b27de3daa55893953eff581c4f (diff) |
ccpr: Blacklist vertex shaders on ANGLE/Skylake
Bug: skia:
Change-Id: I9834fd6b819397c52f04bbd20aee5ab03944ebea
Reviewed-on: https://skia-review.googlesource.com/96944
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu/gl')
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 7 | ||||
-rw-r--r-- | src/gpu/gl/GrGLUtil.cpp | 34 | ||||
-rw-r--r-- | src/gpu/gl/GrGLUtil.h | 5 |
3 files changed, 41 insertions, 5 deletions
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index f2d3de5a6d..f7eab7b457 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -716,6 +716,13 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, this->applyOptionsOverrides(contextOptions); shaderCaps->applyOptionsOverrides(contextOptions); + + // After applying overrides, check for geometry shader support on ANGLE/Skylake. The ccpr + // vertex-shader implementation does not work on this platform. + if (kANGLE_GrGLRenderer == ctxInfo.renderer() && + GrGLANGLERenderer::kSkylake == ctxInfo.angleRenderer()) { + fBlacklistCoverageCounting = !fShaderCaps->geometryShaderSupport(); + } } const char* get_glsl_version_decl_string(GrGLStandard standard, GrGLSLGeneration generation, diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp index 5f1d6519d7..179c4acdb8 100644 --- a/src/gpu/gl/GrGLUtil.cpp +++ b/src/gpu/gl/GrGLUtil.cpp @@ -397,9 +397,37 @@ void GrGLGetANGLEInfoFromString(const char* rendererString, GrGLANGLEBackend* ba } if (strstr(rendererString, "Intel")) { *vendor = GrGLANGLEVendor::kIntel; - } - if (strstr(rendererString, "HD Graphics 4000") || strstr(rendererString, "HD Graphics 2500")) { - *renderer = GrGLANGLERenderer::kIvyBridge; + + const char* modelStr; + int modelNumber; + if ((modelStr = strstr(rendererString, "HD Graphics")) && + (1 == sscanf(modelStr, "HD Graphics %i", &modelNumber) || + 1 == sscanf(modelStr, "HD Graphics P%i", &modelNumber))) { + switch (modelNumber) { + case 4000: + case 2500: + *renderer = GrGLANGLERenderer::kIvyBridge; + break; + case 510: + case 515: + case 520: + case 530: + *renderer = GrGLANGLERenderer::kSkylake; + break; + } + } else if ((modelStr = strstr(rendererString, "Iris")) && + (1 == sscanf(modelStr, "Iris(TM) Graphics %i", &modelNumber) || + 1 == sscanf(modelStr, "Iris(TM) Pro Graphics %i", &modelNumber) || + 1 == sscanf(modelStr, "Iris(TM) Pro Graphics P%i", &modelNumber))) { + switch (modelNumber) { + case 540: + case 550: + case 555: + case 580: + *renderer = GrGLANGLERenderer::kSkylake; + break; + } + } } if (strstr(rendererString, "Direct3D11")) { *backend = GrGLANGLEBackend::kD3D11; diff --git a/src/gpu/gl/GrGLUtil.h b/src/gpu/gl/GrGLUtil.h index 369ad4c43c..9905d75ef1 100644 --- a/src/gpu/gl/GrGLUtil.h +++ b/src/gpu/gl/GrGLUtil.h @@ -92,9 +92,10 @@ enum class GrGLANGLEVendor { kIntel }; -enum class GrGLANGLERenderer{ +enum class GrGLANGLERenderer { kUnknown, - kIvyBridge + kIvyBridge, + kSkylake }; //////////////////////////////////////////////////////////////////////////////// |