aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2018-01-18 15:06:50 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-19 17:38:03 +0000
commit0a94e4cc1073daf3bb3cd8d92fc3d8c62bdb35f3 (patch)
treeb2bd4ebd5cb9df51f57b938f27b7181636c658dd /src/gpu/gl
parente3429e62b0d020b27de3daa55893953eff581c4f (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.cpp7
-rw-r--r--src/gpu/gl/GrGLUtil.cpp34
-rw-r--r--src/gpu/gl/GrGLUtil.h5
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
};
////////////////////////////////////////////////////////////////////////////////